Лучший способ расширить поведение класса Pharo Smalltalk? - PullRequest
6 голосов
/ 02 февраля 2011

Я хочу расширить класс String с помощью метода для создания URL-адреса из строки.Я нашел здесь ссылку, которая показывает, как вы можете переместить расширения в их собственный пакет:

Smalltalk Daily 07/13/10: Поведение II .

Однаконе удается найти какую-либо опцию «переместить в пакет» в Pharo Smalltalk.Можно ли просто расширить базовый класс новым методом или есть лучший способ?

Ответы [ 2 ]

8 голосов
/ 03 февраля 2011

«Можно ли просто расширить базовый класс новым методом или есть лучший способ?»

Есть компромиссы в этом решении.Фактически, до недавнего времени Pharo имел String >> asUrl, когда был удален как часть очистки системы .С одной стороны, некоторые считают плохим стилем (см. Лучшие практики Кента Бека) иметь методы преобразования между объектами, которые не имеют схожих протоколов (семантически схожи).Кроме того, это приводит к раздутым базовым классам (таким как String и Object).Тем не менее, в вашем собственном приложении может быть веская причина, которая уравновешивает эти факторы, и, поскольку вы упаковываете его в свое приложение, а не в систему, откажитесь.

8 голосов
/ 02 февраля 2011

В Pharo или Squeak поместите методы расширения для MyPackage в категорию методов, называемую *mypackage (или, если вы хотите быть более информативным *mypackage-slug).

Методы в этих категориях автоматически принадлежат пакету MyPackage (по крайней мере, с точки зрения Монтичелло)

...