Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
097715 / ОО проектирование приложений с использованием UML (ПЗ).doc
Скачиваний:
57
Добавлен:
12.06.2015
Размер:
19.01 Mб
Скачать

II. Разработка программного продукта

2.1. Проектирование приложения «Магазин бытовой техники»

Чтобы посмотреть на практике, как создаются приложения с использованием MDA-технологии, aтакже унифицированным языком моделированияUML, необходимо разработать программный продукт «Магазин бытовой техники».

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

Магазин характеризуется названием, классом, номером, а также имеет другие сведения: юридический адрес, ИНН, электронный адрес.

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

Также, директор может узнать следующие сведения:

        • какие товары имеются в магазине (на базе);

        • какие товары, и в каком количестве имеются в отделе магазине, конкретной группе товаров;

        • список отделов;

        • список групп товара каждого отдела;

        • список администраторов магазина;

        • статистические данные: общее количество товара в магазине; общая стоимость товара; общее число отделов и групп товара в магазине; общее количество товара и общая стоимость товара по каждому отделу и группе товара; количество проданного товара, выручка от проданного товара, прибыль от проданного товара за определенный период времени;

        • на каких базах, и в каких количествах есть товар нужного наименования.

В программной системе предусмотрена возможность выдачи документа, представляющего собой заявку на закупку товара на базе, а также товарный чек на проданный товар в формате документа MicrosoftWord. Возможно, экспортировать остатки товара в магазине и на базах в Microsoft Excel.

2.1.1. Создание модели приложения

Как было сказано выше, для создания модели приложения я буду использовать программный продукт IBMRationalRoseEnterpriseEdition7.0. Учитывая все требования, предъявляемые к программной системе, создаем ееUMLмодель (рис. 2.1).

Рис 2.1. UML-модель программной системы

Описание классов модели приложения:

Магазин– класс, содержащий сведения о магазине: название, класс магазина, номер, юридический адрес, ИНН, телефон, электронный адрес.

Отдел– класс, содержащий сведения обо всех отделах магазина, характеризуется названием.

Группа товаров– класс, содержащий сведения о товарных группах, характеризуется названием.

Товар– родительский класс для классов: «товар в магазине» и «товар на складе». Класс «товар» содержит общие сведения этих двух классов: наименование товара, цена закупки и гарантийный срок.

Товар в магазине– дочерний класс класса «товар», содержит сведения о товарах, хранящихся в магазине. Помимо родительских атрибутов, класс «товар в магазине» имеет атрибуты: количество товара, цена реализации, количество продажи, сумма. Атрибут «количество продажи» предназначен для хранения информации о количестве единиц товара, помеченного на продажу. Атрибут «сумма» - это вычисляемый атрибут. Он не хранится в базе данных, а автоматически вычисляется в приложении. Хранит информацию о стоимости данного наименования товара, т.е. это произведение количества товара на его цену реализации.

Товар на складе– дочерний класс класса «товар», содержит сведения о товарах, хранящихся на различных закупочных базах. Помимо родительских атрибутов, класс «товар на складе» имеет атрибуты: количество товара и количество заказа. Атрибут «количество заказа» предназначен для хранения информации о количестве единиц товара, помеченного на заказ в магазин.

Товарная база– класс, содержащий сведения о закупочных базах. Данный класс содержит атрибуты: название базы и адрес.

Администратор – класс, содержащий сведения об администраторах отделов. Данный класс имеет атрибуты: фамилия, имя, отчество, дата рождения.

Продажа– класс, содержащий сведения о продажах магазина, т.е. это журнал продаж. Данный класс не связан с другими классами и содержит следующие атрибуты: номер продажи, дата продажи, наименование товара, количество, цена закупки, цена реализации, сумма. Атрибут «сумма» - это вычисляемый атрибут, хранит информацию о сумме проданного товара, т.е. это произведение количества проданного товара на его цену реализации.

Заказ – класс, содержащий сведения о заказах товара в магазин, также не связан с другими классами, т.к. является просто журналом заказов. Содержит атрибуты: номер заказа, дата заказа, наименование товара, количество, цена закупки.

Отсутствие связи двух последних классов с другими классами объясняется тем, что это журналы, которые хранят сведения о продажах и закупках когда-либо производимых в магазине. Если, например, устанавливать связь класса «продажа» с классом «товар в магазине», то при удалении товара в магазине из журнала продаж данный товар тоже удалится, а нам необходимо, чтобы продажа оставалась всегда.

Описание ассоциаций между классами приведено в таблице 2.1.

Табл. 2.1. Описание ассоциаций между классами

Ассоциация

Описываемые бизнес правила

Магазин – Отдел

  • магазин состоит из одного или нескольких отделов (размерность «1..n»);

  • каждый отдел принадлежит только одному магазину (размерность «1»).

Отдел – Группа товаров

  • каждый отдел включает одну или несколько групп товара (размерность «1..n»);

  • каждая группа товара принадлежит только одному отделу (размерность «1»).

Отдел –Администратор

  • каждый отдел управляется только одним администратором (размерность «1»);

  • каждый администратор заведует только одним отделом (размерность «1»).

Группа товаров – Товар в магазине

  • каждая группа товаров содержит множество товаров, а может не содержать товар вообще (размерность «0..n»);

  • каждый товар принадлежит только одной группе товаров (размерность «1»).

Магазин –Товарная база

  • магазин имеет одну и более товарных баз (размерность «1..n»);

  • каждая товарная база принадлежит только одному магазину (размерность «1»).

Продолжение табл. 2.1

Товарная база – Группа товаров

  • каждая товарная база хранит товар одной и более групп товара (размерность «1..n»);

  • каждая группа товаров закупается только на одной товарной базе (размерность «1»).

Товарная база – Товар на складе

  • каждая товарная база содержит множество товара, а может не содержать ни одного товара (размерность «0..n»);

  • каждый товар хранится только на одной товарной базе (размерность «1»).

Группа товаров – Товар на складе

  • каждая группа товаров хранит на складе множество товаров, а может ничего не хранить (размерность «0..n»);

  • каждый товар на складе принадлежит только одной группе товаров (размерность «1»).

Как видно из рисунка 2.1, при описании модели используются русскоязычные названия классов, атрибутов и ассоциаций. Это очень удобно использовать для наглядности модели. Чтобы при создании приложения в Delphi не возникало проблем, необходимы англоязычные названия классов, атрибутов и ассоциаций. Для этого необходимо настроить некоторые тег-параметры классов, атрибутов и ассоциаций:

  • DelphiName– отвечает за преобразование имени класса, атрибута или ассоциацииUML-модели в идентификатор класса, поля или связи используемых в среде Delphi;

  • ExpressionName– отвечает за преобразование имени класса, атрибута или ассоциации модели в имя объекта, используемое для обозначения класса в выражениях на языкеOCL;

  • TableName– отвечает за преобразование имени класса модели в имя таблицы СУБД, используемой для хранения информации об объектах данного класса (только для класса);

  • ColumnName– используется для обозначения столбца таблицы БД для атрибутов класса, а также этот тег параметр задействуетсяBorlandMDAв случае единичной кратности роли для ассоциации.

Для настройки ассоциаций, в некоторых случаях необходимо указать у тег-параметра DeleteActionзначениеCascade. Он отвечает за правила удаления подчиненных объектов при удалении главного.

Настройка тег-параметров привелена в таблице 2.2.

Табл. 2.2. Настройка тег-параметров классов, атрибутов и ассоциаций

Имя класса, атрибута, ассоциации

Настройка тег-параметров

Магазин

DelphiName: TShop; ExpressionName, TableName: Shop

Название

ColumnName, ExpressionName, DelphiName: Shname

Класс

ColumnName, ExpressionName, DelphiName: Shclass

Номер

ColumnName, ExpressionName, DelphiName: Shnumber

Юридический адрес

ColumnName, ExpressionName, DelphiName: Shaddress

ИНН

ColumnName, ExpressionName, DelphiName: ShINN

Телефон

ColumnName, ExpressionName, DelphiName: Shphone

Электронный адрес

ColumnName, ExpressionName, DelphiName: Shmail

Отдел

DelphiName: TOtdel; ExpressionName, TableName: Otdel

Название

ColumnName, ExpressionName, DelphiName: Oname

Группа товаров

DelphiName: TGroup; ExpressionName, TableName: Group

Название

ColumnName, ExpressionName, DelphiName: Gname

Товарная база

DelphiName: TBase; ExpressionName, TableName: Base

Название

ColumnName, ExpressionName, DelphiName: Bname

Адрес

ColumnName, ExpressionName, DelphiName: Baddress

Товар

DelphiName: TTovar; ExpressionName, TableName: Tovar

Наименование

ColumnName, ExpressionName, DelphiName: Tname

Цена закупки

ColumnName, ExpressionName, DelphiName: Tprice

Гарантийный срок

ColumnName, ExpressionName, DelphiName: Tgarant

Товар в магазине

DelphiName: TTtov_mag; ExpressionName, TableName: Ttov_mag

Количество

ColumnName, ExpressionName, DelphiName: Tmcount

Цена реализации

ColumnName, ExpressionName, DelphiName: Tmprice

Количество продажи

ColumnName, ExpressionName, DelphiName: Prodcount

Сумма

ColumnName, ExpressionName, DelphiName: Tmsumma; DerivationOCL: Tmprice*Tmcount

Товар на складе

DelphiName: TTtov_base; ExpressionName, TableName: Ttov_base

Количество

ColumnName, ExpressionName, DelphiName: Tbcount

Количество заказа

ColumnName, ExpressionName, DelphiName: Zakazcount

Администратор

DelphiName: TAdmin; ExpressionName, TableName: Admin

Фамилия

ColumnName, ExpressionName, DelphiName: Afam

Имя

ColumnName, ExpressionName, DelphiName: Aname

Отчество

ColumnName, ExpressionName, DelphiName: Asname

Дата рождения

ColumnName, ExpressionName, DelphiName: Adr

Продолжение табл. 2.2.

Продажа

DelphiName: TProdazha; ExpressionName, TableName: Prodazha

Номер

ColumnName, ExpressionName, DelphiName: Pnumber

Дата продажи

ColumnName, ExpressionName, DelphiName: Pdate

Наименование товара

ColumnName, ExpressionName, DelphiName: PZtov_name

Количество

ColumnName, ExpressionName, DelphiName: Pcount

Цена закупки

ColumnName, ExpressionName, DelphiName: Pprice

Цена реализации

ColumnName, ExpressionName, DelphiName: PRprice

Сумма

ColumnName, ExpressionName, DelphiName: Psumma; DerivationOCL: pRprice * pcount

Заказ

DelphiName: TZakaz; ExpressionName, TableName: Zakaz

Номер

ColumnName, ExpressionName, DelphiName: Znumber

Дата заказа

ColumnName, ExpressionName, DelphiName: Zdate

Наименование

ColumnName, ExpressionName, DelphiName: Zname

Количество

ColumnName, ExpressionName, DelphiName: Zcount

Цена закупки

ColumnName, ExpressionName, DelphiName: Zprice

Магазин-Отдел

LinkClassName: LinkSostoitPrinadlezhit; (A) ColumnName, ExpressionName, DelphiName: Sostoit; DelуteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Prinadlezhit;

Отдел-Группа товаров

LinkClassName: LinkVluchaetPrinadlezhit; (A) ColumnName, ExpressionName, DelphiName: Vkluchaet; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Prinadlezhit;

Отдел-Администратор

LinkClassName: LinkZaveduetUpravlyaetsya; (A) ColumnName, ExpressionName, DelphiName: Zaveduet; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Upravlyaetsya; DeleteAction: Cascade;

Магазин-Товарная база

LinkClassName: LinkImeetImeetsya; (A) ColumnName, ExpressionName, DelphiName: Imeet; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Imeetsya;

Группа товаров-Товар в магазине

LinkClassName: LinkSostoitPrinadlezhit; (A) ColumnName, ExpressionName, DelphiName: Soderzhit; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Prinadlezhit;

Товарная база-Группа товаров

LinkClassName: LinkZakupaetsyaHranit; (A) ColumnName, ExpressionName, DelphiName: Zakupaetsya; (В) ColumnName, ExpressionName, DelphiName: Hranit;

Товарная база-Товар на складе

LinkClassName: LinkSoderzhitHranitsya; (A) ColumnName, ExpressionName, DelphiName: Soderzhit; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: Hranitsya;

Группа товаров-Товар на складе

LinkClassName: LinkBHranitBPrinadlezhit; (A) ColumnName, ExpressionName, DelphiName: BHranit; DeleteAction: Cascade; (В) ColumnName, ExpressionName, DelphiName: BPrinadlezhit;