ObjectOrientation deals with complex interrelated systems. It defines rules whereby objects send messages to each other, and processing occurs as an emergent behaviour. The brain works like this (i.e., neurons sending hormonal signals to each other), as does an amplifier. * This is a stretched analogy. Lots of things can be considered a "message". A function call, a record in a log queue table, etc. ObjectOrientedProgramming deals with programming object-oriented systems. Consider an organization of people - a company. A company functions in much the same way, and if we can apply knowledge of ObjectOrientation learned through ObjectOrientedProgramming, we might be able to solve some hitherto unsolvable problems in organizational theory. -- EddieEdwards ---- How about "Event Driven" systems, compared to and contrasted with "Object Oriented" systems? (good O-O systems have an Event-based runtime core, etc.) ''Win32 is event-driven (''message-based'') but isn't object-oriented'' See EventDrivenProgramming. How about "Object-BASED" rather than "Object-ORIENTED", as I hear some people characterize VisualBasic? (I think they mean, manipulating object instantiations of existing class libraries, but not creating new class definitions?) See ObjectBasedProgramming. See also ReactiveProgramming or the ReactiveProgrammingModel ---- Related to LawOfDemeter, LiskovSubstitutionPrinciple and other PrinciplesOfObjectOrientedDesign. See also ObjectOrientationTips. ---- What exactly is the definition of ObjectOrientation? Is there an algebra or calculus which can describe it completely? Or is it more of a technique or mindset? ---- I see three different views of ObjectOrientation. '''1. Scandinavian View''' Programming is modeling. Because people think in terms of concepts like "object" and "action", our programming/modeling languages must support these concepts. This is the view of the people who invented SimulaLanguage, the first object-oriented language. '''2. Mystical View''' All computation consists of objects sending messages to each other. The ActorLanguages people are perhaps the best representative of this view, with each object running in parallel with the others. I call it "mystical" because our hardware is stubbornly different from it. ''That's an odd reason to call something "mystical". The ActorsModel is a model of computation with a precise definition, given by formal "locality laws" and "event ordering laws". In that sense it is quite "anti-mystical".'' Smalltalk is an amusing example, because Smalltalkers will say that a program is a bunch of objects sending messages to each other, but in fact all that is happening is procedure calls. ''Yes, that is the main difference between Smalltalk and any of the ActorLanguages.'' '''3. Software Engineering View''' An object-oriented language is defined as one with certain features. These features are usually DataAbstraction, PolyMorphism and inheritance, though identity should probably be on the list, and I have seen garbage collection on the list, as well. BobMartin is pushing this view when he says that OOP is about better tools for structuring software, not about modeling the real world. I have decided that, like the blind men and the elephant, all these views are correct. People tend to fixate on one or the other of them, but the truth of OOP is bigger than our descriptions of it. -- RalphJohnson Any paradigm could possibly say similar things. "YouJustDontGetIt". ---- EditHint: This should be merged with ObjectOriented. ...or ObjectOrientedLandscape. ---- CategoryObjectOrientation