Definitions for Object-Orientation являются, конечно, huge can of worms, но вот мои 2 цента:
Для меня, Obj ect-Orientation - это все объекты, которые сотрудничают, отправляя сообщения. То есть, для меня единственная важная черта объектно-ориентированного языка.
Если бы мне пришлось поставить упорядоченный список всех функций, которые объектно-ориентированный язык должен иметь, это будет выглядеть следующим образом:
- Objects sending messages to other objects
- Все есть объекты
- Late Binding
- Subtype Polymorphism
- Наследование или что-то так же выразительно, как Delegation
- Encapsulation
- Information Hiding
- Абстракция
Очевидно, что этот список является очень спорным, так как это исключает большое разнообразие языков, которые широко рассматривается как объектно-ориентированный, например, Java, C# и C++, все из которых нарушают точки 1, 2 и 3. Однако нет никаких сомнений в том, что эти языки допускают объектно-ориентированное программирование (но также делает C) и даже облегчают его (что C не делает). Итак, я пришел назвать языки, которые удовлетворяют этим требованиям «чисто объектно-ориентированным».
В качестве архетипических объектно-ориентированных языков я бы назвал Self и Newspeak.
Оба удовлетворяют вышеуказанным требованиям. Оба вдохновлены и преемниками Smalltalk, и оба действительно могут быть «более OO» в некотором смысле. То, что мне нравится в Self и Newspeak, заключается в том, что оба воспринимают сообщение, отправляющее парадигму до крайности (Newspeak даже больше, чем Self).
В Newspeak, все - сообщение отправлено. Нет переменных экземпляра, нет полей, нет атрибутов, нет констант, нет имен классов. Все они эмулируются с помощью геттеров и сеттеров.
In Self, есть нет классов, только объекты. Это подчеркивает, что OO действительно о: объекты, а не классы.
сообщения, позднее связывание и полиморфизм одно и то же: рано переплете сообщение только вызов процедуры, и если вы не можете отправлять одни и те же сообщения на объекты разных типов, а затем зачем поздно связывать? Делегирование, инкапсуляция, и все это объект, также вытекающий из передачи сообщений, в некотором роде. – 2009-04-02 23:27:26