Smalltalk в примерах/Создание экземпляра: различия между версиями

Содержимое удалено Содержимое добавлено
орфография
Строка 8:
совокупность := УпорядоченнаяСовокупность новый.
 
Если ты пошлёшь классу совокупность сообщение \emph{новый}, оно вернёт новую совокупность\footnote{Sending new: to a class that is not variable sized will generate an exception}. Размер всегда должен быть нулевым пока совокупность пустая, но вместимость будет равна вместимости по умолчанию для данного класса. Вместимость это количество элементов которые ты можешь поместить в совокупность до того как он начнёт увеличиваться. Например, выполнение следующих выражений даёт вместимость показануюпоказанную справа.
 
<!--
Строка 18:
\end{verbatim}
 
Увеличение вместимости совокупности довольно дорого потому что увеличивающий код создаёт новую совокупность с большей вместимостью, копирует все элементы текущей совокупности, затем большая совокупность становится новой. Если ты знаешзнаешь насколько большой должна быть совокупность, или представляешпредставляешь начальную вместимость, более эффективно создать совокупность при помощи сообщения \verb|new:| где параметр это начальная вместимость. Некоторые совокупности, такие как Массив, не увеличиваются автоматически, поэтому важно определять их вместимость (для совокупностей которые на увеличиваются автоматически, размер и вместимость это одно и то же). Например,
 
<!--
Строка 28:
поток := (Поток новый: 100) writeStream.
 
Методы \verb|новый| и \verb|новый:| реализованы в \verb|Behavior|, однако они переопределены во многих классах. Из за того что твой класс наследует \verb|новый| и \verb|новый:|, ты не должен переопределять их пока твой класс ---. Есть два типа присвоения которые могут быть сделаны: присваивание переменной начального значения по умолчанию, и присваивание переменной значения специфичного для экэмпляраэкзэмпляра. Давай рассмотрим каждый вариант.
 
<!--
Строка 46:
^sickHoursUsed неОпределено?
истина: [sickHoursUsed := 0]
ложложь: [sickHoursUsed]
 
В качестве альтернативы, ты можешь инициализировать все данные в одном методи \verb|инициализация|. Lazy инициализация полезна ести твой объект никогда не использует данные которые сложны для инициализации, но на доступ к данным тратится дополнительное сообщение при каждом обращении. Если ты хочешь ---. Например, для объекта \verb|Сотрудник| мы может быть следующий метод инициализации.
Строка 69:
^супер новый инициализация
 
До того как ты переопределиш \verb|новый| как показано здесь, ты должен знать что \verb|супер новый| существует. Если метод \verb|новый| в суперкласс посылает сообщение \verb|инициализация|, твой метод \verb|инициализация| будет вызван дважды, один раз при вызове метода \verb|новый|, затем второй раз при вызове метода \verb|новый| \emph{Сотрудника}. В этой ситуации ты не должен переопределять \verb|новый| пока ты можешь наследовать его из суперкласса. Т.к. в суперклассе есть метод \verb|инициализация| предположытельнопредположительно инициализирует данные суперкласса, твой метод \verb|инициализация| должен начинаться со строки \verb|супер инициализация|. Например, допустим что есть класс \emph{Сотрудник}, с подклассами \emph{ВременныйСотрудник} и \emph{ШтатныйСотрудник}. Давай примем что временный сотрудник работает две недели а штатный сотрудник работает три недели. Мы можем получить следующее:
 
<!--
Строка 201:
==Классы с единственным экземпляром==
 
Некоторые классы имеют только один экземпляр. Примерами из системных классов являются \verb|истина|, которая является единственым экземпляром класса \verb|Истина|, \verb|ложложь|, экземпляр \verb|ЛожЛожь|, \verb|пусто|, экземпляр \verb|НеопределённыйОбъект|, и \verb|Процэссор|, экземпляр \verb|ПланировщикПроцэссора|. Классы \verb|НеопределённыйОбъект|, \verb|Логиче--| и \verb|ПланировщикПроцэссора| переопределяют метод \verb|новый| для предотвращения создания экземпляров.
 
<!--
Строка 214:
 
класс МойКласс>>новый
экземпляр пусто? ложложь? [сам ошибка: 'Ты можешь использовать
только один экземпляр МоегоКласса'].
экземпляр := сам простойНовый.
Строка 222:
^экземпляр пусто?
истина? [экземпляр := сам простойНовый]
ложложь? [экземпляр]
 
[[Smalltalk в примерах/Специальные переменные, буквы и символы|Специальные переменные, буквы и