Постулаты
- Точкой схождения всех абстракций является null.
- Общий базовый класс (условный
TObject
) является обобщением (generic). - Условные типы
TObject
иVariant
— одно и то же.
Модель ООП в Канторе
Поскольку класс — тоже функция, модель ООП в Канторе основана на обобщениях:- У классов нет единого общего предка.
- Все классы являются раскрытием анонимного беспараметрического обобщения — null.
Конечные классы
Объявление final class определяет класс фиксированного размера, а вот виртуальные методы у него могут быть, если они в нем объявлены. В этом случае фиксированный размер учитывает указатель на VMT.final class pointRec of public final var Core:Integer X, Y; end; final class pointObj of public var Core:Integer X, Y; end;В этом примере оба класса имеют фиксированную размерность, но
pointRec
не имеет VMT, а pointObj
имеет, в нем 4 метода — in/out на каждое var-свойство.Почему наследование нельзя заменить агрегацией
Если встать на сторону противников ООП, наследование можно рассматривать как разновидность агрегации. Это и в самом деле так, но наследование — анонимная агрегация, поскольку для доступа к унаследованным свойствам не нужно указывать имя предка. Если заменить наследование обычной агрегацией, анонимность потеряется.С точки зрения принципов Кантора анонимность — это имя, равное null. То есть наследование — это агрегация по null. А поскольку, согласно принципам архитектуры Кантора, null — тоже значение, анонимная агрегация имеет право на существование.
Более того, отсутствие ключевых атрибутов обозначает в Канторе особый или служебный смысл. Анонимная агрегация — не исключение, за ней скрывается смысл наследование.
Множественное наследование и SOLID
Принципы SOLID покрывают общий случай наследования в ООП, когда классы могут наследоваться друг от друга без посредничества интерфейсов. Следование SOLID должно способствовать нормализации классов, чтобы получилась сбалансированная ОО-система. При этом в самих SOLID явного правила нормализации нет, оно появляется в конкретной реализации:Множественное наследование допустимо только от взаимно абстрактных классов, — то есть классов, не имеющих реализации одинаковых методов. Одинаковость методов в языке определяется совместимостью по присваиванию с учетом ООП.В языках с интерфейсами интерфейсы всегда взаимно абстрактны реализующим их классам, поэтому классы могут реализовывать любое количество интерфейсов, принципы SOLID от этого не пострадают. Собственно, интерфейсы были введены в языки программирования ради упрощения модели наследования.
В Канторе интерфейсов нет, поэтому модель наследования — общий случай, регулируемый SOLID. Взаимная абстрактность в Канторе — отношение между классами, вычисляемое в момент компиляции. Класс-наследник не может иметь реализации свойств с одинаковыми сигнатурами, полученных от предков. Сигнатура — это комбинация имени и параметров свойства, ее уникальность определяется правилами перегрузки (overload).
Если все унаследованные свойства имеют разные сигнатуры, классы взаимно абстрактны. В вырожденном случае взаимная абстрактность определяет, являются ли классы интерфейсами друг другу.
См. также
- Отказ от встроенных типов
- Отказ от встроенных типов и булевый тип
- ООП и теория объектной-ориентированной ОС
- «Hello, world!» из объектно-ориентированной ОС
- Модель ООП в Канторе. Объекты первого класса
- Метаклассы и выражения класса
- Ключевое слово this с пробелом и точкой
- Декларативное ООП
- Абстрактный объектный вычислитель (машина платформы Кантора)
- Объектно-ориентированная ОС
Комментариев нет :
Отправить комментарий
Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.
Примечание. Отправлять комментарии могут только участники этого блога.