Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по циклу лабораторных работ Технологии разработки программного обеспечения .doc
Скачиваний:
204
Добавлен:
06.03.2016
Размер:
3.8 Mб
Скачать
    1. Задания

  1. Продумать, какой объект из предметной области можно представить в виде последовательности определенных состояний.

  1. Расширить модель UML: создать машину состояний для выбранного объекта (или объектов) и модифицировать диаграмму классов.

  2. Обновить базу данных, модифицировать пользовательский интерфейс и связать его с моделью.

  3. Применить автоформы или контекстное меню.

    1. Контрольные вопросы

  1. Что такое автомат?

  1. Назовите базовые правила работы автоматов в языке UML?

  2. Для чего предназначены диаграммы состояний?

  3. Как строятся диаграммы машин состояний?

  4. Как настраиваются триггеры в диаграммах состояний?

  5. Как задаются правила перехода на языке OCLдля триггеров?

  6. Как связать триггеры с элементами пользовательского интерфейса?

  1. Расширенные возможности разработкиMda-приложений

Цель работы:

  • научиться использовать возможности языка программирования для реализации расширенных функциональных возможностей логики приложения;

  • научиться использовать расширенные возможности разработки пользовательского интерфейса во взаимосвязи с моделью.

    1. СозданиеMda-приложения с расширенными возможностями

С помощью визуальных средств моделирования BDSможно быстро создавать проекты с весьма сложной логикой. В качестве платформно-независимых сценариев, описывающих эту логику, используются визуальные диаграммы UML и универсальный язык OCL. Развитие проекта может происходить на высоком уровне абстрагирования от программного кода. Однако в практических проектах реализуются более тонкие аспекты взаимодействия программы с пользователем, нежели те, что предлагаются стандартными элементами управления, наподобие DataGrid. В проектах ECO не всегда удается обойтись без ручного программирования, да это и не требуется. Оптимальный вариант разработки заключается в сочетании визуальных и моделирующих возможностей оболочки и средств быстрого создания типовых интерфейсных форм с ручным кодированием особенностей и необычных деталей реализации.

    1. Модификация моделиUml

Продолжим разрабатывать проект, выполненный в предыдущей лабораторной работе.

Перед тем как начать расширение пользовательских возможностей, дополним диаграмму классов рассматриваемого примера.

  1. К существующим трем классам Кафедра, Преподаватель и Дисциплина добавим новый класс clPosition(Должность) с единственным атрибутом PositionName (Название должности).

  1. Создадим связь между классами Преподаватель и Должность (см. Рисунок 10 .72).

Рисунок 10.72 – Модифицированная диаграмма классов

Между классами Преподаватель и Должность установим отношение однонаправленной ассоциации (стрелка, направленная к классу Должность). Чтобы поставить стрелку нужно в свойстве Navigable(дляEnd1) выбрать значениеFalse. Это отношение показывает, что должности используются как справочник для всех преподавателей.

  1. Чтобы сгенерировать исходный код ECOв соответствие с построенной моделью выберем операциюRegenerate ECO source code из консольного меню окна Model View.

  2. Для отображения ECOпространства в базу данных сгенерируем схему на закладке настройки объектного пространстваprojDeanOfficeEcoSpace. Нажмем кнопкуGenerateSchema.

    1. Программное добавление объекта

Для изучения способов обращения к объектам ЕСО из программного кода реализуем и расширим преды­дущий проект с привлечением редактора исходных текстов.

  1. Перейдем к форме Преподаватели. Удалим все кнопки на форме. Все действия будут вызываться из главного меню.

  1. Добавим на форму компонентMainMenu(категорияComponents). Создадим пункт Действие, в нем три пункта Кафедра, Преподаватель, Закрыть. В пунктах Кафедра и Преподаватель еще три пункта: Добавить, Редактировать, Удалить. Кроме команд в меню можно добавить разделитель – горизонтальную линию. Для этого следует выделить команду, перед которой надо поместить разделитель, и из контекстного меню выбрать командуInsertSeparator(см. Рисунок 10 .73).

Рисунок 10.73 – Вставка разделителя в список команд

  1. Для работы с объектами таблицы будем применять отдельные окна. Создадим новую форму командой File > New > Other. Выберем значок ECO Enabled Windows Form из вкладки New ECO Files (категория Delphi for .NET Projects). В этой форме будем добавлять кафедру, назовем ееwfChairAdd(классTChairAdd), в свойствеTextвведем значение Добавление кафедры.

  2. Настроим вызов этой формы по выбору пункта меню Действие > Кафедра > Добавить. Перейдем к вкладке Codeформы Добавление кафедры. Объявим переменную, ответственную за создание данной формы:

var

callChairAdd: TChairAdd;

  1. Чтобы вызвать форму как дочернюю в Главной форме, создадим в последней переменную ParentWin:TMain. В конструкторе создания Главной формы (constructor TMain.Create) пропишем строку:

ParentWin := self;

Теперь мы можем обращаться через эту переменную к родительскому окну.

  1. Перейдем к форме Преподаватели. Чтобы в ней были видны созданные переменные, подключим формы wfChairAddиwfMainкомандойFile>UseUnit.

  2. На событие выбора пункта меню Действие > Кафедра > Добавить пропишем следующие операции:

callChairAdd := TChairAdd.Create(EcoSpace);

callChairAdd.MdiParent := ParentWin;

callChairAdd.Show;

  1. Вернемся к форме Добавление кафедры. Разместим на ней три компонента Label, три компонентаTextBox(категорияWindowsForms) и две кнопки. Назовем созданные компоненты (см. Рисунок 10 .74).

  2. Для того чтобы во время работы программы пользователь не мог при помощи мыши изменить размер окна, в свойстве FormBorderStyleнастройки формы установим значение FixedDialog. Чтобы в заголовке окна не отображались системные кнопки Свернуть, Развернуть и Закрыть, в свойствеControlBoxустановим значениеFalse.

Рисунок 10.74 – Настройка компонентов формы Добавление кафедры

  1. Подключить файл packModelUnitкомандойFile>UseUnitи выберем в свойствеEcoSpaceTypeкомпонентаRHRootзначениеprojDeanOfficeEcoSpace, чтобы получить доступ к пространствуECO. Необходимо, чтобыpackModelUnitбыл объявлен в разделе интерфейса модуля формы.

interface

uses

packModelUnit,

  1. Создадим обычный обработчик нажатия кнопки ОК. В нем запишем команду создания нового объекта Кафедра. Для этого задействуем конструктор (метод класса Кафедра), существующий во всех классах ЕСО. Параметром его должна быть ссылка на объектное пространство модели, автоматически создаваемое на время рабо­ты программы. Эта ссылка представлена идентификатором EcoSpace, который обозна­чает свойство текущей формы, автоматически создаваемое для проекта ЕСО. После создания пустого объекта необходимо заполнить поля данными. Для этого присвоим значения, введенные пользователем, соответствующим полям созданного объекта.

procedure TChairAdd.Button1_Click(sender: System.Object; e: System.EventArgs);

var

NewChair : clChair;

begin

NewChair := clChair.Create(EcoSpace);

NewChair.ChairName := TextBox1.Text;

NewChair.ChairHeadSNP := TextBox2.Text;

NewChair.ChairSecrSNP := TextBox3.Text;

Close; // закрытие окна

end;

Данный код функционально эквивалентен визуальной настройке кнопки на действиеAdd(Добавить). Тогда мы выбрали поставщик объектов (корневой дескриптор, связан­ный с объектным пространством) в ее свойствеRootHandle. Выполняемое кнопкой дей­ствие (создание объекта) задавалось в ее свойствеEcoListAction.

Новый экземпляр класса clChairавтоматически разместится в кэше объектного про­странстваEcoSpace. Через дескрипторehChairон также автоматически представ­ляется в таблице – специальные действия для этого программировать не надо. Если теперь запустить программу, то после нажатия кнопки таблица пополняется новыми объектами.

  1. Сформируем обработчик нажатия кнопки Отмена. По нажатию на эту кнопку создания объекта происходить не должно, окно закрывается.

procedure TChairAdd.Button2_Click(sender: System.Object; e: System.EventArgs);

begin

Close;

end;

  1. Введенные изменения сохраним в базе данных. Это можно сделать командой

EcoGlobalActions.ExecuteAction(EcoAction(1),RHRoot);

Поместим ее в обработчик события закрытия окна Добавление кафедры (Closed). В дальнейшем будем использовать данную команду после любого изменения данных.

  1. Запустим приложение, проверим функционирование настроенных кнопок (см. Рисунок 10 .75).

  2. Настроим добавление преподавателя в отдельном окне. Оно будет вызываться выбором пункта меню Действие > Преподаватель > Добавление. Так как одной кафедре может принадлежать несколько преподавателей, то перед добавлением объекта Преподаватель, нужно определить к какой кафедре необходимо его добавить. Поэтому перед созданием окна Добавление преподавателя, сохраним текущий объект кафедры в переменную:

CurChair := clChair(cmhChair.Element.AsObject);

По нажатию кнопки ОК свяжем созданный объект Преподаватель с текущим объектом Кафедра:

CurChair.roleLecturers.Add(NewLect);

Подобным образом настроим добавление дисциплины в отдельном окне. Оно будет создаваться выбором пункта меню в окне Преподаватели.

Рисунок 10.75 – Добавление объекта в отдельном окне