1.3 Gaining an Understanding
We have slowly come to the realization of just what properties our program should have to make it work in solving complex real world problems. Having a new language like VB.NET or C# and their associated capabilities to create classes and objects was not enough. We realized that just using the abstract data type or class was not enough. As part of this ongoing development, the methodology called object-oriented technology evolved into what is called the object model. The software engineering foundation whose elements are collectively called the object model encompass the principles of abstraction, modularity, encapsulation, hierarchy, typing, concurrency, and persistence. The object model defines the use of these elements in such a way that they form a synergistic association.
As with any discipline, such as calculus in mathematics, we need a symbolism or notation in which to express the design of the objects. The creation of the C++ language, as an example, supplied one language notation needed to write our object-oriented programs. However, we still needed a notation for the design methodology to express our overall approach to the software development. In 1991, Grady Booch first published his book Object-Oriented Analysis and Design with Applications in which he defined a set of notations. These notations have become the defacto standard for Object Oriented Design. His second edition does an even better job of describing the overall Object Oriented Design notation and the object model. In this second edition, he expresses all examples in terms of the C++ language, which for a time became the predominate language for object-oriented software development. We even have a Windows GUI tool based upon this notation to aid us in our thinking. This tool by Rational Corporation and Grady Booch was called ROSE. Quite a change from how calculus and its notation were initially used. We almost immediately have the same engine we wish to program on, aiding us in doing the programming. This tool has continued to evolve and is now called the Universal Modeling Language (UML).
An object (or component) then is an entity based upon abstract data type theory, implemented as a class in a language such as VB.NET or C#, and the class incorporates the attributes of the object model. What we have been describing, however, is just the tip of the iceberg relative to objects. The description so far has described the static definitions and has not talked about objects talking with other objects. Let's just look at one of the object model attributes: inheritance. Inheritance is our software equivalent of the integrated electronic circuit (IC) manufacturing technique of large-scale integration (LSI) that allows such tremendous advances in electronic system creations. Software using inheritance is certainly very small scale at the present, but the direction is set. Inheritance allows the creating of a small-scale integration (SSI) black box in software. This SSI creates an encapsulated software cluster of objects directed toward the solution of some function needed for the application. We have thus abstracted away a large amount of the complexity and the programmer works only with the interfaces of the cluster. The programmer then sends messages between these clusters, just like the electronic logic designed has wires between ICs, over which signals are sent.