Universal Object Oriented Topics

I am a veteran C++ programmer. This year I decided to seriously take of the challenge of learning to program in Java. Now I am starting to see that many object oriented topics are universal. They are language independent. Yes this might be obvious to some. But given my long history with C++, I always seemed to think of the principles in terms of how C++ implements them. Here I will discuss some of these universal topics that I recalled by reading a book by Grady Booch.

An abstraction denotes the essential characteristics of an object. Encapsulation divides structure and behavior. It separates interfaces and implementation. This is all done through information hiding. Modularity refers to decomposes complexity into separate products.

Abstractions are related in a hierarchical manner. One example of this is multiple inheritance. You can receive behavior from more than one source. Another example is aggregation. This is a fancy way of stating that something contains something else.

Typing is enforcing a class on an object. It restricts and defines what the object can and can not do. It prevents a programmer from exchanging objects that have different types. This is a safety feature. Most of the time, if you try to assign something of the wrong type to something else, you have a bug.

Like I mentioned earlier, I am learning Java programming. Unfortunately we are learning the basics of the programming language. So we have not covered some of the deeper topics like inheritance. However a good thing about this is that we are taking it from the very top. So we are covering basic things such as encapsulation and abstraction.

Object Oriented

I had reread a book by Grady Booch and recalled some topics about object oriented analysis and design that I had learned a while ago. And I thought I would share and discuss some of these ideas here. The first topic is that of complex systems.

Complex systems have a number of shared traits. They have a lot of subsystems. There is often an arbitrary choice of components in the system. There are dependencies between these components. The subsystems are combined in different ways. They often have evolved from a simple working prototype system.

There are a number of approaches that can be taken to design complex systems. There is a top down structured design. There is also a data driven design approach. And finally there is the object oriented design approach. When we use the word object, we are referring to a tangible entity that has a well defined behavior.

Object oriented analysis is an examination of the requirements in terms of classes and objects. Object oriented design has multiple facets. There is an object oriented decomposition of the problem. There is notational symbols for both the logical and physical design models. And there is also notation for both static and dynamic models.

Likewise, object oriented programming has multiple parts to it. Programs are made up of cooperating objects. The objects themselves are instances of classes which are the blueprints. Classes are arranged in a hierarchical structure. The classes in the structure are related by a term called inheritance.

There is a lot more to object orientation that what I discussed here. This is merely a review if you are already somewhat familiar with object oriented analysis and design. Normally I would point newcomers to the actual text of Grady Booch himself. However given enough time, I might be able to start a number of articles here that teaches this in more detail.