Objektumvezérelt rendszerek tervezése 7. óra – Iterator, State, Interpreter © Szőke Gábor
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator Cél: tároló-objektum elemeinek sorozatos elérése a reprezentációtól függetlenül Alkalmazhatóság: egy tároló objektum tartalmát el akarjuk érni függetlenül a belső reprezentációtól egyidejűleg többszörös bejárásra is szükség van egységes interfészre van szükség különböző tároló szerkezetekhez © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator példa - leírás Van két típusú listánk Feladatok listája (TodoList) ArrayListben tárol Feladatok gyűjteményének listája (ToDoListCollection) HashMapben tárol A két listát egységesen akarjuk bejárni Az egységes bejárással kiíratjuk a feladatokat (ListPrinter) © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator példa - résztvevők Aggregate – Iterating Client – ListPrinter ConcreteAggregate ToDoListCollectionImpl ToDoListImpl Iterator, ConcreteIterator Beepitett java iteratorokat használunk © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator példa - diagram © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator - megjegyzés Kötelező programban előfordulhat Saját iterátort kell írni (ne a beépített nyelvit h.) Composite-ot kellene iterálni Ez nem egyszerű feladat, ezért végső esetben kiváltható Visitor minta, vagy az alapértelmezett Composite bejárással Composite::Component ~ Iterator::ConcreteAggregate Ha több Composite reprezentációnk van akkor lesz több ConcreteAggregate (ez nem kötelező) Tipp Iterator::Iterator plusz infot kell hogy tároljon arról, hogy hol jár a Composite fában (pl. egy verem referenciákkal az éppen bejárt elemekre) Component getChild(int) metódusát használni kell © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Iterator – megjegyzés példa © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék State Cél: objektum viselkedésének megváltoztatása belső állapotváltozás hatására (kívülről úgy tűnik, mintha az osztályát változtatná meg) Alkalmazhatóság: objektum viselkedése állapotának függvénye, és az futás közben változhat operációkban nagy elágazások vannak, többen ugyanazon szerkezettel, pl. valami konstanstól függővé téve
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék State
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék State példa Egy RPG kalandjátékban a karakterünk attól függően, hogy milyen műveletet végzünk vele több állapotban is lehet. Az egyes műveletek végrehajtásának az eredménye függ az adott állapottól is.
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék State példa Context – Context AbstractState – IState ConcreteState MovingState PanickingState RestingState AttackingState
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék State példa
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Interpreter Cél: egy nyelv nyelvtanának reprezentálása a hozzá tartozó interpreterrel (szintaxis fa épül, majd a nyelv szavai ezen lesznek elemezve) Alkalmazhatóság: nyelv megadható, melynek szintaxisfáján történhet az elemzés nagyobb feladatokhoz jobbak az elemző- generátorok (osztályhierarchia nagy lehet) © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Interpreter © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Interpreter példa - leírás Van egy személyek elérhetőségét (Contact) tároló kollekciónk (ContactList). Interpreter segítségével definiálunk egy kifejezést, amit arra használhatunk, hogy a kollekcióban az adott kritériumoknak megfelelő Contact-okra keresve visszakapjuk a megfelelő Contact-ok egy halmazát © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Interpreter példa - résztvevők AbstractExpression – Expression NonTerminalExpression ContainsExpression EqualsExpression AndExpression TerminalExpression VariableExpression ConstantExpression © Fülöp Lajos
Szegedi Tudományegyetem – Szoftverfejlesztés Tanszék Interpreter példa - diagram © Fülöp Lajos