What is Object Oriented Programming?

Until today I never contemplated what object orientated programming means. I have thought about OOP in the context of writing object oriented code and figuring out how to be better at OOP, but I never really studied its original design and intent. I was listening to a .Net Rocks podcast on the subject of lean functional programming and they had a discussion that led to Dr. Alan Kay’s definition of OOP. Dr. Kay coined the phrase object oriented programming during his work developing the SmallTalk language. Even though he is credited with the term OOP, what OOP became is not the same as he envisioned it.

I did a little research and landed on this email thread between Stefan Ram and Dr. Kay.

http://www.purl.org/stefan_ram/pub/doc_kay_oop_en

Dr. Kay credits his thoughts on OOP to his background in biology and mathematics. He says,

I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning — it took a while to see how to do messaging in a programming language efficiently enough to be useful). Dr. Alan Kay, July 17, 2003

Even polymorphism wasn’t a part of the his original thoughts on OOP. He proposed another term to describe behavior in related objects, “genericity.”

He ends the thread by giving his definition of OOP,

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. Dr. Alan Kay, July 23, 2003

Doesn’t this sounds like functional programming?

Even though this is years after Dr. Kay’s original OOP work he may have had changes in thought over the years. Yet, I still believe that his intent is still true here. So it seems that through the years, OOP may have been forked or hijacked. Some argue that we are paying for it today. They say that OOP did not stay true to the OOP of Dr. Kay and his peers in the early days of OOP (am I spamming OOP here?).

Now, I have another reason to learn F#. With the little I know now, I have already started trying to remove the ill affects of mutable state and use message passing to communicate across layers. I know there is so much more to learn and I have been doing this a long time. I look forward to digging into F# maybe even Erlang to see how it can influence my OOP.

2 comments

  1. Jon

    As always, this is a great post.

    A while ago, I came across this post and it seems to have similar intent. http://www.smashcompany.com/technology/object-oriented-programming-is-an-expensive-disaster-which-must-end
    I had a pretty good discussion with some developers after reading this. One thing to keep in mind before reading, it would be a good idea to read the whole thing before starting to comment too soon. As I read the post, I would stop and write a bunch of comments, only to find that they were answered in the subsequent paragraphs.

    With Functional Programming, one thing I keep going back to, is the dedication to small blocks of composable pieces. Several times in the past 2 days and in different code bases (both C# and F#), I see how the small “functional” blocks allow for very powerful and expressive processes can be created. Scott Hanselman talks about these as Lego block programming. This is one of the underlying concepts and power of the a library I wrote in order to transform input files so our system can read them in from a standard format. This allows the small blocks to be composed in new and more powerful ways to create complex systems in a simple manner. This also has the added benefit of creating reusable DRY code.

    • Charles

      I have a deep appreciation for code with small composable methods. The large “god” classes and methods that I see in a lot of projects seem to be an unfortunate practiced passed down from procedural programming roots.

      Did you open source that transform library? What I saw looked very powerful.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s