Подтвердить что ты не робот

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

Я просто ищу, что это значит, что отделяет Self от Smalltalk.

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

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

  • Назначение Smalltalk и передача сообщений/сообщений - это единственные вещи которые не являются объектами. Однако в Самости даже эти вещи имеют место в объектной структуре
  • "Я - еще более чистый OO-мудрый чем Smalltalk ". Я не смог найти более конкретной разработки.
4b9b3361

Ответ 1

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

Наиболее отчетливое различие между "Я" и "Smalltalk" заключается в том, что "Я" не имеет понятия "классы". Нет никакого отношения "является экземпляром" между объектом и классом. Я, скорее, был одним из первых прототипов объектно-ориентированного языка и в этом отношении предшественником JavaScript. Следовательно, типичным способом создания нового объекта в Smalltalk является экземпляр, тогда как в Self это клонирование.

Выполнение и сообщения

Как вы уже выяснили, второе принципиальное различие заключается в том, что в "Я" единственным понятием исполнения является отправка сообщения, тогда как в Smalltalk также доступны назначение и доступ к поля объекта. Кроме того, в "Я" нет такого понятия, как глобальное состояние. Вы можете получить доступ только к тому, что вы можете получить, отправив сообщения. Self, однако, отслеживает некоторые "хорошо известные объекты", которые может быть предоставлен вновь созданному объекту.

Состояние и слоты

Размышляя над двумя предыдущими пунктами, "Нет классов" и "только сообщения", дает понять, что различие Smalltalk между состоянием и объектами и его поведение не присутствуют непосредственно в "Я" . Где Smalltalk хранит состояние в объектах экземпляры переменных и поведение в словарях методов в своем классе, Self использует это понятие слотов, которые могут представлять как состояние, так и поведение.

Работа с общим доступом

Чтобы помочь организовать поведение, Self не только предоставляет прототипы, но и черты. Черта - это объект, который содержит только поведение и разделяет несколько объектов. (Кроме того, есть также миксины, небольшие порции поведения и состояния, которые могут быть скомпонованы в другие объекты).

Объекты в Self могут иметь родителей, к которым отправляются сообщения, которые сам объект не понимает (делегирование). Это создает иерархии, которые могут быть похожими на класс наследование в Smalltalk, но не нужны классы.

Несколько примеров

Создание нового объекта

Болтовня
Object new
Самостоятельная:
  • простой объект: () или (||) (чтобы исключить отсутствие явных слотов)
  • скопированный объект: someObject copy

Создание объекта с некоторыми полями

Болтовня
Object subclass: #MyObjects instanceVariableNames: 'foo bar'. "…" 
MyObject new.
само
( | foo. bar | )

Создание коллекции

Болтовня
OrderedCollection new.
само
list copy.

"Inheritance"

Болтовня
Object subclass: #MyObject. "…"
само
( | parent* <- list | )

Ресурсы

Я предлагаю прочитать раздел библиографии на веб-странице Self.

Ответ 2

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

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

Там фраза "Я" - "Я, как Smalltalk, только больше". Вам нравятся сообщения? Мы используем их для всего. Вам нравятся объекты? Наши объекты действительно самодостаточны, а не только экземпляры классов. Вам нравится концептуально маленький язык? Ну, у нас есть только объекты, слоты и сообщения. Etc.

Ответ 3

Знание Smalltalk в течение некоторого времени и чтение Wikipedia:

  • Самообслуживание:

    Основанный на прототипе

    Smalltalk:

    Основанный на классе

  • Самообслуживание:

    Поскольку приемник примитива '_AddSlots:' не указан, он "Я".

    Smalltalk:

    вы пишете self явно.

  • Самообслуживание:

    вы добавляете слоты к объектам.

    Smalltalk:

    вы добавляете слоты в классы или вы делаете это как this для объектов

  • Люди, которые изобрели и влияют на "языковую" систему, различны. Self и Smalltalk можно рассматривать как "систему" ​​(изменить вашу точку зрения), это означает, что вы, как программист, разговариваете с системой и изменяете ее во время выполнения.