Позвольте мне сначала указать на ошибку в вашем коде, чтобы мы могли сосредоточиться на вашем вопросе.
Учитывая, что вы отправляете сообщение new
на People
, мы можем предположить, что у вас уже естьсоздал класс People
.Однако есть проблема в двух первых строках
| People |
People := People new.
, которые должны были быть написаны как
| people |
people := People new.
или
| group |
group := People new.
, иначе вы быназначить экземпляр People
самому классу People
, что сделало бы невозможным доступ к классу по имени.Конечно, компилятор Smalltalk предотвратит использование временного верхнего регистра, не говоря уже о том, что он сталкивается с именем класса.Тем не менее, вам должно быть ясно, что вы не хотите изменять привязку между идентификатором People
и классом, который он представляет.
Последующий каскад выглядит частично нормально, если ваш класс People
реализует метод addPerson:
.
Последнее выражение можно упростить до
self assert: people size = 3,
, что потребует от вас только реализации метода size
в People
, чтобы он отвечалс количеством «персон», которое он содержит.
Другие подозрительные сообщения: Person john
и т. д. Вы должны добавить метод на стороне класса newNamed:
в Person
и написать вместо него:
Person newNamed: 'John'
, где
newNamed: aString
^self new name: aString