In contest to NygaardClassification ---- Nygaard and Dahl may have invented a formal programming language with classes, but '''they were not the ones who coined the term "Object-Oriented Programming."''' That distinction belongs to AlanKay, the creator of Smalltalk. Kay described his language as "Object-Oriented" because unlike Simula, in Smalltalk, ''everything'' is an object, and every action was accomplished by sending messages to objects, so the language was accurately described as being ''oriented towards objects''. Why is this so difficult for you to understand? Do you just like Nygaard's definition more, because it's roots are traceable to mathematics and engineering, instead of Kay's definition, which is rooted firmly in biology? * So they invented the '''thing'''. AlanKay came up with a glitzy name for that thing which they invented. Not to mention that Simula was a production level language with real application in the 60's, while Smalltalk was a lab toy for some time. ** AlanKay come up with a glitzy name for a language '''consisting only of those "things"'''. There is a difference. A language can have objects and not be object-oriented just as a language can have anonymous functions and closures and not be considered "functional". *** ''To be clearer, you could say Simula was object based, and Nygaard pioneered objects, however, Kay tacked on oriented to imply that Simula didn't go far enough with the concept. Smalltalk went much further and said "everything" is a message to an object, even things normally considered part of the language like control structures. Kay's distinction is important, and imho, Smalltalk is still the most OO of all languages because of that distinction. Self may actually rank as the most OO now, but I don't know it well enough to comment, however I do think prototypes are more fundamental than classes. The term object oriented belongs to Kay, he coined it, and that phrase literally means "everything" is an object. Under that definition you could say most languages with objects are only object based, while only Smalltalk and possibly self are truly object oriented. Language however, does evolve, and it's quite clear that the common meaning of the term object oriented pretty much includes any language that has objects. Kay may have coined the phrase, but he no longer owns it. The Nygaard definition seems more pragmatic for the real world, and is far more inclusive than Kay's.'' ** ''To be clear, they didn't invent "just a language" they invented object orientation as an approach to writing programs, supported by Simula. If Simula also had things other than objects, it wasn't less than Object Oriented, and it was a better language than Smalltalk which, for example didn't support coroutines.'' ** But they didn't invent the '''term''', Kay did, right? And he says that a language is only OO if everything is an object. If Kay actually came up with the term, then his definition is by far more definitive than anyone else's. -- RyanTheStreetBrawler. I'm at a loss to understand why Nygaard and Dahl get the honor of defining a term they 1) did not come up with, and 2) did not popularize. * Simply because they invented object orientation, they also materialized it in a language that influenced many others, including AlanKay, and that the above definition is also recognized by many other classic books like TheoryOfObjects or StructureAndInterpretationOfComputerPrograms, also the definition is simply '''better''' because it draws a very fine distinction between say OO and FunctionalProgramming (most other definitions fail to). ** Wrong. They invented '''objects''', not '''object-orientation'''. That term was invented by AlanKay to describe his language where '''everything is an object'''. Again, you keep ignoring this simple distinction. ** ''Wrong:) You think they invented just "objects" but in fact they came with a new approach to writing programs. "Everything is an object" does not object orientation make. Object orientation '''is not just a term'''. It is a different approach to constructing programs, and never mind your handwaving, Nygaard and Dahl are recognized (including by Alan Kay) as the inventors of this different approach.'' ** Yes, everything as an object ''does'' object orientation make, because AlanKay came up with the term object-oriented and that's what he says it means. Nygaard and Dahl may have come up with a new approach to writing programs, but '''they didn't use the term object-oriented to describe it'''. You are the one doing the hand-waving. You seek for whatever reason to make these two gentleman the final authority on a term they neither conceived of nor popularized, with the justification being that they were the first to come up with a concept central to it. Your support for them has been militant, and even after the entire basis of your argument (that they were the first) was proven false, you still continue to insist they are the authority anyway. If you like their definition and feel we should adopt it, fine, just say that. But passing it off as authoritative of definitive is both misleading and insulting. [ '''insulting''' ?? to whom ?! ] To say that they get to define the term because Smalltalk uses classes which already existed in Simula makes about as much sense as letting the assembly hacker who first implemented routines define the term FunctionalProgramming. Alan Kay used the term first, so it's his. * Be my guest, use AlanKay'''''''s definition if you feel like it. I don't recognize the term ObjectOriented as property of AlanKay. I don't recognize Smalltalk as the holy grail of OO either. And you are profoundly wrong: subroutines are not the essence of FunctionalProgramming, please read the definition above better. Nygaard and Dahl first recognized the essence of OO, they implemented in the first '''production level''' language, which had some features unparalleled to this day like coroutines. It was an outstanding achievement, for which they are widely recognized, and which influenced all later development in the field. ** You can keep asserting their definition is definitive, but that doesn't make it so. AlanKay invented the term "Object-Oriented", and his definition is certainly no less definitive than Nygaard's, whether you like it or not. ** ''And what would be AlanKay'''''''s definition and how would that be better than Nygaard ? Please bring anything remotely of substance to the discussion. Whether I like it or not, I don't give a damn about your repeated handwaving; that's not the point. This is a wiki page about NygaardClassification, and your personal pleasure or displeasure with it is utterly irrelevant.'' *** AlanKay's definition is essentially MessagePassing, as described on AlanKayOnMessaging. I would argue that it's better than Nygaard's because the Nygaard definition, regarding a program as a simulation of a real or imaginary part of the world, is not very useful outside the specific domain of simulations. (The "or imaginary" clause is a cop-out; how can you construct a physical model of an imaginary part of the world? I'm thinking of my molecular models sets, but even those are a real part of the world, not imaginary.) MessagePassing, however, gives practical advice on how to structure programs, advice that's been later refined (well) into TellDontAsk and (poorly) LawOfDemeter. -- JonathanTang ** ''So how's objects acting on messages different than objects reacting to stimuli as in simulation of a physical system ? The simulation of a physical mechanism defines thing pretty clearly as physical entities have state and react to stimuli, by changing their internal state and sending stimuli to other objects. This is very much different than FP which is opposed to entities with state and opposed to entities that react. That's the smart things about NygaardClassification, that the distinction is relatively clear and is not superficial about things like syntax and implementation mechanism, but about the philosophy of design. Otherwise I can easily post many functional programs I have that are written in Java and conform to any definition of OO, but Nygaard's. They deploy polymorphism, inheritance, objects. Messages are being passed. But they are '''functional''' by their very nature as being designed toward an algebra of stateless entities and composition of operators. NygaardClassification skips the superficial details of syntax and implementation techniques, and goes towards the root of what ObjectOriented is.'' *** MessagePassing can be seen as a generalization of the simulation metaphor, extending it to domains beyond simulations. Kay was a biologist, and his work was based in a large part on how cells communicate with hormones and other chemical stimuli. I prefer MessagePassing because it's ''less'' ambiguous and ''more'' generally applicable; note that the NygaardClassification above mentions nothing about state. You can totally combine MessagePassing with FunctionalProgramming; ErlangLanguage and ActorsLanguage are two good examples. But you could argue that the programming paradigms used when building Erlang systems are much closer to OO than they are to FP. It's easier to switch to Erlang from Java than from Haskell. -- JonathanTang ** That's your own private opinion, that Erlang system are closer to OO. It is irrelevant since Erlangers' favorite past time at ICFP and other conferences is poking fun at OO. Since OO is fundamentally based on state, and erlang is fundamentally stateless, Erlang is obviously much closer to FP. That's why you have the Erlang workshop at ICFP and not at OOPSLA. Actually Erlang is the perfect argument as to why message passing is not a good enough definition for OO. -- Costin Furthermore, the first system to have the notion of classes and objects was actually '''not Simula,''' but SketchPad, a graphical drawing machine made by Dr IvanSutherland in '''1963''' for his PHD thesis, predating Simula by five years: http://en.wikipedia.org/wiki/Sketchpad * And why would you put "system" within quotes ? ** Because it was more than just software. But you didn't address it at all. Tell me, if Sutherland first devised the concept of classes and instances of those classes for his interactive drawing program, does he get to define the term? The fact is that SketchPad predates Simula by '''five years''', and even though he didn't use the term "object" or "class" to describe his system, clearly the two were present. By your reasoning, shouldn't he then get to define the term instead of Nygaard or Dahl? If not, then why should they? ''Well, there's the thing that they developed similar ideas independently. The ideas were not conceived in the year that they made Simula publicly available (that would be 67). In Sutherland's PhD paper which preceded only the public availability of Simula but not necessarily the efforts of Nygaard and Dahl, ideas about classes and objects are just '''sketched''' as "sets of subroutines". Given that Simula was highly influential while Sketchpad was only indirectly through SmallTalk, given that Simula was a production level language used by many programmers while Sketchpad didn't run much at all, it wouldn't be quite right to recognize the primacy of Sutherland with regards to inventing OO, at best we can think fo Sutherland as co-inventor or independent inventor. But even if we do that, where's Sutherland definition of OO -- if any, and how would that be better than Nygaard's ?'' ** Unbelievable. In other words, even though Nygaard wasn't the first, let's make him the authority anyway because some SmugRelationalWeenie likes Nygaard's definition more. By your reasoning AlanKay deserves the right to define any of these terms since he is easily 500 times more well-known than Nygaard, and Smalltalk is easily a 1000 times more well known and widely used then Simula: "Given that Smalltalk was a production-level language that received widespread commercial adoption during the 80s, that there are still vendors supporting Smalltalk, given that it popularized OO as a paradigm and put it on the map, given that many programmers put it up on a pedestal as "the" OO language, it wouldn't be quite right to recognize the primacy of Nygaard with regards to inventing OO." Search the wiki for yourself to see how many references there are to AlanKay compared to KristenNygaard: http://c2.com/cgi/fullSearch?search=AlanKay http://c2.com/cgi/fullSearch?search=KristenNygaard Um, how was Simula highly influential? Compared to what? Costin, you've been hitting up a bunch of pages about OO in an attempt to prop up Dahl and Nygaard and their definition of OO, touting it as the definitive one, all the while encouraging us to ignore any other. It has just been pointed out to you that Nygaard and Dahl were not the first to build an OO system, IvanSutherland was. Your entire argument of definitiveness is based on who came first, and it's now been shown that they did not, in fact, come first. So, in that case, why should we accept their definition of this term, a term which even you admit they did not come up with? Just because the term deals with some concepts they helped pioneer? -- RyanTheStreetBrawler Just because the term denotes a distinct approach to programming that they '''pioneered'''. Their Simula was '''object oriented''' and had a decisive influence on everything that followed: Smalltalk, CLU, C++, etc. Everybody (and AlanKay) cites Simula as a source of inspiration, and nobody disputes that Simula was object oriented. Not to mention that the co-routines that Simula had in 67 are a useful feature yet to be emulated by mainstream OO (including Smalltalk). Their pioneering contribution is widely recognized by everybody but RyanTheStreetBrawler. You can continue to dispute that all you want, maybe on a page of its own RyanTheStreetBrawlerVsNygaardClassification, be my guest, I won't be paying much attention until you come up with something relevant. --Costin Don't try to pin this whole thread on me Costin. I thought you were right, or at least made a good argument for accepting Nygaard's definition of what OO is, until it came out that they weren't even the first to come up with objects like you claimed they were. Then, after that, you tried to downplay the work of Sutherland while at the same time overstating the accomplishments of Nygaard and Dahl. If you actually think Simula is anything more than some obscure academic language, then you are seriously deluding yourself. -- RyanTheStreetBrawler It's not academic since it ran production systems. It had an user group and all that (BertrandMeyer was part of the user's group). So please check your history. Actually if you don't take my word for it, here's the evaluation of BertrandMeyer : ''"Dahl and Nygaard are the undisputed founders of object technology. Their collaboration in the nineteen-sixties led to the Simula languages, culminating with Simula 67 which created a whole new discipline, even if it took another twenty years for the industry at large to understand it."'' ''Who invented the Orange? God? Or the man that found it and named it?'' ---- To all the brave guys above who posit AlanKay was something in profound disagreement with NygaardClassification, can you come up with one instance where AlanKay excluded simula from what he meant as "object-oriented"? ''I'm not aware of any objection to anything in Simula. However, two or three points in the AlanKayDefinitionForOo seem to be there to exclude C++ (his definition was published in 1993, when Smalltalk was engaged in active competition with C++ for market share. The points in AlanKay's definition which seemingly exclude C++ are:'' * ''No MultipleInheritance. This is probably the most controversial of the bunch, though at the time MI was an ill-regarded C++ feature. (It still isn't implemented well in C++, at least not compared to Eiffel and other more advanced OO systems). Nowadays, MI seems to be held in higher regard, though it still isn't supported by JavaLanguage (other than of interfaces). IIRC, the CommonLanguageRuntime doesn't provide convenient MI support either.'' * ''EverythingIsAnObject. The assertion that all first-class program entities must be full-fledged objects. Lots of things in C++, ObjectiveCee, JavaLanguage, and a few others '''aren't''' objects; by which I presume Kay meant data entities with the machinery for runtime type introspection (or at a minimum, DynamicDispatch)--possibly excluding cases where the compiler can safely optimize such away. In C++, "objects" of this nature (essentially, instances non PlainOldData classes) exist alongside a whole bunch of other things which share FirstClass status in C++'' * ''A singly-rooted inheritance hierarchy. Even if one excludes all the non-objects from C++, the "true" objects (those things with virtual functions) don't necessarily inherit from a single superclass. The first objection I disagree with; the second I can live with in a systems language like C++. This one, however, is one of the CeePlusPlusDesignFlaws that annoys me to no end. I don't believe that the lack of an Object type in C++ excludes it from the OO community, but I do believe it was a fundamental mistake on the part of BjarneStroustrup.'' So where can I see this "definition" for myself? ''On AlanKaysDefinitionOfObjectOriented.'' I'm afraid that is not a proper citation of an AlanKay writing. It takes something out of the context where it is pretty clear that AlanKay describes the design principles behind SmallTalk. Nowhere is it made clear by AlanKay that "object oriented" is defined to be "designed like Smalltalk or else". ''I'd like to see a formal citation to the NygaardClassification. I searched for it and found nothing besides a few references to "Classification of actions, or inheritance also for methods." Is that it? If not, when and where was his classification published?'' Just take your time, breath and read NygaardClassification. Where the citation is from is right under your nose, were it not for your knee-jerk reactions you'd have seen it. ''My knee-jerk reactions? I'm not the guy who made this page. I had never heard of this classification before so I Googled it and came up with nothing, which is why I asked about it. I must have missed the link at the very bottom of the piece. Sorry.'' ---- Personally, I think we all need a NewDefinitionForOo. None of the DefinitionsForOo proposed, including Nygaard and Dahl, is completely satisfactory. The N&D definition is more descriptive of programming ''styles'' then of languages. You can write OO code in CeeLanguage, but nobody would claim C to be an OO language just 'cause you can simulate a VeeTable with a struct full of function pointers. The AlanKay definition seems to change over time (unlike Nygaard and Dahl, Kay is still alive and thus able to publish), but parts of it seem contrived to deliberately exclude C++. OTOH PolymorphismEncapsulationInheritance has a very strong C++ bias; certainly proponents of WeaklyEncapsulated languages like PythonLanguage or CommonLisp have grounds to object. Arguments over whether Nygaard/Dahl, IvanSutherland, or AlanKay has the stronger claim to "own" the term OO miss the point completely. Scientific jargon and terminology belongs to the scientific community; not to the first guy in a white coat to coin a particular phrase. The definition of OO is owned by us all; not by AlanKay or anyone else. If OO were defined to mean what AlanKay says, no more and no less, then I submit that a new term should be coined and the phrase "object-oriented" relegated to the status of marketing buzzword. Given that the phrase OO has such an incredible amount of currency, it would be a bad thing were that to happen. -- ScottJohnson