View this PageEdit this Page (locked)Attachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide
Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007

Discussion 1 - Oh Kil Kwon

I found this article from, which is written by Jason Voegele who is currently working as a software engineer at company called “Atos Origin”. Jason has worked many years as a software engineer and has written this article to inform other novice programmers to help deciding on which programming language to learn/use. I thought this article might be a good article for me to read even though this article has not been peer-reviewed, as I understand.

Jason started by listing six qualities that must be met in order for any language to be “pure” OOP. They are: 1. Encapsulation/Information Hiding; 2. Inheritance; 3. Polymorphism/Dynamic Binding; 4. All pre-defined types are Objects; 5. All operations performed by sending messages to Objects; and 6. All user-defined types are Objects. Many people argue that Java and C++ and many other popular languages are “pure” object oriented program languages, however, they failed some of qualities listed above. For instance, Java fails in 4th and 5th qualities because not all pre-defined types are objects (Meaning, it still includes primitive types) and Java implements built in basic operators instead of sending messages to objects. Among many popular languages, Eiffel, Smalltalk, and Ruby are all pure Object-Oriented languages since they all support six qualities listed above.
Jason continues with comparing features of these OOP languages. He explains that a dynamic type language doesn't require variables to be declared as a specific type. Basically, any variable can contain any value or object. Smalltalk and Ruby are two pure Object-Oriented languages that use dynamic typing. In many cases this can make the software more flexible and quick to change. On the other hand, statically typed languages require that all variables be declared with a specific type. Java and C++ are two of many other OOP languages that use static typing.
Most of these OOP languages provide at least two levels of encapsulation, public and protected. A good example would be Smalltalk in which all methods are public and all attributes are protected. On the other hand, Java provides a fourth level of, known as "package private" access control, which allows other classes in the same package to access such features.
There is a study or measurement(called “Capers Jones Language Level”), which attempts to identify the number of source lines of code, which is necessary in a given language to achieve a certain task from a single funtion point. The higher the language level, the fewer lines of code it takes to implement a function, and thus presumably is an indicator of the productivity levels achievable using the language. Of the languages he has mentioned above that were included in the study, Smalltalk, Eiffel, and Perl were the highest with a language level of 15. Visual Basic was next highest on the list, at level 11. Java and C++ were the lowest at level 6.

Finally, even though Java seems to be the most popular OOP language choice among many programmers these days, Smalltalk is the better choice of "true" OOP language, when taking all these differences into consideration. However, there are always advantages and disadvantages on whatever language the programmer chooses. Therefore, it is not really important to say which programming language is better over the others, in fact it is most important for programmers to choose which program language is suitable for his/her specific project.

I also read Russell Myers' Discussion 1's post and I would like to add that Java supports the method overloading while Smalltalk doesn't. In fact, Eiffel and Ruby are other two OOP languages that don't support method overloading. We all know that method overloading comes in handy, in Java, but I am not sure how we should go around this in Smalltalk. I guess we shall find out later.

Links to this Page