<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Is the Supremacy of Object-Oriented Programming Over?</title>
    <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Is the Supremacy of Object-Oriented Programming Over?</title>
      <description>&lt;p&gt;I never expected to see this. When I started my career, Object-Oriented Programming (OOP) was going mainstream. For many problems, it was and still is a natural way to &lt;em&gt;modularize&lt;/em&gt; an application. It grew to (mostly) rule the world. Now it seems that the supremacy of objects may be coming to an end, of sorts.&lt;/p&gt;


	&lt;p&gt;I say this because of recent trends in our industry and my hands-on experience with many enterprise and Internet applications, mostly at client sites. You might be thinking that I&amp;#8217;m referring to the mainstream breakout of Functional Programming (FP), which is happening right now. The &lt;em&gt;killer app&lt;/em&gt; for FP is concurrency. We&amp;#8217;ve all heard that more and more applications must be concurrent these days (which doesn&amp;#8217;t necessarily mean multithreaded). When we remove side effects from functions and disallow mutable variables, our concurrency issues largely go away. The success of the Actor model of concurrency, as used to great effect in &lt;a href="http://erlang.org/"&gt;Erlang&lt;/a&gt;, is one example of a functional-style approach. The rise of &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;map-reduce&lt;/a&gt; computations is another example of a functional technique going mainstream. A related phenomenon is the emergence of key-value store databases, like &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;BigTable&lt;/a&gt; and &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;, is a reaction to the overhead of &lt;span class="caps"&gt;SQL&lt;/span&gt; databases, when the performance cost of the Relational Model isn&amp;#8217;t justified. These databases are typically managed with functional techniques, like map-reduce.&lt;/p&gt;


	&lt;p&gt;But actually, I&amp;#8217;m thinking of something else. Hybrid languages like &lt;a href="http://scala-lang.org"&gt;Scala&lt;/a&gt;, &lt;a href="http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/"&gt;F#&lt;/a&gt;, and &lt;a href="http://caml.inria.fr/ocaml/index.en.html"&gt;OCaml&lt;/a&gt; have demonstrated that &lt;span class="caps"&gt;OOP&lt;/span&gt; and FP can complement each other. In a given context, they let you use the idioms that make the most sense for your particular needs. For example, immutable &amp;#8220;objects&amp;#8221; and functional-style pattern matching is a killer combination.&lt;/p&gt;


	&lt;p&gt;What&amp;#8217;s really got me thinking that objects are losing their supremacy is a very mundane problem. It&amp;#8217;s a problem that isn&amp;#8217;t new, but like concurrency, it just seems to grow worse and worse.&lt;/p&gt;


	&lt;p&gt;The problem is that there is never a stable, clear object model in applications any more. What constitutes a &lt;code&gt;BankAccount&lt;/code&gt; or &lt;code&gt;Customer&lt;/code&gt; or whatever is fluid. It changes with each iteration. It&amp;#8217;s different from one subsystem to another even within the &lt;em&gt;same&lt;/em&gt; iteration! I see a lot of misfit object models that try to be all things to all people, so they are bloated and the teams that own them can&amp;#8217;t be agile. The other extreme is &amp;#8220;balkanization&amp;#8221;, where each subsystem has its own model. We tend to think the latter case is bad. However, is lean and mean, but non-standard, worse than bloated, yet standardized?&lt;/p&gt;


	&lt;p&gt;The fact is, for a lot of these applications, it&amp;#8217;s just data. The ceremony of object wrappers doesn&amp;#8217;t carry its weight. Just put the data in a hash map (or a list if you don&amp;#8217;t need the bits &amp;#8220;labeled&amp;#8221;) and then process the collection with your iterate, map, and reduce functions. This may sound heretical, but how much Java code could you delete today if you replaced it with a stored procedure?&lt;/p&gt;


	&lt;p&gt;These alternatives won&amp;#8217;t work for all situations, of course. Sometimes polymorphism carries its weight. Unfortunately, it&amp;#8217;s too tempting to use objects as if more is always better, like &lt;a href="http://www.google.com/search?client=safari&amp;#38;rls=en-us&amp;#38;q=more+cowbell&amp;#38;ie=UTF-8&amp;#38;oe=UTF-8"&gt;cow bell&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;So what would replace objects for supremacy? Well, my point is really that there is no one true way. We&amp;#8217;ve led ourselves down the wrong path. Or, to be more precise, we followed a single, very good path, but we didn&amp;#8217;t know when to take a different path.&lt;/p&gt;


	&lt;p&gt;Increasingly, the best, most nimble designs I see use objects with a light touch; shallow hierarchies, small objects that try to obey the Single Responsibility Principle, composition rather than inheritance, &lt;em&gt;etc.&lt;/em&gt; Coupled with a liberal use of functional idioms (like iterate, map, and reduce), these designs strike the right balance between the protection of data hiding &lt;em&gt;vs.&lt;/em&gt; openness for easy processing. By the way, you can build these designs in almost any of our popular languages. Some languages make this easier than others, of course.&lt;/p&gt;


	&lt;p&gt;Despite the hype, I think &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;Domain-Specific Languages&lt;/a&gt; (DSLs) are also very important and worth mentioning in this context. (&lt;a href="http://en.wikipedia.org/wiki/Language-oriented_programming"&gt;Language-Oriented Programming&lt;/a&gt; &amp;#8211; &lt;span class="caps"&gt;LOP&lt;/span&gt; &amp;#8211; generalizes these ideas). It&amp;#8217;s true that people drink the &lt;span class="caps"&gt;DSL&lt;/span&gt; Kool-Aid and create a mess. However, when used appropriately, DSLs reduce a program to its &lt;a href="http://en.wikipedia.org/wiki/Essential_complexity"&gt;essential complexity&lt;/a&gt;, while hiding and modularizing the &lt;a href="http://en.wikipedia.org/wiki/Accidental_complexity"&gt;accidental complexity&lt;/a&gt; of the implementation. When it becomes easy to write a user story in code, we won&amp;#8217;t obsess as much over the details of a &lt;code&gt;BankAccount&lt;/code&gt; as they change from one story to another. We will embrace more flexible data persistence models, too.&lt;/p&gt;


	&lt;p&gt;Back to &lt;span class="caps"&gt;OOP&lt;/span&gt; and FP, I see the potential for their combination to lead to a rebirth of the old vision of &lt;em&gt;software components&lt;/em&gt;, but that&amp;#8217;s a topic for another blog post.&lt;/p&gt;</description>
      <pubDate>Mon, 20 Apr 2009 21:45:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:69ac398f-694c-4e0b-bc13-a8765608f6cf</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over</link>
      <category>Dean's Deprecations</category>
      <category>Agile Methods</category>
      <category>Design Principles</category>
      <category>Clean Code</category>
      <category>design</category>
      <category>OOP</category>
      <category>FP</category>
      <category>polyglot</category>
      <category>Polyparadigm</category>
      <category>Scala</category>
      <category>F</category>
      <category>OCaml</category>
      <category>MapReduce</category>
      <category>BigTable</category>
      <category>CouchDB</category>
      <category>SQL</category>
      <category>dsl</category>
      <category>LOP</category>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Tom</title>
      <description>&lt;p&gt;As a historical programmer and a new student.  The first thing that bytes me about OOP is the GOBS of code needed to accomplish the same thing with FP.  For example: object alarm clock, write a method to change the time, write a method to change the alarm, write a method to&amp;#8230;.. etc, etc, etc.  Back in FP, I was taught AlarmTime=Time (JUST GET IT DONE ALREADY)!&lt;/p&gt;</description>
      <pubDate>Sat, 27 Feb 2010 21:57:13 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:27cab8a8-2a66-4aeb-becf-6a92e48b2c89</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-7654</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by keyur patel</title>
      <description>&lt;p&gt;i don&amp;#8217;t think so that OOP is out, it is here to stay&lt;/p&gt;</description>
      <pubDate>Fri, 19 Feb 2010 00:39:32 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5dea1ecd-89b2-4dd1-ab93-6966b3b01f03</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-7581</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Mens timberland boots shoes </title>
      <description>&lt;p&gt;Largest selection of discount Timberland Boots for sale, Saving a lot at our Timberland Outlet Store. We assure you of our Best Services at all times.&lt;/p&gt;</description>
      <pubDate>Thu, 31 Dec 2009 23:21:36 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:643e7946-353d-4166-bb45-03894b7ea871</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-6713</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by mens belts</title>
      <description>&lt;p&gt;Buy mens belts with a price guarantee and top rated customer service. You can compare multiple mens belts styles and find exactly your size and width.&lt;/p&gt;</description>
      <pubDate>Thu, 31 Dec 2009 23:16:53 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:bcd234dd-5c1d-4cc9-87d2-a2ed726900fe</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-6711</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by gucci louis vuitton shoes</title>
      <description>&lt;p&gt;Welcome to Freshstyleshop, the hottest urban clothing site on the net! We offer great products from Gucci sneakers, prada sneakers, LV shoes, True Religion Jeans and many more! Our selection of products are always increasing for the fact that we have new items added weekly to our selection. All products on our site are already marked down 40-60% off retail price. Freshstyleshop also backs all its orders with a 110% satisfaction guarantee, making sure that our customers are left satisfied with the hottest products on the net.&lt;/p&gt;</description>
      <pubDate>Tue, 15 Dec 2009 21:18:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:524d306f-eb63-41d4-a268-3a9fabade9bc</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-5724</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by gucci louis vuitton shoes</title>
      <description>&lt;p&gt;Welcome to Freshstyleshop, the hottest urban clothing site on the net! We offer great  products from Gucci sneakers, prada sneakers, LV shoes, True Religion Jeans and many more! Our selection of products are always increasing for the fact that we have new items added weekly to our selection. All products on our site are already marked down 40-60% off retail price. Freshstyleshop also backs all its orders with a 110% satisfaction guarantee, making sure that our customers are left satisfied with the hottest products on the net.&lt;/p&gt;</description>
      <pubDate>Tue, 15 Dec 2009 20:33:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:bf6ec4b0-8874-41fd-9fb3-c3aebb43aa16</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-5710</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Daniel Jomphe</title>
      <description>&lt;p&gt;Very nice article, thank you.&lt;/p&gt;


	&lt;p&gt;Warning 1: Dean mentioned his favored usage of OO in a pretty controversial way; he could have brushed the truth in a more amenable way to strong OO proponents. In any case, with proper knowledge and experience, his way of putting it makes a lot of sense.&lt;/p&gt;


	&lt;p&gt;Warning 2: This article could mislead the reader into thinking that polymorphism is only available through object orientation.&lt;/p&gt;


	&lt;p&gt;That said, the fact that FP has access to much more powerful types of polymorphism than is ever possible to use in typical OO just makes this article&amp;#8217;s conclusions even much more true!&lt;/p&gt;


	&lt;p&gt;Thanks again.&lt;/p&gt;</description>
      <pubDate>Mon, 20 Jul 2009 12:09:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3db29b80-8edd-476b-9a63-e23f85c7edda</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3768</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Cheap Bowling Balls</title>
      <description>&lt;p&gt;Very interesting. I think we are entering a very interesting time when it comes to the evolution of programming languages. With increased computing power I believe the way we go about designing and coding software is on the verge of revolutionary changes.&lt;/p&gt;</description>
      <pubDate>Sat, 04 Jul 2009 12:48:22 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7c4b5785-f8a8-496a-9a7d-15bbbdaaee35</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3657</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Baseball Bats For Sale</title>
      <description>&lt;p&gt;I think OOP in some form will be around for a long time. Although how it is leveraged may change considerably.&lt;/p&gt;</description>
      <pubDate>Sat, 04 Jul 2009 12:43:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ab74f795-ae83-4759-957d-1490bc20303a</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3656</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Order Tamiflu online</title>
      <description>&lt;p&gt;are much more severe: diseases than epidemics. In Alaska, a state with a person that has &lt;a &gt;Ordering Tamiflu&lt;/a rel="nofollow"&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 24 Jun 2009 08:46:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1967bab8-03ad-40cd-bdcc-d5127cdf459e</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3621</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Vladimir Kelman</title>
      <description>&lt;p&gt;... When I mentioned SOA I&amp;#8217;m not necessary meant Web Services, but rather a broader approach of moving functionality, which doesn&amp;#8217;t belong to a simple object, to &amp;#8220;sevice&amp;#8221; or &amp;#8220;manager&amp;#8221; layer. A good introductory example of it (using C# static manager classes) is shown in &amp;#8220;N-Layered Web Applications with ASP.NET&amp;#8221; articles by Imar Spaanjaars &lt;a href="http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=476." rel="nofollow"&gt;http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=476.&lt;/a&gt; When we implemented our application following Imar&amp;#8217;s approach, we found that functional constructs (like using LINQ extension methods of Where(), Select() , etc. instead of loops and using lambda expressions instead of stupid object wrappers) greatly simplify service layer.
Also, things like extension methods in C# / implicits and traits in Scala improve OOP, make it more flexible.&lt;/p&gt;</description>
      <pubDate>Mon, 25 May 2009 18:37:01 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1b734cf1-3f41-45ea-8e0f-9071e2cd1a28</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3407</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Vladimir Kelman</title>
      <description>&lt;p&gt;@Dean,
I think that SOA really helps to simplify overcomplicated OOP design. In short: leave to an object what really belong to an object, move complex interactions between objects, which are not cohesive to any single object to service layer. Udi Dahan gave an interesting talk on this matter on InfoQ: &lt;a href="http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan" rel="nofollow"&gt;http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan&lt;/a&gt;. There is another attempt called DCI architecture (&lt;a href="http://www.artima.com/articles/dci_vision.html" rel="nofollow"&gt;http://www.artima.com/articles/dci_vision.html&lt;/a&gt;) and fiercely criticized by John Zaborsky (&lt;a href="http://www.artima.com/forums/flat.jsp?forum=226&amp;#38" rel="nofollow"&gt;http://www.artima.com/forums/flat.jsp?forum=226&amp;#38&lt;/a&gt;;thread=253008&amp;#38;start=0&amp;#38;msRange=100). While I mostly agree with his arguments on DCI, I strongly disagree with his OOP-above-all attitude. SOA really helps.
And, of course, functional approach greatly simplify things.&lt;/p&gt;</description>
      <pubDate>Mon, 25 May 2009 14:08:08 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:480c412a-dff0-4578-aaef-f19c557e7f2f</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3406</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Vladimir Kelman</title>
      <description>&lt;p&gt;@Dean,
I think that SOA really helps to simplify overcomplicated OOP design. In short: leave to an object what really belong to an object, move complex interactions between objects, which are not cohesive to any single object to service layer. Udi Dahan gave an interesting talk on this matter on InfoQ: &lt;a href="http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan" rel="nofollow"&gt;http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan&lt;/a&gt;. There is another attempt called DCI architecture (&lt;a href="http://www.artima.com/articles/dci_vision.html" rel="nofollow"&gt;http://www.artima.com/articles/dci_vision.html&lt;/a&gt;) and fiercely criticized by John Zaborsky (&lt;a href="http://www.artima.com/forums/flat.jsp?forum=226&amp;#38" rel="nofollow"&gt;http://www.artima.com/forums/flat.jsp?forum=226&amp;#38&lt;/a&gt;;thread=253008&amp;#38;start=0&amp;#38;msRange=100). While I mostly agree with his arguments on DCI, I strongly disagree with his OOP-above-all attitude. SOA really helps.
And, of course, functional approach greatly simplify things.&lt;/p&gt;</description>
      <pubDate>Mon, 25 May 2009 14:06:53 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7a8c481f-7b45-4793-848a-977c516bf7a2</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3405</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by John "Z-Bo" Zabroski</title>
      <description>&lt;p&gt;Object-Oriented Programming DOES NOT EQUAL Object-Oriented Analysis &amp;#38; Design.&lt;/p&gt;


	&lt;p&gt;Functional programming is an excellent technique for code implementation, as it is more amenable to program proof techniques, is easier to test (stateless, no side effects), and does not require code to be littered with locks (the mainstream imperative OOP languages solution for concurrency).&lt;/p&gt;


	&lt;p&gt;Objects in the large, functions in the small.&lt;/p&gt;</description>
      <pubDate>Sat, 16 May 2009 12:42:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:498182a7-6d97-4899-9e2d-80526d62b596</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3377</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Peter</title>
      <description>&lt;p&gt;Dean wrote: &#8221;&amp;#8230;just put the data in a map (or list) ... hash maps? Why do we have them in Java, etc. in the first place? ...&#8221;&lt;/p&gt;


	&lt;p&gt;I think it is very disturbing and surprising to see hash tables are being recommended on this site which is associated with the publisher of books about how to write Clean Code and applying SOLID principles.&lt;/p&gt;


	&lt;p&gt;Why we have hash maps ? Well, as long as we use them for internal private usage only (and of course without exposing a public getter to the mutable &#8220;private&#8221; hash table that would destroy the encapsulation) they can be useful for example to implement a table look up (i.e. as an alternative to if/switch statements), for example a parameterized factory method might return Command objects from a typed hashmap with a key lookup.&lt;/p&gt;


	&lt;p&gt;Regarding the comparison with HttpSession, I would say that one should make a distinction with domain/application specific code and the code that is intended for being used in all kind of applications. In other words, in your own application code you should use your own domain abstractions, but if you create an application framework (e.g. the servlet API with HttpSession) which is intended for all kind of domains then it is hard to avoid all usages of things that generally should be avoided such as using Object in method signatures (as in the method &#8220;Object HttpSession.getAttribute(String)&#8221; ).&lt;/p&gt;


	&lt;p&gt;Another thing worth mentioning, regarding making a distinction between domain/application code and generic code is the usage of reflection. The reasoning (about why it exists if we should not use it) is similar, i.e. reflection is hard to avoid for creating frameworks such as Hibernate that should support all kind of domain objects. Otherwise reflection should be avoided in runtime (but can be used in design time, for code generation) not because it is difficult to write reflection but difficult to maintain due to its worthless semantic.&lt;/p&gt;


	&lt;p&gt;Regarding sending around hash maps in PUBLIC method signatures, it is an awful anti-pattern that should never be considered as even remotely acceptable. I have seen a system where virtually all method signatures were very &#8220;generic&#8221; :-( and received one hashtable as input parameter and returned another hashtable. Within the methods, the hashtables were often passed on to other methods, which sometimes populated them with more values or even removed values, and of course you can never feel sure that you do not break any code in such a system (assuming you do not have great unit/integration test coverage for your semantic-less hashtables) i.e. you do not dare to change more than you really have to, and it is NOT refactoring-friendly.&lt;/p&gt;


	&lt;p&gt;It is not only difficult to change existing code when using hash tables, but you will aso get problems when you want to try to reuse (e.g. invoke) an existing method, since it is difficult to get the whole picture about what kind of parameters the hashtable need to contain in the invocation. If you look in the method, it is not enough but you also have to keep looking in the all other methods that are invoked from within the method&#8230; Typically, you have to debug the method to get a feeling of what kind of stuff you have to push into the hashtable.&lt;/p&gt;


	&lt;p&gt;Please also keep in mind that if you want your code base to be considered as being good, then you should not have to even look in the implementation code, and definitely you should not have to debug it to understand it.&lt;/p&gt;


	&lt;p&gt;The hash table oriented architecture should really be strongly discouraged as an ANTI-PATTERN (!) and certainly not recommended at this kind of site (objectmentor with Robert C Martin) with a good reputation.&lt;/p&gt;


	&lt;p&gt;/ Peter&lt;/p&gt;</description>
      <pubDate>Tue, 12 May 2009 19:59:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:cc220c81-aa01-47f6-b11e-5065f06203a3</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3364</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Peter</title>
      <description>&lt;p&gt;Dean wrote:
&amp;#8221;...just put the data in a map (or list) ... hash maps? Why do we have them in Java, etc. in the first place? ...&amp;#8221;&lt;/p&gt;


	&lt;p&gt;I think it is very disturbing and surprising to see hash tables are being recommended on this site which is associated with the publisher of books about how to write Clean Code and applying SOLID principles.&lt;/p&gt;


	&lt;p&gt;Why we have hash maps ? 
Well, as long as we use them for internal private usage only (and of course without exposing a public getter to the mutable &amp;#8220;private&amp;#8221; hash table that would destroy the encapsulation)
they can be useful for example to implement a table look up (i.e. as an alternative to if/switch statements), for example a parameterized factory method might return Command objects from a typed hashmap with a key lookup.&lt;/p&gt;


	&lt;p&gt;Regarding the comparison with HttpSession, I would say that one should make a distinction with domain/application specific code and the code that is intended for being used in all kind of applications.
In other words, in your own application code you should use your own domain abstractions, but if you create an application framework (e.g. the servlet API with HttpSession) which is intended for all kind of domains then it is hard to avoid all usages of things that generally should be avoided such as using Object in method signatures (as in the method &amp;#8220;Object HttpSession.getAttribute(String)&amp;#8221; ).&lt;/p&gt;


	&lt;p&gt;Another thing worth mentioning, regarding making a distinction between domain/application code and generic code is the usage of reflection.
The reasoning (about why it exists if we should not use it) is similar, i.e. reflection is hard to avoid for creating frameworks such as Hibernate that should support all kind of domain objects.
Otherwise reflection should be avoided in runtime (but can be used in design time, for code generation) not because it is difficult to write reflection but difficult to maintain due to its worthless semantic.&lt;/p&gt;


	&lt;p&gt;Regarding sending around hash maps in PUBLIC method signatures, it is an awful anti-pattern that should never be considered as even remotely acceptable.
I have seen a system where virtually all method signatures were very &amp;#8220;generic&amp;#8221; :-( and received one hashtable as input parameter and returned another hashtable.
Within the methods, the hashtables were often passed on to other methods, which sometimes populated them with more values or even removed values, and of course you 
can never feel sure that you do not break any code in such a system (assuming you do not have great unit/integration test coverage for your semantic-less hashtables) 
i.e. you do not dare to change more than you really have to, and it is NOT refactoring-friendly.&lt;/p&gt;


	&lt;p&gt;It is not only difficult to change existing code when using hash tables, but you will aso get problems when you want to try to reuse (e.g. invoke) an existing method, 
since it is difficult to get the whole picture about what kind of parameters the hashtable need to contain in the invocation.
If you look in the method, it is not enough but you also have to keep looking in the all other methods that are invoked from within the method&amp;#8230;
Typically, you have to debug the method to get a feeling of what kind of stuff you have to push into the hashtable.&lt;/p&gt;


	&lt;p&gt;Please also keep in mind that if you want your code base to be considered as being good, then you should not have to even look in the implementation code, and definitely you should not have to debug it to understand it.&lt;/p&gt;


	&lt;p&gt;The hash table oriented architecture should really be strongly discouraged as an ANTI-PATTERN (!) and certainly not recommended at this kind of site (objectmentor with Robert C Martin) with a good reputation.&lt;/p&gt;


	&lt;p&gt;/ Peter&lt;/p&gt;</description>
      <pubDate>Tue, 12 May 2009 19:59:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:489190f9-a3f7-450c-b752-8a8b40b27cdc</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3363</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Richard Lynch</title>
      <description>&lt;p&gt;I&amp;#8217;m happy to say that I never drank the Kool-Aid :-)&lt;/p&gt;


	&lt;p&gt;Don&amp;#8217;t get me wrong:  There were many times when an OOP architecture made a lot of sense.  There were also a lot of times when it was just plain the wrong technology.&lt;/p&gt;


	&lt;p&gt;Frankly, if you&amp;#8217;re not taking advantage of inheritence in a significant way, you&amp;#8217;d be just as well off with name-spaces as a full-blown OOP. And 95% of what I saw people using OOP for was nothing more than name-space separation.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;d rather see a well-architected procedural solution that fits the problem than a bloated OOP solution that has been so mutilated over time that it &amp;#8220;fits&amp;#8221; only if you stand on your head and whistle Dixie.&lt;/p&gt;


	&lt;p&gt;PS Common Lisp &lt;strong&gt;is&lt;/strong&gt; typed&amp;#8212;Every datum has a very specific data-type.  The variables are free to take on any value, as it should be. I happen to &lt;strong&gt;hate&lt;/strong&gt; static-typed languages, personally.  Too many pointless hoops.&lt;/p&gt;</description>
      <pubDate>Wed, 06 May 2009 09:44:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:962decc6-26ef-4b3f-969f-2a793b1c5e99</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3316</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by paul.morrison@rogers.com</title>
      <description>&lt;p&gt;Your comments are spot-on, and illustrate exactly why Flow-Based Programming (FBP) is garnering more and more interest &amp;#8211; plus the fact that it offers a simple, consistent approach to developing applications for the new multi-core computers that everyone says are so difficult to program.  Some time ago I wrote a comparison of FBP and OO, and I think they have held up &amp;#8211; &lt;a href="http://www.jpaulmorrison.com/fbp/oops.htm" rel="nofollow"&gt;http://www.jpaulmorrison.com/fbp/oops.htm&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 05 May 2009 12:49:51 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bebc324c-d403-40f3-9da7-bc56bb427ba2</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3310</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Y</title>
      <description>&lt;p&gt;Sounds like baiting for flames, links and whatever popularity you can get &amp;#8211; and I must say this is a very succesful post if you look at it from the point of view of getting the word out&lt;/p&gt;</description>
      <pubDate>Tue, 05 May 2009 00:59:15 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5dd7c27c-6de1-4700-b7c0-50c3f81c8d35</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3309</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Olly</title>
      <description>&lt;p&gt;Nice read, though I think you&amp;#8217;re pretty biased.
I wouldn&amp;#8217;t think map-reduce is anywhere close to mainstream. Yes, you can read a lot about it, and it does make sense in a few cases, but it won&amp;#8217;t replace relational databases, its a niche.&lt;/p&gt;</description>
      <pubDate>Mon, 04 May 2009 20:09:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:76c26c2f-c2f0-4130-971d-63ec6a71e67e</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3306</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Vladas Saulis</title>
      <description>&lt;p&gt;Good article. Personally, I never took OOP for serious. As I learned OO back in 1988, I thought it must be a very specific programming model, for a very specific usage (i.e for modelling REAL objects, like planets, space-crafts, orbits, etc&amp;#8230;).&lt;/p&gt;


	&lt;p&gt;My favourite is a singleton concept within OOP&amp;#8230; That looks like apopheosis for all OOP misconcept :)&lt;/p&gt;


	&lt;p&gt;How could anyone even think it will become a prevailing technology in the next 20 years!&lt;/p&gt;</description>
      <pubDate>Mon, 27 Apr 2009 14:30:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1fc3e844-d233-4981-aef2-8a6eb074e762</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3280</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Vladas Saulis</title>
      <description>&lt;p&gt;Good article. Personally, I never took OOP for serious. As I learned OO back in 1988, I thought it must be a very specific programming model, for a very specific usage (i.e for modelling REAL objects, like planets, space-crafts, orbits, etc&amp;#8230;).&lt;/p&gt;


	&lt;p&gt;My favourite is a singleton concept within OOP&amp;#8230; That looks like apopheosis for all OOP misconcept :)&lt;/p&gt;


	&lt;p&gt;How could anyone even think it will become a prevailing technology in the next 20 years!&lt;/p&gt;</description>
      <pubDate>Mon, 27 Apr 2009 14:28:10 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:633d10b8-c5b0-4ecd-83e8-6784f72466cc</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3279</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by E45</title>
      <description>&lt;p&gt;nice article&lt;/p&gt;</description>
      <pubDate>Sat, 25 Apr 2009 16:00:13 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9b6bb60b-244d-4239-b2ed-470d063a258b</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3251</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Paul Beckford</title>
      <description>&lt;p&gt;&amp;#8220;Supremacy&amp;#8221;?  &amp;#8211; Hardly relevant for a technical debate. For supposedly rational intellectual people we suffer immensely from fashion and spin.&lt;/p&gt;


	&lt;p&gt;In the sense of being fashionable, then it&amp;#8217;s true a particular interpretation of OO ideas have been supreme. If we go back to the Original OO research however that took place at Xerox Parc in the 1970&amp;#8217;s and early 80&amp;#8217;s &amp;#8211; what has been spun and popularised as OO today is very different from what they had in mind.&lt;/p&gt;


	&lt;p&gt;I will call their ideas &amp;#8220;Pure OO&amp;#8221;. Pure OO had a brief commercial success with Smalltalk-80, but was largely killed off by the competition which had a  &amp;#8216;superior&amp;#8217; business model. It was difficult to justify paying &#163;3K for Smalltalk licenses when Sun Microsystems chose to give away a VM based language for free that they claimed was OO too. So free Java put an end to pure OO.&lt;/p&gt;


	&lt;p&gt;Even before Java, there was a strong bias against using anything that didn&amp;#8217;t derive from C/Unix. So C++ another hybrid OO language was championed as the &amp;#8216;OO&amp;#8217; language of choice. All this has to do with politics and vendors protecting market share and has nothing to do with computer science.&lt;/p&gt;


	&lt;p&gt;On the computer science front, pure OO, based on late-binding and message sends has always built on functional ideas and encourages a declarative programming style. Lisp and Smalltalk have much in common. The best way to look at it is that a function can be an object too. So I see no or very little conflict between OO and functional programming.&lt;/p&gt;


	&lt;p&gt;The real issue is that pure OO has been viewed (rightly so) as a disruptive technology. The incumbent technology base, built on C and Unix have found ways to neutralise the potential disruptive effect and hold on to their market. As a consequence we have spent the last 20 years using curly bracket languages that are &amp;#8216;OO&amp;#8217; in name only.&lt;/p&gt;


	&lt;p&gt;This is what prompted the famous Alan Kay quote:&lt;/p&gt;


	&lt;p&gt;&amp;#8220;I coined the term OO and I can tell you I didn&amp;#8217;t have C++ in mind..&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;And just to show he wasn&amp;#8217;t just picking on C++:&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Java is the worst thing to happen to computer science since MSDOS&amp;#8230;&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Pure OO is still in obscurity. Languages like Ruby and Python show what is possible with Pure OO ideas and late-binding, but they do not extend these ideas or take them even as far as Smalltalk did.&lt;/p&gt;


	&lt;p&gt;A new language called Newspeak is attempting to extend the concepts expressed in Smalltalk  and later the Self Language and  take them to their ultimate expression. Unfortunately Newspeak remains obscure and is currently struggling for funding :)&lt;/p&gt;


	&lt;p&gt;So from a computer science view point, I wouldn&amp;#8217;t call Pure OO supreme at all. No, it&amp;#8217;s still languishing in obscurity and we are still to discover what exactly it is trying to be.&lt;/p&gt;


	&lt;p&gt;To quote Alan Kay one more time:&lt;/p&gt;


	&lt;p&gt;&amp;#8220;The computer revolution hasn&amp;#8217;t happened yet&amp;#8230;&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Paul.&lt;/p&gt;</description>
      <pubDate>Sat, 25 Apr 2009 10:57:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4aa7bd78-4593-460a-bd6b-6a5c4cf685bd</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3247</link>
    </item>
    <item>
      <title>"Is the Supremacy of Object-Oriented Programming Over?" by Andrew Walker</title>
      <description>&lt;p&gt;I think Keith is right, supremacy is not the term I would use. I would even suggest that OO never went &amp;#8216;mainstream&amp;#8217; in the first place. Just like agility, it is the label and not the intent of their early proponents that have become &amp;#8216;mainstream&amp;#8217;.&lt;/p&gt;


	&lt;p&gt;@Nirav &amp;#8211; agree, people/social issues are the root cause of many perceived &amp;#8216;failures&amp;#8217;.&lt;/p&gt;


	&lt;p&gt;There is nothing wrong with OO per se, just in the interpretations of how to apply it. Corporate constraints and politics aside, its down to the individual programmer what languages, tools and techniques they are most comfortable with. Good people learn by practice and experience which tools are appropriate to use in a particular context and for my money, being able to make that choice is more valuable than a prescriptive approach.&lt;/p&gt;</description>
      <pubDate>Thu, 23 Apr 2009 19:55:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:529539f1-9308-4a2e-ab94-ff253c4d1fe7</guid>
      <link>http://blog.objectmentor.com/articles/2009/04/20/is-the-supremacy-of-object-oriented-programming-over#comment-3240</link>
    </item>
  </channel>
</rss>
