Talk:Object-oriented programming

From Wikipedia, the free encyclopedia

This article is part of a WikiProject to improve Wikipedia's articles related to Computer science. For guidelines see WikiProject Computer science and Wikipedia:Contributing FAQ.


Contents

[edit] Typo or recast sentence

(Thus, Smalltalk was clearly a major move beyond the analog programming models, which made no use of "instances of classes," or even or Simula, which made no use of the "inheritance property.")

I would have edited myself, assuming the or needs to be deleted, but OO makes my head hurt, and I can't be sure that is the correct option. I assume from the sentence that Smalltalk was a move beyond Simula, in which case the or needs to be deleted. If that is not the intention, the sentence needs to be recast.

Sorry guys, but this is wrong. Simula did have inheritance.

[edit] Above the TOC

This discussion reminds me about the story of the blind men and the elephant.

They had no idea what an elephant was.
One touched the side and thought it was like a wall.
Another touched the trunk and thought it was like a snake.
A third touched a leg and thought it was like a pillar.

Etc.

And then they went to edit the wikipedia article about elephants.--Donaldino 08:10, 15 November 2006 (UTC)

So I can see the table of the contents, this section has been given its own header. — Ambush Commander(Talk) 03:16, 14 November 2005 (UTC)

A couple of points that I will come back to work on (but I will write down so I don't forget it):

1. Encapsulation is not information hiding. They are closely related, but they are not the same. Encapsulation is a property of object-oriented programming languages, but information hiding is a concept that is much more general. The definition will need to be clarified.

You are right. However, please note the .NET literature speaks of encapsulation using terms like securing access.Connection 00:18, 8 March 2006 (UTC)

2. Maybe it would help to think of object-oriented programming as a two-part topic: (1) Object-oriented design, as in how do we use objects to model some system, and (2) object-oriented programming languages, as in languages that tend to support the implementation/coding of object-oriented designs. Object-oriented programming is the activity that combines both (1) and (2).

Agreed that it is helpful to separate out OO PL's from other "OO" topics. I have treated this page as about PL's and about actual programming. I don't know if your approach is really going to work well, because lots of things have had "OO" attached to them at this point, but please let us move the non-PL stuff to a different page from the PL stuff. --24.98.52.85 19:47, 18 Apr 2005 (UTC)
Although an OOL strongly encouraged, some would say that an OOL is not necessary for OOP or OOD. Instead they maintain that OOP/D is a way of thinking about data and operations that act on it. In this mindset, an OOL provides enforcement of policy and a degree of self-documentation which greatly simplifies coding. For example if you declare data to be "private" you are enforcing a policy and documenting that only member functions can modify the data. I just think that the article should reflect more that OOP/OOD is a mindset and an OOL is a tool used to reinforce that mindset. I'll see if I can dig up some references.- Jim 19:02, 27 July 2006 (UTC)

3. In the history, maybe we should note that object-oriented programming followed procedural programming? Procedural programming emphasizes thinking around actions (verbs) while object-oriented programming emphasizes thinking around objects (nouns). (I'll need to find a source to verify this, but someone mentioned a similar topic in the discussion below: object-oriented vs subject-oriented with respect to grammar.)

4. I think we really need to take out the opinion and critiques. There is way too much contention here, and the critiques might best be stored in the discussion section such that readers can see that there is contention in the topic.


I would like to rename this to object theory. I understand object-oriented programming is the most common term and nearly no one uses a word like object theory instead of it. But the trouble with the current title is OOP is a POV'd term. The situation is similar to that in socialism or communism. The majority of people claim class, inheritance and encapslation are foundamental aspects of OOP but some argue inheritance is not always necessary, for instance. It doesn't matter who is right. The fact is there are disputes regarding the definition of object-oriented programming. So it would be troublesome with the current name as some claim inheritance is an aspect of class-based OOP then the article sholdn't cover, while some say inheritance is a foundamental of OOP and there is no reason that the article doesn't cover it. I don't think such debate would be settled. The benefit of the title object theory is it is more abstract term. It can discuss languages before object-oriented programming. Ada8 something supports objects but is usually considered not OOP. Then where we should discuss such? A separate article? The title object theory implies it is about programming aspect regarding objects. It is a broader term that can contain class-based OOP, object-based programming and so on. Subprogram is an good example. People hardly uses a term subprogram over subroutines or functions. But in encyclopedia, use of such an abstract term is preferable because if the article named function, it implies a subprogram should be a function like in math, which is not the case. If named subroutine, it tends to emphasizes a behavior as side-effect and it makes hard to talk about function in functional languages. OOP is a similar case.

And as usual, if I don't see an object, I will go ahead. -- Taku 13:44 23 May 2003 (UTC)

If you want a separate article called object theory that explains differnet methods of using objects in programming languages then fine. But the aspects of the OO paradigm discussed in this article (abstraction, encapsulation, polymorphism and inheritance) is a vast subject that deserves a least a whole page devoted to it. What you have us call it? OOP is the universally understood term used for these concepts. Mintguy 14:01 23 May 2003 (UTC)

Please don't use the current content as an excuse. I want to rename first because otherwise, people will claim it is not OOP. Certainly we want to discuss what is OOP? But the more important is, history of OOP, point of views, variants, and so on. They are certainly beyond an article named object-oriented programming. Again, oftentimes, broader term serves well in encyclopedia. I showed an example above. -- Taku 15:11 23 May 2003 (UTC)
I don't think OOP is as controversial a term as you claim. Even if it is controversial, it seems tractible to summarize the different definitions. There are some out there, though I admit I am too lazy to dig them up at the moment. In the material I have read, object-oriented universally implies some kind of inheritance; as others have already posted, I have seen the term object-based used when inheritance might not be present. That said, the OO word for this concept is "method". --24.98.52.85 19:47, 18 Apr 2005 (UTC)
I agree here. There area small number of definitions of OOP (less than haf a dozen). It should be possible to list them all.--Donaldino 18:31, 14 November 2006 (UTC)

I happen to disagree with your choice of the word subprogram, in all my 25 years experience of being a programmer I can't recall anyone ever using the term subprogram for subroutine, function or procedure or method. However those four words that that you've grouped under subprogram do have different meanings to different people, usually depending on what language you are talking about. i.e. C programmers talk about functions when they mean procedures. I personally think subroutine is a better word because it is one that is in common usage and I beleive it has a longer history than the other words. But that is another issue.

I submit that your experience is long but limited. I am perfectly familiar, despite much less experience, with "subprogram" as a synonym for subroutine and as a generic term for a function, procedure, or method. A little Googling turns up that Ada uses "subprogram" in its specification. --24.98.52.85 19:47, 18 Apr 2005 (UTC)

Why don't we try to resolve this issue sensibly. Why don't you start writng an article about object theory and we'll see needs to be merged in from OOP? Mintguy 15:21 23 May 2003 (UTC)

About subprogram. That is exactly my point. There are a lot of concepts related to subroutine, function, procedure and methods. But we don't want to have a separate article for each one. What I am trying to do here is the same thing. Because for programmers, the difference is a huge matter, but for general audience, they want to know more about what is happening in cs. We don't want to teach them OOP should be bah bah bah. That is a difference seen in articles of wikipedia and textbooks. Because most of textbooks or websites have a POV such as OOP should be. Yeah, I can start certainly I can start an article called object theory but the trouble is we need to make sure history is combined. What about renaming this first, add more about object-based OOP and difference between class-based and object-based and then decide what name should be given or without renaming, start adding such point. This is just a chiken and egg problem. I don't care which one is first. -- Taku 16:17 23 May 2003 (UTC)

But why choose a word that no-one uses. That makes no sense whatsoever. I wouldn't expect to find an article about fishing under fish hunting. To the best of my knowledge, few people if any use the word subprogram to mean a subroutine or procedure. Subroutine is a word that assembler programmers generally use and it makes no assumption about whether there is a return value of side effect, or whether it is a member of a class or not. It just means a group of instructions that you jump to perform a task and then jump back from continuing execution where you left off.

I am against the idea of moving this page, because by adding stuff about other systems with objects or if you like widgets that do not embody OO principles you are diluting it and moving away from OOP. Mintguy 16:30 23 May 2003 (UTC)

See this is why I need to rename first. Anyway, we always make a redirect so of course, you can find out the article, object theory. If I don't mean to stick only to that term, but other possibilities are:
  • object theory
  • object-orientation
  • object-oriented
  • object-oriented paradigm

I just want to make the title more abstract, so that the article can contain parts beyond your strict definition of object-oriented programming. -- Taku 16:45 23 May 2003 (UTC)

Taku I am not going to argue with you anymore can we just leave this until we get some arbitration. Mintguy 16:55 23 May 2003 (UTC)

You mean mailing-list? Sure. By the way, I rewrote the subprogram so that it is more apparent that why the article is named as subprogram. Sometimes, we need to avoid common terms because they are too POV'd. -- Taku 17:04 23 May 2003 (UTC)
(NB I wrote the following before having read the latest round of your comments, Mintguy, Taku, but had an 'edit conflict')
I've just read and understood your arguments, Taku, but have to say I agree with Mintguy. Moving the content of this page to title that very few people use is not a good thing to do. With this in mind, am I correct in saying that you see two problems?:
  1. There are aspects of programming (e.g inheritance) that some people call OOP and some people do not. i.e. there are different POVs about what OOP is.
  2. There are uses of objects in programming (e.g. the objects in Ada) that no-one calls OOP.
Quick note: I presume you mean the old Ada83, which didn't have inheritance. The usual term for that was "object-based" programming, and it generally was NOT accepted as object-oriented programming. However, the current version of Ada (since 1995) has inheritance, and complete support for OOP. (Note added by User:dwheeler)
Yes, sorry, Taku writes above about "Ada 8 something". I should have written that too. Pcb21 18:08 23 May 2003 (UTC)
My view is that the best solution is that issue 1) can be discussed quite happily in this article. 2) requires a separate article e.g object (programming) or maybe object theory (not sure how widespread this term is and so am hesistant to agree to use it all), which links to this one, and devolves significant chunks of work to this article. That article could have more historical information than this article. Naturally this article would also link back to that one ... 'Programming languages may support objects but are rarely described as object-oriented languages. See object (programming) for a more general article'. What do you think? Pcb21 17:16 23 May 2003 (UTC)

object theory would be a good additional place to discuss fine points of theory, but this article should be the general explanation of the range of what is called "object-oriented programming". It's not that big of a deal to say that there is a disagreement; NPOV means reporting points of view without trying to anoint any particular opinion as the "truth". ABC's assertion that "XYZ is not true object-oriented programming" just means that you report it as an assertion of ABC; removing the report entirely is taking the POV that ABC is so wrong that the assertion should be censored from the article. People that think they know the definition of object-oriented programming should probably excuse themselves from touching this article; a bald list of all the multiple definitions that have been used will make a longish article all by itself. (BTW, I have heard people use "subprogram" and even used it myself a couple times, but it's a somewhat archaic usage from the heyday of Fortran and Cobol - yes, I was there, but just a teenager I swear :-) ). Stan 19:13 23 May 2003 (UTC)

I was thinking and I agree that it's possible to discuss object-oriented programming in general, if not easy. There is a term that is quite popular and it should be strange if wikipedia doesn't cover that term mainly not as part of some article. But still I also think we should cover use of object in general, which can be part of OOP but can be outside. Besides, I realized it's possible to merge the article latter if needed. So I will write an article object theory I proposed. We will see and we can discuss again we should combine them or rename or anything else. -- Taku 21:45 25 May 2003 (UTC)

I disagree that "abstraction" is a standard definition of OOP nor does OOP have a monopoly on abstraction. For example, functions provide black boxing of implementation, and relational algebra is sometimes regarded as being highly abstract. The main text makes it appear that "abstraction" belongs with the "classic three". It does not.

I'm tempted to axe both polymorphism and abstraction in exchange for message-sending. Message sending is the OO way to achive both polymorphism and abstraction. Many languages have polymorphism and abstraction, but only OO languages do it with message-sending. The heart of the definition should be: objects that send messages to each other. --24.98.52.85 19:47, 18 Apr 2005 (UTC)


I think this sentence has no bearing on OOP and should be removed:

Indeed, the rise of GUIs changed the user focus from the sequential instructions of text-based interfaces to the more dynamic manipulation of tangible components.

Discussion of classes doesn't belong in the first paragraph. Plenty of OO languages have objects but no classes (eg. self, cecil). -- P3d0


Taku, my friend, I appreciate your intent, but I think your latest changes to this page have only made it worse. I'm fighting the urge to back them out, and instead I'll think about it for a while and see if I can combine the best of the old and new versions...

Most of all, I don't claim to be an expert, but I have been in the field of OO programming for some time now; I have read on the topic fairly extensively; I have participated in (and even moderated for a time) the comp.object newsgroup; and I have never heard the term "Object Theory" used by actual practitioners of the OO programming paradigm. An encyclopedia is the place to document terminology, not to invent it, so I think all references to "Object Theory" ought to be deleted unless you can provide a reference to some external definition of the term. -- P3d0 01:29, 3 Oct 2003 (UTC)

You are right, however, we may have our epistemological contribution here! (In the sense of creating terminology in the extent to assist us in arranging and presenting knowledge). Pleas see Talk:Object-oriented_programming#OOP as a Methodology below.Connection 01:07, 8 March 2006 (UTC)
Because I just made up the term. I just couldn't come up with good termiologies. You may know or not, there is a heated dispute about what is OOP between me and Mitguy. You are right; the article is too much inclined to particular kind of OOP. Classes, for example, are not main parts of OOP, so I just went editing. Let me know what parts you disagree with or just go ahead state your view. I know you have good knowledge and I will certainly apprecite your contributions. -- Taku

I've created these three class diagrams to show how Aggregation, Composition and Inheritance appears in UML.


Taku,

Stop reverting to old versions that are incorrect and pushing your own uniformed POV.

OOP is most certainly a paradigm not a style. Abstraction is a fundemental property of OOP. You should not confuse your own or others lack of understand of OO as meaning that OO is vague.

AIH I AM an expert in OO. I hold a BSc(Hons) in Computing Science, 15 years development expertise, including 10 in OO Software.

I think you are new to here presumablly. The definition of OOP is always disputed if you know the history of this article. OOP with use of classes is called class-based OOP and OOP without classes is called object-based OOP. It is a paradigm if you put that in the context of software development, but a style if you compare that with other programming sytles.

Abstraction is tricky question. In some sense, any programming style promotes abstraction. I think reusability and encapsulation is more specific and unique to OOP. I will show my points more in the article.

Besides, some people with good education and good professional experience understand nothing about OOP, though I don't know if you are the case or not. Please show us evidence of your POV not who you are. I hope you can be accustomed to the wikistyle. -- Taku 18:00, Oct 21, 2003 (UTC)


This argument is obnoxious. Worse, there is a distinct shortage of evidence for and against different approaches. Who you are and what you know is irrelevant to whether the information is generally correct. If an issue is debatable, leave it in talk or put it on your user page and link your user page here.

I suggest that it makes no sense to call OOP a "style" of programming. If something is part of a language, it's use can hardly be a style, on par with indenting and variable naming conventions. Paradigm is an abused word, but it is much more suitable to describe a feature of a language which is built in and common to a whole group of different languages with different but related approaches.

There is such a thing as an object-oriented style. The Xt library, for example, is in an OO style even though it is implemented in C. Even so, it seems better to focus the current page on programming languages; the OO style is then pretending to use an OO language even when you don't have one. --24.98.52.85 19:47, 18 Apr 2005 (UTC)

I would request that anyone of sufficient knowledge consider expanding on the distinction between OOP and standard procedural languages, especially since many OOP languages, notably the two most popular (Java and C++) are still procedural. Many discussions of OOP seem to suggest that objects have a sort of independent existence, as if they were autonomous entities like processes. The idea, for example, that they "communicate", while nice in abstraction, is really not correct, at least not in any way especially different from how functions talk to one another. Objects are not agents, after all, they are special data structures. Brent Gulanowski 20:05, 24 Oct 2003 (UTC)

You have a point. My apology for stating OOP as style. Now I think the intro and the definition section is good enough, it is time to rework more following details. -- Taku

Taku,

The dispute between us is not about the definition of OOP. I think we agree well enough on that paradigm and the elements section described in this article. My disagreement is with you saying that a structured programming design (the Windows API) was originally designed as an OOP design. The two are different concepts. OOP includes structured programming as one of its component concepts but that doesn't make all structured design OOP design. JamesDay 20:48, 25 Oct 2003 (UTC)


Hope I'm not entering a hot-bed or starting a fire-storm. I made changes to the basic definition of OOP. I've studied OOP (in college and outside) and taught OOP (to corporate and government clients) over the past 20 years, and the consensus I have always found was OOP means: 1.) use of objects (duh; this often goes unstated), 2.) abstraction (yes, its used elsewhere but OOP requires), 3.) encapsulation, 4.) polymorphism (I added this; wasn't there; how could it be forgotten? OOP absolutely requires this), and 5.) inheritance (yes object-based can omit inheritance, but OOP requires.)

I dropped "reusability" because it is more of a "state of mind" than a tenet of OOP. Yes OOP encourages reusability, but my reusable component may not be sufficient for someone else, so reusability is something you approach, not something you are. We can look at the other items (abs,enc,poly,inh) and say definitively (in most cases; I'm sure some wise-a** can find an obscured example to the contrary) that a given language either does or does not have those attributes.

So, I hope my thinking is not off base and you like my edits (enough to keep them :)

MikeSchinkel 02:19, 26 Oct 2003 (UTC)

No one mind your contribution. An attempt is more hopeful than giving up. I think four points you pointed out are quite accepted--that's what I have learned and have seen in many books of OOP. My intial motivation to omit them is I wanted to turn the article into more general term rather than common one. The explanation of polymorphism is a good instance. Not every OOP language has a data type. I mean when you teach OOP, it is inevitable to explain about porymophism but it is actually rather an implementation choice and detail. Anyway, this is my reason. -- Taku 02:39, Oct 26, 2003 (UTC)

Thanks. Can you give me examples of OOP languages that don't have data types? Or are you meaning ones don't differentiate between integer, boolean, etc? My use of data type here, by the way, was specifically to avoid the concept of "class" because a class is a type of data type though not vice-versa, and some languages don't support class in the traditional sense and I didn't want to have to go into the intense detail required to explain. A good definition should be consise, no? :) MikeSchinkel 02:51, 26 Oct 2003 (UTC)

I think OOP without any data type can be possible, or of course it depends on the definition of OOP though. -- Taku 04:39, Oct 29, 2003 (UTC)

Can someone provide examples of "object-based" languages? Are we talking languages like JavaScript/JScript? Can someone fill out more what "object-based" means? TIA. MikeSchinkel 02:58, 26 Oct 2003 (UTC)

I think so, JavaScript, Visual Basic and such. I know we usually classify them as non-OOP. -- Taku 04:39, Oct 29, 2003 (UTC)

Ahh! I read your reply and thought "Of course! What was I thinking?" Then I went back and read the entry on Object-oriented programming and remembered what I was thinking. The confusion I had was the distinction between "class-based" and "object-based" languages. I had never heard it explained that way so I was confused. Now I find it not only confusing but also pretty much inaccurate. The entry describes "Class-based" as "In this model, objects are entities that combine both state (i.e., data) and behavior (i.e., procedures, or methods)." That applies to "object-based" as well. I would say the inclusion of the term "class-based" should be removed, and then a reference to "object-based" be left in that describes it as "object-oriented minus inheritance."

There is another spin that could be added to this; that of OOP languages with staticly defined classes (i.e. most of them) and then ones with dynamically defined classes (i.e. javascript and a few others I'm sure.) However, I don't have enough experience with javascript to elaborate correctly.

Thoughts? MikeSchinkel 10:54, 2 Nov 2003 (UTC)


Somewhere I got the idea that there now existed one or more examples of object-oriented functional languages, but come to think of it, is that possible? Hmm, I guess it is if the objects never change, meaning no side effects, but what is an object if it isn't an abstract data type? How do you have ADTs without primitive data types?

... well, google helped: http://www.pasteur.fr/~letondal/object-based.html (Object-based PLs). OScheme would be a good example, and its interesting because it's untyped, I think. I guess that's the functional one I was thinking of. Brent Gulanowski 18:53, 26 Oct 2003 (UTC) Brent Gulanowski 18:53, 26 Oct 2003 (UTC)


If we must talk about OOP modelling the "real world" then can we please do it less prominently? OOP applies quite well in situations where there is no "real world" (eg. nodes in a control-flow graph) so I don't consider real-world fidelity to be very important at all. However, some disagree, so if someone feels like putting that back in, I won't remove it again. --P3d0 13:37, 3 Jan 2004 (UTC)


I think the description on abstraction is misleading. How would that abstraction be different from composition? Composition is a way of grouping multiple entities into a single entity. Abstraction should be thought more as ignoring irrelevant details. -- esap

[edit] Truly Object oriented

I also think that this page isn't about Object-oriented Programming, but about Object-oriented languages, or structure. I picture an entry on Object-oriented programming giving information about programming, not the languages underneath.

But my real question is about strict OO Languages. What does it take to be truly OO? I've heard it argued (its being argued in my apartment of 4 CS geeks ATM), and I've seen textbooks say that C++ isn't strictly object-oriented, but is merely object-compatible. Any thoughts on the matter?

McKay 07:12, 2 Aug 2004 (UTC)

Pure OO implies that everything is an object, and that the only way objects can communicate is through sending messages. This implies that C++ isn't pure OO, neither is Java (it has non-object primitive types and it has non-oo imperative control structures). Smalltalk is an example of a Pure OO language [[User::wlievens|wlievens]]

I think it would be useful to include this definition of "true" or "pure" OO somewhere in the main article. (anonymous user, but I promise to register one of these days) --80.62.49.62 13:44, 7 Jan 2005 (UTC)

[edit] Term Object Oriented comes from Grammar

Nobody has mentioned here, why we call this object oriented. Many believe the reason for that is because of the presence of the objects. However the truth is that the term Object Oriented comes from the grammar and this was a significant shift from the Subject Oriented programming style that existed. A program specification says "System checks the Catalog to find the price of the item, System records the transaction, System prints the receipt, etc". Since we used to think from the subject side the complexity of the subject (here the System) increased with the complexity of the requirements. Then the researchers started thinking in an object oriented way where by the verb of the sentence in the requirement is attached to the object. They found that they could create much better and structured application by reading the specification like "Catalog checks the price on a message from the System, Transaction records itself on a message from the System, Receipt prints itself on a message from System, etc". -- [[User::harinair|harinair]] Jan 05, 2005 17:20 PST

Wow. I would like to see a reference on this.--Donaldino 19:25, 14 November 2006 (UTC)

-- I searched for Subject-oriented programming which I found mentioned somewhere [1] while searching for Aspect-oriented programming. As I understand it, "Subject Oriented Programming" is a newer idea than OOP. So it would be a good idea not to use this exact phrase as OOP-predecessor. Zefiro 15:44, 12 Apr 2005 (UTC)

[edit] Vandalism

Two edits were made by 61.16.174.51. The first consisted of adding random letters, and the second of deleting the page text. I went back to the version just previous to the first of 61.16.174.51's edits and saved it.

[edit] Polymorphism Edit War

Perhaps we should reference a seperate topic for polymorphism with the various definitions that have been proposed. It seems everybody keeps deleting the existing definition and putting up there own favorite.

[edit] History - the last paragraph

"Just as procedural programming led to refinements of techniques such as structured programming, modern object-oriented software design methods include refinements such as the use of design patterns, design by contract, and modelling languages (such as UML)."

When I worked at Yourdon Inc (from 1979 through 1985), a company often associated with structured techniques, we talked about design patterns, design by contract, and modelling languages in our courses and books. On the Structured Design Workshop, for instance, we handed out Structured Design (ISBN 0-13-854471-9) by Ed Yourdon and Larry Constantine as well as Notes on the Synthesis of Form (ISBN 0-674-62751-2) by Christopher Alexander, the 'Father of Pattern Languages'. On the course itself, we talked about 'design by contract' in terms of pre- and post-conditions. And aren't data flow diagrams and structure charts 'modelling languages' just as much as the hotch-potch known as the 'Unified Modelling Language'? Did someone forget that Larry Constantine wrote a foreward to Ivar Jacobson's Object-Oriented Software Engineering, revised 4th printing ISBN 0-201-54435-0? O-O built on and extended Structured Techniques, really. It's a continuum.

Perhaps the following would be more a bit more 'faithful' to the history:

"Procedural programming led to refinements of techniques such as structured programming, design by contract, coupling, cohesion, external business events to uncover functional requirements (see Essential Systems Analysis by Stephen M. McMenamin and John F. Palmer. Englewood Cliffs:Prentice Hall, 1984. ISBN 0-13-287905-0), and modelling languages (such as Data Flow Diagrams, Jackson Structure Charts, and Harel's Statecharts). Object-oriented techniques extended these developments with explicitly described design and analysis patterns, use cases, polymorphism, and extensions to a collection of modelling languages in the UML."

I like the last quote here, but would rather have the History moved to the first paragraph, to give the reader a brief history of how OOP was established. Remember we are not "singing to the choir" and many who read this article may not come from a programming background.

[edit] 2.1 Actor model

2.1 Actor model has a lot of bla-bla on "modules", and makes some really strong claims about the fact that the main purpose of OOP is to modularise source text. Imho, OOP is a design philosophy and can be applied to visual programming just as well. Wouter Lievens 22:41, 13 Jun 2005 (UT

IMO the section on the actor model does not belong in an article on OOP.--Donaldino 19:17, 14 November 2006 (UTC)

[edit] 6 OOP in Scripting

the value of inheritance in these languages is often questioned <-- I'd really like a source on that. Wouter Lievens 21:45, 17 July 2005 (UTC)

I think this sentence is bogus. /Misuse/ of inheritance could be criticised but all languages I am aware have some form of inheritance (static or dynamic), even classless Io programming language. Pavel Vozenilek 23:50, 17 July 2005 (UTC)

I see it questioned from time to time, on news:/comp.lang.python . Possibly most people have just accepted that explicit inheritance is of little use in a duck typing language. This has nothing to do with whether a language is a scripting language or not, of course. Jgrahn 22:26, 16 March 2006 (UTC)

[edit] Use of term "message"

While many Smalltalk advocates will protest loudly... I generally consider the use of the term message to mean a synchronous (caller blocks on receiver until receiver returns) method call to be confusing. Apart from the looser coupling involved; a Smalltalk message send is not fundamentally different from a method call in C++ or Java; and has nothing to do with the most common use of the term "message" in computer science--namely, part of an asynchronous communications channel.

Those familiar with Smalltalk history will know the etymology of the term "message" in the Smalltalk context. Early Smalltalk dialects were based on a programming model resembling the actors model; and message sends really were asychronous communications between different tasks. However, that architecture was abandoned in Smalltalk-80. Yet the terminology stuck. As OOP was still in its infancy in the late seventies and early eighties (and the actors model of only academic concern), there was little reason for the Smalltalk team to select a different name. Twenty-five years hence, however, the term "message" is primarily used to refer to asynchronous channels.

--EngineerScotty 22:45, 1 September 2005 (UTC)

[edit] Languages should go to the separate article

I would like to propose to remove the list of languages from the section Languages and to keep only the link to the languages article as "See Object-oriented programming language". It's tedious to maintain both lists and this list here might also be a source of dispute as whether a language should be mentioned here or not. I propose to treat all languages equal and list them only on Object-oriented programming language. – Adrian | Talk 10:28, 21 November 2005 (UTC)

There seems to be no objection. So I'm going to delete the section "Languages" as announced. The content of the deleted section is/was (added indentations):
Main article: Object-oriented programming language
Ada 95 | C#, C++, Common Lisp Object System | Delphi | Eiffel Fortran 2003
incr Tcl, JADE, Java, JavaScript | Modula-3 | Nice | Oberon, Objective-C
Objective Modula-2, OCaml, Object Pascal | Perl, PHP, Python | REALbasic
Ruby | Simula, Sleep, Smalltalk, snit, Specman, STOOOP, SystemVerilog
UnrealScript | Visual Basic | XOTcl
– Adrian | Talk 11:59, 30 November 2005 (UTC)
The link to Languages is already in the "See also" section, so the link can also be removed from the section "Languages". – Adrian | Talk 12:02, 30 November 2005 (UTC)
I'm reporting that I've deleted the section as announced. – Adrian | Talk 12:07, 30 November 2005 (UTC)

[edit] Major rewrite

I simplified and clarified; I eliminated forward references; I provided an example for each concept; I added a discussion of Class; I attempted to build from simpler concepts to more difficult concepts; I attempted to tie it all together with the example of raiseRuckus().

I deleted the discussion of mesage sending, because message sending is irrelevant to object-oriented programming; for example, IBM's MQ Series is a message-sending system that has never in the least way been associated with object orientation.

I found the statement that "Each object in the system serves as a model of an abstract 'actor'", but since an object is never a model and never an abstraction and it's confusing and unhelpful to bring in "actor" here, I eliminated it. I suppose the writer meant "class", but now that's already covered above.

I found too vague the statement that when "processes, functions or methods are abstracted, . . . a variety of techniques are required to extend an abstraction", so I eliminated that as well.

T00h00 writes (but doesn't sign!) the following statement:
"message sending is irrelevant to object-oriented programming"
Um, excuse me? You do know that "message sending" doesn't strictly mean message queues, right? A "message" refers to how objects communicate in OO systems. Try a Google search for Smalltalk messages. See, for example, the message passing section in the Smalltalk article. The term is more common in languages which use dynamic binding. This term is less common in contemporary languages like C# than in classical OO theory, but saying it's "irrelevant" is just misinformed. --Craig Stuntz 04:54, 11 December 2005 (UTC)
Oh, also: The notion that polymorphism and inheritance are closely related is true in some languages, but by no means all of them. Polymorphism means that different classes can respond to the same message (method call) differently, full stop. It can be done via interface inheritance or by dynamic binding, to name two methods of achieving polymorphism, but that's an implementation detail. Again, your comments seem to have a view of OO which is very close to what some languages do but not others, and in particular exclude the languages and environments which founded object orientation — Simula, Smalltalk, etc. I'm going to correct the polymorphism / inheritance comments since it's IMHO misleading. --Craig Stuntz 14:31, 12 December 2005 (UTC)

[edit] Object-orientated perspectivism

I'm one that actually spells the typical expression "object-oriented" as "object-orientated." I do this for a reason, the perspective. "Oriented" can be said as to lean towards or to slant along with common usages of the word. "Oriented" gives more of a tangible surface aspect to the idea presented by the word. I use "orientated" based on the verb "to orientate." The definition is subtly different, and enough to point out a worthwhile difference. "Orientated" gives more more of a positional aspect to the idea presented by the word. "Oriented" is like something headed towards a destination while "orientated" is the state of being "oriented."

How does this affect OOP or OOD? Let me try to pass some hints.

Lets use Java, but only because it is a popular example. Java could be said to be a object-oriented language, but it is not an object-orientated program environment. Java is a very flat procedural language that hybrids a program's syntax and definition in a object-oriented style. Yes, I did use the word procedural on Java, and I do know it usually is contrasted with object-oriented. The common OO features, like classes, inheritence, and abstraction, are not what makes the language object-oriented; Java is, however to a degree, object-oriented because its language defines structures and procedures (or methods) in terms of, or at least leans towards, objects. Hence, when you visually see the code, you can see the parts of the program that form an object. In contrast, the C language doesn't have any syntax by default that provides any visual aids to tell what forms an object -- but just procedures and structures.

That was object-oriented design. This is object-orientated design:

Instead of a perspective where one writes code in a flat file that contains all procedures and structures (like a Java program), one typically works with objects in proximity but is not limited there. The use of Legos to build an object are an easy example of an object-orientated design. One just connects one object with another to the point it forms a larger object. On can see all the available blocks from one's own perspective. One can also get up, move to a second room, get more blocks available in the second room, go back to the first room, sit down and continue to build a larger object. That movement of perspective, from one room to another, is a feature of object-orientated design. The popular MOO system allowed such an object-orientated design, and it had an object-oriented language by syntax. One could move from a room (an object) to another room (another object) and virtually "look" to see the contents of the room (all objects in virtual proximity to the room). Each object has methods that can be modified by an addressed proximal object, but as in the example about the lego blocks one does not need to modify any program in order to create another object. The virtual proximity is not a limiter as one can globally address any object that exists in the system. Objects in virtual proximity, like the object that represents the person in the room, can address each other and change behavior on their own, like the legos that take on a new shape.

I find that most texts only describe object-oriented design and totally leave out object-orientated design. I also find people get into debates about which object-oriented langauge is pure when technically "object-oriented" doesn't present an idea of a characteristic purity. Thus, I find many books and papers about OOD (and OOP) just not useable as a source for wikipedia, as they make no clear distinction.

Should we have two articles? One for object-oriented langauges and another for object-orientated design. Perhaps, it exists that way somehow, already. — Dzonatas 16:51, 11 December 2005 (UTC)

"Orientated" and "oriented" are synonymous; the former is more common in Britain whilst the latter is more common in the US and technical publications. "Object oriented" is by far more common than "object orientated" and should be used here. --Craig Stuntz 14:18, 12 December 2005 (UTC)
It is common now. It wasn't as common, like before the Java langauge. They are not completely synonymous, but generally yes. One uses a suffix of "-ate" to slightly change the idea. I'm not gonna argue over this point, nevertheless. I started to program and written in OOP environments before Java went commercial, so I've always seen a bit of a difference.
My main point is the different in the language aspect and the actual method to program. They have been both considered OOP by many, yet many texts fail to point out the distinction. Some UML editors with drag and drop features kinda get close to both OOP models. — Dzonatas 15:34, 12 December 2005 (UTC)

[edit] Le plus ça change, le plus c'est la même chose

On analog computers, such direct mapping from real-world phenomena/objects to analogous phenomena/objects (and conversely), is generally called 'simulation'

[edit] Code snippets

How about some simple code snippets to showcase basic differences between OOP and the alternatives? — Simetrical (talk • contribs) 22:04, 11 January 2006 (UTC)

Unfortunately, coding styles are so various, the examples would be trivial or, worse, caricatures of the different styles. Myself, I have been using what I would call OO-flavored code (because of my analog background and real-time applications career) over at least 40 years — well before coders discovered OO and OO languages were invented. (But, it's real hard using macros in assembly language or using Fortran II. In the latter, you can't even fake re-entrancy, so object "instances" are not possible.)

However, you might suggest external references illustrating coding styles. — >normxxxtalk — > email 22:03, 13 January 2006 (UTC)

[edit] Edits to lede

Normxxx had some problems with a version of my rewrite. Im fairly good at editing and rewriting, and the article definitel needed it. But I am more than willing to defer to experts on any specifics, as long as experts defer writing to expert writers. -MagnaMopus 01:00, 9 February 2006 (UTC)

[edit] OOP and RAM

"As procedural programs were based on solid-state computer architecture (ie. stacks, punchcards, etc.), OOP formed due to the development of random-access memory (RAM), which allowed for direct addressing (and processing) of specific defined data within a procedural program. Early usage of RAM brought about the concept of the variable, and OOP concepts followed — each incremental development increasing the ability to treat whole subroutines in a dynamic way (ie. like variables), and therefore create languages which were abstracted from the procedural machine code of binary hardware."

The above is totally and wholly untrue! All HOLs prior to OOP were developed on RAM based computers — FORTRAN, COBOL, C, Algol, Pascal, ...

RAM based computers go back to before the 1950s. In fact, commercially available RAM based computers antedate commercially available stack computers!

"The first generation of modern programmed electronic computers was built in 1947. This group included computers using Random Access Memory (RAM), a form of memory designed to give almost instantaneous access to any information stored in memory. Physically they were much smaller than the ENIAC, about the size of a large piano and used only 2,500 electron tubes. Where the ENIAC needed over 18,000. This group of computers included the Manchester MARK-I, EDVAC and UNIVAC, the first commercially available computers." [2]

The concept of the variable derives from mathematics and goes back to antiquity!

Moreover, you seem to be totally confusing functional programming procedures which derived from the structured programming revolution of the '70s with sequenced (machine) instructions. normxxx| talk email 01:46, 9 February 2006 (UTC)

P.S. The development of dynamically linked subroutines had nothing to do wih hardware improvements and everything to do with improved Operating Systems, and the inclusion of Dynamic Linking and Loading software in the runtime libraries of OOP compilers.

P.P.S. A software function is not synonymous with a subroutine (although a function — or an object — may be encapsulated in a subroutine); and I don't believe you can find one reference that will equate functions with objects (and a function object, or functor, is not the same as a function)!

The idea is simply that OOP was programming catching up with hardware, which at least on the surface would make sense. I stand corrected on a couple major points, with regard to the second paragraph that was almost entirely an interpreted connection between OOP and hardware. That doesn't change the fact that the lede needs improving, and done so in the general writing direction which my edit outlined (albeit with some corrections. ;))
I'm looking at programming objectively (as someone new to it), and in that regard I note that experts will often make two interpretive mistakes : They 1) write too expertly, relying on terms which themselves need reference and definition, or 2) they attempt to write too amateurishly or even in a somewhat personal style, failing to make direct linkages to parallel or complimentary (contrasting) concepts. The OOP concept still needs to be tied back to concepts in architecture, otherwise it floats too much on either 1) non-specific language or 2) equally advanced concepts (linking) which have enourmous depth in their own right. The current version is an odd mix of both amateurish writing related to advanced (floating) concepts. Particular points I get from your comments are:
  • Your explanation regarding the importance of systems, compilers, and linkers seems quite definitive, and likewise this may and not too fine a distinction to mention in passing in a basic overview of OOP with respect to working computing history (1950s onward).
  • I way overstated a connection between OOP and hardware by failing to note important milestones along the way - OSs and linking.
  • I was overstating the connection between a subroutine and function in a way which implied them to be synonymous. Rather I had thought them to be similar but distinct, as related to or representative of the paradigm shift from S/PP to OOP. The term "routine" would seem to originate from the procedural paradigm, wheras a function would seem to indicate a dynamic paradigm.
Its obvious that you have some expertise, and it likewise seems likely that you will find it easier to wholly revert, rather than specifically correct other edits I may make. Thus I will limit my contributions to making abstracted points here, and I humbly suggest you might start to improve the article by restating the opening to say what OOP actually is ("paradigm" doesnt suffice), primarily by including the important contrast between it and its conceptual opposite; even if that opposite can be disambiguated by finer terms. -MagnaMopus 21:24, 9 February 2006 (UTC)
What you wrote was not a generally worthwhile idea with a few factual errors. It was completely wrong to the point of being utter nonsense which happened to use a few words relevant to the subject, albeit mostly incorrectly. There was not a single correct statement or idea worth saving. Normxxx was correct to revert it. I'm sorry to be so blunt, but you're asking why he reverted rather than correcting, and removing what you added is correcting the article.
There's nothing wrong with writing in an article in which you are not an expert in the field, but you should be very careful to check and cite your sources. And if you're not sure about something, you might consider asking on the talk page first.
If you're looking for sources for learning, I have a couple suggestions: (1) Object Oriented Software Devleopment, by Bertrand Mayer, and (2) "The Quarks of Object-Oriented Development," by Deborah J. Armstrong, in this month's Communications of the ACM (Vol. 49, #2) --Craig Stuntz 21:41, 9 February 2006 (UTC)
All you say is true, and yet the article still sucks for the reasons which I describe. -MagnaMopus

[edit] Too much jargon

For the non-programmer or the novice programmer, the explanation of class ond objects has too much jargon and confusing terms. Can someone expand and simplify that part? I read it over and didn't get what the author was trying to say. Plus, the () after "bark" looks bad and isn't explained. Adam850 00:31, 18 February 2006 (UTC)

You are undoubtedly right about the 'jargon' — but, each of these terms is linked to a fuller explanation (hopefully less jargon filled) and it is very difficult to replace the jargon with informal English and keep the definition reasonably formal — without using an awful lot of words, which can get confusing in itself.
I tried to make changes to bark() to answer your objections. Does it make it clearer? I also re-edited "class" and "object"; hopefully to make them more understandable. normxxx| talk email
Adam850, you may try to start by Object-Oriented Modeling. If the issue is not yet clear, it is our burden. Please let me know.Connection 01:14, 8 March 2006 (UTC)

I disagree with Adam850. I think some measure of jargon is unavoidable, and I did not find the article to be more jargon-laden than necessary, at least not on the whole. The initial explanations of class and object did not seem problematic at all.

(In fairness to Adam850, evidently the article has already changed since he wrote his comments. For example, this "bark()" illustration is no longer present at all. So it may have been more jargon-laden previously, before I ever saw it.)

Interestingly, I did come across two specific instances of jargon that at first struck me as unnecessary: "antipattern" (under "Possible programming mistakes") and "impedance mismatch" (under "Critique"). However, after looking each of them up, I concluded that their use here does serve a purpose.

While mistake or pitfall would be clearer and simpler and more familiar than antipattern, and conflict or tension or discrepancy would be clearer and simpler and more familiar than impedance mismatch, each of the words in question does in fact convey some additional meaning that the others do not -- in the case of antipattern, the sense of the mistake being an instance or example of a larger type or category or family of related mistakes, and in the case of impedance mismatch, the sense of the underlying nature of and reason for the difficulties encountered. Therefore, I now think that antipattern and impedance mismatch should be left in. However, I did take the liberty of adding a couple of non-jargon rough equivalents, so that a reader who has never heard of an antipattern or impedance mismatch before may continue reading without having to stop and look them up.

-- BinaryBill 15:32, 8 April 2006 (UTC)

[edit] Polymorphic or Overloaded?

Just as a note, wont it be clearer to split up Polymorphic definition into Polymorphic and Overloaded?

In my lectures, I have been tought the following terminology:

Polymorphic - functions, which are intended to work for any class, and which can be extended to work for new classes. An example, can be an "equation function" or function, which transforms a given data type to a string.

Overloaded - functions, which are intended to work for classes, which belong to given type class (interface). For example, we can have a type class (interface) called People, which defines a person by holding her/his name and age. However, we can also have Student and Lecturer types, which can have a few entries of their own, but will both have name and age. So functions defined for type class (interface) Person are overloaded - they are intended to work for all classes, which belong to the Person type class (interface), but aren't polymorphic because they aren't generalised enough to be made easily compatible with other data types / classes.

Forgive me if I am using the wrong terms, I hope I managed to get across the main idea of what I am trying to say. SnegoviK 20:35, 24 February 2006 (UTC)

What you're calling "overloaded" (but see note below) is just inheritance. Both Student and Lecturer inherit from person, so its public properties are still used. Some frameworks allow you to declare a property such as age as "final" indicating that it cannot be overridden by a subclass, but this isn't really a property of OO. Also, inheritance and polymorphism are different.
But "overloading" is generally used to refer to two methods with the same name but different signatures (parameter lists), not what you're describing above.

In Java and C++, "overloaded" refers to a mechanism that allows the selection between method definitions at compile time. It has nothing to do with inheritance. The mechanism for polymorphism in those languages is unrelated.--Donaldino 18:47, 14 November 2006 (UTC)

"Polymorphism" means two classes can react differently to the same message, full stop. Although it's commonly implemented via inheritance, this isn't necessarily the case. For clarity of understanding OO in general as opposed to certain OO systems in particular, it's important to keep these two concepts separate. --Craig Stuntz 21:22, 24 February 2006 (UTC)
Note that there are other definitions of polymorphisim (in programming). Also, it is not the classes that react, but objects. If you do not understand the difference between classes and objects, I hope you do not attempt to edit the OOP page.--Donaldino 18:47, 14 November 2006 (UTC)

[edit] OOP as a Methodology

Gentlemen, and Ladies, regarding the discussion above about OOP as "Object Theory", I believe now it is a time to check OO Modeling and Design promise. In the flourishing time of the proposed Rumbaugh's OMT, Use Case, etc, the understanding was to offer a "Methodology" to translate a view of the real-world application domain into a functioning code. This raised the challenge of Class Persistence.

However, the only workable Class Persistence today is a reflection of the Object Attributes into a Database. This created, I think, the n-tier paradigm, as real-world application domain data are stored in a separate tier.

True OOP today, ie, creating Class definition within code, is only used to reflect the GUI and other programming constructs (storing User selection, etc). Which is not the intention, I believe, of the early so-called Object modeling languages, or the Unified Modeling Language.

To conclude, the coverage of OOP should be arranged to reflect in part OOP as a Software Engineering Methodology (development stages from Requirements, to Analysis, to ...); and in part as a Programming Paradigm, that covers encapsulation and other Programming Language aspects.01:00, 8 March 2006 (UTC)Rafik Ghabbour

After separating these two threads, we may then discuss the issue of Theory or not. This is urgent, as it serves as placeholder for other contributions.

Um, have you looked at Object-oriented analysis and design? The last thing we need is yet another article on that subject! The sheer number of proposed merges is, well, impressive. --Craig Stuntz 02:19, 8 March 2006 (UTC)
The aticle I currently see is a mess with open gaps. Merges into Object-oriented analysis and design runs against wiki general philosophy. For the latter, we need streamlining and proper links. Back to this article, new contributions are made impossible in such a mess. Let's wait to see more comments on the validity of the idea. Long live Ireland. ;) Connection 08:30, 8 March 2006 (UTC)
----
CfC. I am planning a new article on Methodology, in the sense of covering mapping of OO Model Specification (OMT, UML, ...) Constructs into code. That is, not in the sense of Methodologies (software engineering). It is an extension of Software development process#Process Activities/Steps. Comments Please. --Connection 21:34, 8 March 2006 (UTC)

[edit] OO vs. Imperative

This paragraph is vague and not understandable. It also seems biased. It should be either removed or enriched with facts:

Object-oriented features have been added to many existing languages during that time, including Ada, BASIC, Lisp, Fortran, Pascal, and others. Adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code. "Pure" object-oriented languages, on the other hand, lacked features that many programmers had come to depend upon. To bridge this gap, many attempts have been made to create new languages based on object-oriented methods but allowing some procedural features in "safe" ways. Bertrand Meyer's Eiffel was an early and moderately successful language with those goals.

[edit] Matching Real World

I'd like to suggest revision of this section, which discusses the proposition that OOP eases modelling of 'real-world phenomena/objects'. It appears to restrict the benefits of this approach to models of physical objects, pointing out that 'many domains ... have no substantial physical counterpart'. This misses the point that any computer model of the 'real world' is of necessity an abstraction. This is as true of a vehicle simulator as it is of an investment management system.

Countersubject 12:11, 26 May 2006 (UTC)

I tend to agree. The section has a "he said/she said" feel which doesn't really fit in an encyclopedia, in my opinion. --Craig Stuntz 12:53, 26 May 2006 (UTC)

[edit] FACTOR and OOA&D

Factor formerly contained this text:

an acronym for Functionality, Application domain, Conditions, Technology, Objects, and Responsibility in the OOA&D method

OOA&D redirects here, but this article says nothing about this acronym (or OOA&D, for that matter). It looks like we're missing information. --Smack (talk) 18:00, 18 July 2006 (UTC)

[edit] Cleaning Up Critique Section

Pehaps the critique section should be divided into sub-topics with a pro and con section for each. Rough draft:

  • Structural
    • Hierarchies and the "real world"
    • Navigational (networks of objects and object pointers)
    • Set-theory proposed as superior or equal to hierarchies and navigational
  • Behavioral
    • OOP tends to present a behavioral interface, but declarative (data-centric) interfaces allegedly have more "maths" and discipline to them.
  • Database
    • Schemas and classes allegedly overlap too much
    • Wrapping databases allegedly will result in reinventing features already offered by databases and creates unnecessary layers that translate across paradigms instead of increase abstraction.
    • Relational allegedly offers more discipline than OOP (related to "structural" above.)
    • OOP lacks any built-in concept of Collection Oriented Programming.

The problem is that most of these complaints are partially interwined such that it is hard to describe in a non-overlapping way. — The preceding unsigned comment was added by Tablizer (talkcontribs) .

It's getting worse now. It's not only unstructured, but it's filled with un-cited, unencyclopedic, anonymous, he-said / she-said blather. Rather than an endless point-counterpoint between nameless "supporters" and "some critics" we need cited references to criticism from people who actually understand OOP well enough to criticize it. {The problem is that there is no universal measure of "understand". People tend to accuse their opponents of "not understanding" in these debates. --Tablizer 08:46, 9 September 2006 (UTC)} Also, I'd suggest getting rid of the "criticism" which stems from poor developer application of OOP concepts (e.g., over-use of inheritance) as you can code badly in nearly any paradigm; there's nothing specific to OOP about misunderstanding your tools.
I'm tempted to remove everything which is un-cited, but that would leave the section empty, and I don't want to give the impression that there is no criticism or even no informed criticism. But I do think that no information at all is better than verbiage which is misleading and scarcely readable. --Craig Stuntz 17:34, 4 August 2006 (UTC)

To get things started I'm going to make a list of criticisms which I can actually find references for. Not "some guy with a web page," but published scholarship. Here's a start, though I'll add more:

It's hard to find real criticism amongst the deluge of "OOP is bad because I wrote this demo app which badly misunderstands it" or "OOP is bad because my way is better" junk, but I'm going to keep digging up citations and probably replace the existing section from scratch when I have a reasonably well-rounded body of criticism to work from. --Craig Stuntz 18:04, 4 August 2006 (UTC)

You have some very good points. However, I believe that the criticism section should primarily point to the sources that list the criticisms and let the sources do the talking themselves. I am working on a rewrite because I find the current criticism section to be inscrutable. I am going to significantly shorten the section and provide many references.--Andrew Eisenberg 01:09, 8 August 2006 (UTC)
"Pointing to the sources that list the criticisms and letting the sources do the talking themselves" would violate Wikipedia policy. The article should speak for itself because Wikipedia is not a collection of external links. References are to be used so that readers can verify the information in the policy, not as a substitute for article content itself. Text in external links can't be edited by Wikipedia users, so using this as a substitute for article content violates the wiki process. We are writing an encyclopedia, not a web directory. --Craig Stuntz 12:58, 8 August 2006 (UTC)
The problem is that some fuss about such links not being "official research" (which is a dying breed in the web days). The problem is that there is very little official research on the topic. I thus suggest at least some kind of breif attempt to categorize and describe the criticisms. The problem is that it is hard to sum up the complex, multifaceted arguments in breif paragraphs. Thus perhaps simply mentioning the criticism categories with links may be the least of evils. --Tablizer 08:46, 9 September 2006 (UTC)

One other thing: I think that discussion of OODBMSs and the so-called "object-relational impedance mismatch" should be in its own section rather than part of the "critique." Getting OO to play nice with real-world databases is more of a common programming problem than a criticism per se, and there are a number of common solutions ranging from OO persistence layers to Language Integrated Query. --Craig Stuntz 13:07, 8 August 2006 (UTC)

But some see the difficulty mapping between them as a reason not to use OOP. It allegedly does not "play nice" with relational. There are a lot of complaints about the tediousness of OR-mappers. Other non-OO techniques allegedly have fewer problems with mapping because they generally let the database house the "noun model" rather than application code. UML diagrams that resemble ER-diagrams are an example over the conflict of which side has responsibility for "noun modeling". Other paradigms tend to "give in" to the RDBMS rather than try to wrap it away. --Tablizer 08:52, 9 September 2006 (UTC)

I've remove the whole Critique section because it so poor it is beyond repair and littered with spam links. Martin Spamer

Perhaps we can form a new topic titled "OOP Controversy" or the like. Other topics have done such. That way long points and counterpoints can be made without cluttering the primary article. --Tablizer 06:51, 17 September 2006 (UTC)

The correct place to have criticism would be here, not in a POV fork. The problem with the old criticism section was not length -- it was actually quite short -- but that it was a collection of scarcely-coherent weasel words which were often un-cited, sometimes contradicted by their "sources" when they were cited, and frequently used un-verifible sources, i.e. some guy with a web site rather than peer-reviewed literature. Some of the "criticisms" faulted OOP for failing to solve every problem in programming, something which no paradigm will probably ever be able to claim. I did start collecting good citations for a new criticism section elsewhere on this page, but have not had time to finish the project. Others are welcome to contribute to the list. --Craig Stuntz 16:36, 17 September 2006 (UTC)

Maybe simply ask: Where is the evidence that OOP is a good thing?

(Of course, we would first have to define what OOP is.)--Donaldino 19:11, 14 November 2006 (UTC)

[edit] Subject/Object oriented senteces

Regarding the grammatical examples:

  1. Subject-oriented: The Sales Application saves the Transaction (6 words)
  2. Object-oriented: The Transaction saves itself upon receiving a message from the Sales Application (12 words)

I find it amusing that the object-oriented sentences in the examples contain exactly twice as many words as the subject-oriented sentences. So much for simplification. ^_^

  • Those are really bad examples anyway. Nobody would really write requirements such as what is offered as the Object-oriented version. Despite the fact that OOP focuses on the nouns, it does not change the source requirements (which seems to be what is being offered there) in any way, only the analysis of those requirements changes. So the whole examples are very weird, in my opinion. In my opinion, there is no "translation" of "subject-oriented" thinking into object-oriented thinking. It would be more appropriate to say that in OO analysis, nouns from the requirement statement are analysed *first*, which produces the conceptual model, then the concepts identified are populated with actions that they can perform. Only the *order* of analysis steps is different. The result, of course, is much different, because different things are considered as "big". esap 20:32, 2 August 2006 (UTC)

[edit] Panacea

While perusing the WANT ADS recently, I concluded that there is an orthodoxy and prejudice grown up in favor of OOP/OOA/OOD. I suppose there are reasons for this. Objects do partition a solution into what can be readily understood interacting parts (no guarantee). Reasonable system design can result from thinking about how a solution can be constructed of well-defined interacting objects. In practice, however, when formal OOD takes place, the reasons each class was put into the solution are usually lost. That's because nobody does documentation anymore. Writing about software is not fun. Maintainers are left with the hen scratchings left behind when the original programmer is long gone. Use of good naming can help maintainers understand programs that lack documentation. But that probably isn't enough. Plenty of commercially successful and reliable programs have been written without object-orientation. Ergo, OO is sufficient, but not necessary. One might conclude that OO is a security blanket for frightened IT managers. The aphorism "Nobody was ever fired for buying from IBM." can be updated to "Nobody was ever fired for requiring object orientation." And what about metrics that show this OO implementation is better done than that OO implementation? OO is better than nothing, and it does have an allure, but it does not prevent lousy programming.--70.108.194.103 18:14, 30 July 2006 (UTC)

Maintenace is a vital topic for every big project. The theory say that NO-OOP project also can have a good level of maintenance but the opposite is not always correct. A OOP project can be too bad to keep updated like a non-oop project. In fact some "features" of OOP are the guilty of it, encapsulating a code with bugs, wrong names, the "object fanatic" syndrome (to maintenance hundred of object IS NOT FUNNY).

[edit] "OOP as a new paradigm, point of view, and marketing term"

There are a few worthwhile bits and snips in this section, but it's so big, so filled with vague restatements of stuff which appears elsewhere in the article, and so badly organized that I'm not sure what to do with it. So I'm asking here for which of this material other editors feel is worth preserving. My inclination at the moment is to kill the entire section, but if there's something that someone else feels is really valuable here I'd like to know about it. --Craig Stuntz 16:32, 8 August 2006 (UTC)

Thanks for taking this on. I just struggled with the same thing in the criticisms section. In the end, I just decided to scrap it and start new. My general take was that there is so much good information out there on OOP both positive and negative that our job here should be to cite it, give links, and categorize them rather than to ramble on trying to summarize what other people are saying.
That being said, I don't even know what the point of this section is. I *think* it's trying to compare OOP to other methodologies, but it never explicitly says this. I think that would be a valuable section to have.
The text, I think, can go. But, the different sections could give some structure and a starting point of the different paradigms to compare to. --Andrew Eisenberg 17:13, 8 August 2006 (UTC)
Let me suggest that we should rename everything containing the word 'critique'. I think we shouldn't attempt to evaluate "good" vs. "bad" properties of OOP, it would be better to just describe what its properties are, whether good or not, and how they are different from other paradigms. Call them 'solutions' (e.g. OOP solution to problem P and functional solution to problem P). It's important to identify what is the goal, requirement or problem that is being solved when discussing good or bad properties of a solution. esap 17:11, 10 August 2006 (UTC)
I tend to agree. Most of the so-called critique seems to "argue against" the idea that OOP is a single solution for every programming problem on the planet. But I don't know of any methodology which can fairly claim that. To me these so-called critiques are straw man arguments. --Craig Stuntz 17:17, 10 August 2006 (UTC)

OK, nobody has defended this section in three months, so I'm killing it, which will fix the "article is too long" bit as well. --Craig Stuntz 17:41, 15 November 2006 (UTC)

[edit] Common mistakes

Esap (talk contribs) added a list of common mistakes which is good but perhaps too broad. I suggest that mistakes which are common in all forms of software development and neither particularly more or less common in OOP be removed, and things particular to OOP be kept. For reference, here's my view on that, although others may differ:

Common mistakes in general software development
  1. Confusion between levels of abstraction
  2. Confusion between application and platform
  3. Confusion between policy and implementation
  4. Confusion between "uses" and "is-allowed-to-use" relationships
  5. Confusion between run-time and compile-time
  6. Confusion between levels of detail
Common mistakes unique to or significantly different in OOP
  1. Confusion between types and interfaces
  2. Confusion between interfaces and implementations (this is similar to the above and in some languages identical to the above)
  3. Confusion between function application and message passing
  4. Confusion between aggregation and inheritance
Hard to classify without clarification — presently too vague
  1. Confusion between types and roles
  2. Confusion between concepts and classes (if you mean that decomposing problems into classes can be tricky then that's true but there are very strong parallels in any modular development, not just OOP)

Anyway, I think it's a good topic for the article, so please don't take my feedback as negative. I just wanted to talk about stuff before I went chopping things up.--Craig Stuntz 17:54, 11 August 2006 (UTC)

I agree that maybe it's too broad for OOP article. I tried to list things that I have seen people be confused about when discussing OOP. Many of them are clearly more general than just OOP things. For the vague parts, here's some clarification: With confusion between 'types' and 'roles', I meant the problem some people have when classifying things with class diagrams, where people use just classes (which they confuse with types) and associations, but forget about role (types), and instead attempt to cover for this by using inheritance (inventing a separate class that inherits from a common base for each role), or try to make objects change their type dynamically, or some other overly complex approach to modeling. The references I put in were intended to clarify the meaning. With confusion between 'concepts' and 'classes', I meant the distinction between analysis and design concepts, and possible blurring between those, e.g. where analysis concepts will include concepts needed only because decisions were made for technology or other internal development reasons before modelling e.g. things you are likely to see in design-level class diagrams, or where OO designs are used like they were requirements. It's possible my choice of words in these cases were not the best possible. I'm open to all improvement ideas. Please just make the changes in the article. Thanks for the comments! I changed the wording on some of the entries to make them clearer. esap 17:02, 23 August 2006 (UTC)

I think the section on common mistakes should go somewhere else. This stuff is only for someone who is already doing OO programming, and it is probably hard to understand without examples and more explanations. Besides, the OOP article is already too long. --Donaldino 19:05, 14 November 2006 (UTC)

[edit] Encapsulation

This paragraph spends alot of time on abstract explanation, explaing the concept, but gives no reason for it. (Im a PHP programmer) why would I want to hide propertiess in classes from other classes? Surely they would all be held on a secure server? Why should you hide attributes? This should be explained.

  • Common Mistakes

This section is very amiguous, i would think that short implications of these examples should be provided. eg. I am close to getting my head around OOP but none of these examples make any sense.

I've added implications of most of them. esap 17:23, 1 November 2006 (UTC)

in general OOP is an abstract concept, and this example should cite some real-world applications to allow the user to develop some context... giving them the ability to appreciate the wider scale implications of the method.

Basically I'm tempted to buy a book on the subject, but I know that all I would need is a leaflet. --Anon.

For starters, one could want to encapsulate in an extensible program: what is a sandboxed environment but encapsulation of sorts, if that metaphor works for you. Similarly, what if one does not trust one's fellow programmers to only use the provided APIs and interfaces? More to the point, think about the Unix commandline: all the commands work together so well because each is basically a black box which says it will do something, but not how. Don't functions work the same way? They say they will do something, and take an input and return an output - but any calling functions or programs have no idea how they did it, and so improvements can be done separately and relatively independently. (Does any of that help you out?) --Gwern (contribs) 01:41, 7 October 2006 (UTC)

[edit] Fundamental concepts - CONFUSION

I believe most of these explanations are SO abstract, that some one would not be able to understand the concepts behind them with more concrete examples. Perhaps having a subjective program example and then demonstrating how it would translate to OOP will give readers a better logical base for undrestanding the OOP concepts. I say this because, for me the logic of subjective programming "flows", in the sense that it is based on simple understandable steps and statements and not on compound sentances where all of these steps and statements need to be understood and conglomerated into a whole before the idea sets into understanding, much better than OOP logic.

For e.g. "A class should typically be recognizable to a non-programmer familiar with the problem domain, meaning that the characteristics of the class should make sense in context."

One needs ample circumstantial experience grounded in examples, & real-world situations to understand a context with which to then create an example for oneself. This example, will be used to help he/she understand what the original statement was attempting to simplify by abstraction and use of abstract language such as: "problem domain", "characteristics of the class".

I know this is all too philosophical, and perhaps a rant, however I believe that if, and when, I read a section of the book, and I am confused I should comment on it and suggest a possible improvement. I could be confused simply because I don't have a good enough understanding of programming yet, however isn't teaching such individual the point of this Wiki-Book?

Rivanov 17:59, 1 November 2006 (UTC)

OOP is technical. I'm not sure that you can find definitions that are completely understandable for someone without a programming background. Even for students with a programming background, it takes a course to teach the concepts (sometimes a course isn't enough).

I suspect that some of the difficulties with the current article are due to the fact that people have differing opinions on what OOP is. IMO, the best way to write a general OOP article is to admit that there are conflicting views (and explain each view as well as possible).--Donaldino 18:58, 14 November 2006 (UTC)

I agree Rivnov. Its a really dumb example. Yes, of course its technical, but OOP isn't intended to be as abstract as the example indicates. A object that "barks"...all I can say is "what the hell?" Please change it someone, its quite ridiculous. Don't get me wrong, I'm all for abstraction. I'm always looking to keep things abstract and generalizable. But the example takes the abstract properties of OOP way to far so as to make the section confusing to anyone that would be at a level where they'd be interested in reading it. Brentt 02:26, 6 December 2006 (UTC)

[edit] Major edit

Hello everyone

After reading the article on OOP and checking through the discussion I've decided to clean up the article. I will explain my changes below.

Comments are welcome. --Donaldino 17:04, 15 November 2006 (UTC)

Okidoki. I started by cleaning up the overview and adding a reference.

I wont touch the section on fundamental concepts now. It's not good, but compared to the rest it's not so bad.

Edited the history section. Removed paragraphs on games, Wirth, adding OOP features to other languages, UML, scripting.

Removed the section on common mistakes.

Removed section on formal definition.

Wondered what had happened to section new paradigm/marketing term. Seems that someone else removed it. Good job.

Will fix the section on fundamental concepts and add more references later.

--Craig Stuntz 15:19, 16 November 2006 (UTC)== Large scale deletions == Large scale deletion is not the way to go if you think the article is too long. Methodically condense sections to preserve valuable information, don't blank. Hu 21:03, 15 November 2006 (UTC)

There was essentially nothing worthwhile in the section I removed. It was unreferenced, unencyclopedic blather. Furthermore, I brought it up here three months ago and have seen nothing but support for the idea of removing it. "Methodically condensing" sections without valuable information is what I did. The article as you reverted the change is close to unreadable. --Craig Stuntz 01:57, 16 November 2006 (UTC)
Great. Now you're reverting again. That's productive. What makes you think that deleting off-topic blather like how many printings a popular book about OOP has had is any more destructive to the article than writing it in the first place? Unlike the people doing this work, I see no positive contributions to the article by you in recent months, but you seem very free to undo what others do. Removing off-topic material and working to make an overly-long, misleadingly-written article readable is a positive contribution. Mindlessly restoring the un-cited, and often just plain misleading paragraphs which have made up this article in the past is attacking the work of those who are earnestly working to improve it.
Take a good look at the contributions of the folks you are reverting. We are not vandals. Unlike you, we have worked to improve the text of this article. If you endlessly revert our changes, you may succeed in driving us away from the work we have done to improve the accuracy and readability of the article, and you can have a bad article as your prize. --Craig Stuntz 01:57, 16 November 2006 (UTC)

I understand, but I think you over-dramatize. The truth is that it was a large scale deletion by a user who never worked on any Wikipedia article until 9 (nine) hours ago (Donaldino). After the fact, you re-reverted. I don't see a lot of discussion, in fact none until Donaldino's announcement yesteday, which was not discussed. and I don't see any agreement to simply delete large sections. Three months ago you suggested deleting the smallish Common Mistakes section, and there might be some merit in that suggestion. But Donaldino (and you, by re-revert) deleted other sections and other larger sections, wholesale. Hu 02:15, 16 November 2006 (UTC)

That's not right. By far the greatest number of words deleted (and thus the greatest number reverted by you) were deleted by me, and I did raise the issue for discussion here three months ago. There were zero, repeat zero objections, and one person thanked me "for taking this on." Now that I've flagged the misleading and un-cited bits in that section maybe you can see why. It's a pity there isn't a tag for things which are tangential to the subject of the article, or I could flag those, too.
What, precisely, is there in the section I deleted an you reverted which you feel is (1) true, (2) either cited or so indisputably true that citations aren't needed, (3) encyclopedic subject matter -- something someone looking up an article on OOP would want to find -- and (4) well-written. Having just combed through it for what must be the tenth time now, I really can't find it.
As for Donaldino's deletions, true, he didn't raise most of them in advance. But I have a hard time calling the "mass deletions." He deleted a sentence here and a sentence there, for the most part. He did delete one smallish (in terms of word count) section, but he discussed it here first (yesterday) and I think you can make a pretty good argument that it was overly broad and not written in an encyclopedic style. Nothing he deleted was cited. I have a hard time dismissing his work as un-considered or vandalism. --Craig Stuntz 02:36, 16 November 2006 (UTC)

Don't have time to go into detail now, but I can honestly not see that I removed anything of relevanec to the OOP article. I went back to check earlier versions of the OOP article. The January article was much better than the current one. The current one has accumulated a ton of irrelevant stuff. Sure, people have written games in C++, just like many other applications have been written in C++. So what? The common mistakes would have to be expanded into a long article if it was to make sense to anyone who doesn't already know what it is supposed to say. Formal definition. Understand that this is some people's pet thing, but can you really argue that it belongs here. Same with the stuff on Wirth. I thought that the material on "other languages" added very little.

I had planned to clean up the part on fundamental concepts, add references and fix other parts. However, if you insist on keeping the article in its current (reverted) form, I will stay away from the article.--Donaldino 09:00, 16 November 2006 (UTC)

I hope you don't let Hu's reverts drive you away, because I think you're doing good work here. In my opinion it is a far worse attack on the readability and authority of the article to add paragraphs full of tangents, un-sourced assertions, and weasel words than to remove them. However, there is one thing you must do to avoid setting off people's vandalism detectors, and that's to use edit summaries when you alter the article. Looking at Hu's contributions it seems he does a lot of vandalism cleanup and he may well have mistaken your changes for vandalism simply because you are new and your edits all lack an edit summary. However, I think if he'd looked a little further at (1) this talk page, (2) the non-deletion changes you made before you started deleting the tangential stuff and (3) the factual accuracy and direct applicability of the deleted material to an encyclopedia article on OOP then he should have come to a different conclusion. --Craig Stuntz 15:19, 16 November 2006 (UTC)

Thanks. See my comments on the article below.

OK, this is long, but so is the OOP article.--Donaldino 18:29, 16 November 2006 (UTC)

I have had a rather low regard for Wikipedia, but recently when I encountered a Wikipedia article on a Google search I found to my surprise that it was actually rather good. I then checked some other entries and liked them too. I then clicked on a link to the article on OOP.

The warnings that the article was too long and lacked citations did not worry me. After all, it could still be good, right? However, as I pressed on I found that it was not. The article was of a much lower quality than the other articles I had looked at. It started with some boilerplate stuff on methods and classes and abstraction that was basically correct but rather badly organized, Then it got worse. Most of it looked like an incoherent jumble of things that were only vaguely related to OOP. I pretty soon gave up.

For some reason, I then clicked on the "discussion" tab. The first thing I saw was a discussion on a paragraph that erroneously claimed that Simula did not have inheritance. But the issue being discussed was not the factual error, but a grammar error in that sentence! As Simula is rather important in the history of OOP I'm rather surprised that anyone that did not know the basics of that language would set out to edit the historical section. If anyone cares, here is a couple of references.

Extensibility in Simula 67
Jean B.Ichibah

The development of the Simula language
Kristen Nygaard, Ole-Johan Dahl

I don't have any more details now. Both articles can be found at ACM's digital library. Meyer's book on OOP also discusses Simula.

Anyhow, the discussion page did not inspire confidence. I wrote a couple of comments on stuff that I really disliked with the current article. I then looked around in the history and discovered two things:

a)

The older versions of the OOP articles were much better than the current (Hu) one. It seemed that the net result of the contributions during 2006 had been to make the article worse.

b)

I found that the incorrect statement regarding Simula had been around since late January. Not something that inspired confidence.

Next day, I got a printout of the OOP article to get a better overview. I read through the sections that I had previously thought to be irrelevant to see if they made more sense now. None of them did.

So the rest is history. I removed the crappy stuff. Hu restored it.

Maybe I should have spent more time discussing why the crappy stuff was crappy before I removed it

Below I will try to explain why I think the crappy stuff is crappy. I will refer to the version restored by Hu on November 15th as the Hu version.

The fundamental concepts section of the Hu article is factually correct, but spends too much time talking about subclasses. Giving an example is OK, but don't let it blend in with the definition. As it stands, a casual reader might be lead to thinking that it has to do with dogs and chihuahuas. It would be better to give an example in a diagram. Also, I object to the Armstrong reference. There are better sources, for example Booch's book.

The history section is not so bad. There is a rather weird sentence:

"Simula not only introduced the notion of classes, but also of instances of classes, which is probably the first explicit use of those notions."

that I tried to remove, not because it was wrong, but because it did not make much sense.

Hu's version further contains the following remark, which I have already commented on:

"(Thus, Smalltalk was clearly a major move beyond the analog programming models, which made no use of "instances of classes," or even Simula, which made no use of the "inheritance property.")"

I felt a little unhappy about the paragraph on GUIs but it seemed basically correct, and a section on GUIs certainly belongs here.

I did not see any point in having a section on games. Sure people have written games in C++, but C++ has been used in a very wide range of applications. Should we mention each one? Should there be sections on the applications of other OOP languages as well? It wouldn't be hard to write ten paragraphs for each of the major OOP languages, and I don't think either of them would make less sense than the current one

I also removed the paragraph on Wirth. I'm sure he is a great guy, and has done great research. But the paragraph does not say much. Oberon is different from Smalltalk and C++. Wow.

The next section is similar:

Object-oriented features have been added to many existing languages such as...

Strangely, the paragraph does not mention the most well-known among the hybrid languages, C++. (Objective C is also not mentioned).

Further, Hu claims that these languages often have problems with compatibility and maintainability. I have not heard such criticism against any of the languages mentioned. C++ is often criticized but it is not mentioned here. Either way, there should be some reference. I suggest that the paragraph is removed.

(This paragraph reminds me of a passage in Meyer's book, where he criticizes C++ (under the disguise of "hybrid languages"), with the implication that his own Eiffel language is better. I suspect that someone summarized that passage, and someone else removed the mention of C++.)

The final paragraph (Just as procedural programming...) does not say much (frankly I'm not sure what it is trying to say). I suggest removal.

The section on OOP in scripting. OK, there are object-oriented scripting languages. So what? Maybe there could be a section listing all OOP languages, and then you could mention them there. The current section does not do much more than that a) state that there are OOP scripting languages, b) list a few, and c) ramble about the document object model. Suggest removal.

It certainly makes sense to say something about design patterns. But the second paragraph? Can you really defend this, Hu?

As of 2003, the book was in its 26th printing. While it can make for dense reading, even for experienced programmers, and has been superseded in practice by a spate of more recent, accessibly-written books, it is regarded as an important source not only for design patterns but also for the object-oriented design guidelines in its initial chapter.

The section on Common mistakes. Some textbooks on OOP try to talk about good programming style, and since it is easier to point to errors they sometimes also mention mistakes. However, each mistake would need an extensive explanation and a few examples to be comprehensible to anyone who is not already familiar with this. A section that really explained all this would be longer than the current (Hu) article on OOP.

Section OOP as new paradigm, viewpoint, and marketing term. I wanted to remove it. Craig Stuntz beat me to it. Hu restored it. If anyone is interested I can explain in detail why I think this section should be removed. For now: Some parts repeat what was said in the fundamental section. Other parts are simply wrong, There are some vague parts that are neither true nor false but say very little. It says that OOP languages with dynamic typing give rise to designs that are different from those with languages with static typing. Certainly true, but this passage does not provide the reader with much insight. The passages on abstraction and reuse are similar; not completely awful, but not very good either.

The actor model. What it is doing here, Hu? This section is pure hogwash. If required, I can explain in more detail.

Hu's section "OOP with procedural languages" is strange. There was a previous section starting with "Object-oriented features have been added to many existing languages ..." It seems that the two sections should be put together, if they are not deleted. In my opinion, the section adds very little value and should be deleted.

Section "Static typing". This is of course related to a passage in "OOP as a new paradigm". Strictly speaking it is not incorrect, but adds very little value. Suggest removal.

The section on prototype-based models is also very questionable. It might be reasonable to have a one-paragraph explanation and a reference to prototype-based languages.

The section on formal definitions. If there was an article on "Formal definitions of OOP" one might consider mentioning it briefly and providing a link.

Weirdly, the section "Evidence and criticism" starts by talking about databases.

The second paragraph, "Reliable evidence" is correct. I think there should be a section explaining the different views on OOP and this could be a start (but don't talk about psychology).

The quotations are OK. It would be nice to include them and a few more in a section "Evidence and criticism".

Someone asked for references. I think a good start would be Booch's book. Besides historical references, it contains most of what is needed for an article on OOP.

I briefly considered changing the title of this section (on the talk page) to "Hu's in charge?"--Donaldino 18:29, 16 November 2006 (UTC)

[edit] Fundamental Concepts section...ack!

Someone please change the fundamental concepts section to something that uses a real programming example. The "dog" example is terrible. It will be much easier to understand if you use a example that is dealing with data. Sure maybe you want to keep it general, but every OOP language uses data...so don't use an example that is so general it doesn't include data. Were not trying to explain OOP to gods making animals, we are trying to explain it to would-be programmers that want to learn how to throw data around. Brentt 02:21, 6 December 2006 (UTC)