Software design patterns : (Memento, Observer, Mediator, Iterator)

Подобни документи
ICS Natioanal

Виртуални функции

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

IATI Day 1/Junior Task 1. Trap (Bulgaria) X INTERNATIONAL AUTUMN TOURNAMENT IN INFORMATICS SHUMEN 2018 Задача 1. Капан Образуваме редица от точки, кои

4

ТЕХНИЧЕСКИ УНИВЕРСИТЕТ СОФИЯ НИЛ ПО КОМПЮТЪРНА ГРАФИКА И ГИС СОФТУЕРНА ГРУПА АКСТЪР тел./факс(02) , (02) ; E-MAI

МОДУЛ 2 ВАРИАНТ НА ПРАКТИЧЕСКА ЗАДАЧА ЗА НАЦИОНАЛНО ОНЛАЙН ОЦЕНЯВАНЕ НА ДИГИТАЛНИ КОМПЕТЕНТНОСТИ X КЛАС от 2016 г. УСЛОВИЕ НА ЗАДАЧАТА За тази задача

web разработка

ЕВРОПЕЙСКИ СЪЮЗ Европейки фонд за регионално развитие Инвестираме във вашето бъдеще ОПЕРАТИВНА ПРОГРАМА Развитие на конкурентоспособността на българск

Lush Green

1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на в

Slide 1

Подаване на информация в ИСИС - описание с примерни екрани

doll Механична кукла Механичните кукли автоматично повтарят предварително зададена последователност от движения. В Япония има традиции в изработката н

puzzles-final.indd

Internationales Donaufest Ulm Neu-Ulm

Пощенска Банка Формат на входни файлове за масови плащания Съдържание: 1. Общи характеристики Плащания с кредитен превод Плащания на з

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1

-

Системи за управление на версии - Работа с git

НАУЧНИ ТРУДОВЕ НА РУСЕНСКИЯ УНИВЕРСИТЕТ , том 49, серия 3.2 Един подход за обработка и конвертиране на векторни изображения в WEB-базираните сис

НАУЧНИ ТРУДОВЕ НА РУСЕНСКИЯ УНИВЕРСИТЕТ , том 49, серия 3.2 Приложение на инжектирана верига отговорности в университетска информационна система

Допълнения в периода Версия Модул УПТО Във връзка с промените в Наредба Н-18 е разработен специализиран модул за Управлен

Kjh;j’p] ] [

N21mobile Политика за бисквитки За екипа на Network TwentyOne е от изключително значение да защитим от посегателства Вас и Вашите данни, които събирам

РЪКОВОДСТВО ЗА РАБОТА С ЕЛЕКТРОННА ПЛАТФОРМА ЗА ТЪРСЕНЕ И ПРЕДЛАГАНЕ НА ЗАНИМАНИЯ ПО ИНТЕРЕСИ НОВО: За учебната година в електронната платфо

Приложение_1_Заявление по Образец 1

PowerPoint Presentation

License Plate Recognition    Уеб базирана система за разпознаване на регистрационни номера и отчитане на средна скорост

SoftwareDoc.docx

Анализ и оптимизация на софтуерни приложения

Microsoft Word - Primer3_1.doc

СОФИЙСКА МАТЕМАТИЧЕСКА ГИМНАЗИЯ ТУРНИР ПО МАТЕМАТИКА И ИНФОРМАТИКА "ЗА ТОРТАТА НА ДИРЕКТОРА" ТЕМА ПО ИНФОРМАТИКА Група X (10-12 клас) Задача Рязане на

СОФИЙСКИ УНИВЕРСИТЕТ СВ. КЛИМЕНТ ОХРИДСКИ СТОПАНСКИ ФАКУЛТЕТ У Ч Е Б Е Н П Л А Н Утвърждавам:... Утвърден от Академически съвет с протокол... /... Про

Препис:

Software design patterns : 2010 2011 (Memento, Observer, Mediator, Iterator) 1. Memento: Запазва вътрешнето състояние на даден обект на външен носител с цел възстановяването му в това състояние на по късен етап. 2. Observer: Дефинира зависимост едно към много между обекти (един Subject и наблюдателите му : много Observsers), така че когато един обект (Subject) промени състоянието си всички зависими от него да се обновяват автоматично (Observsers)

3. Mediator: Дефинира обект, капсулиращ взаимоотношенията в даден набор от обекти, избягвайки силната обвързаност между тях. 4. Iterator: Предоставя начин за последователен достъп до елементите на сложен обект, без да разкрива същинското му представяне

Задача: Нека задачата се основава на познатия ни вече софтуер за управление на служители в една компания, разбрира се с различна структура и функционалност, за да можем да упражним всичките софтуерни шаблони. Основните функционални изисквания към този софтуер са: всеки служител си има тип : в кой отдел принадлежи: разработка на софтуер, тестер, анализатор, менниджър добавяне на нов служител със специфичните за него х-ки: име, тип, банка, на която му се превежда заплатата и дни отпуска калкулация за общата сума на заплатите, както на всички служители така и на служителите от конкретен отдел (примерно, всички тестери) бизнес логика за превод на пари към конкретна банка, на която принадлежи съответния служител добавяне на възможност служител да се вижда в повече от един аспект: в табличен и листовиден вид специално за оставащите дни отпуска се иска: ако в динамично състояние счетоводителят е въвел грешен брой дни отпуска, да се направи и undo() операция, позволяваща поправка на грешката. Четейки спецификацията веднага от изискванията ни идва на ум, че в случая Memento шаблона би ни служил идеално за предотратяване на грешката на счетоводителката и осъществяване на undo() операция; за показването на различен аспект на конкретен служител (в реална система си представяме че искаме и графичен дизайн с някакви шарении) ще ни е от помощ Observser шаблона; за калкулацията на заплатата за конкретен тип служители ни е нужен Filter iterator шаблона, който ще ни помогне на филтрираме служителите според отдела в който принадлежи; а Mediator шаблона ще ни навигира измежду различните банкови кънекции, които се свързват със съответната банка и осъществяват превода. Разбира се, софтуерната система е имплементирана до едно неработещо ниво. От вас ще се изисква постъпкаво, да доимплементирате и рефакторирате предложената ви система, използвайки всички гореописани шаблони. Отново ще си служим с UML диаграма на системата (червените класове ще се имплементират от вас изцяло)

1. Доимплементирайте класа EmployeeMediator, като добавете в него един Map<BankType, IbankConnector> BANK_TYPE_TO_BANK_CONNECTOR, като го попълните статично (за всеки тип банка изпозлвате инстанция на съответния Bank Connector). Добавен и попълнен вече Map може да се използва в getbankconnector(banktype banktype) метода. По този начин, ния имплементиране Mediator навигатор- между EmployeeManager и конкретна банкова конекция 2. Нека сега разгледаме AccountSystem модула (класа). В него calculatesalaries(list<employee>) метода, изчислява общата сума на заплатите на подадения списък от служители: calculatesalariesbyemployeetype(list<employee>, EmployeeType) сумира общата заплата на служители от конкретен отдел. Работейки с шаблона Итератор, нека: 2.1. в calculatesalaries използваме java-рвския Iterator за калкулация на сумата на всички заплати 2.2. във втория метод calculatesalariesbyemployeetype(...) виждаме, че се извиква филтриран итератор от нашия медиатор, но той връща NULL pointer. За това 2.2.1. Създайте нов клас ImployeeFilteredIterator, имплементиращ интерфейса (методите hasnext(), next()) : IemployeeIterator, използвайки зададеното в UML диаграмата вътрешно състояние: списък от служители, текуща позиция и типа служител, който ще се филтрира от списъка. 2.2.2. в EmployeeMediator.getFilteredEmployeeIterator(...) метода, създайте инстанция на този филтер и така програмата ще работи коректно по отношение на калкулация на заплатата за конкретни тишаж служители 3. Сега ще имплементираме изискванията за разглеждане на даден служител (неговото име, заплата и оставащи дни отпуска) в различен аспект. Нека те са два: в табличен и листовеиден вид. За това: 3.1. Създайте клас TableEmployeeObservser и ListEmployeeObserver, наследяващи абстрактния клас AbstractEmployeeObservser. Първия клас изписва на конзолата информацията за служителя в следния вид (работим с конкретен пример) : -------------------------------------------------------------- name free days salary -------------------------------------------------------------- Mike 23 20000 -------------------------------------------------------------- Докато втория изписва състоянието така:

Name Mike free days 23 salary - 20000 3.2. В Employee класа добавете List<AbstractEmployeeObservser> observsers методи add(observser observser), detach(observser observser) добавящи и изтриващи наблюдатели за конретна инстанция на Employee metod notifyobservsers(), който извиква update(...) метода на всички наблюдатели с новите промени по дни отпуска, заплата или име (Този метод извиквате при всяка промяна на едно от трите полета на служител) 4. Нека сега се справим и с проблема, в който счетоводителя е въвел погрешни данни за дните отпуска и за това се изисква според спецификацията, да може да се прави undo() операция за служител, която просто да реинициализира стария брой дни на служителя Memento 4.1. Създайте нов клас Memento, съдържащ в себе си поле на Employee и дни отпуска (това което ще трябва да пази) в.ж. UML диаграмата. 4.2. В Employee класа добавяте списък от mementos: List<Memento> memetos, който при всяка промяна на дните отпуска ще се добавя в него един Memento със стария борй на дните (в setholidaydays() преди да се инициализира ноя брой дни се прави това) добавете и метод undo(), взимащ последния емелент на списъка mementos и извиква операцията restore() 5. В EmployeeManagementTest класа тествайте така вече имплементираната система. Допълнете със сорс код в тестовия клас. Там е написано начална инициализация (създайте двата наблюдателя и ги добавете за избран служител, вижте дали работи и мементо шаблона, като промените дните опуска и извикате undo() операцията )