Плоская форма класса
Плоская форма класса
Наследование - это скорее инструмент поставщика класса, чем клиента; это прежде всего внутренний механизм эффективного построения классов. И действительно, клиенту нужно знать о наследовании и структуре семейства классов ровно столько, чтобы он мог применять полиморфизм и динамическое связывание.
Как следствие, у нас должна быть возможность представить класс в самодостаточном виде независимо от его генеалогии. Это особенно важно, когда наследование служит для разделения различных компонентов сложной абстракции, как в случае концепции окон, частями которой являются деревья и прямоугольники.
Эту задачу решает плоская форма класса. Но вам не придется ее создавать. Ее построит один из инструментов среды разработки, который можно запустить, введя команду сценария (flat class_name) или щелкнув по соответствующей пиктограмме.
Плоская форма класса C - это корректная запись класса, имеющая, - с точки зрения клиента, не использующего полиморфизм, - ту же семантику, что и класс C, но лишенная всех предложений наследования. Именно так выглядел бы любой класс, если бы его создатель не мог пользоваться наследованием. Построение плоской формы предполагает:
[x]. устранение предложения inherit, если оно есть;
[x]. сохранение в неизменном виде всех определений и переопределений из C;
[x]. введение в класс объявлений всех унаследованных компонентов, скопированных из соответствующих классов-родителей, с учетом всех указанных в inherit преобразований: переименования, переопределения, отмены определений, выделения (select), объединения компонентов;
[x]. добавление к каждому унаследованному компоненту строки комментария вида: from ANCESTOR, где указано имя ближайшего предка, (пере)определившего компонент (а в случае объединения компонентов - победившая сторона);
[x]. восстановление полной формы предусловий и постусловий унаследованных методов (по правилам наследования утверждений, изложенным в следующей лекции);
[x]. восстановление полного инварианта класса как конъюнкции (and) всех родительских инвариантов с последующим преобразованием в случае применения переименованных или выделенных компонентов.
Полученный в результате класс содержит все компоненты оригинала, как введенные в самом классе, так и полученные им от предков (вторая категория компонентов от первой отличается лишь комментарием). В случае наличия меток в секциях объявления компонентов, например, feature - Access, подобные метки остаются. Секции с одинаковыми метками объединяются. В каждой секции компоненты выстраиваются по алфавиту.
На рисунке показана часть плоской формы класса LINKED_TREE из библиотеки Base. Результат получен с применением Class Tool в среде разработки ISE. Для повторения результата настройте Class Tool на LINKED_TREE и щелкните по кнопке формата Flat.
Рис. 15.14. Отображение плоской формы
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Основная форма If...Then
Основная форма If...Then Оператор If ... Then выполняет некоторый блок программного кода, если условие, которое вы предложили этому оператору, принимает значение True, и не делает ничего, если условие принимает значение False. Синтаксис оператора следующий:If условие Then( операторы,
Плоская поверхность
Плоская поверхность Команда PLANESURF позволяет создавать прямоугольные поверхности путем задания угловых точек. Кроме того, воспользовавшись дополнительным параметром этой команды, можно конвертировать объект в замкнутую поверхность, состоящую из любого количества
Строгая форма имени
Строгая форма имени Перед установкой компоновочного блока в GAC вы должны назначить компоновочному блоку строгое имя, которое уникальным образом идентифицирует издателя данного двоичного объекта .NET. При этом следует понимать, что "издателем" может быть и отдельный
Форма как графический объект
Форма как графический объект Каким образом можно скопировать форму в буфер обмена в виде графического изображения?uses clipbrd;procedure TShowVRML.Kopieren1Click(Sender: TObject);var bitmap:tbitmap;begin bitmap:=tbitmap.create; bitmap.width:=clientwidth; bitmap.height:=clientheight; try with bitmap.Canvas do CopyRect (clientrect,canvas,clientrect); clipboard.assign(bitmap); finally
Плоская поверхность
Плоская поверхность Команда PLANESURF позволяет создавать прямоугольные поверхности путем задания угловых точек. Кроме того, воспользовавшись дополнительным параметром этой команды, можно конвертировать замкнутую поверхность, состоящую из любого количества
Форма проекта
Форма проекта Нам понадобится форма с тремя страничками и тремя компонентами TMemo. В первом будет показываться исходный текст преобразуемого документа, во втором — XSLT-преобразование и в третьем — результат преобразования.Приблизительный внешний вид формы показан на
Форма букв
Форма букв Есть буквы (например, «п», «ш», «щ», «ч», «т», «и»), которые можно писать округленно или угловато. Восходящие и нисходящие штрихи этих букв некоторые соединяют полукруглыми линиями, такой почерк называется круглым. У других людей штрихи пересекаются между собой
Форма слов
Форма слов В процессе общения некоторые люди много и откровенно говорят о своих делах, планах и желаниях, другие же проявляют определенную сдержанность и даже скрытность. По почерку можно выявить степень откровенности, для этого необходимо обратить внимание на форму
Форма заглавных букв
Форма заглавных букв В написании заглавных букв наблюдается такое же разнообразие, как и в написании прописных букв. Они могут быть большими и маленькими, простыми и вычурными. По стилю написания заглавные буквы часто заметно отличаются от прописных и поэтому
9. Форма
9. Форма Признаки слева направо (рис. 189): Рис. 189• форма почерка угловатая;• форма почерка округлая;• форма почерка школьная;• форма почерка с печатными буквами;• форма почерка каллиграфическая;• форма почерка
Форма объявлений
Форма объявлений Отточим наши критические навыки вначале на чем-либо не столь существенном. Поэтому начнем с синтаксиса. Рассмотрим нотацию, используемую при объявлении компонентов. В отличие от многих языков мы не использовали для подпрограмм ключевых слов procedure или
Базовая форма
Базовая форма Программный объект довольно простое существо, если известен класс, которому он принадлежит. Пусть O - объект. По определению он является экземпляром некоторого класса. Точнее, он является прямым экземпляром (direct instance) только одного класса, например C. С
Форма и свойства инвариантов класса
Форма и свойства инвариантов класса Синтаксически инвариант класса является утверждением, появляющимся в предложении invariant, стоящим после всех предложений feature, и перед предложением end. Вот пример:class STACK4 [G] creation...Как в STACK2...feature...Как в STACK2...invariantcount_non_negative: 0 <= countcount_bounded:
Использование утверждений для документирования: краткая форма класса
Использование утверждений для документирования: краткая форма класса Второе использование является основным в производстве повторно используемых программных элементов и, более обще, в организации интерфейсов модулей в большой программной системе. Постусловия,
Краткая плоская форма
Краткая плоская форма Плоская форма класса дает корректное описание класса. Помимо роли, которую она играет в интересах документации, она представляет интерес для разработчиков, имеющих дело с самим классом или его потомками. Клиентам же класса нужна более абстрактная
Плоская сеть и анонимная технократия Лёха Андреев
Плоская сеть и анонимная технократия Лёха Андреев Опубликовано 20 марта 2014 Когда я учился на матмехе, самые прекрасные определения сути вещей приходили с военной кафедры. Нет, высшая геометрия и функциональный анализ тоже давали много изящных