Файл: Моделирование предметной области «Учет товаров» с помощью UML (Объектно-ориентированное проектирование приложений).pdf
Добавлен: 25.04.2023
Просмотров: 443
Скачиваний: 4
Как видно из рисунка 2.1, при описании модели используются русскоязычные названия классов, атрибутов и ассоциаций. Это очень удобно использовать для наглядности модели. Чтобы при создании приложения в Delphi не возникало проблем, необходимы англоязычные названия классов, атрибутов и ассоциаций. Для этого необходимо настроить некоторые тег-параметры классов, атрибутов и ассоциаций:
- DelphiName – отвечает за преобразование имени класса, атрибута или ассоциации UML-модели в идентификатор класса, поля или связи используемых в среде Delphi;
- ExpressionName – отвечает за преобразование имени класса, атрибута или ассоциации модели в имя объекта, используемое для обозначения класса в выражениях на языке OCL;
- TableName – отвечает за преобразование имени класса модели в имя таблицы СУБД, используемой для хранения информации об объектах данного класса (только для класса);
- ColumnName – используется для обозначения столбца таблицы БД для атрибутов класса, а также этот тег параметр задействуется Borland MDA в случае единичной кратности роли для ассоциации.
Для настройки ассоциаций, в некоторых случаях необходимо указать у тег-параметра 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; |
||
Импорт модели в Borland MDA
После того, как настроены тег-параметры наша модель готова к импорту в Delphi.
Далее разработка приложения ведется в среде Delphi. Создаем новое приложение Delphi и создадим в нашем приложении специальный модуль данных DataShop: TDataShop. На этом модуле необходимо разместить компоненты Bold, которые будут реализовывать основу «объектного пространства» нашего приложения:
- ShopModel: TBoldModel – обеспечивает хранение модели;
- BoldSystemHandleShop: TBoldSystemHandle – основной компонент-дескриптор объектного пространства;
- BoldSystemTypeInfoHandleShop: ТBoldSystemTypeInfoHandle – основной компонент-дескриптор типов моделей;
- BoldUMLRoseLinkShop: ТBoldUMLRoseLink – предназначен для связи с моделью Rational Rose;
- BoldPersistenceHandleFileXMLShop: ТBoldPersistenceHandleFileXML – обеспечивает хранение состояния объектного пространства в файле формата XML. Способ хранения данных в файле XML имеет свои преимущества: простота разработки, нет необходимости применять посторонние продукты (СУБД), настраивать подключение к БД и т.д.; простота использования – обеспечивается максимальная переносимость приложения, отсутствует необходимость инсталляции и настройки, возможен запуск приложения с любого носителя на любом компьютере.
Необходимо настроить свойства этих компонентов в соответствии с приведенной на рис. 2.2 диаграммой.
Рис. 2.2. Компоненты модуля данных
Теперь все готово для импорта модели Rational Rose в среду Borland MDA. Для этого необходимо дважды щелкнуть по компоненту ShopModel и в открывшемся встроенном UML-редакторе Bold запустить импорт нажатием на кнопку панели инструментов Import via link. После этого произойдет импорт модели. Перед созданием графической части приложения необходимо сгенерировать код модели. Для этого во встроенном UML-редакторе Bold вызвать в главном меню Tools -> Generate Cod. Появятся последовательно два окна с предложением выбрать имена генерируемых файлов интерфейса и файла программы. В результате проведенной операции на диске образуются два файла:
- BusinessClasses_Interface.inc – файл описания внешних программных интерфейсов;
- BusinessClasses.pas – файл, содержащий код классов UML-модели.
При этом в секцию Uses нашего проекта автоматически добавится сгенерированный модуль BusinessClasses. На этом этап импорта модели в Borland MDA закончен, теперь осталось разработать графический интерфейс программы.
Создание графического интерфейса
При создании графического интерфейса я буду использовать следующие компоненты:
- BoldListHanle – не визуальный компонент-дескриптор, используется в основном для таких визуальных компонентов, как BoldGrid, BoldSortingGrid, BoldListBox, BoldLabel, BoldEdit. В свойстве Expression необходимо ввести требуемые OCL выражения. Например, чтобы получить список всех отделов магазина, необходимо в свойстве Expression дескриптора ListOtdels: TBoldListHanle ввести OCL выражение: 'Otdel.allInstances';
- BoldSortingGrid – визуальный компонент, в котором отображается информация об экземплярах класса, данный компонент подключается к дескриптору. Например, если его подключить к дескриптору ListOtdels, то в таблице отобразятся все отделы магазина;
- BoldListBox, BoldLabel, BoldEdit – будут отображать различную информацию об объектном пространстве приложения. Также подключаются к дескрипторам;
- Также будут использоваться стандартные VCL-компоненты, такие как: MainMenu, GroupBox, PageControl, SpeedButton, Edit и другие компоненты.
Все компоненты-дескрипторы, используемые в приложении, представлены на рис. 2.3, а их описание в табл. 2.3.
Рис. 2.3. Дескрипторы приложения
Табл. 2.3. Описание дескрипторов приложения
|
Дескриптор |
Предназначение |
|
ListGroups |
Возвращает список всех товарных групп магазина |
|
ListShopName |
Возвращает название магазина |
|
ListAdmin |
Возвращает список всех администраторов магазина |
|
ListOtdels |
Возвращает список всех отделов магазина |
|
ListOtdelsGroups |
Возвращает список товарных групп, принадлежащих текущему отделу |
|
ListBases |
Возвращает список всех товарных баз магазина |
|
ListOtdelsGroupTovar |
Возвращает список товаров, принадлежащих текущей товарной группе, которая в свою очередь принадлежит текущему отделу |
|
ListGroupTovar |
Возвращает список товаров, принадлежащий текущей товарной группе |
|
ListShop |
Возвращает все данные о магазине |
|
ListShopOtdel |
Возвращает список отделов магазина |
Продолжение табл. 2.3.
|
ListBaseGroupTovar |
Возвращает список товаров, принадлежащих текущей товарной группе, которая в свою очередь принадлежит текущей товарной базе |
|
ListBaseGroup |
Возвращает список товарных групп текущей товарной базы |
|
ListTovar |
Возвращает список всех товаров магазина |
|
ListShopBase |
Возвращает список всех товарных баз магазина |
|
ListZakupka |
Возвращает список всех закупок магазина |
|
ListBaseTovar |
Возвращает список всех товаров хранящихся на всех товарных базах |
|
ListProdazha |
Возвращает список всех продаж магазина |
|
ListProdazhaOtchet |
Возвращает список всех продаж магазина (для экспорта) |
|
ListZakupkaOtchet |
Возвращает список всех закупок магазина (для экспорта) |
Программная система будет включать восемь форм (рис. 2.4):
- Mainform – основная форма, на которой будут расположены все основные компоненты;
- Main_sc – заставка программной системы;
- Registr – форма регистрации (ввод пароля директора перед запуском основной формы);
- ChangePass – форма смены пароля директора;
- AddBase – форма добавления новой товарной базы;
- EditTovBase – форма редактирования сведений о товарной базе;
- My – форма отображения информации о программе и разработчике;
- ZakazForm – форма указания количество единиц заказываемого товара.
Граф диалога форм приложения представлен на рисунке 2.5.
Листинг описанных выше модулей представлен в приложении 1. Почти все описанные формы являются вспомогательными, довольно простые и не содержат большого количества компонентов, кроме главной формы. Поэтому есть смысл поподробнее остановиться на описании главной формы приложения. Почти вся функциональность производится в главном окне программы. Оно состоит из: главного меню, панели инструментов, информационной части, основной рабочей области, для отображения всей необходимой информации, строки статуса (рис. 2.4).
Почти весь функционал программной системы будет производиться в основной рабочей области. Она представляет собой набор вкладок, на которых сгруппированы по тематике компоненты приложения.
Рис. 2.4. Формы приложения
Рис. 2.5. Граф диалога форм приложения
Main_sc
Registr
Mainform
ВЫХОД
ChangePass
AddBase
ZakazForm
EditTovBase
My
В программе присутствуют следующие вкладки:
- Товары магазина – в данной вкладке осуществляется просмотр товара, редактирование цены, продажа товара;
- Сведения о магазине – в данной вкладке отображается информация о магазине, можно отредактировать эту информацию, а также управлять отделами магазина;
- Отделы магазина – здесь добавляются новые отделы, и производится управление группами отдела;
- Быстрые остатки – в данной вкладке отображается весь товар магазина;
- Закупочные базы – в данной вкладке осуществляется управление закупочными базами;
- Добавление нового товара – в данной вкладке осуществляется добавление нового товара в товарные базы;
- Заказ товара – осуществляется заказ товара в магазин из различных закупочных баз;
- Статистические данные – в данной вкладке отображается вся статистическая информация о магазине;
- Журнал продаж – отображается информация обо всех продажах магазина;
- Журнал закупок – отображается информация обо всех закупках магазина;
- Администраторы магазина – производится управление администраторами магазина.
2.2. Руководство пользователя
Установка и запуск
В данном разделе описаны основные инструкции по установке программы «Магазин бытовой техники»: системные требования и установка на одно рабочее место.