Технологии программирования
Шрифт:
8.10. ПРИМЕР РЕТРОСПЕКТИВНОЙ РАЗРАБОТКИ ИЕРАРХИИ КЛАССОВ БИБЛИОТЕКИ ВИЗУАЛЬНЫХ КОМПОНЕНТ DELPHI И C++ BUILDER
Delphi и C++ Builder представляет собой визуальное средство разработки корпоративных информационных систем. В C++ Builder используется язык объектно-ориентированного программирования C++, а в Delphi — Object Pascal. Несмотря на это, обе среды используют одни и те же модули библиотеки визуальных компонент, написанных на Object Pascal.
Каждый тип органов управления системы описывается классом, а помещаемые
С целью уяснения процессов разработки иерархии классов предпримем попытку ретроспективного анализа иерархии классов системы Delphi/C++ Builder.
В процессе анализа была расписана иерархия классов, избранных для примера органов управления, выделены некоторые обязанности, которые мог бы наложить на них разработчик, а затем на основе сравнения списков выделенных обязанностей предпринята попытка обосновать иерархию классов, принятую в средах Delphi/C++ Builder.
Следует отметить, что данный анализ проводится с чисто учебными целями, поэтому здесь не рассмотрены все органы управления, а также все обязанности, которые может наложить разработчик на тот или иной орган управления.
Рассмотрим органы управления, которые могут быть получены транспортировкой их при помощи мыши с палитры компонент Delphi/C++ Builder.
— TButton — обыкновенная кнопка;
— TRadioButton — радиокнопка (группа кнопок с зависимой фиксацией, обеспечивающей возможность выбора лишь одной кнопки из группы);
— TListBox — обычный список;
— TDBListBox — список для работы с таблицами данных;
— TDataSource — источник данных (является посредником между элементами DataAccess: Table, Query, — и органами управления базами данных DataControls: DBGrid, DBEdit и т. п.).
Попытаемся в общих чертах прокомментировать данную иерархию и обосновать ее на основе метода распределения обязанностей. Ниже приведен набор обязанностей для перечисленных компонентов.
Обязанности объектов класса TDataSource:
— контролировать доступ пользователя к элементам TDataSet;
— обеспечивать возможность определения, подключен ли TDataSource к некоторому элементу TDataSet;
— обеспечивать возможность работы с дочерними компонентами;
— обеспечивать возможность копирования данных в другой объект того же класса;
— обеспечивать возможность уничтожения объекта с высвобождением памяти;
— обеспечивать возможность посылать сообщения;
— определять имя класса, объектом которого является данный элемент.
Обязанности
— обрабатывать сообщения WMLBUTTONDOWN и WMLBUTTONDBLCLK (нажатие и двойное нажатие левой кнопки мыши);
— программно эмулировать нажатие кнопки;
— обрабатывать сообщения от клавиатуры;
— получать фокус ввода;
— определять, имеется ли фокус ввода;
— определять, может ли объект иметь фокус ввода (например, если элемент невидим, ему нельзя передать фокус ввода);
— обрабатывать сообщение BMCLICK (происходит после нажатия кнопки мыши);
— становиться видимым и невидимым;
— перерисовываться;
— обеспечивать возможность перевода точки из системы координат окна в систему координат экрана;
— хранить идентификатор родителя (с возможностью изменить родителя);
— обеспечивать возможность работы с дочерними компонентами;
— обеспечивать возможность копирования данных в другой объект того же класса;
— обеспечивать возможность уничтожения объекта с высвобождением памяти;
— обеспечивать возможность посылать сообщения;
— определять имя класса, объектом которого является данный элемент.
Обязанности объектов класса TRadioButton:
— обрабатывать сообщения WMLBUTTONDOWN и WMLBUTTONDBLCLK (нажатие и двойное нажатие левой кнопки мыши);
— определять, какая выбрана кнопка из группы кнопок;
— обрабатывать сообщения от клавиатуры;
— получать фокус ввода;
— определять, имеется ли фокус ввода;
— определять, может ли объект иметь фокус ввода (например, если элемент невидим, ему нельзя передать фокус ввода);
— обрабатывать сообщение BMCLICK. (происходит после нажатия кнопки мыши);
— становиться видимым и невидимым;
— перерисовываться;
— обеспечивать возможность перевода точки из системы координат окна в систему координат экрана;
— хранить идентификатор родителя (с возможностью изменить родителя);
— обеспечивать возможность работы с дочерними компонентами;
— обеспечивать возможность копирования данных в другой объект того же класса;
— обеспечивать возможность уничтожения объекта с высвобождением памяти;
— обеспечивать возможность посылать сообщения;
— определять имя класса, объектом которого является данный элемент.
Обязанности объектов класса TListBox:
— очищать список;
— обеспечивать возможность нахождения нескольких элементов из списка;
— определять номер элемента списка по координатам точки, принадлежащей объекту класса TListBox;
— обрабатывать сообщения от клавиатуры;
— получать фокус ввода;
— определять, имеется ли фокус ввода;
— определять, может ли объект иметь фокус ввода (например, если элемент невидим, ему нельзя передать фокус ввода);
— обрабатывать сообщение BM_CLICK (происходит после нажатия кнопки мыши);