Tarkvara arhitektuur ja disain

Slides:



Advertisements
Similar presentations
Welcome to. Who am I? A better way to code Design Patterns ???  What are design patterns?  How many are there?  How do I use them?  When do I use.
Advertisements

18-1 Verifying Object Behavior and Collaboration Role playing – the act of simulating object behavior and collaboration by acting out an object’s behaviors.
Patterns Reusable solutions to common object-oriented programming problems When given a programming problem, re-use an existing solution. Gang of Four.
05/26/2004www.indyjug.net1 Indy Java User’s Group June Knowledge Services, Inc.
(c) 2009 University of California, Irvine – André van der Hoek1June 13, 2015 – 21:42:16 Informatics 122 Software Design II Lecture 8 André van der Hoek.
Design Patterns. What are design patterns? A general reusable solution to a commonly occurring problem. A description or template for how to solve a problem.
Design Patterns William A. Hoffman NYU OOP Class.
Software Waterfall Life Cycle Requirements Construction Design Testing Delivery and Installation Operations and Maintenance Concept Exploration Prototype.
Agiilne tarkvaraarendus kui tarkvara kvaliteedi tõstmise vahend Erik Jõgi
樣式導向設計 (Pattern-Oriented Design) 課程簡介 Ku-Yaw Chang Assistant Professor, Department of Computer Science and Information Engineering.
CSSE 374: Introduction to Gang of Four Design Patterns
Java ja.NET Framework programmide kompileerimine masinkoodi Siim Karus.
SOEN 6011 Software Engineering Processes Section SS Fall 2007 Dr Greg Butler
January 12, Introduction to Design Patterns Tim Burke References: –Gamma, Erich, et. al. (AKA, The Gang of Four). Design Patterns: Elements of Reusable.
Design Patterns in Java Chapter 1 Introduction Summary prepared by Kirk Scott 1.
IT Kolledzh/TTÜ 2002 T.Tammet IT sissejuhatus loeng 11 lk Sissejuhatus informaatikasse.
SOEN 343 Software Design Section H Fall 2006 Dr Greg Butler
Design Patterns CSCI 5801: Software Engineering. Design Patterns.
Kas Internet’i regulatsioon on võimalik? Euroopalikud vastused Infopoliitika FOORUM 26.veebruaril 2004 Andres Jõesaar.
Software Design Patterns (1) Introduction. patterns do … & do not … Patterns do... provide common vocabulary provide “shorthand” for effectively communicating.
Computing IV Singleton Pattern Xinwen Fu.
CSE 403 Lecture 14 Design Patterns. Today’s educational objective Understand the basics of design patterns Be able to distinguish them from design approaches.
Testing Extensible Design Patterns in OO Frameworks through Scenario Templates D.S. Sanders Software Verification & Validation.
Methods: Deciding What to Design In-Young Ko iko.AT. icu.ac.kr Information and Communications University (ICU) iko.AT. icu.ac.kr Fall 2005 ICE0575 Lecture.
Design Patterns CSIS 3701: Advanced Object Oriented Programming.
Introduction to Design Patterns. Questions What is a design pattern? Who needs design patterns? How different are classes and objects in APL compared.
1 Design Patterns Object-Oriented Design. 2 Design Patterns 4Reuse of design knowledge and experience 4Common in many engineering disciplines 4Avoids.
Creational Patterns
Chapter 01 : 디자인 패턴 개요. chapter 01 : 디자인 패턴 개요.
What to know for the exam. Smalltalk will be used for questions, but there will not be questions about the grammar. Questions might ask – how particular.
Proxy.
CS616: Software Engineering Spring 2009 Design Patterns Sami Taha.
© 2011 Autodesk Popular Design Patterns and How to Implement Them in.NET Gopinath Taget Senior Developer Consultant.
Design Patterns. 1 Paradigm4 Concepts 9 Principles23 Patterns.
Design Patterns Introduction
Five Minute Design Patterns Doug Marttila Forest and the Trees May 30, 2009 Template Factory Singleton Iterator Adapter Façade Observer Command Strategy.
7 April 2004CSci 210 Spring Design Patterns 2 CSci 210.
Õppimine Eva Palk. Mis on õppimine? Kogemuse läbi toimuv püsiv muutus käitumises või teadmistes.  Kogemusi võib omandada välismaailmaga  kokkupuutes,
Design Patterns CSCE 315 – Programming Studio Spring 2013.
The Object-Oriented Thought Process Chapter 15
Chapter 10 Design Patterns.
樣式導向設計 (Pattern-Oriented Design) 課程簡介
MPCS – Advanced java Programming
Design Patterns Lecture part 2.
Introduction to Design Patterns
object oriented Principles of software design
ANDMEBAASIDE MONITOORIMINE
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2005 Instructor: Patrice Chalin.
WARNING These slides are not optimized for printing or exam preparation. These are for lecture delivery only. These slides are made for PowerPoint 2010.
Kombinatoorsete süsteemide disain
Mäluga süsteemide disain
Model View Controller disainimuster
Süsteemprogrammeerimine keeles C ja C#
Süsteemprogrammeerimine keeles C ja C#
X-tee liideste arendajate koolitused
Objektorienteeritud disain
Süsteemid ja protsessid sinu arvutis
Alumiste hammaste sensoorne innervatsioon Nervus mylohyoideus’ega
Avo Ots telekommunikatsiooni õppetool,
ANDMEBAASIDE MONITOORIMINE
BizTalk Martin Maripuu Integratsiooni-arhitekt
Läbirääkimised: vormide täitmine Participant Portal’i kaudu.
Mudelitest ja modelleerimisest
CSE 403 Software Design.
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2005 Instructor: Patrice Chalin.
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2004 Instructor: Patrice Chalin.
Chapter 8, Design Patterns Singleton
CIS 644 Tues. Nov. 30, 1999 W15A … patterns.
Chapter 8, DesignPatterns Facade
Presentation transcript:

Tarkvara arhitektuur ja disain Loeng 8 Ants Torim

Eelmise loengu sisu Polümorfism - klassiti varieeruva käitumise eest vastutavad klassid ise. Puhas väljamõeldis - vahel on kasulik tekitada disaini klass, mis probleemvaldkonnas vastet ei oma. Kaudsus - välissüsteemi äriloogikast lahutamiseks on kasulik kasutada klasse, mis peidavad konkreetse välissüsteemi üldise liidese taha. Kaitstud variatsioonid - fundamentaalne printsiip, eriti polümorfismi ja kaudsuse taga.

Millest selles loengus juttu tuleb? Gang of Four (GoF) disainimustrid: Šabloonmeetod (Template Method) Tehase meetod (Factory Method) Strateegia (Strategy) Olek (State) Adapter (Adapter) Sild (Bridge)

GoF mustrid GoF mustrid kirjeldati disainimustrite vallas teedrajavas raamatus Design Patterns; Gamma, Helms, Johnson, Vlissides; 1995. (Nimetus Gang of Four tuli neljast autorist.) GoF mustrid on konkreetsemad kui GRASP mustrid, kirjeldades lahendust vajalike klasside ja meetodite täpsusega. GoF mustrid tegelevad tavaliselt süsteemi kaitsmisega teatud tüüpi variatsioonide vastu OO viisil. GoF mustrite sõnavara on OO maailmas laialt kasutusel.

Struktuuriga seotud GoF mustrid Tüüpsisu: Objektidest suurte struktuuride koostamine. Adapter (Adapter) Sild (Bridge) Ühend (Composite) Dekoraator (Decorator) Fassaad (Facade) Kärbeskaal (Flyweight) Vahendusobjekt (Proxy)

Käitumisega seotud GoF mustrid Tüüpsisu: algoritmid ja vastutuste jaotus. Käsuliin (Chain of Responsibility) Käsk (Command) Interpretaator (Interpreter) Iteraator (Iterator) Vahendaja (Mediator) Memento (Memento) Vaatleja (Observer) Olek (State) Strateegia (Strategy) Šabloonmeetod (Template Method) Külastaja (Visitor)

Loomisega seotud GoF mustrid Tüüpsisu: Isoleerida teadmine tekitatava objekti tüübist. Kõigi nende mustrite juures on tegemist ühe või rohkema meetodiga, mis tagastab uue objekti. Klienttarkvara peab sellise objekti tekitamiseks kasutama mustri poolt pakutavat mehhanismi (meetodit), mitte objekti otse initsialiseerima. Abstraktne tehas (Abstract Factory) Ehitaja (Builder) Tehase meetod (Factory Method) Prototüüp (Prototype) Singel (Singleton)

Klassidiagrammide legend Värv näitab kuidas teatud muudatus disaini mõjutab.

Šabloonmeetod (Template Method) Probleem: Kuidas eraldada üldine algoritm varieeruvatest alamosadest? Lahendus: Defineeri algoritmi karkass Šabloonmeetodis jättes mõned sammud alamklassidele defineerimiseks. Šabloonmeetod lubab alamklassidel mõningaid algoritmi samme ümber defineerida ilma algoritmi struktuuri muutmata.

Šabloonmeetod Koostöö: KonkreetsedKlassid lasevad AbstraktselKlassil defineerida algoritmi muutumatud osad (šabloonmeetod) defineerides ise varieeruvad osad (primitiivneOp1-2). NB! Variantideks on siin alamklassid A ja B, mitte operatsioonid Op1 ja Op2. Op1 ja Op2 on mõlemad vajalikud sammud üldises algoritmis.

Šabloonmeetod koodis public abstract class AbstraktneKlass { public void shabloonmeetod(){ … primitiivneop1(); primitiivneop2(); } protected abstract void primitiivneop1(); protected abstract void primitiivneop2(); public class KonkreetneKlassA extends AbstraktneKlass { protected void primitiivneop1(){ // primitiivse op-i kood, mis vastab variandile A ….

Šabloonmeetod koodis, variandi valik ja väljakutse AbstraktneKlass k; if (teatudTingimus){ k= new KonkreetneKlassA(); } else { k = new KonkreetneKlassB(); } … k.shabloonmeetod(); // see väljakutse toimub tavaliselt // teises meetodis kui initsialiseerimine

Installeerimise näide Näiteprobleemiks on teatud tarkvara installeerimine erinevatele operatsioonisüsteemidele (Windows, Unix, ..). Üldine installeerimisprotseduur jääb kõigi operatsioonisüsteemide puhul samaks. Erinevad detailsed sammud - kataloogi olemasolu kontroll, kataloogi loomine, failide kirjutamine kataloogi. Kuidas vältida üldise installeerimisprotseduuri dubleerimist?

Installeerimise näide Šabloonmeetod installeeri kutsub välja abstraktseid meetodeid, mis defineeritakse konkreetsele operatsioonisüsteemile vastavates alamklassides.

Installeerimise kontranäide 15

Hinnapoliitika näide Näiteprobleemiks on poodides kasutavad erinevad allahindlusskeemid - fikseeritud protsent, fikseeritud läve ületavalt tehingult fikseeritud allahindlus jne. Kuidas peaks erinevaid allahindlusskeeme lubav disain välja nägema?

Hinnapoliitika näide

Hinnapoliitika näide

Tehase meetod (Factory Method) Probleem: Kes peaks vastutama objektide loomise eest, kui on tegemist erinõudmistega, nagu keerukas loomisprotsess, soov eristada objekti loomine kõrgema kokkukuuluvuse saavutamiseks, soov vältida sõltuvust konkreetsest loodavast klassist jne? Lahendus: Defineeri liides objekti loomiseks, aga lase alamklassidel otsustada, mis klassist eksemplar tekitada.

Tehase meetod Koostöö: Looja jätab oma alamklassidele defineerimiseks tehase meetodi(d), mis tagastavad sobiva KonkreetseToote eksemplari. Looja konkreetsed operatsioonid (Operatsioon) võivad TehaseMeetodit välja kutsuda.

Labürindimängu näide Meil on tegemist labürindimänguga. Labürint koosneb seintest ja ustest. Kuidas kasutada sama labürindi põhiplaani loomise algoritmi, erinevat klassi kuuluvatest seintest ja ustest koosnevate labürintide loomiseks? Eeldus on, et ühes ja samas labürindis on kõik seinad ja uksed sama klassi.

Labürindimängu näide

Strateegia (Strategy) Probleem: Kuidas eraldada üldine algoritm varieeruvatest alamosadest? Kuidas muuta objekti käitumine täitmisajal muudetavaks ja erinevad käitumisstrateegiad korduvkasutatavateks? Lahendus: Defineeri varieeruvale käitumisele vastav Strateegiate klassihierarhia. Üldist käitumist defineerivad Konteksti objektid on seotud Strateegia objektidega ja kutsuvad välja nende meetodeid.

Strateegia

Koostöö Strateegia ja Kontekst suhtlevad, et Šabloonmeetodit realiseerida. Kontekst võib anda primitiivse operatsiooni jaoks vajalikud andmed Strateegiale parameetrina. Alternatiivina võib Kontekst iseennast parameetrina Strateegiale anda. Kontekst saadab sõnumid oma klientidelt edasi oma Strateegiale. Kliendid loovad tavaliselt KonkreetseStrateegia objekti ja seovad selle Kontekstiga; edaspidi suhtlevad kliendid ainult Kontekstiga.

Strateegia koodis public class Kontekst { private Strateegia strat; public void shabloonmeetod(){ … strat.primitiivneop1(); strat.primitiivneop2(); …} } public interface Strateegia { public void primitiivneOp1(); public void primitiivneOp2(); public class KonkreetneStrateegiaA implements Strateegia { protected void primitiivneop1(){ // primitiivse op-i kood

Strateegia koodis, variandi valik ja väljakutse Kontekst k = new Kontekst(); if (TeatudTingimus){ k.setStrat(new KonkreetneStrateegiaA()); } else { k.setStrat(new KonkreetneStrateegiaB()); } … k.shabloonmeetod(); // see väljakutse toimub tavaliselt // teises meetodis kui konteksti seadistus

Installeerimise näide

Hinnapoliitika näide

Hinnapoliitika näide

Strateegia või Šabloonmeetod? Delegeerimine (Strateegia) või pärimine (Šabloonmeetod)? Pärimine on lihtsamalt defineeritav, kuid objekt elutsükli jooksul oma klassi vahetada ei saa. Objekti, millele ülesanded delegeeritakse, saab delegeerija elutsükli jooksul vahetada. Kui on vaja objekti elutsükli käigus algoritme vahetada, siis tuleks kasutada keerukamat Strateegiat. Kui varieerub objekti mitu aspekti, siis erinevaid Strateegiaid on lihtsam kombineerida. Strateegiaid on võimalik eraldi korduvkasutada.

Olek (State) Probleem: Objekti käitumine sõltub tema olekust ja tema meetodid sisaldavad olekust sõltuvaid tegevusi peegeldavat tingimusloogikat. Milline oleks alternatiiv tingimusloogikale? Lahendus: Loo ühist liidest realiseerivad oleku klassid iga oleku tarvis. Delegeeri olekust sõltuvad operatsioonid konteksti objektilt tema hetke oleku objektile. Taga konteksti objekti seotus õige oleku objektiga üle oleku muutuste.

Olek

Koostöö Kontekst saadab olekust sõltuvad palved edasi Oleku objektile. Kontekst võib anda ennast parameetrina Oleku objektile. Kontekst on klientidele peamine liides. Kliendid võivad Konteksti olekuga konfigureerida, aga pärast seda kliendid enam olekuga ei suhtle. Kas Kontekst või KonkreetseOleku alamklassid otsustavad, mis olek järgneb teisele ja mis tingimustel.

Pöördvärava näide Meil on tegemist tasulist pöördväravat kontrolliva tarkvaraga. Olekud: avatud, suletud Registreeritavad sündmused: münt, möödumine Tegevused: ava, sule, täna maksjat, alarmeeri. Kuidas vältida tingimusloogikat pöördvärava klassis?

Pöördvärava näide

Pöördvärava näide

Adapter (Adapter) Probleem: Kuidas lahendada kokkusobimatute liideste probleem või pakkuda stabiilset ühist liidest erinevate liidestega, sisult sarnastele, komponentidele? Lahendus: Konverteeri komponendi algne liides teiseks liideseks läbi vahepealse Adapter objekti.

Adapter Koostöö: Kliendid kutsuvad välja Adapteri operatsioone. KonkreetneAdapter kutsub välja sobivaid Adapteeritava operatsioone.

Maksukalkulaatori näide On vaja pakkuda võimalust suhelda välise maksukalkulaatori tarkvaraga (TaxMaster, TaxPro). Kõik välised tarkvarakomponendid realiseerivad erinevat liidest. Kuidas oleks võimalik luua disaini, mis oleks sõltumatu konkreetsest välisest maksukalkulaatorist?

Maksukalkulaatori näide

Maksukalkulaatori näide

Maksukalkulaatori näide

Maksukalkulaatori näide

Lineaaralgebra paketi vektorid punktina

Sild (Bridge) Probleem: Klassi liides (abstraktsioon) ja meetodite realisatsioon võivad sõltumatult varieeruda. Igale liidese / realisatsiooni kombinatsioonile ei ole mõtet vastavat alamklassi defineerida. Kuidas kaitsta disaini mõlema aspekti varieerumise vastu? Lahendus: Loo abstraktsioonile ja realisatsioonile vastavad klassihierarhia. Abstraktsioonile vastavad objektid delegeerivad oma ülesanded realisatsioonile vastavatele objektidele.

Sild Koostöö: Abstraktsioon saadab Operatsiooni läbiviimise sõnumid edasi Realiseerijale (OperatsiooniImp()).

GUI raamistiku näide Ülesandeks on luua GUI raamistik, mis sisaldab klasse nagu Aken, Nupp, Menüü ja mis on piisavalt üldine, et joosta erinevate operatsioonisüsteemide ja raamistike peal. Varieeruda võib nii Akna abstraktsioon - meil on erinevat tüüpi aknad - kui ka API, millega akna kuvamiseks suhelda. Milline disain oleks kaitstud nende kahe aspekti varieerumise vastu?

Sild: GUI raamistiku näide

Strateegia: tarkvara installeerimise näide

Sild: Tarkvara installeerimise näide Erinevalt Strateegia näitest samal teemal, kus varieerus ainult OS, varieerub siin lisaks ka Tarkvara tüüp.

Kokkuvõte Šabloonmeetod, Strateegia - käitumise varieerimine läbi pärimise või delegeerimise. Tehase meetod - Alamklassis defineeritakse soovitud objekti loov meetod. Olek - varieerub olekust sõltuv käitumine. Adapter - liideste struktuuri ühtlustamine. Sild - abstraktsioon ja realisatsioon varieeruvad sõltumatult.

Viited Gamma, Helms, Johnson, Vlissides. Design Patterns. 1995. Larman, C. Applying UML and Patterns, 2002 Jezequel, Train, Mingins. Design Patterns and Contracts, 2000 Object Mentor: Articles: Patterns: http://www.objectmentor.com/resources/publishedArticles.html