Talk:Abstraction in object-oriented programming

There is a vast array of obsolete crap out there regarding programming languages and especially how the so-called "abstraction" in OOP is supposed to relate to the real world's relationships. 99.999% of this is garbage, and bears no relation to prototype theory in perceptual and cognitive psychology as it is understood today, e.g. most descriptions of "finding the objects", e.g. most descriptions of "domain analysis", make bizarre ontological assumptions.

Whatever is said in this encyclopedia about OOP, and I hope it's not much, ought to respect the Governing Operational distinctions made at run time by all computer programs in execution... we should make no claim for an abstraction to actually represent more than the operation distinctions that it includes. See essay "Class Names Considered Dangerous" by I forget who... or "The Cruelty of Really Teaching Computer Science" by Dykstra. Someone who doesn't understand why Governing Operational distinctions (as made by the pigs, cows, commodity markets and computer processor) are not the same as the Governing Ontological distinctions (as made by the farmer, programmer, and consumer) hasn't understood "doing" versus "seeing" yet, and should be kept away from all computers. This article wsa on the edge of that madness, but it was pulled back slightly, and I think we should make this as good as we can before creating a vast array of crap files laying out some Java-specific terminology from someone who hasn't been doing this for 15 years in 6 languages in all types of work environments..

Clearly LDC is one of those people, once again buggering things he does not understand. Polymorphism and inheritance are ways of increasing abstraction, of substitution and structure respectively. They have to be mentioned here.

It appears that most Java programmers do not comprehend that abstraction is more than encapsulation or type renaming. That's fair, as Java is not really OO in the sense of CLOS or Trellis or Eiffel or even Smalltalk.

As it stands, the article is misleading, although somewhat more generalized. An attempt to define "abstraction" as encapsulation, as this article does, is simply going to fail - there is no point differentiating type abstraction (encapsulation) from operational abstraction (polymorphism) from the structural abstraction required to achieve it (inheritance) in the damaged terms LDC has left us here.

I've been programming for over 20 years, in about 10 languages. I know what I'm talking about and I know how to explain it well. I will not allow articles on Wikipedia to become useless. -- Lee Daniel Crocker


 * Well, I believe you, since you can see that the fix to object-oriented programming is in the right direction. Look, this is one of the most confusing subjects in the world as it overlaps with all other ways of making Governing Operational distinctions, i.e. choosing actions.  Patience is required.  Neither of us learned this overnight, and I suspect we've both taught it a fair bit.  My OOP is somewhat older, 1985-98, but broad:  Smalltalk, LISP, Eiffel, Trellis, CLOS, Objective-C, C++, C++, more C++, Java (which turned me off the subject permanently).  I suspect my experience is deeper and yours more recent.   I'm happy to leave detailed description of the concepts to you if the ideas of problem domain analysis, solution domain or legacy analysis, and the overall feature breakdown of OOP languages is right.  But trying to tell me I'm "confused" is really laughable, I think 24
 * I am immensely glad to hear that you "will not allow articles on Wikipedia to become useless" but that does somewhat beg the question of "for whom"? If not the three billionth user, who?  Your explanation is adequate for a Java programmer, but "abstraction" is really the root concept that motivates encapsulation (abstracting data structure), polymorphism (deep abstraction across types), and inheritance (facilitating the above with an encapsulated delegation structure).  There should be at least that much said here. 24

The likely audience for this article is someone who might understand basic programming concepts, maybe he's done some BASIC or shell scripting, but he's heard everyone use the "OO" buzzwords and wonders what the big deal is. Or maybe he's a college freshman wanting to know if he should take an OO class. Or maybe he's a Perl 4 programmer who wants to understand the concepts behind Perl 5's objects. I want these explanations to be simple and general, with a few specific examples in specific languages. If we can also lead the reader to other author's more detailed ideas, specifically to those of prominent authors like Booch and Meyer, that's OK too. I don't want to bog down an article about what is really a fairly simple design metaphor for programming with stuff about real-world philosophy and ontology. And I never called you confused, I called you confusing. If I can't understand half your stuff, then nobody can. --LDC
 * fine, I agree, but that "fairly simple design metaphor" becomes impossible to reconcile with "real-world philosophy and ontology" i.e. real problem solving, if one is not very careful with all terms from the very beginning. I agree with your priorities, though, and since it is confusing to hear so many explanations of so many languages, a little "editorializing" to warn them of the overlapping use of terms, e.g. polymorphism as means to abstract operations facilitated by many means, vs. polymorphism as one consequence of inheritance.  Anyway, it reads fine now, and the more general stuff re domain analysis and legacy analysis is not specific to OOP but applies to all forms of DB and program design.  So you're right, mention of it sould be in a more general article.  Hard to know also where to link it to ontology.  24