views:

564

answers:

8

Hi!

I want to ask you to provide me with some articles (maybe books), which you possibly have found very convincing criticising the OOP methodology.

I have read some in the WWW on this topic and I didn't really find a 'definitive demotivator'.

It's not much about my personal attitude to the OOP, but I really would like to have something constructive, rigorous foundation for any kind of discussion and just abstract thinking.


You can post some original research too, but please be very constructive (as my personal request).

Thank you very much!

+3  A: 

Problem is - most people dont really know OOP, so many designs SUCK.

Read the works of Scott Ambler, including his (now pretty old "Building Object Applications That Work"). This is eye opening for quite a lot of people.

TomTom
+2  A: 

You should really see Mr. B. Jacobs's:

OOP Myths Debunked

Sarfraz
Thanks, I'll check that out.
Bubba88
Uh, I actually saw it before:)
Bubba88
Wow, is it just me, or is that article rather heavily biased?
Andy E
I'm sorry, but I can't take a programming opinion site seriously when it is STILL hosted in Geocities.
Justin Niessner
Yeah, it's biased.
Bubba88
What a very strange article - it's occasionally clownish ("Why OOP Reminds me of Communism"), and spends a bit too much time shadowboxing (does anyone think "OOP makes programming more visual"? Whatever that might mean), but it's also smart at times - the author is quite good about the hazards of inheritance for example.
Jeff Sternal
It's an odd site, but I actually agree with quite a bit of what's on there, provided you're talking about the "typical" interpretation of OO programming, vs. something more Actor-based.
kyoryu
+8  A: 

Which version of OOP? Alan Kay's original vision? The bastardized modern form of it that misses the point entirely and thus encumbers us with bizarre access control, member variables, etc? Inheritance-centric? Prototype-based? Compositional OOP?

Each form of OOP has its strengths and its weaknesses; its advocates and its detractors; its domains of utility and its domains of uselessness. There's nothing magical about OOP that makes it the Killer Paradigm and there's nothing infernal about it that makes it the Killer (of Programmers) Paradigm.

I can't really point you to any books or articles that killed my interest in OOP as a Silver Bullet (as opposed to one of many techniques I can use to keep my projects survivable). I can point to the funniest critique of a specific brand of OOP, however: Steve Yegge's classic "Execution in the Kingdom of Nouns".

JUST MY correct OPINION
Sir, don't you mind if I say that the link you gave me really counts as an answer? :)
Bubba88
About your counter-question, I can say that I had experience in Java-like OOP, as well as some Prototype-based OOP. Are they really all not the same in the core?
Bubba88
But it's only an answer to a specific brand of OOP of dozens. ;)
JUST MY correct OPINION
Much to learn for me... again... (((
Bubba88
Countering your counter of my counter-question (my brain hurts!): they are not. Alan Kay's original vision of OOP was independent software agents who communicated with each other via messages. There was no "public this, private that, protected the other" because EVERYTHING you did outside of your own class was a message call including accessing "member variables", etc. Inheritance was a minor implementation detail. In many ways languages like Erlang are more Kay-style OOP than modern OOP languages are.
JUST MY correct OPINION
Anyway, I've got your point about that diversity. I'll try to learn about all this, but still don't want to close the question.
Bubba88
`Alan Kay's original vision of OOP was independent software agents who communicated with each other via messages.` -- Oh, that was a strike!.. Is that like actors model of parallelism?
Bubba88
It's related, but not identical. Kay's brand of OOP incorporates much of the actor model but isn't quite as militant about it as, say, Erlang is.
JUST MY correct OPINION
Thx. I finally understood!
Bubba88
As I understand it, the core of Kay's concept is that objects hold data internally and communicate via messages. Accessable fields and methods with specific signatures are *implementation details* of how to implement the handling of such messages - very convenient to handle most cases, but elevating these implementation details to core abstractions weakens the concept.
Michael Borgwardt
Aha, that was partially the point of Mr. Richter's. BTW could you explain the 'methods with specific signatures' phrase?
Bubba88
@Bubba88: Carl Hewitt, who invented the Actor Model, based it on Smalltalk-71. Alan Kay, who invented Smalltalk-71 based it on PLANNER, which in turn was *also* invented by Carl Hewitt. The designers of Erlang didn't actually know about the Actor Model (Joe Armstrong only learned about it many years later, when he was writing his thesis about the design of Erlang), they based the design of Erlang on Prolog, which in turn is based on - surprise - Carl Hewitt's PLANNER. So, your hunch is right: the similarities are very profound and deep and certainly not coincidence.
Jörg W Mittag
@Bubba88: The designers of Erlang *also* based their design on the requirements of the telco industry: resiliency, dependability, no single point of failure, evolvability. Incidentally, those are *also* the attributes of an evolutionary successful organism, and guess what: Alan Kay actually has a degree in microbiology and based the design of Smalltalk on the way cells communicate with each other and form complex organisms from very simple structures. Again, no surprise there.
Jörg W Mittag
@Jörg W Mittag: Great info, I do think now that design approaches that provide modularity (like OOP does) have strong correspondence with those of parallelism (Actors, etc.).
Bubba88
@Bubba88: Even in a single thread, Actor-like design gives a lot of benefits in terms of isolation, composability, etc.
kyoryu
A: 

The Gideon Bible of object-oriented design patterns, aptly named Design Patterns. One of the best software design books I've ever read.

Marc W
Thx.. but I've asked about criticism :)
Bubba88
When you read the design patterns and see how badly they get abused, that becomes criticism. :DThat and the "Flyweight" as implemented in the edition I read confuses the Hell out of me seeing as the "lightweight" replacement object takes more resources (execution and memory both!) than what it was replacing!
JUST MY correct OPINION
It's hard to understand the GoF book without knowing some Smalltalk. Example: In Smalltalk, "true" is not a value. It is an object. Specifically, it is a Singleton instance of an object (I believe of type Boolean). It could also arguably be considered a Flyweight. So, `val := true` does not equate to `val = true;` in something like C# or Java - it's closer to `val = True.Instance;`.
kyoryu
A: 

hows about steve yegge's execution in the kingdom of the noun for java style OO

jk
Thx, but: http://stackoverflow.com/questions/2409494/some-solid-oop-criticism/2409562#2409562
Bubba88
ops yes missed it on the end there
jk
That's OK :) charschars
Bubba88
+2  A: 

Maybe not quite what you were looking for but have a look at the Jan/Feb issue of IEEE Software magazine: Object-Oriented Analysis: Is It Just Theory?. The basic conclusion is that OOA does not provide a good cost/benefit ratio so is poorly utilized.

Given that OOA is not effectively utililzed or supported in the "real world", I suspect that for larger development projects the overall system architecture, deployed object model and class hiearchy end up being sub-optimal and poorly understood (implemented) by various parts of the development team. A second article in the same journal: Four Trends Leading to Java Runtime Bloat point to some common OOP issues that detract from deploying high-volume Java (OOP) systems. The observations made in this article probably apply to most highly architected OOP applications.

Do not take this as OO bashing, it just reflects that as software practictioners we have quite a bit of work to do toward developing better person-to-person communication mechanisms to convey highly complex and abstracted process models.

NealB
Thx. I'll check that.
Bubba88
+4  A: 

Rick Hickey's Are We There Yet ? - A Deconstruction of Object Oriented Time was an eye opener for me. It's the most logical OO criticism I have come across.

missingfaktor
+1 for mention of Rick Hickey. I love him too :)
Bubba88
Look at Clojure then, Bubba88. ;)
JUST MY correct OPINION
Already had, Mr. Richter)
Bubba88
+3  A: 

If you want a criticism of OO programming, here's what I'd recommend:

  1. Learn Smalltalk
  2. Learn Erlang
  3. Learn Scheme

Once you've done that, you will have plenty of criticism of the common interpretation of OO programming.

(Hint: OO was in many ways intended to more closely resemble the Actor model of computation, but the common interpretation of it is effectively a modification of the procedural/structured model)

kyoryu