Я в новинку для ООП, но с "процедурным" фоном.
Я в настоящее время пытаюсь получить голову вокруг ООП через GNU "Smalltalk Smalltalk и Lovejoy: Получение сообщения".
Я смущен относительно heck, который класс метакласса и Метакласса, по сравнению с суперклассом. Я вижу поток наследования суперкласса-> класс-> подкласс; но я не вижу, как/где метакласс вписывается. TIA...
Существует отличное описание в бесплатной онлайн-книге Pharo настоящим , глава 13 (классы и метаклассы). Вещи, объясненные в этой главе, являются общими для всех реализаций SmallTalk.
Существует два различных соотношений в классовых ОО: и и наследство .
Экземпция - это отношение между объектом и его классом , ключевое слово новых
и т. Д. Обычно он реализован указателем в низкоуровневом представлении любого объекта Отказ В SmallTalk, класс анобъекта
проходит этот указатель; Также происходит, что классы также являются объектами, а классы классов называются метаклассами, но это то же самое соотношение, что и с экземплярами.
Наследование - это отношения между классами . Вы можете отправиться от класса на свой суперкласс, делая Superclass ACLass
и продолжайте делать это, пока не дойдете до объекта класса
. В SmallTalk указатель SuperClass является просто переменной экземпляра, определенной на всех классах, и сообщение Superclass
является обычным доступом.
На самом деле существует два уровня наследования: наследование экземпляра и наследование класса.
Smalltalk имеет специальную схему, которая позволяет передавать классы как объекты. Это означает, что классы также являются объектами сами по себе. Метакласс - это «просто» класс объекта класса.
Это не мешает нормальному наследованию экземпляров, поэтому оно не помещается ни в одной диаграмме суперкласс -> класс -> подкласс
, которую вы использовали.