Plato's Theory of Forms and Object Oriented Programming

In the theory of forms, Plato posits that there were these things called "forms," and a form is basically an abstract concept that represents some sort of object that exists. Then these objects were basically some sort of particular thing that has form-ness of some kind. So you can almost think of this as like a class and an instance basically, where you have the general definition and then the specific one. And then those objects also have attributes, which is some sort of quality.

Whenever I'm teaching programming... I think about how to teach the concepts that we take for granted to new people who don't know anything about the topic. So when you're trying to explain object-oriented programming to someone, we always bring up the concept of a chair.

So you're all sitting on chairs right now. So what is it that makes that chair a chair? We have other chairs that are around that aren't the exact same as the ones you're sitting on. How do you know that something is a chair or is not a chair?

Plato theorized that there was this abstract form called "chairness" and that it had certain fundamental attributes that were required for it to be a chair. So for example, if we were doing a sort of naive working through this problem, maybe a chair has a seat or some place to sit on and maybe a back. So anything with those fundamental essential attributes contain the essence of chairness and therefore is a chair.

So by the same token, if we're writing a web app to deal with chairs, we would write down, "I would like for people to be able to reserve chairs at Wazaa. I want a web app for people to reserve seats." And so I would actually end up just writing "class chair

So what kind of things to chairs have? So you write "atter_accessor:seat". So this is now our essential attributes. Every chair must contain some kind of seat. And maybe we have optional ones or some kinds of constraints on them. So maybe we say it's not a chair if the seat is really tiny, it has to be big enough for someone to sit on. But when we do this thing, we have a form, we have attributes, and we can actually make objects. So "c =" is creating a new instance of a chair which is like an object, that's the word we use to talk about these things. It's the same as the philosophical concept of an object.

And this is why people say object-oriented programming allows us to model the real world. Because we are able to build these abstract notions about what things are. In one sense what I'm telling you is that the tradition that we've done with object oriented programming goes back thousands of years and people have actually thought about this problem and how to model stuff for thousands of years. Basic words like essense, and attribute, and object have become a core part of our terminology. How many times do you say the word essential everyday?

The problem is philosophy is a conversation over thousands of years, and just because he has a pretty good idea of what's going on doesn't mean it's actually accurate. So what I think about is it's possible that the same holes in Plato's theory of forms are also the same holes of why it's so hard to create your domain model and to create your domain objects. We argue and think about this and are on the internet and discussing it all the time. And I see that as a philosophical conversation about the nature of actual reality. How do we construct these things? What are we doing?


Plato's idea of forms and objects with that formness is very similar to the concept in OOP, with classes and objects.

Folksonomies: computer science philosophy modeling forms oop

/home and garden/home furnishings/sofas and chairs (0.798069)
/technology and computing/programming languages (0.286384)
/technology and computing/programming languages/c and c++ (0.265488)

chair (0.986235 (positive:0.411406)), object oriented programming (0.872625 (positive:0.514013)), Oriented Programming Plato (0.698030 (neutral:0.000000)), essential attributes (0.685917 (positive:0.777179)), certain fundamental attributes (0.669849 (positive:0.377430)), fundamental essential attributes (0.663551 (positive:0.722128)), web app (0.659476 (positive:0.385789)), object-oriented programming (0.658522 (negative:-0.251413)), class chair (0.630749 (neutral:0.000000)), pretty good idea (0.625822 (positive:0.423640)), word essential everyday (0.620834 (positive:0.732271)), objects (0.603723 (negative:-0.341270)), chairs (0.591970 (negative:-0.018746)), things (0.565960 (positive:0.614385)), sort (0.558058 (negative:-0.250620)), general definition (0.556952 (neutral:0.000000)), particular thing (0.554365 (neutral:0.000000)), people (0.547697 (positive:0.471151)), abstract concept (0.547545 (neutral:0.000000)), forms (0.546386 (negative:-0.599358)), seat (0.538947 (positive:0.282654)), new people (0.534740 (positive:0.428290)), real world (0.532652 (neutral:0.000000)), new instance (0.530498 (positive:0.377919)), optional ones (0.530377 (negative:-0.325819)), Basic words (0.530325 (positive:0.529537)), abstract notions (0.529222 (positive:0.798839)), actual reality (0.527609 (positive:0.553148)), abstract form (0.527275 (neutral:0.000000)), philosophical concept (0.526679 (negative:-0.311235))

Plato:Person (0.872819 (negative:-0.599358)), object-oriented programming:FieldTerminology (0.518077 (negative:-0.251413)), object oriented:FieldTerminology (0.427293 (positive:0.514013)), Wazaa:City (0.334417 (neutral:0.000000))

Object-oriented programming (0.959264): dbpedia | freebase
Ontology (0.562731): dbpedia | freebase | opencyc
Idea (0.557052): dbpedia | freebase | opencyc
Abstraction (0.546186): dbpedia | freebase
Object (0.543013): dbpedia | freebase
Python (0.533593): website | dbpedia | freebase | opencyc | yago
Subroutine (0.526645): dbpedia | freebase
Concept (0.502049): dbpedia | freebase | opencyc

 OOP and the History of Philosophy
Proceedings of Meetings and Symposia>Speech:  Klabnik, Steve (02/2013 ), OOP and the History of Philosophy, Heroku's Waza 2013, Retrieved on 2013-05-09
  • Source Material []
  • Folksonomies: computer science philosophy


    30 NOV -0001

     Modeling the World

    Much of science and programming involve creating models of systems within our world.
    Folksonomies: modeling simulation
    Folksonomies: modeling simulation
    02 JUL 2015

     CitC 04: The Stack

    It's turtles all the way down.
    Folksonomies: literacy coding code
    Folksonomies: literacy coding code