Как работает организация классов в категориях и пакетах в разных версиях Pharo?
Может кто-нибудь объяснить, как организация занятий в Pharo работает в разных версиях Pharo?
- Все классы являются частью глобального Smalltalk (всегда было, похоже, так и останется?)
- Классы могут иметь категорию, но это только вид тега? (всегда было, кажется, так и осталось? Но категории иногда каким-то образом сопоставляются с пакетами?)
- Существуют разные виды пакетов в разных версиях Pharo.
- MCPackages представляющие пакеты Monticello
- PackageInfo
- RPackage (Pharo 1.4)?
Кроме того, есть SystemNavigation, которая как-то помогает перемещаться по классам и методам, основанным на некоторых из вышеупомянутых конструкций?
2 ответа
Классы
Тот факт, что классы являются ключами в Smalltalk
global - это деталь реализации. Пока существует единое глобальное пространство имен для имен классов, вполне вероятно, что реализация останется прежней.
Категории классов
Категория класса очень похожа на тег. Класс может быть только в одной категории за раз. Первоначально категория класса использовалась Browser
для организации занятий в системе.
когда Monticello
категория класса была перегружена, чтобы также указать членство в пакете Монтичелло MCPackage
а также PackageInfo
классы были созданы для управления этим отображением.
PackageInfo
выполняет всю тяжелую работу: находит классы и свободные методы, которые принадлежат пакету.
MCPackage
специфическая для Монтичелло обертка PackageInfo
это добавляет протокол, который не обязательно подходит для более общего PackageInfo
,
пакеты
Перегрузка категории класса для членства в пакете была изящной уловкой, чтобы облегчить принятие Monticello
(существующие инструменты разработки не нужно учить Monticello
), однако, это все еще уловка. Не говоря уже о том, что реализация PackageInfo
был не очень эффективен.
RPackage
был создан для решения проблем производительности PackageInfo
и будет использоваться как часть следующего поколения инструментов разработки.
Обе реализации пакета будут продолжать существовать до PackageInfo
может быть прекращено.
SystemNavigation
Как говорит Фрэнк,
SystemNavigation - это класс, который, как следует из его названия, позволяет легко запрашивать множество различных вещей: классы в изображении, отправители, разработчики, информацию о пакетах, загруженных в образ, и так далее.
Классы - это, по крайней мере, на данный момент, ключи в Smalltalk
толковый словарь.
PackageInfo
содержит информацию о группировке классов и расширений для других пакетов.
Пакет Monticello содержит развертываемый блок кода. Обычно один из них будет соответствовать PackageInfo
пример. (Нажатие кнопки "+Package" в браузере Monticello создаст, например, один из них.) Пакет Monticello может содержать сценарии до и после загрузки, поэтому два класса выполняют отдельные, если связаны, функции.
SystemNavigation
это класс, который, как следует из его названия, позволяет легко запрашивать множество различных вещей: классы в изображении, отправители, разработчики, информацию о пакетах, загруженных в образ, и так далее.