Before the advent of OOP, how were systems modeled in other paradigms of Programming.

Obviously, software programs existed prior to 1970's and they interacted with people and where used in crucial places.

How did early programming paradigm tackle the problem of modeling data.

  • 6
    Your question presumes that OO is the only way to effectively model a system. It isn't. The Linux Kernel is written in C, which only has struct. Git is also written in C. Purely functional programming languages don't have OO, not in the sense you are speaking about. Commented Dec 3, 2019 at 16:50
  • There is a ton of information about the history of computing and programming languages. We can't effectively distill it down in one answer. Perhaps search for the history of programming language paradigms and you'll find that there is a whole lot more than just procedural and OOP. Commented Dec 3, 2019 at 16:57
  • 2
    Alan Kay once said in a talk that the oldest code he found that we would today recognize as "object-oriented" was in a paper from 1953. It was written in assembly, not an OO language, but it still had everything we would expect today: message sending, encapsulation, polymorphism. Entities solving problems by collaborating via message passing, delegation, etc. Let me repeat that: 1953. Commented Dec 3, 2019 at 19:16
  • 3
    For some definition of "easier." Commented Dec 3, 2019 at 20:39
  • 1
    Systems in the past were modeled the same way as non-OO systems (or non-purely OO systems) are modeled today: using data structures, functions which operate on them, smaller and larger modules, libraries, sometimes utilizing event-mechanics, and so on.
    – Doc Brown
    Commented Dec 4, 2019 at 7:09

3 Answers 3


It would be pretty silly to think that we didn't have objects before OOP.

OOP formalizes a notion of class, which allows arguably superior code organization.  But these same constructs can be done in assembly or C.  Further, tagged structures with switch statements also provide the equivalent functionality of classes, subclasses, and overrides, though considerably less formally.

The 68k-based Macintosh computers used a lot of assembly (in part as compilers just weren't as good 40 years ago).

We have always had a way to group fields together into an object.

FORTRAN '66 — notably lacking a formal construct of structure or record — programmers would simply use parallel arrays where the separate arrays held the various fields of interest, and same index position in each separate array constituted an object.

There's always (and always been) some way to compose fields into an object, to relate one object to another, to substitute one object for another, to handle one object differently than another.

  • 1
    So i guess every imperative paradigm language can be written in OOP style but it's easier to implement with languages that support it natively, am i right?
    – LekeOpe
    Commented Dec 3, 2019 at 19:24
  • 2
    Yes. You can write OOP in assembly; ilike anything in assembly, it is error prone, so lots of fun!
    – Erik Eidt
    Commented Dec 4, 2019 at 1:28
  • C structs with data and callbacks as function pointers is used quite wildly inside the Linux kernel, at least the subsystems I learned about, like I2C or buses
    – jaskij
    Commented Dec 5, 2019 at 7:33
  • 1
    I find this answer particularly biased towards OOP. No, before OOP people weren't just simulating OOP without OOP. Commented Mar 17, 2023 at 15:44
  • @user253751, you're kidding yourself if you think that before formal enums, record types, programmers didn't have ways of doing tagged unions and "objects". For example, an old filesystem might have directory entries, with name, date, (etc..), and integer representing whether file or sub-directory. If file, then handle like this, if directory, then handle like that depending on the application. We've always had enums, sum types, product types in concept even when not supported by dedicated language constructs.
    – Erik Eidt
    Commented Mar 22, 2023 at 22:30

OOP is actually more limited as far as modeling is concerned. The reason is every verb must be tightly coupled to exactly one noun. Other paradigms don't have that limitation. You don't have to make inane decisions like whether to do item.addToCart(cart) or cart.addItem(item). You can have an addItemToCart(item, cart).

  • 1
    THis is a perfectly valid comment. But how does it answer the question ?
    – Christophe
    Commented Dec 4, 2019 at 7:50

Before OOP, the structured programming paradigm used to separate processes and data.

This separation also applied for modelling:

Note that ERD, and to a lesser extent IDEF0, are still in use today.

Note also that OO is not an end and the only a mean to construct complex systems. If you look at the size of the code of an operating system you'll be surprised how complex it is, and there is still little OO in there.

  • 1
    Great answer. Btw, is a struct part of the specification of procedural paradigm?
    – LekeOpe
    Commented Dec 4, 2019 at 20:42
  • @EdgeDev do you mean data struct ? indeed, typical structured programming languages such as Pascal or Modula2, or typical procedural programming languages like ADA (before objects were introduced in it) already worked with types and data structures (records in ADA and in modula2)
    – Christophe
    Commented Dec 4, 2019 at 21:45

Not the answer you're looking for? Browse other questions tagged or ask your own question.