Классы и прототипы
Наиболее явное различие между Self и Smalltalk состоит в том, что Self не имеет понятия классов. Между объектом и классом нет отношения «является экземпляром». Скорее, Self был одним из первых прототипов объектно-ориентированного языка и в этом отношении предшественником JavaScript. Следовательно, типичный способ создания нового объекта в Smalltalk - это создание экземпляра, тогда как в Self это клонирование.
Выполнение и сообщения
Как вы уже выяснили, второе фундаментальное отличие состоит в том, что в Self единственное понятие выполнения - это отправка сообщения, тогда как в Smalltalk assignment и object доступ к полю также присутствует. Более того, в Self нет такой вещи, как глобальное состояние. Вы можете получить доступ только к тому, что можете получить, отправив сообщения. Однако Self отслеживает некоторые «хорошо известные объекты», которые могут быть присвоены вновь созданному объекту.
Состояние и слоты
Обдумывание двух предыдущих пунктов, «Без классов» и «только сообщения», проясняет, что различие Smalltalk между объектами и состоянием и его поведением напрямую не присутствует. в себе. Если Smalltalk хранит состояние в переменных экземпляра объекта и поведение в словарях методов своего класса, Self использует понятие слотов, которые могут представлять как состояние, так и поведение.
Совместное поведение
Чтобы помочь организовать поведение, Self не только предоставляет прототипы, но и <сильные > черты характера. Признак - это объект, который содержит только поведение и который разделяют несколько объектов. (Более того, есть также миксины, небольшие части поведения и состояния, которые можно объединить в другие объекты).
Объекты в Self могут иметь родителей, которым отправляются сообщения, которые сам объект не понимает (делегирование). Это создает иерархии, которые могут быть похожи на наследование классов в Smalltalk, но не требуют классов.
Несколько примеров
Создание нового объекта
Smalltalk
Object new
Self:
- простой объект:
()
или (||)
(чтобы явно указать отсутствие слотов)
- скопированный объект:
someObject copy
Создание объекта с некоторыми полями
Smalltalk
Object subclass: #MyObjects instanceVariableNames: 'foo bar'. "…"
MyObject new.
Self
( | foo. bar | )
Создание коллекции
Smalltalk
OrderedCollection new.
Self
list copy.
"Наследование"
Smalltalk
Object subclass: #MyObject. "…"
Self
( | parent* <- list | )
Ресурсы
Я предлагаю прочитать раздел библиографии на веб-странице Self.
person
Community
schedule
06.06.2013