Plato OO Design and Why You Should Read Widely

Like many in the field I read a lot of computer science information – there is always topics to keep up on.  I was recently reminded of the importance of reading non-computer science information like novels, history, art, music, etc. as a source of ideas or inspiration. 

I was reading about Plato’s theory of Forms in a text on the history of western philosophy. I immediately thought of object-oriented design and programming as the similarities between the two are uncanny.  A quick Google search reveals that others had noticed this before I did.  While it is interesting to read Plato and observe that it has parallels to something (in this case OOD/P) that already exists it is of course another matter entirely to be able to read Plato, experience the light bulb moment and extend Plato’s work to new areas – that is why we should all try to read beyond your chosen field.

The topic of Forms and OOD/P is covered in many other places – see SpringerLink for an article that discusses the various similarities between philosophical theories and computer science.

Plato and Object Oriented Design

Briefly, Plato was studying and thinking about metaphysical concepts when he developed the theory of Forms, where a Form is a template or a pattern for some real-world object or concepts. A Form is not the real-world object, but a representation and it contains certain attributes and behaviors. In Plato’s theory humans have links to these Forms and demonstrate the Form’s characteristics – in OOP this would be similar to instantiating an object from a class. The object (an individual human) then has the attributes and functions of the class (Form). An example from A History of Western Philosophy by Steven Evans would be the concept of courage – Sampson or a lion is said to be courageous but neither one is courage. Courage is a Form it has attributes and behaviors and Plato saw these as an unchanging reality that is different from the objects that display courage, that are themselves constantly changing.

As stated in the beginning of this short post – it is always interesting seeing connection between computer science and other disciplines but the hard part, and the real magic is to make the connection, extend the work and create something new.

Previous
Previous

Microservices Tooling

Next
Next

From Domain Driven Design to Microservices