Отчет по первой части лабораторного практикума по курсу
Скачать 266.8 Kb.
|
Министерство образования Республики Беларусь Учреждение образования Белорусский государственный университет информатики и радиоэлектроники Факультет информационных технологий и управления Кафедра интеллектуальных информационных технологий Отчет по первой части лабораторного практикума по курсу “ Объектно-ориентированное проектирование интеллектуальных систем ” Выполнил: cтудент гр. 521702 Горбачев М. А. Проверил: Сердюков Р. Е. Минск 2008 Содержание Описание объектной модели 3 Диаграмма сущность-связь 5 Диаграммы вариантов использования 6 Варианты развития системы 10 Базовая диаграмма классов 11 Диаграммы классов в соответствии с направлениями развития 12 Диаграмма состояний 15 Диаграмма компонентов 16 Привязка к языку программирования 17 Метрики 19 Выводы 20 2 Описание объектной модели Легенда: • подчеркнутое слово – сущность; • выделенное слово – связь; • выделенное курсивом – атрибут. Гипермаркет — тип магазина, объединяющий в себе принципы организации магазина самообслуживания и магазина, разделенного на торговые отделы. От традиционных магазинов самообслуживания или супермаркетов, гипермаркеты отличаются, прежде всего, масштабностью по всем параметрам. Это не только большие торговые площади, это еще и громадный ассортимент товаров (относящихся как к продовольственному, так и непродовольственному рынку розничной торговли). Непродовольственный сектор представлен самыми различными группами товаров: одежда и обувь, косметика, бытовая химия, электроника, то есть очень широким спектром продукции вплоть до крупногабаритной бытовой техники, мебели и стройматериалов. Эти магазины отличаются низким уровнем наценки и, следовательно, розничных цен. Гипермаркеты ориентированы на менее состоятельного клиента. Рассмотрим более подробно модель гипермаркета. Покупатели приходят в гипермаркет, заходят в торговый зал, берут корзину, следуют в необходимый им отдел и выбирают товар (товары находятся в разных отделах, имеющих названия (хлебобулочный, молочный, мясной и т. д.)) из всего предложенного ассортимента и помещают его в корзину. За все это время за покупателями ведется видео наблюдение, и в случае нарушений правил поведения в гипермаркете представители системы безопасности исправят ситуацию. Каждый товар имеет определенную стоимость, указанную на ценнике. После того как покупатель закончит выбор товаров, он направляется с корзиной к кассе. В кассе (у каждой кассы свой номер) производится подсчет общей суммы стоимости всех товаров и печать чека. 3 За кассой определенный кассир, имеющий фамилию и имя, пробивает цену каждого товара, а также производит денежно-расчетные операции. Его инициалы печатаются также на чеке. Покупатель может произвести оплату, как наличными деньгами, так и с помощью пластиковой карточки (кассир для этого предлагает ввести пин-код на терминале банкомата). Рассмотрим сценарий для данной модели. Покупатель приходит в гипермаркет. Перед входом в торговый зал берет корзину. Направляется в молочный отдел. Берет пакет кефира стоимостью в 1570 рублей и кладет его в корзину. Далее он следует хлебобулочный отдел. Выбирает батон стоимостью 990 рублей, кладет в корзину. Направляется к кассе №13. Кассир подсчитывает общую стоимость всех товаров, она равна 2560 рублей. Покупатель решает произвести оплату пластиковой карточкой, вводит пин-код на клавиатуре терминала. Код подтвержден. Кассир выдает чек покупателю и тот покидает магазин. При запуске программы необходимо выбрать либо режим покупателя, либо режим администратора. В режиме покупателя пользователь видит окно со списком товаров, разбитых по отделам. У него существует возможность добавлять товары в корзину. После этого он заходит в корзину. В корзине существует возможность отказаться от какого-либо товара. В случае если его все устраивает, он нажимает на кнопку «купить» и выбирает, каким способом он оплатит покупку, либо наличными деньгами, либо с помощью пластиковой карточки, введя пин-код. В режиме администратора магазина, пользователь видит окно программы, содержащей список товаров. У него есть возможность добавлять и удалять товары. 4 Диаграмма сущность-связь class ER-Гипермаркет Покупатель Админис тратор магазина Корзина Товар Прос мат ривать Содер жать Название Опис ание Це на Добавлять Добавлять товар Содер жать Выбранный товар Куп ить Кас сир Производить оплату Че к Кас са Служба безопасности Охра нник Терминал Плас тиковая карта Наличные деньги Отдел Рабо тать Номер кассы Печа тать Название Рабо тать Имя Фамилия Наблю дать Содержит Пин-код Считывать Счит ать Плат ить Связан Список товаров Це ны Номер кассы Имя ка ссира Гипермаркет Вой ти Поки нуть 1 * * 1 1 * * 1 * 1 * 1 1 1 1 1 1 * 1 1 1 1 1 1 * 1 1 * * 1 1 1 Рисунок 1 – Диаграмма сущность-связь. 5 Диаграммы вариантов использования uc Выбор режима Программня система "Гипермаркет" Наблюдатель Выбор режима Выступление в роли Покупателя Выступление в роли Администратора магазина «extend» «extend» Рисунок 2 - Диаграмма вариантов использования. uc Программная модель Программная система "Гипермаркет" Покупаетль Администратор магазина Просмотр товаров Добавление /удаление това ров Добавление товара в корзину Оплата Подсч ет общей стоимости Покупка товаров «include» «extend» «include» «include» Рисунок 3 - Диаграмма вариантов использования программной системы «Гипермаркет». 6 Диаграммы последовательности sd Выбор режима Наблюдатель Гипермаркет::Гипермаркет зайти() :boolean изменить_режим(boolean) Рисунок 4 – Выбор режима программы. sd Покупка товаров Покупатель ref Добавление в корзину ref Просмотр товаров ref Оплата Посмотрет ь товары Добавить в корзину Опла тить Рисунок 5 – Покупка товара. sd Просмотр товаров Покупатель Гипермаркет::Гипермаркет Гипермаркет::Товар Гипермаркет::Покупатель Взять_корзину() получить_с писок_т оваров() :Товар[] получить_описа ние() :String Рисунок 6 – Просмотр товаров. 7 sd Добавление в корзину Покупатель Гипермаркет::Покупатель Гипермаркет::Корзина добавить_товар(Товар) Добавить_товар(Товар) Рисунок 7 – Добавление товара в корзину. sd Оплата Покупатель Гипермаркет::Касса Гипермаркет::Кассир Гипермаркет::Покупатель Гипермаркет::Корзина Гипермаркет::Терминал выбрать() получить_касс ира() :Кассир получить_список_т оваров() :Товар[] получить_корзи ну() :Корзина Корзина получить_список_т оваров() :Товар[] Товары подсчитать_сумму() :int сум ма [карта]:оплатить_карточкой(int) проверить_пин_ко д(int) :boolean Оплатить_наличными(int) Рисунок 8 – Оплата покупок. 8 sd Добавление и удаление товара Администратор магазина Гипермаркет::Гипермаркет Гипермаркет::Администратор_магазина Гипермаркет::Склад_товаров получить_список_т оваров() :Товар[] получить_гиперм() :Гипермаркет получить_склад() :Склад_товаров Склад Добавить_товар(Товар) удалить_товар(Товар) Рисунок 9 – Добавление и удаление товаров. 9 Варианты развития системы Для модели «Гипермаркет» предусмотрены следующие направления развития: 1. Добавление графика работы магазина, выходных и санитарных дней. 2. Добавление «экспресс» кассы (обслуживаются покупатели с 5 или менее выбранными товарами). 3. Добавление «клуба покупателей» (постоянные покупатели получают карточку, по которой товары приобретаются со скидкой, а также возможность участвовать в рекламных акциях и т. п.). 10 Базовая диаграмма классов class Диаграмма классов Покупатель - гипермаркет: Гипермаркет - карточка: boolean - корзина: Корзина - наличные: boolean + Взять_корзи ну() : void + добавить_товар (Товар) : void + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void + получить_корзи ну() : Корзина + удалить_товар(Товар) : void Администратор_магазина - гипермаркет: Гипермаркет - имя: String - фамилия: String + добавить_товар (Товар) : void + получить_гиперм() : Гипермаркет + получить_имя() : String + получить_список_то варов() : Товар[] + получить_фамилию() : String + удалить_товар(Товар) : void Кас са - кас сир: Кас сир - номер: int - терминал: Терминал + выбрать() : void + получить_кас си ра() : Касс ир + получить_номер() : int Кас сир - имя: String - фамилия: String + подсчитать_сумму() : int + получить_имя() : String + получить_список_то варов() : Товар[] + получить_фамил ию() : String Товар - название: String - название_отдела: String - номер: int - опис ание: String - цена: int + получить_назв_ отд() : String + получить_назва ние() : String + получить_номер() : int + получить_опис а ние() : String + получить_цена() : int Корз ина - список_товар ов: Товар[] + Добавить_товар(Товар) : void + получить_список_то варов() : Товар[] + удалить_товар(Товар) : void Терминал - название: String - номер: int + проверить_пин_ко д(int) : boolean Склад_товаров - спис ок_товар ов: Товар[] + Добавить_товар(Товар) : void + получить_товар ы() : Товар[] + удалить_товар(Товар) : void Гипермаркет - админ: Админис тратор_магазина - покупатель: Покупатель - склад: Склад_товаров + main(Strin g) : void + выйти() : boolean + зайти() : boolean + изменить_режим(boolean) : void + получить_склад() : Склад_товаров + получить_список_то варов() : Товар[] «use» «use» -админ 0..* -гипермаркет 1 -с клад 1 1 -номер 11 -номер 1 -оплата 1. .* -покупатель 0..* -гипермаркет 1 1 -корзина 1 0..* -товар 1 -пин_код 0. .1 -номер 1 0..* -номер 1 Рисунок 10 – Диаграмма классов. 11 Диаграммы классов в соответствии с направлениями развития Первое направление развития (график работы): class Диаграмма классов Покупатель - гипермаркет: Гипермаркет - карточка: boolean - корзина: Корзина - наличные: boolean + Взять_корзи ну() : void + добавить_товар (Товар) : void + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void + получить_корзи ну() : Корзина + удалить_товар(Товар) : void Администратор_магазина - гипермаркет: Гипермаркет - имя: String - фамилия: String + добавить_товар (Товар) : void + получить_гипер() : Гипермаркет + получить_имя() : String + получить_список_то варов() : Товар[] + получить_фамилию() : String + удалить_товар(Товар) : void Админ_с_графиком + установить_график(График_работы) : void Гипермаркет - админ: Админис тратор_магазина - покупатель: Покупатель - склад: Скл ад_товаров + main(Strin g) : void + выйти() : boolean + зайти() : boolean + изменить_режим(boolean) : void + получить_склад() : Склад_товаров + получить_список_то варов() : Товар[] Гипермаркет_ с_реж_работы - график: Гр афик_работы + main(Strin g) : void + получить_гр_раб() : График_работы График_ работы - время_рабо ты: int[] - выходные_д ни: int[] + получить_время_р аботы() : int[] + получить_вых_д ень() : int[] Покупатель_ + Взять_корзи ну() : void «create» -админ 0..* -гипермаркет 1 -покупатель 0..* -гипермаркет 1 «create» «create» Рисунок 11 – Диаграмма классов (четыре новых класса). 12 Второе направление развития (экспресс касса): class Диаграмма классов Покупатель - гипермаркет: Гипермаркет - карточка: boolean - корзина: Корзина - наличные: boolean + Взять_корзи ну() : void + добавить_товар (Товар) : void + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void + получить_корзи ну() : Корзина + удалить_товар(Товар) : void Кас са - кассир: Кассир - номер: int - терминал: Терминал + выбрать() : void + получить_касси ра() : Кассир + получить_номер() : int Экспрес с_касса + выбрать() : void + получить_кол_товаров() : int Покупатель_ + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void Гипермаркет - админ: Админис тратор_магазина - покупатель: Покупатель - склад: Скл ад_товаров + main(Strin g) : void + выйти() : boolean + зайти() : boolean + изменить_режим(boolean) : void + получить_склад() : Склад_товаров + получить_список_то варов() : Товар[] Гипермаркет_ + main(Strin g) : void -номер 1 -оплата 1. .* -покупатель 0..* -гипермаркет 1 «create» «create» Рисунок 12 – Диаграмма классов (два новых класс). 13 Третье направление развития (клуб покупателей): class Диаграмма классов Покупатель - гипермаркет: Гипермаркет - карточка: boolean - корзина: Корзина - наличные: boolean + Взять_корзи ну() : void + добавить_товар (Товар) : void + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void + получить_корзи ну() : Корзина + удалить_товар(Товар) : void Администратор_магазина - гипермаркет: Гипермаркет - имя: String - фамилия: String + добавить_товар (Товар) : void + получить_имя() : String + получить_с писок_то варов() : Товар[] + получить_фамил ию() : String + удалить_товар(Товар) : void Гипермаркет - админ: Админис тратор_магазина - покупатель: Покупатель - с клад: Скл ад_товаров + main(Strin g) : void + выйти() : boolean + зайти() : boolean + изменить_режим(boolean) : void + получить_склад() : Склад_товаров + получить_список_то варов() : Товар[] Покупатель_из_клуба - карточка_клуба: boolean + оплатить_карточкой(int) : void + Оплатить_наличн ыми(int) : void + получить_карт_ кл() : boolean Админ_ + установить_скидку(int) : void Гипермаркет_ - процент_скидки: int + main(Strin g) : void + получить_ски дку() : void -админ 0..* -гипермаркет 1 -покупатель 0..* -гипермаркет 1 «create» «create» Рисунок 13 – Диаграмма классов (три новых класса). 14 Диаграмма состояний stm Диаграмма состояний Начало раб оты Выбор_ режима + do / Гиперма ркет::зайти Режим_пользователя Режим_адмиистратора Завершение _программы + do / Гиперма ркет::выйти Конец работы Вход_в_пользова тельский_режим + entry / Гипермаркет::изменить_режим(boolean) + do / Покупатель::Взять_корзину Вход Выход Вход Выход Вход_в_режим_админа + entry / Гипермаркет::изменить_режим(boolean) Ожидание _выбора Ожидание _выбора Просмотр_товаров + entry / Админис тратор_магази на::получить_список_товаров + do / Гипермаркет::пол учить_список_товаров Добавление + do / Администратор_магазина::добавить_товар(Товар) Удаление + do / Админис тратор_магазина::удалить_товар(Товар) Запуск_программы + entry / Гипермаркет::main(char) Просмотр_товаров + entry / Гипермаркет::п олучить_спис ок_товаров Добавление_в_корзину + do / Покупатель::добавить_товар(Товар) + do / Корзина::Добавить_товар(Товар) Удаление_товара_из_корзины + do / Покупатель::удалить_товар(Товар) + do / Корзина::удалить_товар(Товар) Оплата + entry / Кас са::выбрать + do / Кассир::получить_список_товаров + do / Кассир::подс читать_сумму + do / Покупатель::оплатить_карточкой(int) + do / Покупатель::Оплатить_наличными(int) Терминал + do / Терминал::проверить_пин_код(int) удалить [покуп атель] вый ти вый ти [админис тратор] доба вить нали чные доба вить удалить [выход] оплатить [е сть_товары] пин_код [вер но] [неве рно] [выход] Рисунок 14 – Диаграмма состояний. 15 Диаграмма компонентов cmp Диаграмма компон... «executable» Гипермаркет «library» Библиоте ка графиче ского пользовательского интерфейса Sw ing «use» Рисунок 15 – Диаграмма компонентов. 16 Привязка к языку программирования Программа должна быть написана на языке Java и использовать графическую библиотеку пользовательского интерфейса javax.swing. При запуске программы, пользователь должен выбрать режим работы (администратор или покупатель). После запуска появляется главное окно программы (для администратора): Рисунок 16 – Главное окно программы. У списка товаров есть возможность отметить один или несколько товаров. При нажатии на «Удалить» удаляются все отмеченные товары из списка. Рисунок 17 – Добавление товара (для администратора). Окно для покупателя имеет следующий вид: 17 Добавить товар Удалить товар Список товаров Название Цена Описание Отмена Добавить Рисунок 18 – Главное окно программы (для покупателя). Рисунок 19 – Корзина покупателя. 18 Добавить в корзину Список товаров Просмотр корзины Описание Удалить из корзины Список товаров Оплатить Метрики Расчет метрик Чидамбера-Кемерера: Класс WMC DIT NOC CBO RFC LCOM Гипермаркет 6 0 0 3 8 5 Товар 5 0 0 0 4 2 Склад_товаров 3 0 0 1 2 0 Покупатель 6 0 0 6 18 3 Корзина 3 0 0 0 3 0 Кассир 4 0 0 1 3 1 Касса 2 0 0 1 1 0 Терминал 1 0 0 0 1 0 Администратор_магазин а 6 0 0 3 9 2 Расчет метрик Лоренца и Кидда: Класс CS NOO NOA SI OSAVG OC NPAVG NSS NKC NSUB Гипермаркет 3+6 0 0 0 10 65 0.7 Товар 5+5 0 0 0 2 13 0.5 Склад_товаров 1+3 0 0 0 3 20 1 Покупатель 4+6 0 0 0 6 40 0.8 Корзина 1+3 0 0 0 3 19 0.7 Кассир 2+4 0 0 0 6 39 0 Касса 3+2 0 0 0 1 7 0 Терминал 2+1 0 0 0 2 10 1 Администратор_магазин а 3+6 0 0 0 5 37 0.7 4 1 0 19 Выводы Разработанная модель «Гипермаркет» имеет несколько направлений, например таких как: добавление графика работы, «экспресс кассы» (обслуживающей покупателей с небольшим количеством товаров), а также клуба покупателей, обеспечивающий работу системы скидок. Рассчитанные метрики позволяют сделать вывод о том, что необходимо скорректировать некоторые классы, в частности класс «Гипермаркет» (слишком высокое значение LCOM – это говорит о том, что методы слабо связаны друг с другом через свойства, что увеличивает сложность, поэтому возрастает вероятность ошибок при проектировании). В классе «Покупатель» слишком высокое значение RFC, что усложняет тестирование и отладку класса, так как от разработчика тестов требуется больший уровень понимания класса, растет длина тестовой последовательности. В разработанной модели нет наследуемых классов – это приводит к тому, что дальнейшее развитие будет затруднено. 20 |