ФЭНДОМ


Статья предназначена для сбора разнообразных приёмов, делающих работу в Squeak более удобной. В дальнейшем, при увеличении объёма, вполне вероятно выделение самых больших описаний приёмов в отдельные статьи.

Выполнение действий при загрузке класса Править

Если создать в классе, который мы сохраняем в Monticello, метод SomeClass class>>initialize, то Monticello будет его выполнять при при операциях Load и Merge, причём только в тех случаях, когда этот метод изменился (относительно существующего в образе). Это позволяет выполнять действия, не предусмотренные изначально Monticello, например создавать instance variables в каком-нибудь базовом классе.

Вынесения кода для запуска в комментарии Править

Для удобства запуска чего-нибудь (например, тестов или примеров) можно вынести код, запускающий это "что-нибудь", в комментарий класса тестов (или в комментарий метода). При этом в комментарии класса можно использовать слово "self", которое будет означать "этот класс". Так, можно написать в комментарии класса

 self suite run.

а потом, когда потребуется, просто тыкать мышкой в эту строчку и нажимать Alt-d (т.е. выполнить).

Также можно вызывать графический интерфейс TestRunner-а:

(TestRunner open model)
	selectTestsSuchThat: [ :class | class = self name];
	runTests.

Разумеется, вместо "self" можно явно использовать имя класса.

Использование свойств вместо переменных объекта Править

Иногда бывает неудобно добавлять переменные объекта (instance variables) в какой-нибудь класс. Такое бывает, например, если вы изменяете какой-то базовый класс и хотите оформить эти изменения в виде Monticello-вского проекта (а Monticello не позволяет часть instance variables класса держать в одном проекте, а часть - в другом). Либо, если даже вы решили эту проблему, использовав вышеописанный совет, но добавление переменных объекта само по себе вызывает проблемы (например, если добавить переменные объекта в класс Morph, то с очень большой вероятностью в процессе перекомпиляции всех классов-потомков Morph произойдут какие-нибудь ошибки).

В таких случаях можно использовать не переменные объекта, а "свойства" (properties). Задаются они с помощью метода setProperty:toValue:, а используются с помощью методов hasProperty:, valueOfProperty: и еще нескольких подобных. Работа со свойствами происходит полностью динамически и не требует перекомпиляции класса.

Единственный недостаток этого приёма в том, что находятся все перечисленные методы в классе Morph, а зачит доступны только в нём и его потомках.

Похожие методы работы со свойствами есть в классе MAObject (в пакете Magritte-Model-Core).