В PureBuilder добавлен новый раздел "
ООП"
Цитата:
ООП
Полиморфизм
В PureBuilder полиморфизм обеспечивается следующим образом. Для каждого метода в таблице методов класса программист указывает псевдоним, по которому вызывается этот метод. Разные методы разных классов, обладающие похожим действием, могут иметь общий (одинаковый) псевдоним. Метод не может быть вызван непосредственно по своему имени, а только по псевдониму. Всякий раз при использовании псевдонима будет вызываться тот из методов с общим псевдонимом, который содержится в классе объекта, к полям которого применяется псевдоним. По умолчанию псевдоним создается автоматически на основе имени метода и может быть отредактирован программистом разом во всей программе (рефакторинг).
Классы
Классы (типы объектов) в PureBuilder принадлежат тому или иному модулю. Класс изображается в виде таблицы полей, таблицы методов и таблицы родительских интерфейсов. Программист добавляет в таблицы класса поля, методы и родительские интерфейсы, принадлежащие данному модулю или другим модулям и специфицированные именем модуля. Поля и методы объявляются в модуле независимо от классов, которые могут их содержать.
Непосредственное добавление полей и псевдонимов методов
Программист может добавить в таблицы класса поля (переменные) и псевдонимы методов (процедур и функций) непосредственно, без сохранения сведений о родительском классе. При этом поиск полей и псевдонимов методов, необходимых для создания нового класса, автоматизирован, а соответствующая ячейка в таблице класса не содержит имени родительского класса.
Копирование полей и псевдонимов методов из родительских классов
Программист может добавить в соответствующие таблицы класса все поля и псевдонимы методов одного или нескольких других классов, указав имена этих классов. Эти поля и методы автоматически помечаются в таблицах именем родительского класса, от которого они непосредственно получены. Имя родительского класса в таблице не может быть изменено программистом.
Программист может произвольно отключать в таблицах класса некоторые поля и псевдонимы методов, без удаления, и снова их включать. Отключенные поля и псевдонимы методов не используются в программе, но могут быть скопированы в дочерние классы в отключенном состоянии.
Никакие изменения (добавление, удаление, отключение, включение) в родительских классах (в отличие от связанных интерфейсов) не наследуются автоматически в классах-потомках.
Тем не менее, программист может явным образом передать изменения, уже произошедшие в родительских (в том числе, библиотечных) классах, в классы-потомки. Если поле или псевдоним метода в родительском классе были удалены, отключены или включены (а в дочернем классе они находятся в противоположном состоянии), то такие поля и псевдонимы методов выделяются соответствующим образом в дочернем классе без автоматического удаления, отключения или включения. Если поле или псевдоним метода были добавлены в родительский класс, то они автоматически добавляются в дочерний класс в отключенном состоянии и выделяются как добавленные, и программист может их включить. Для доступа с целью внесения изменений ко всем классам-потомкам данного класса (во всех поколениях) используется дерево зависимостей объектов программы. Классы-потомки, в которых программист может принять или отклонить унаследованные изменения, автоматически выделяются.
Программист может частично или полностью разорвать отношения наследования, сделав некоторые или все ячейки таблицы с именем соответствующего родительского класса пустыми.
Постоянное связывание с родительскими интерфейсами (композиция или агрегирование)
Если программист добавил один или несколько классов (например, библиотечных) в таблицу родительских интерфейсов, то впоследствии программист не сможет удалять, отключать или включать унаследованные от этого интерфейса поля и псевдонимы методов. Но эти поля и псевдонимы методов могут быть удалены, отключены или включены в тех классах, куда они будут скопированы.
Для решения проблемы «хрупкости базового класса» классы, от которых образуются объекты, не могут быть добавлены в таблицу родительских интерфейсов, а от классов, добавленных в таблицу родительских интерфейсов, нельзя непосредственно создавать объекты (экземпляры классов, переменные). Исключение составляют библиотечные классы, на которые оба этих ограничения не распространяются. Интерфейсы и библиотечные классы соответствующим образом выделяются по отношению к другим классам.
Устранение дублирования полей и псевдонимов методов
Если имеются дублирующие одинаковые поля и псевдонимы методов, полученные от разных родительских классов, содержащиеся в связанных родительских интерфейсах или добавленные непосредственно (без копирования полей и псевдонимов методов какого-то класса), то они автоматически выделяются как ошибочные. Программист должен отключить или удалить дублирующие поля и псевдонимы методов.
Сравнение классов
В процессе разработки программы содержимое классов можно сравнивать путем конструирования запросов, аналогичных запросам к базе данных.
Проверки целостности классов
PureBuilder осуществляет проверки во время конструирования программы или компиляции: (1) объявлены ли в новом классе все необходимые поля, обрабатываемые при вызове всех его псевдонимов методов (выдача ошибки "нет поля или лишний псевдоним метода"); (2) есть ли в новом классе поля, не обрабатываемые ни одним из его псевдонимов методов, кроме конструктора (выдача ошибки "нет псевдонима метода или лишнее поле")?
Создание объектов (экземпляров классов)
Объекты (экземпляры классов) в куче (динамической памяти) создаются с помощью оператора new, а объекты в стеке (статической памяти) создаются путем объявления в соответствующей таблице – как и переменные базовых типов.