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

1) Перейдем к настройке операции редактирования объекта. Так же, как и в случае добавления, для редактирования воспользуемся отдельным окном. Создадим новую форму ECO Enabled Windows Form. В этой форме будем редактировать выбранную в таблице кафедру. Назовем форму wfChairEdit (класс TChairEdit), в свойстве Text введем значение Редактирование кафедры.

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

var

callChairEdit: TChairEdit;

3) Перейдем к форме Преподаватели. Подключим форму wfChairEdit. Для редактирования объекта надо определить, какой объект подлежит редактированию. Для этого в форме Преподаватели создадим переменную типа clChair:

var

callLect: TLecturer;

CurChair: clChair;

В этой переменной будем хранить текущий объект.

4) Для взятия текущего объекта воспользуемся компонентом cmhChair. В обработчике события выбора пункта меню Действие > Кафедра > Редактировать пропишем следующие операции:

procedure TLecturer.MenuItem8_Click(sender: System.Object; e: System.EventArgs);

begin

if ehChair.GetList.Count <> 0

then

begin

if cmhChair.Element.AsObject is clChair

then

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

 

callChairEdit := TChairEdit.Create(EcoSpace);

callChairEdit.MdiParent := ParentWin;

callChairEdit.Show;

end;

end;

Окно редактирования будет создано в том случае, если есть хотя бы один объект класса Кафедра. Воспользуемся переменной CurChair в форме Редактирование кафедры, чтобы иметь доступ к значениям полей текущего объекта.

5) Вернемся к форме Редактирование кафедры. Разместим на ней три компонента Label, три компонента TextBox (категория Windows Forms) и две кнопки (см. Рисунок 10.6).

6) В свойстве FormBorderStyle установим значение FixedDialog, в свойстве ControlBox – False.

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

7) Подключим файл packModelUnit, выберем в свойстве EcoSpaceType компонента RHRoot значение projDeanOfficeEcoSpace для доступа к пространству ECO. Подключим форму wfLecturer (Преподаватель), чтобы использовать созданную в ней переменную CurChair.

8) При вызове окна Редактирование кафедры поля компонентов TextBox должны содержать значения соответствующих полей объекта, выбранного для редактирования.

Выделим форму в окне проектировщика и перейдем на вкладку Events (События) в инспекторе объектов. Выберем событие Load и сформируем обработчик, в котором запишем следующий код:

procedure TChairEdit.TChairEdit_Load(sender: System.Object; e: System.EventArgs);

begin

TextBox1.Text := CurChair.ChairName;

TextBox2.Text := CurChair.ChairHeadSNP;

TextBox3.Text := CurChair.ChairSecrSNP;

end;

9) После того, как пользователь отредактировал данные, сохраним изменения. Сохранение происходит и в случае, когда данные не были изменены. В обработчике нажатия кнопки ОК запишем код:

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

CurChair.ChairName := TextBox1.Text;

CurChair.ChairHeadSNP := TextBox2.Text;

CurChair.ChairSecrSNP := TextBox3.Text;

 

Close;

end;

Эта процедура аналогична операции добавления, за исключением того, что мы не создаем новый объект, а оперируем с существующим объектом.

10) Запустим приложение, проверим функцию редактирования кафедры (см. Рисунок 10.7)

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

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

TextBox3.Text := CurLect.MaxAmountHours.ToString;

Обратное преобразование производится применением функции Convert.ToInt32:

CurLect.MaxAmountHours := Convert.ToInt32(TextBox3.Text);

Работа со справочником

Создадим справочник со списком должностей, которые можно будет назначать преподавателю. Многие операции описаны ранее, поэтому предлагается сделать их по аналогии.

1) Перейдем к форме Преподаватели. Добавим на форму компонент dgPosition (экземпляр класса DataGrid), в нем будут отображаться список должностей выбранного преподавателя и ehPosition (экземпляр класса ExpressionHandle). Настроим ehPosition: в свойстве RootHandle выберем значение cmhLecturer, а в свойстве Expression сформируем выражение self.rolePosition. Настроим интерфейс (см. Рисунок 10.8).

Рисунок 10.8 – Создание таблицы Должности


2) В компонент MainMenu добавим еще два пункта: Назначить должность и Освободить от должности. При выборе пункта Назначить должность будет создаваться окно, в котором можно будет назначить должность выбранному преподавателю. Если потребуется освободить преподавателя от должности, выберем должность в таблице и нажмем пункт меню Освободить от должности.

3) Создадим новую форму wfPositAsign (класс TPositAsign), в свойстве Text формы введем значение Назначение должности. Эта форма будет служить для выбора и назначения должности текущему преподавателю. Настроим создание формы по выбору пункта Назначить должность в главном меню формы Преподаватели. Но перед этим сохраним текущий объект Преподаватель, который будет использован в форме Назначение должности. Настроим интерфейс созданной формы (см. Рисунок 10.9).

Рисунок 10.9 – Настройка компонентов формы Назначение должности

Компонент Label добавлен на форму, чтобы отобразить в его поле Ф.И.О. выбранного в таблице преподавателя. Выбирать нужную должность будем с помощью компонента ComboBox – выпадающего списка. Если нужная должность отсутствует, ее можно будет добавить в отдельном окне. Окно добавления должности будет создаваться нажатием кнопки, расположенной справа от выпадающего списка. При нажатии на кнопку ОК, преподавателю будет назначена выбранная должность, после чего окно закроется. При отмене произойдет закрытие окна Назначение должности.

4) В обработчике события загрузки окна Load запишем одну операцию

Label1.Text := CurLect.LecturerSNP;

5) Добавим на форму дескрипторs ehPosition и cmhPosition. Настроим их на обращение к экземплярам класса clChair. В свойстве BindingContext дескриптора cmhPosition выберем значение ComboBox1.

6) В свойстве DataSource компонента ComboBox1 установим значение ehPosition, а в свойстве DisplayMember – PositionName. После этого выпадающий список будет отображать список должностей.

7) В обработчике события нажатия кнопки ОК запишем следующий код:

var

CurPosition: clPosition;

begin

if cmhPosition.Element.AsObject is clPosition

then

begin

CurPosition := clPosition(cmhPosition.Element.AsObject);

 

CurLect.rolePositions.Add(CurPosition);

end;

Close;

Строка

CurLect.rolePositions.Add(CurPosition);

производит связывание выбранной должности с преподавателем.

8) Создадим форму wfPositAdd (класс TPositAdd), заголовок формы назовем Добавление должности. В этой форма будем создавать справочник должностей. Настроим создание данной формы по нажатию кнопки, расположенной справа от выпадающего списка на форме Назначение должности. Настроим интерфейс (см. Рисунок 10.10).

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

Таблицу Должности настроим на отображение списка всех должностей. По нажатию кнопки Добавить создадим новый объект класса clPosition (Должность), в котором единственный атрибут PositionName получит значение, введенное в поле компонента TextBox. Кнопку Выход настроить на закрытие окна.

9) Запустим приложение. Проверим настроенные операции (см. Рисунок 10.11).

Рисунок 10.11 – Работа со справочником Должность


Поиск объектов

Рассмотрим операцию поиска в приложении. Настроим поиск преподавателя по маске (строке, содержащей фамилию, имя или отчество).

10) В компонент MainMenu добавим пункт Найти. При выборе пункта будет создаваться окно, в котором можно будет по введенной строке осуществить поиск.

11) Создадим новую форму wfLectSearch (класс TLectSearch), в свойстве Text формы введем значение Поиск преподавателя. Настроим создание формы по выбору пункта Найти в главном меню формы Преподаватели. Настроим интерфейс созданной формы (см. Рисунок 10.9).

Рисунок 10.12 – Настройка компонентов интерфейса

На форму поместим компонент TextBox для ввода строки, по которой будет осуществляться поиск. Результаты поиска будут выведены в таблице после нажатия кнопки Найти.

Компонент MainMenu содержит пункты: Редактировать и Удалить, при выборе которых будут производиться соответствующие действия с выбранным в таблице преподавателем. Перед тем как отредактировать либо удалить объект проверим наличие хотя бы одного преподавателя в таблице.

if ehLecturer.GetList.Count <> 0

then

По нажатию кнопки Выход окно Поиск преподавателя закроется.

12) Добавим в проект дескрипторы ehLecturer и cmhLecturer. Первый потребуются для осуществления OCL-запроса и вывода полученной коллекции. Второй необходим для оперирования с выбранным в таблице преподавателем.

13) Настроим поля таблицы так, чтобы можно было отобразить в ней название кафедры каждого преподавателя. Для этого надо настроить ehLecturer. Обратимся к свойству Columns элемента ehLecturer. Откроется диалоговое окно, предназначенное для настройки колонок. Новые колонки создаются в дополнение к уже существующим, автоматически созданным на базе текущих атрибутов класса Преподаватель. Для добавления колонок служит кнопка Add. При ее нажатии открывается меню выбора типа колонки. Создадим одну колонку. В свойстве Name задается название колонки, введем в него строку LectChair. В качестве выражения OCL введем конструкцию:

self.roleChair.ChairName

В ней происходит обращение к ссылке на кафедру (к окончанию ассоциативной связи roleChair), связанную с текущим преподавателем. Нажмем кнопку ОК – окно добавления колонки закроется. В таблице появится новая колонка LectChair.

14) В обработчик нажатия кнопки Найти запишем код:

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

var

StrSearch: string;

StrExpression: string;

begin

StrSearch := TextBox1.Text;

StrExpression := 'clLecturer.allInstances->select(LecturerSNP. sqlLikeCaseInsensitive(''' + ' %' + StrSearch + ' %' + '''))';

ehLecturer.Expression := StrExpression;

dgLecturer.CaptionText := 'Результаты поиска';

end;

Переменная StrSearch предназначается для хранения строки-параметра, которую передадим в OCL-запрос. С помощью переменной StrExpression будет формироваться строка, которую передадим дескриптору ehLecturer в качестве выражения. Операция sqlLikeCaseInsensitive используется совместно с операцией Select и обеспечивает поиск записей, содержащих заданную строку-параметр. При этом применим символ маски поиска (%). В результате запроса будут получены все записи в фамилии, имени или отчестве которых будет встречаться подстрока записанная в переменную StrSearch.

15) Настроим функционирования пунктов главного меню. В обработчике выбора пункта меню Действие > Редактировать запишем операции сохранения текущего объекта Преподаватель в переменную CurLect типа clLecturer и создания окна Редактирование преподавателя. К форме Редактирование преподавателя подключим форму Преподаватель, в которой уже объявлена переменная CurLect. В обработчике выбора пункта меню Действие > Удалить запишем операции удаления текущего объекта Преподаватель, как делали это раньше.

16) Запустим приложение. Проверим работу поиска и действий с найденными преподавателями (см. Рисунок 10.13).

Рисунок 10.13 – Поиск и редактирование объектов

Задания

1) Организовать добавление и редактирование объектов в отдельных окнах. Реализовать удаление и обновление базы данных при каждом изменении информации.

2) Применить операции поиска.

3) Создать дружественный интерфейс.

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

1) Как программно создаются объекты ECO?

2) Как программно удалить объект ECO?

3) Как программно формируются ассоциативные связи между объектами ECO?

4) С помощью каких операций OCL можно организовать поиск?

Заключение

Рассмотренные в пособие лабораторные работы охватывают основной процесс разработки программного обеспечения. Полученные в результате выполнения этих работ навыки, позволят самостоятельно обозначать проблемы, выполнять постановку задачи, анализировать требования, проектировать и разрабатывать программное обеспечение. Однако этих знаний и навыков не достаточно для организации командной разработки, управления процессом и отслеживания качества получаемого продукта. Получение этих знаний – задача другой дисциплины «Управление и организация процесса разработки программного обеспечения».

В предложенных в данном пособии лабораторных работах большое внимание уделяется анализу требований и архитектуре программных систем. Эти области меньше всего освещаются в учебной и специальной литературе, ровно, как и технологический процесс разработки программных систем. В данном учебном пособии совместно с пособием по курсовому проектированию сделан упор на технологию (на технологический процесс), где все процессы разработки взаимосвязаны и результаты одних процессов используются как исходные данные в других.

Взаимосвязанный технологический цикл процесса разработки позволяет сформировать целостную картину об этом процессе, что является неотъемлемым требованием соответствующих компетенций для выпускников направления «230100 – Информатика и вычислительная техника».

Библиографический список

1) Басс Л., Клементс П., Кацман Р. Архитектура программного обеспечения на практике. 2-е издание. – СПб.: Питер, 2006. – 575 с.

2) Бенькович Е.С., Колесов Ю.Б., Сениченков Ю.Б. Практическое моделирование динамических систем. – СПб.: БХВ-Петербург, 2002. – 464 с.

3) Благодатских, В.А. Стандартизация разработки программных средств: Учеб. пособие / В.А. Благодатских, В.А. Волнин, К.Ф. Поскакалов; Под ред. О.С. Разумова. – М.: Финансы и статистика, 2003. – 288 с.

4) Бобровский С.И. Технологии Delphi. Разработка приложений для бизнеса. Учебный курс. – СПб.: Питер, 2007. – 720 с.

5) Боггс Уэнди, Боггс Майкл. UML и Rational Rose. – М.: Издательство «Лори», 2001. – 580 с.

6) Брауде Э. Технология разработки программного обеспечения. – СПб.: Питер, 2004. – 655 с.

7) Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. – М.: «Издательство Бином», 1999. – 560 с.

8) Вигерс Карл. Разработка требований к программному обеспечению. – М.: Издательско-торговый дом «Русская редакция», 2004. – 576 с.

9) Влиссидес Дж. Применение шаблонов проектирования. Дополнительные штрихи. – М.: Издательский дом «Вильямс», 2003. – 144 с.

10) Войнов И.В. Моделирование экономических систем и процессов. Опыт построения ARIS-моделей: Монография / И.В. Войнов, С.Г. Пудовкина, А.И. Телегин; Челябинск, Изд. ЮУрГУ, 2002. – 392с.

11) Гамма Э., Хелм., Джонсон Р., Влиссидес Дж. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2003. – 368 с.

12) ГОСТ 34.602-89. Информационная технология. Комплекс стандартов на автоматизированные системы. Техническое задание на создание автоматизированной системы

13) Грибачев К.Г. Delphi и Model Driven Architecture. Разработка приложений баз данных. – Спб.: Питер, 2004. – 348 с.

14) Иванова Г.С. Технология программирования: Учебник для вузов. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. – 320 с.

15) Камаев В.А. Технологии программирования / В.А. Камаев, В.В. Костерин; Высш. Шк., М., 2005. – 359 с.

16) Константайн Л., Локвуд Л. Разработка программного обеспечения. – СПб.: Питер, 2004. – 592 с.

17) Ларман Крэг. Применение UML и шаблонов проектирования. 2-е издание. – М.: Издательский дом «Вильямс», 2002. – 624 с.

18) Леонников А.В. Самоучитель UML. – 2-е изд. – СПб: БХВ-Петербург, 2004. – 432 с.

19) Леффингуэлл Дин, Уидриг Дон. Принципы работы с требованиями к программному обеспечению. Унифицированный подход.: – Издательский дом «Вильямс», 2002. – 448 с.

20) Орлов С.А. Технологии разработки программного обеспечения. Учебное пособие. 2-е изд. СПб.: Питер, 2003. – 480 с.

21) Рамбо Дж., Блаха М. UML 2.0. Объектно-ориентированное моделирование и разработка. 2-е изд. – СПб.: Питер, 2007. – 544с.

22) Соммервилл Иан. Инженерия программного обеспечения, 6-е издание. – М.: Издательский дом «Вильямс», 2002. – 624с.

23) Сухомлин В.А. Введение в анализ информационных технологий. Учебник для вузов. – М.: Горячая линия-Телеком, 2003. – 427 с.

24) Фаулер М. UML. Основы, 3-е издание. – Пер. с англ. – СПб: Символ-Плюс, 2004. – 192 с.

25) Чарнецки К. Пораждающее программирование: методы, инструменты, применение / К. Чарнецки, У. Айзенкер; Питер, СПб, 2005. – 731с.

26) Шаллоуей Алан, Тротт Джеймс. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию. – М.: Издательский дом «Вильямс», 2002. – 288 с.



rent">32