Окна - это деревья и прямоугольники
Окна - это деревья и прямоугольники
Рассмотрим оконную систему с произвольной глубиной вложения окон:
Рис. 15.5. Окна и подокна
В соответствующем классе WINDOW мы найдем компоненты двух основных видов:
[x]. те, что рассматривают окно как иерархическую структуру (список подокон, родительское окно, число подокон, добавить, удалить подокно);
[x]. те, что рассматривают окно как графический объект (высота, ширина, отобразить, спрятать, переместить окно).
Этот класс можно написать как единое целое, смешав все компоненты. Однако такой проект будет не самым удачным. Класс WINDOW следует рассматривать как сочетание двух абстракций:
[x]. иерархической структуры, представленной классом TREE;
[x]. прямоугольного экранного объекта, представленного классом RECTANGLE.
На практике класс будет описан так:
class WINDOW inherit
TREE [WINDOW]
RECTANGLE
feature
... Характерные компоненты окна ...
end
Обратите внимание, класс TREE является родовым (generic) классом, а потому требует указания фактического родового параметра, здесь - самого класса WINDOW. Рекурсивная природа определения отражает рекурсию, присущую моделируемой ситуации, - окно является одновременно деревом окон.
Далее, можно подметить, что отдельные окна не содержат ничего, кроме текста. Эту особенность окон можно реализовать вложением, представив класс TEXT_WINDOW как клиента класса STRING, введя атрибут
text: STRING
Предпочтем, однако, вариант, в котором текстовое окно является одновременно строкой. В этом случае используем множественное наследование с родителями WINDOW и STRING. (Если же все наши окна содержат лишь текст, их можно сделать прямыми потомками TREE, RECTANGLE и STRING, однако и здесь решение "в два хода" возможно будет более предпочтительным.)
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Деревья и узлы
Деревья и узлы При работе с XSLT следует перестать мыслить в терминах документов и начать — в терминах деревьев. Дерево представляет данные в документе в виде множества узлов — элементы, атрибуты, комментарии и т.д. трактуются как узлы — в иерархии, и в XSLT структура дерева
Прямоугольники
Прямоугольники Мы уже умеем рисовать прямоугольники, используя описанные ранее методы strokeRect и fillRect. Но прямоугольники, рисуемые этими методами, представляют собой независимые фигуры, не являющиеся частью какого-либо сложного контура. Если мы хотим нарисовать
Прямоугольники
Прямоугольники Мы уже умеем рисовать прямоугольники, используя описанные ранее методы strokeRect и fillRect. Но прямоугольники, рисуемые этими методами, представ- ляют собой независимые фигуры, не являющиеся частью какого-либо сложного контура. Если мы хотим нарисовать
3.1. Структуры и деревья
3.1. Структуры и деревья Чтобы легче было понять сложную структуру, ее обычно представляют в виде дерева, в котором каждому функтору соответствует вершина, а компонентам соответствуют ветви дерева. Каждая ветвь может указывать на другую структуру, так что мы можем иметь
9.3. Деревья
9.3. Деревья Я не увижу никогда, наверное, Поэму столь прекрасную как дерево. Джойс Килмер, «Деревья»[11] В информатике идея дерева считается интуитивно очевидной (правда, изображаются они обычно с корнем наверху, а листьями снизу). И немудрено, ведь в повседневной жизни мы
Скошенные деревья
Скошенные деревья Как бы то ни было, ознакомившись с этими операциями простых и спаренных двухсторонних и односторонних поворотов, мы может их использовать в структуре данных, называемой скошенным деревом. Скошенное дерево (splay tree) - это дерево бинарного поиска,
Прямоугольники
Прямоугольники CopyRect Функция CopyRect копирует координаты одного прямоугольника в другой. BOOL CopyRect ( LPRECT lprcDst , // указатель на структуру для прямоугольника// назначения CONST RECT * lprcSrc // указатель на структуру для исходного// прямоугольника ); Параметры lprcDst - указывает на
Округленные прямоугольники
Округленные прямоугольники Так как .NET Compact Framework не позволяет создавать округленные прямоугольники встроенными средствами, то необходимо самостоятельно реализовать эту задачу. В этом разделе будет рассматриваться решение, предложенное Алексом Яхниным (Alex Yakhnin) в его
Слуховые окна и окна в крыше
Слуховые окна и окна в крыше Фактически наш дом, с конструктивной точки зрения, принял уже вполне законченный вид. Однако попробуем добавить к нему еще некоторые элементы, которые хоть и не обязательны, но нередко встречаются в различных коттеджах. Сначала построим одно
Деревья
Деревья Прежде, чем мы приступим к рассмотрению типов узлов и отношений между ними, необходимо определиться с самой структурой дерева. Древовидная структура задает для своих элементов отношение ветвления, очень похожее на строение обычного дерева — есть корневой узел
Многоугольники и прямоугольники
Многоугольники и прямоугольники Ранее изученные приемы явно недостаточны. Классы, конечно, дают способ хорошей декомпозиции на модули и обладают многими качествами, ожидаемыми от повторно используемых компонентов: они являются однородными, согласованными модулями; в
Прямоугольники
Прямоугольники Предположим теперь, что нам требуется новый класс, представляющий прямоугольники. Можно было бы начать его проектировать заново. Но прямоугольники это специальный вид многоугольников и у них много общих компонент: их также можно сдвигать, поворачивать и
У14.1 Многоугольники и прямоугольники
У14.1 Многоугольники и прямоугольники Дополните версии классов POLYGON и RECTANGLE, наброски которых приведены в начале лекции. Включите в них подходящие процедуры
У15.1 Окна как деревья
У15.1 Окна как деревья Класс WINDOW порожден от TREE [WINDOW]. Поясните суть родового параметра. Покажите, какое новое утверждение появится в связи с этим в инварианте
У15.7 Деревья
У15.7 Деревья Согласно одной из интерпретаций, дерево - это рекурсивная структура, представляющая собой список деревьев. Замените приведенное в этой лекции описание класса TREE как наследника LINKED_LIST и LINKABLE новым вариантомclass TREE [G] inheritLIST [TREE [G]]feature ...endРасширьте это описание до