Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Sadek Drobi on Nov 02, 2007 08:03 AM
To describe object oriented programming, objects are often referred to as “nouns” and actions that determine their behavior as “verbs”. These verbs are traditionally implemented as methods, i.e. systematically coupled to the object that ‘performs’ the action. In a recent blog post, Reg Braithwaite points out that “not all ‘verbs’ have a clear separation between an […] active entity that ought to own the verb's definition and the secondary, passive subject entities that should not own the verb's definition”. This applies for instance to commutative operations and Braithwaite shows that, in this case, linking verbs to objects may result in “code duplication and information leakage”. He argues that it may be relevant to dissociate some verbs from nouns and raise them to the same level of abstraction as the latter:
Maybe some verbs belong to objects, but some are best on their own? Maybe + and <=> and equivalent? really ought to be emancipated from their subservience to objects and ought to have their own definitions.
Buko Obele challenges the validity of the verb/noun metaphor. He argues that, unlike real verbs and nouns, objects and methods cannot exist independently from each other:
The word 'person' in a sentence isn't dependent upon any notion of a particular verb […]. In practice we would never say that a person who can't, for example, 'run' isn't a person […]. In object oriented design concepts do not exist separately and apart from their methods at all -- instead, the whole point is that they are strictly constituted by their methods.
Moreover, in real languages the use of metaphors makes it possible to confuse “subjects and verbs and other purely syntactic concerns” in order “to produce wholly new concepts”, and this is what makes “the extraordinarily creative power of language”. In programming, there are no metaphors. Hence, objects are nothing more than very limited concepts to be combined with other concepts in order “to communicate a solution to a problem” at hand.
Even though Buko Obele argues that one should go beyond verb/noun vision, ultimately his and Braithwaite’s conclusions go along the same lines, both questioning the traditional approach to OOP. While Braithwaite provides some insights on how to decouple verbs from nouns, Obele advocates for focusing on software design that he judges inevitable “whether working with objects or functions or DSLs or even the Great Lisp” :
The question of who verbs 'belong to' is always the wrong question; instead it is always a matter of how a new concept can be meaningfully introduced into our existing system.
[…]
Any talk of nouns and verbs is useful as a starting point but ultimately you will need to do some hard thinking and engage your abstractive kung fu skills in order to describe any non-trivial system.
Comprehensive Threat Protection for REST, SOA, and Web 2.0 Applications
Adobe® Rich Internet Application Project Portal
Velociti Partners Customer Survey
The Agile Business Analyst: Skills and Techniques needed for Agile
The best advice I've had about where to put methods is to keep the methods close to the data they use. So if a method needs 3 instance variables, and 2 of them are in object A and 1 in Object B, then place the method in Object A and pass the variable from Object B as a parameter. Personally I think that talk about nouns and verbs have limited use. It's a nice starting place, and can lead to nicely readable code when it all works out, but the primary drivers when coming up with abstractions should be factoring the code to avoid repetition (DRY), keeping the data close to the associated behavior (cohesion), and reducing the amount of data that needs to be passed between objects (low coupling). In the less obvious cases these rules tend to come up trumps for me. Bob Martin also has a list of OO design principles that I find useful. I also find Martin Fowler's code smells a big help too. I think the knowledge is out there and the best approaches are known, I just think that OO is taught very badly. I was playing with Dolphin Smalltalk earlier today and going through the tutorial that comes with the Community Edition. The tutorial is very good, and I would recommend it to anyone as an OO refresher. It was a real eye opener, seeing again the number of OO concepts there are self evident in Smalltalk, yet obscured or not even present in other so-called OO languages. For example the most basic concept of sending a message to an object and getting an answer is lost in early bound languages like Java, along with the benefits. IMO somewhere along the line Object Orientation got hijacked by the vendor marketing machine, and for most people today it is just another marketing buzzword.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
1 comment
Watch Thread Reply