History of OOP
Essence
OOP is a paradigm in which a program is described as a set of objects: each one bundles data with behaviour, hides its state and talks to other objects through messages (method calls). The three pillars are encapsulation, inheritance and polymorphism; abstraction is usually added as the fourth.
Key milestones
- Simula 67 (1967): the first classes, objects and virtual methods.
- Smalltalk (Xerox PARC, Alan Kay, 1970s): "everything is an object", communication only via messages, dynamic typing. Kay coined the term "object-oriented programming".
- C++ (1980s): OOP on top of C with static typing and vtables.
- Objective-C (1984): C plus the Smalltalk messaging model (
objc_msgSend, dynamic dispatch). Cocoa and UIKit are built on it, which is why Smalltalk ideas are still visible in iOS: delegates, KVO, selectors, target-action. - Java / C# (1990s–2000s): mainstream OOP, interfaces instead of multiple inheritance.
- Swift (2014): a multi-paradigm language. Classes and inheritance exist, but the language favours value types, protocols and generics (protocol-oriented programming) and, in recent versions, a strict concurrency model (actors,
Sendable).
Why it matters for an iOS developer
Knowing the history explains why two styles coexist in one project: the dynamic ObjC runtime (@objc, selectors, message passing) and static Swift (structs, protocols, generics, compiler specialization). A strong answer stresses that in Swift OOP is just one tool, not the only way to design.