Home page

Object Oriented Programming... What next?

*by Yigal Rechtman*

Object oriented programming (OOP), and in general, object encapsulation, manipulation or code reusability have been at the core of all recent technological advances and implementations. OOP is the concept that drives technology. Although achieved at the price of overhead (in terms of bandwidth, memory or clock-cycles) it better achieves implementations of complex tasks. This includes tasks with uncertain results, or at least vast and varied enough to be hard to predict. It also includes tasks with unknown preconditions or inputs. Trivially, the overhead increase as a result of OOP, has become a small tradeoff as computers can exponentially increase their power in order to compensate for programming needs, and is justified by the market place that demands fast programming solutions.

OOP has its weak point, too: OOP is conceptualized from the nature of computers – the fact that a program would capture the real world is restricted because it is used only in terms of *symbols* (and *finite set *of those symbols.) These symbols are thought of as "boxed" surfaces to fit "round" or "fluid" real-life *things*. For example, the most immediate implementations of the object "CAR" pays little attention under to the real-life existence of tiny rust spot on the front hood. Typical CAR object contain surfaces that allow the user to CAR.move or CAR.park and even have CAR.AC_Turn_On... However, even if CAR.Small_Rust_Spots_On_Hood would be available at the definition of a CAR object, it will be other details that would be overlooked. By definition, even if so-called "all" details were to be considered, they would be a finite description of their real-life-counterpart, a CAR, that has an infinite number of aspects.

The issue at hand is not the motivation of the creation of huge objects, *attempting *to describe every detail in their real-world targets. This approach is bound to be incomplete by seeing the holes in the definition of a finite set representing an infinite reality. Instead, it is sought here that a quantitative method describe in consistent and simple terms the *relationship* between representation, computer objects and those of the real world. For example, this relationship would tell us is the CAR *far *from the DOG? And how much does the DOG *like* the CAR? Will 5 miles be considered "far"? How about 1 inch?

*Classic logic *will fail to be this quantitative method because it too can not sustain the smooth ends of life’s objects. For example, suppose the object type DOG "D" "Not like to so much" CAR "C". The shortcoming of crisp logic here is that it can not relate a object "D" to another object "C" in terms of fondness (well, "liking") because DOG "D" both likes and does-not-like object "C" – simultaneously. A short elaboration on this example will yield, again, that a huge numbers of descriptors will be needed in both object definition in order to attempt to cover every detail in the object "DOG" and "CAR". However, by definition, such huge objects will fail to be complete in terms of relating DOG to CAR. In a sense the relationship of real life ("things") to their computerized symbolic ("objects") is a of infinite-to-one, because real life things are infinite and computer symbols objects are finite.

A super-set of classic logic will however, sustain the task. *Fuzzy logic *for example, would be able to quantify the relationship between computers’ symbolic objects and their real life counterparts. It is by definition, the logic that describes gradation of any one element in relationship to a known quantity. Typically the element has an attribute and this attribute is measured on a scale between 0 and 1.0. For example, the color blue could be said to be 0.6 of black. The color white could be said to be 0.0 of black and so fourth. Once we define this form of thinking I can obtain that the (yellow) pencil I am holding in my hand is 0.15 black. Classic logic would not be able to determine how "black" is this pencil – it would be said either 0.0 black ("Not black") or 1.0 black ("yes, it’s black"). But neither would describe __how__ much black is my pencil. Fuzzy logic will. By the same token, a car "C" is 0.0001 far from dog "D" when it’s 5 miles away, and 0.9999 far when they are 1 inch apart. The question of "how far" now has an answer. So does the question "how dark is the pencil?" (Answer: 0.15 black.)

The idea of relating objects in a fuzzy way, is not well tested to the best of my knowledge. But I believe that it could be at the core of the future of Object Oriented Programming. *Fuzzy OOP*, or just plain old "Fuzzy Logic" could help relate computer-capsuled "objects" to real life "things" and can become the power behind any and all new software. Such software will be able emulate, for example, a set of finite scenarios and under a set of restricted preconditions – it would first set fourth the quantitative relationships between real life objects and then manipulate them in a symbolic manner, with a great ease.

The key behind this idea is that we __recognize__ the inability of computers (or any finite set algorithm) to work outside their own symbolic universe, and work towards emulating the real life instances and their relationship in a more adequate way than symbolic classic logic.

© 1999-2003 Yigal Rechtman