informa
/
2 MIN READ
Commentary

Object-oriented programming in 1964

The birth of object-oriented programming is often traced back to Simula 67, which was released in -- you guessed it -- 1967.  However, I recently encountered an example that goes back even further.  That example is in the Data Control Block (DCB) that was an integral part of the user interface to IBM's mainframe operating system, OS/360, that I ...

The birth of object-oriented programming is often traced back to Simula 67, which was released in -- you guessed it -- 1967.  However, I recently encountered an example that goes back even further.  That example is in the Data Control Block (DCB) that was an integral part of the user interface to IBM's mainframe operating system, OS/360, that I believe first saw the light of day in 1964.  I haven't kept in touch with that system's successors, but I would be surprised if a similar data structure does not still exist today.

Here's why I say it was object-oriented.  To me, the essential elements of object-oriented programming are data abstraction, inheritance, and dynamic binding.  The 1964-vintage DCB had all three.

Data abstraction came about by using assembler macros to define the initial contents of a DCB.  Even back then, it was possible to define a DCB by writing a macro that would specify what parts of it should be initialized, and the macro would take care of the details.

Inheritance showed up because there were several kinds of DCBs.  In particular, there was a DCB intended for random-access I/O that had all the data of a sequential DCB, followed by additional information that was relevant only for random access.

Finally, there is the question of dynamic binding.  I think that the DCB qualifies because of how the system opened files: When you told the system that you wanted to access a particular file, it would look at the kind of file, load an appropriate buffering routine into memory, and put that routine's address into the DCB.  Then, when you would do a read or write operation, your code would load the address from the DCB and jump to it.  So the operating system selected, at run time, the particular code that would be executed for each input or output operation.

Now--it is true that this example is pretty primitive as OOP goes, and it is probably true that the folks who designed the DCB did not think of their data structures in the same way as did the Simula designers.  Nevertheless, I find it fascinating that one of the most important ideas in software design was already in use for several years before most people think it was first invented.