Object-oriented
Encapsulation: information hiding and modularity.
Polymorphism: the same message sent to different objects results in behavior that's dependent on the nature of the object receiving the message.
Inheritance: re-use of existing standard code.
Dynamic binding: maximum flexibility at runtime.