Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по АРМ произв. менеджера / Учебное пособие ПИС.doc
Скачиваний:
272
Добавлен:
04.06.2015
Размер:
2.34 Mб
Скачать

6.3.6. Построение диаграммы классов и модуля проекта

Диаграмма классов (Class diagram) включает в себя набор классов модели и описание каждого из них. Разрешается также добавлять и удалять отдельные классы. Между классами можно организовывать необходимые UML – связи.

В справочной системе ModelMaker через команды Help/Contents/Diagram Editor/Class diagrams просмотрите пример диаграммы классов.

Каждый класс на диаграмме отображается в некотором стиле, определенном настройками ModelMaker. Текущий стиль класса можно

изменить через двойной щелчок. Настройка стиля выполняется на вкладке Symbol style открывающегося диалогового окна.

Упражнение 9. Создание диаграммы классов модели

  1. Маркируйте в левом верхнем углу вкладку «Diagrams» и через кнопку «Add class diagram» создайте в главном окне новую диаграмму классов;

  2. Перейдите на вкладку «Classes» и просмотрите в браузере список объявленных Вами ранее классов;

  3. Вернитесь к созданному пустому окну диаграммы классов. Перетащите мышью из браузера несколько классов в окно диаграммы классов;

  4. Сделайте активным один из классов, (например, класс – сущность). Этому классу зададим необходимые атрибуты и методы. Прежде всего, после двойного щелчка перейдем на вкладку Symbol style. Затем в раскрывающемся списке Member list style (Список стилей элементов) выберем значение Auto Member list. После этого станут доступными дополнительные флажки элементов (Field, Properties, Events, Methods), которые могут входить в класс. Раскрывающийся список Member visibility filter (Фильтр видимости элементов класса) определяет видимость составляющих класса. Неактивные состояния отдельных флажков редактора класса означают использование настроек родительской диаграммы, на основе которой создавалась данная диаграмма.

Рисунок 32 – Диаграмма последовательности «Базовые действия» для варианта использования «Зарегистрироваться на курсы»

  1. Добавим активному классу новые атрибуты и методы, устанавливающие его функциональность. Необходимые атрибуты и методы классов определяются на основе анализа диаграмм последовательностей и описания предметной области. Для включения их в класс воспользуемся кнопками просмотрщика интерфейса классов, находящегося в нижнем левом углу окна. Кнопка Add Property (добавить свойство) открывает диалоговое окно создания в классе нового свойства. Добавим в один из классов новое свойство. В названии типа свойства следует выбрать значение User Defined (Определяемое пользователем);

  2. Далее необходимо указать имя свойства (например, Fio) и его видимость (Visibility). Будем задавать следующие значения видимости: private – доступность только из модуля, в котором класс описан; protected - доступность из модуля описания класса и классов - наследников; public – полная доступность; published - полная доступность с возможностью редактирования на этапе проектирования.

Рисунок 33 – Диаграмма последовательности «Создать график» для варианта использования «Зарегистрироваться на курсы»

Флажок Property Override (Перезапись родительского свойства) следует отключить, так как свойства будем считать оригинальными, а не наследуемыми от другого класса.

  1. В группе Read Access (чтение значения атрибута) выберем Method (Метод). В ответ система автоматически сгенерирует название метода GetFio, предназначенного для доступа к значению свойства. Первыми символами в его имени будут Get;

  2. Выберем также в группе Write Access создаваемого свойства значение Method. Система создаст название метода (SetFio), предназначенного для записи значения свойства. Первыми символами в его имени будут Set. Параметр метода задается в списке Write parametr. Укажите любое имя (например, Avalue);

  3. Чтобы иметь доступ к данному полю внутри класса следует включить флажок State Field (Статическое поле);

  4. После завершения диалога получим новое свойство класса Fio, статическое свойство FFio и два метода (GetFio и SetFio). Статическое свойство FFio является внутренней переменной данного свойства, первым символом имени всегда является F. Эта переменная используется для сохранения значения свойства. Фрагмент диаграммы классов представлен на рисунке 34. В данной диаграмме атрибуты и операции определены только для двух классов. На рисунке 35 представлено окно ModelMaker, в котором видны браузер с перечнем классов, окно просмотрщика интерфейса классов и фрагмент диаграммы классов.

  5. Далее следует подготовить программную реализацию двух методов, заготовки которых мы создали в п.8,9. Для этого маркируем один из методов и переходим со страницы Diagram Editor на страницу Implementation. Ввод команд производится построчно. Сначала выбирают строку (новая формируется через команду Add section), затем переходят в правую часть окна и набирают оператор. Затем кнопкой Save code вводят текст. Он скопируется в левую часть окна. Например, для метода GetFio запишем команду

Result:=FFio

Для метода SetFio запишем

Ffio:=Avalue

  1. Аналогично создадим для данного класса другие необходимые свойства.

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

Если на диаграмме последовательности к классу подходит сообщение, то в данный класс следует добавить операцию реализации. Для выявления всех операций реализации одного класса следует проанализировать все диаграммы последовательностей, в которых данный класс участвует. Для включения в класс операции реализации следует щелкнуть по кнопке Add Metods, задать имя операции и выполнить диалог по аналогии с п.11. Для одной операции создайте программный код, реализующий необходимую бизнес-функцию, а для остальных операций можно ограничиться формированием заготовок подпрограмм.

  1. Затем по аналогии создадим для данного класса и остальных классов необходимые атрибуты и операции.

  2. Теперь сгенерируем новый модуль, в котором будут представлены созданные классы модели. Для создания нового модуля перейдем на панель Units Просмотрщика классов и нажмем кнопку Add (Добавить модуль). В поле, где задается местоположение исходного файла (Relative Unit file name), укажем подходящие имя файла и путь. В нижней части окна переместим в правую часть названия классов, включаемых в модуль. После окончания диалога появится сгенерированный шаблон будущего модуля.

Рисунок 34 – Фрагмент диаграммы классов модели информационной системы регистрации для учебного заведения

  1. Для генерации конечного кода модуля следует щелкнуть по кнопке Unlock, затем нажать кнопку Generation. Далее необходимо запустить Delphi, затем вернуться к ModelMaker и нажать кнопку Locate In Delphi. В результате получим шаблон модуля, который мы создали средствами объектно – ориентированного проектирования и визуального моделирования с помощью CASE – системы ModelMaker. Созданный модуль можно добавить в разрабатываемый проект. Программный код созданного модуля приведен ниже. В нем описаны все классы, представленные на диаграмме классов, а также шаблоны заявленных процедур и функций. Их следует дополнить конкретным содержанием, что относится уже к программированию, а не проектированию.

Далее в разрабатываемый проект можно включать объекты, являющиеся экземплярами разработанных нами классов.

Рисунок 35 – Окно ModelMaker с браузером с перечнем классов, просмотрщиком интерфейса классов и фрагментом диаграммы классов

Программный код модуля, созданного средствами средствами объектно-ориентированного проектирования и визуального моделирования с помощью CASE-системы ModelMaker

unit Modul1;

interface {Раздел описаний модуля}

uses

SysUtils, Windows, Messages, Classes, Graphics, Controls,

Forms, Dialogs;

type

IInterface = interface ()

['{00000000-0000-0000-C000-000000000046}']

function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;

function _AddRef: Integer; stdcall;

function _Release: Integer; stdcall;

end;

IUnknown = interface ()

['{00000000-0000-0000-C000-000000000046}']

function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;

function _AddRef: Integer; stdcall;

function _Release: Integer; stdcall;

end;

TCourseCatalogSystem = class (TObject)

end;

TObject = class ()

public

constructor Create;

destructor Destroy; virtual;

end;

TProfessor = class (User)

end;

TRegisterForCoursesForm = class (TObject)

end;

TRegistrationController = class (TObject)

end;

TSchedule = class (TObject)

end;

TStudent = class (User)

private

FAdress: TAdress;

FFio: Integer;

FGruppa: TGruppa;

function GetAdress: TAdress;

procedure SetAdress(AValue: TAdress);

public

procedure AddSchedule;

procedure DeleteSchedule;

procedure Get_Schedule;

property Adress: TAdress read GetAdress write SetAdress;

property Fio read FFio write FFio;

property Gruppa: TGruppa read FGruppa write FGruppa;

end;

User = class (TObject)

private

FFio: Integer;

function GetFio: Integer;

procedure SetFio(AValue: Integer);

public

property Fio: Integer read GetFio write SetFio;

end;

procedure Register;

implementation {Исполняемый раздел модуля}

procedure Register;

begin

end;

{******* TObject **************************}

constructor TObject.Create;

begin

end;

destructor TObject.Destroy;

begin

end;

{******** TStudent ****************************}

procedure TStudent.AddSchedule;

begin

end;

procedure TStudent.DeleteSchedule;

begin

end;

function TStudent.GetAdress: TAdress;

begin

end;

procedure TStudent.Get_Schedule;

begin

end;

procedure TStudent.SetAdress(AValue: TAdress);

begin

end;

{************* User*********** ******}

function User.GetFio: Integer;

begin

Result:=FFio

end;

procedure User.SetFio(AValue: Integer);

begin

FFio:=Avalue

end;

end.