- •Федеральное агентство по образованию
- •I. Объектно-ориентированное проектирование приложений
- •1.1. Технология проектирования ооп
- •1.1.1. Принципы ооп
- •1.1.2. Этапы разработки программных систем с использованием ооп
- •1.2.Mda-архитектура
- •1.2.1. Модель приложений и типы моделей
- •1.2.2. Этапы разработки mda-приложений
- •1.3. Унифицированный язык моделирования uml
- •1.4. Bold — реализация mda в Delphi
- •II. Разработка программного продукта
- •2.1. Проектирование приложения «Магазин бытовой техники»
- •2.1.1. Создание модели приложения
- •Описание классов модели приложения:
- •2.1.2. Импорт модели в BorlandMda
- •2.1.3. Создание графического интерфейса
- •2.2. Руководство пользователя
- •2.2.1. Установка и запуск
- •Установка программы «Магазин бытовой техники»
- •Запуск программы «Магазин бытовой техники»
- •2.2.2. Начало работы с приложением «Магазин бытовой техники»
- •2.2.3. Работа с программой
- •Заключение
- •Список литературы
- •Приложение Основной модуль приложения
- •Модуль описание классов бизнес-модели
- •Модуль регистрации пользователя как директора
- •Модуль смены пароля администратора
- •Модуль данных - связь бизнес-уровня и графического интерфейса
- •Модуль смены пароля администратора
- •Модуль редактирования информации о товаре, хранящегося на товарных базах
- •Модуль добавление новой товарной базы
- •Модуль отображения заставки
- •Модуль ввода количества заказываемого товара
- •Модуль отображения информации о программном продукте и разработчике
II. Разработка программного продукта
2.1. Проектирование приложения «Магазин бытовой техники»
Чтобы посмотреть на практике, как создаются приложения с использованием MDA-технологии, aтакже унифицированным языком моделированияUML, необходимо разработать программный продукт «Магазин бытовой техники».
Программная система "Магазин бытовой техники" предназначена для директора магазина бытовой техники. Данная система обеспечивает хранение сведений о магазине, об имеющихся в нем товарах, о торговых базах и товарах, хранящихся на этих базах. Магазин осуществляет закупку товара на разных базах. Магазин состоит из нескольких отделов. Каждым отделом управляет администратор. Каждый отдел включает несколько групп товара. Каждая группа товара закупается только на одной конкретной закупочной базе.
Магазин характеризуется названием, классом, номером, а также имеет другие сведения: юридический адрес, ИНН, электронный адрес.
Товары, имеющиеся в магазине и на базах, характеризуются: названием, количеством, гарантийным сроком, ценой (закупочной/реализации). Директор магазина имеет возможность изменить цену товара по своему усмотрению, осуществить закупку недостающего товара на базе.
Также, директор может узнать следующие сведения:
какие товары имеются в магазине (на базе);
какие товары, и в каком количестве имеются в отделе магазине, конкретной группе товаров;
список отделов;
список групп товара каждого отдела;
список администраторов магазина;
статистические данные: общее количество товара в магазине; общая стоимость товара; общее число отделов и групп товара в магазине; общее количество товара и общая стоимость товара по каждому отделу и группе товара; количество проданного товара, выручка от проданного товара, прибыль от проданного товара за определенный период времени;
на каких базах, и в каких количествах есть товар нужного наименования.
В программной системе предусмотрена возможность выдачи документа, представляющего собой заявку на закупку товара на базе, а также товарный чек на проданный товар в формате документа MicrosoftWord. Возможно, экспортировать остатки товара в магазине и на базах в Microsoft Excel.
2.1.1. Создание модели приложения
Как было сказано выше, для создания модели приложения я буду использовать программный продукт IBMRationalRoseEnterpriseEdition7.0. Учитывая все требования, предъявляемые к программной системе, создаем ееUMLмодель (рис. 2.1).
Рис 2.1. UML-модель программной системы
Описание классов модели приложения:
Магазин– класс, содержащий сведения о магазине: название, класс магазина, номер, юридический адрес, ИНН, телефон, электронный адрес.
Отдел– класс, содержащий сведения обо всех отделах магазина, характеризуется названием.
Группа товаров– класс, содержащий сведения о товарных группах, характеризуется названием.
Товар– родительский класс для классов: «товар в магазине» и «товар на складе». Класс «товар» содержит общие сведения этих двух классов: наименование товара, цена закупки и гарантийный срок.
Товар в магазине– дочерний класс класса «товар», содержит сведения о товарах, хранящихся в магазине. Помимо родительских атрибутов, класс «товар в магазине» имеет атрибуты: количество товара, цена реализации, количество продажи, сумма. Атрибут «количество продажи» предназначен для хранения информации о количестве единиц товара, помеченного на продажу. Атрибут «сумма» - это вычисляемый атрибут. Он не хранится в базе данных, а автоматически вычисляется в приложении. Хранит информацию о стоимости данного наименования товара, т.е. это произведение количества товара на его цену реализации.
Товар на складе– дочерний класс класса «товар», содержит сведения о товарах, хранящихся на различных закупочных базах. Помимо родительских атрибутов, класс «товар на складе» имеет атрибуты: количество товара и количество заказа. Атрибут «количество заказа» предназначен для хранения информации о количестве единиц товара, помеченного на заказ в магазин.
Товарная база– класс, содержащий сведения о закупочных базах. Данный класс содержит атрибуты: название базы и адрес.
Администратор – класс, содержащий сведения об администраторах отделов. Данный класс имеет атрибуты: фамилия, имя, отчество, дата рождения.
Продажа– класс, содержащий сведения о продажах магазина, т.е. это журнал продаж. Данный класс не связан с другими классами и содержит следующие атрибуты: номер продажи, дата продажи, наименование товара, количество, цена закупки, цена реализации, сумма. Атрибут «сумма» - это вычисляемый атрибут, хранит информацию о сумме проданного товара, т.е. это произведение количества проданного товара на его цену реализации.
Заказ – класс, содержащий сведения о заказах товара в магазин, также не связан с другими классами, т.к. является просто журналом заказов. Содержит атрибуты: номер заказа, дата заказа, наименование товара, количество, цена закупки.
Отсутствие связи двух последних классов с другими классами объясняется тем, что это журналы, которые хранят сведения о продажах и закупках когда-либо производимых в магазине. Если, например, устанавливать связь класса «продажа» с классом «товар в магазине», то при удалении товара в магазине из журнала продаж данный товар тоже удалится, а нам необходимо, чтобы продажа оставалась всегда.
Описание ассоциаций между классами приведено в таблице 2.1.
Табл. 2.1. Описание ассоциаций между классами
Ассоциация |
Описываемые бизнес правила |
Магазин – Отдел |
|
Отдел – Группа товаров |
|
Отдел –Администратор |
|
Группа товаров – Товар в магазине |
|
Магазин –Товарная база |
|
Продолжение табл. 2.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; |