Различия между Self и Smalltalk

Я просто ищу то, что отличает Self от Smalltalk.

Это не должно быть вопросом гориллы против акул. Я не ищу причины, по которым один лучше, я просто не понимаю, что определяет одно как отличное от другого. Они оба кажутся мне одним и тем же языком после примерно двух часов чтения о них и возни с каким-то кодом (в сторону: я наконец понял Smalltalk-версию «Все является объектом». Я должен сказать, это чертовски круто. Ха-ха! И я думал, что C # это прибил ... но он даже близко не подходит к этому! XD)

Случайные вещи, которые я где-то читал за последние несколько лет:

  • Назначение Smalltalk и передача сообщений / сообщений - единственные вещи, которые не являются объектами, однако в Self даже эти вещи имеют место в объектной структуре.
  • «Self даже более чисто объектно-ориентированный, чем Smalltalk». Мне не удалось найти более конкретной проработки.

person TheIronKnuckle    schedule 06.06.2013    source источник


Ответы (3)


Классы и прототипы

Наиболее явное различие между 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

Тобиас изложил основные отличия, поэтому прочтите его ответ.

В некотором смысле Self - это Smalltalk. Разница между Self и Smalltalk-80, например Squeak или VisualWorks, меньше, чем разница между Smalltalk-80 и Smalltalk-72. Они кажутся очень похожими, потому что связаны между собой.

Есть фраза Self - «Я похож на Smalltalk, только в большей степени». Вам нравятся сообщения? Мы используем их для всего. Вы любите предметы? Наши объекты действительно самодостаточны, а не просто экземпляры классов. Вам нравится концептуально малый язык? Что ж, у нас только что есть предметы, слоты и сообщения. И Т. Д.

person Russell Allen    schedule 06.06.2013

Некоторое время зная Smalltalk и читая Википедию:

  1. # P2 #
    # P3 #
    # P4 #
    # P5 #
  2. # P6 #
    # P7 #
    # P8 # # P9 #
  3. # P10 #
    # P11 #
    # P12 #
    # P13 #
  4. Люди, которые изобрели и повлияли на «язык» / «систему», разные. Self и Smalltalk можно рассматривать как «систему» ​​(измените свою точку зрения), это означает, что вы, как программист, общаетесь с системой и меняете ее во время выполнения.

person User    schedule 06.06.2013