Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Tervezési minták

A GoF tervezési mintáinak bemutatása
by

Richard Radics

on 22 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Tervezési minták

Tervezési minták
Mire kell figyelni?
pontos problémafelismerés, sok tapasztalat kell a megfelelő minta kiválasztásához
nem minden minta platform független
túlzott használat, nem biztos hogy a legjobb megoldás
Kategóriák

Létrehozási minták - Creational Design Patterns

Szerkezeti minták - Structural Design Patterns

Viselkedési minták - Behavioral Design Patterns


Szerkezeti minták
Középpontjában az áll, hogy az osztályokból és objetumokból hogyan alkotunk nagyobb szerkezeteket

Örökléssel felüleleteket, vagy megvalósításokat építenek fel


Tervezési minták
Tervezési minta?
újrafelhasználható, optimalizált megoldások
sablonok, amiket az adott szituációra kell formálnunk
Miért használjuk őket?
bevált megoldások
bizonyítottan működnek
programozók "közös nyelve"
átlátható, flexibilis programkód az eredmény
Létrehozási minták
A létrehozási minták, az objektumok létrehozási,
gyártási folyamatának kezeléséről szólnak

A létrehozásról szóló folyamatot egységbezárják, a
külvilág számára rejtett marad

Singleton
Biztosítja, hogy egy osztályból csak egyetlen példányunk lehessen.

Az egyedüli példány biztosításán kívűl meg kell adni egy globális hozzáférési pontot, amin keresztül elérhető a példány.
Factory
Különböző megvalósítású, de azonos felületű objektumok létrehozására szolgál.

A kliensek elől el vannak szigetelve a konkrét típusok.

Hasznos, amikor valamilyen dologból több fajtát szeretnénk gyártani.
http://www.felsofokon.hu/sallai-mate-blogja/2011/02/07/c-singleton-tervezesi-minta
Példa: adatbázis kapcsolat, loggoló
Abstract Factory
A Factory minta kiterjesztése ahol a termékek csoportokba rendezhetőek.

Létrehozási interfészt biztosít a kapcsolódó vagy függő objektumok csaladjának a konkrét osztályok megadása nélkül.






Builder
http://codeguide.hu/2013/04/23/tervezesi-mintak-gyarto-minta/
http://primuszpeter.blogspot.hu/2011/01/elvont-gyar-abstract-factory.html
Egy építési folyamattal ugyanazt az objektumot több, különböző elemekkel kell létrehozni,

vagy különböző elemekből (különböző számú) kell felépíteni egy objektumot,

vagy különböző koncepció szerint kell felépíteni egy objektumot.

A létrehozás folyamata független az ábrázolástól.

Hasznos ha a konstruktor paraméterlistája nagyon hosszú.
http://codeguide.hu/2013/03/19/az-builder-minta/
Prototype
Akkor használjuk, ha egy objektum létrehozásának módjától függetlennek kell lennie a rendszernek

Amikor az objektumok felparaméterezése körülményes, és könnyebb egy prototípust inicializálni majd azt másolni.

Gyakran használjuk, ha a példányosítandó osztály típusa futásidőben derül ki.

Klónozás, másolás.


http://www.dynamicart.hu/blog/prototype-tervezesi-minta.html
Példa: Framework, ami egyszerre több dokumentum kezelését támogatja
Példa: Grafikus keretrendszerre építve kottaszerkesztő alkalmazás elkészítése
Példa: Ablakos rendszerek, GUI vezérlőelemek (ablak, nyomógomb, kiválasztógomb, stb.)
Adapter
Lefordítja az egyik osztály interfészét, egy kompatibilis másik interfészre.

Lehetővé teszi olyan osztályok együttműködését, amik alapból nem tudnának, oly módon hogy interfészt nyújt a kliensnek, míg ő az eredetit használja.
Bridge
Célja a megvalósítás elvont ábrázolástól való különválasztása, hogy a kettő egymástól függetlenül kezelhető legyen.
Composite
Rész-egész viszonyban álló objektumokat fastruktúrába rendezi.

A kliensek számára lehetővé teszi, hogy az egyszerű és kompozit objektumokat egységesen kezelje.
Decorator
Objektumok funkciójának dinamikus kiterjesztése.

Rugalmas alternatívája a leszármaztatásnak.
Facade
Egységes interfészt definiál egy alrendszer interfészeinek halmazához.

Magasabb szintű interfészt definiál, amin keresztül könnyebb az alrendszer használata.

Hasznos rétegelés esetén, vagy egyszerű interfész kialakításhoz egy komplex rendszer felé.
Flyweight
Megosztás révén támogatni a nagy finomságú objektumok tömegeinek hatékony felhasználását.

Előnyös ha az alkalmazás nagy számú objektumot használ.
Proxy
Objektum elérése képviselőn keresztül:
biztonsági megfontolásból nem akarjuk közvetlenül elérhetővé tenni
ha az adott objektum nem érhető el az adott környezetben (távoli objektum elérés interfészen keresztül)

Lehetőséget ad költséges objektumok létrehozásának elhalasztására, a konkrét felhasználásig.

Viselkedési minták
Középpontjukban az algoritmusok állnak, illetve a felelősségi körök hozzárendelése az objektumokhoz
Nem csupán osztályok és objektumok rendszerét írják le, hanem a kommunikációt is, a futásidőben nehezen követhető, bonyolult vezérlési folyamatot modellezik, úgy, hogy éppen a vezérlésről terelik el a figyelmünket, hogy az objektumok között fennálló kapcsolatokra összpontosíthassunk.
As you, the design pattern expert, walk into the boardroom of MegaGigaCo,
the CEO and members of the board are celebrating their new contract to
design a set of cars in the sedate way you’d expect — by high-fiving each other
and whooping around the room.
“This contract is going to mean a huge amount of income for us,” says the
CEO, sloshing a little champagne on the boardroom table in his excitement.
“All we’ve got to do is make sure we get the design process right.” He turns
on the overhead projector, and as several large charts appear on the wall, the
CEO says, “Now here’s my idea . . .”
“Wrong,” you say.
The CEO looks startled, and says, “But if we . . .”
“Nope,” you say, shaking your head.
“What . . .”
“Sorry,” you tell the CEO and the board, “it’s clear you’re risking your entire
contract by doing things the wrong way. I can see a dozen problems just looking
at that chart.”
The board murmurs with concern and the CEO asks, “And you are?”
“I’m the design pattern pro who’s going to solve all your design problems,”
you say. “For a whopping fee, of course.”
The CEO writes down a tentative figure for your fee that, while large, doesn’t
seem large enough to you.
“Wrong again,” you say.
The CEO looks at you with raised eyebrows.
“Design patterns,” you explain, “represent solutions to known programming
problems. Not only that, but they also represent good programming practice,
making maintenance and extension of your code that much easier. So as you
can see, hiring an expert like me makes a lot of sense — when I see a programming
problem that has already been solved with a design pattern, I can
tell you all about it.”
“Well,” the company programmers say reluctantly, “the idea behind design
patterns sounds okay. But we already use object-oriented techniques in our
programming. Doesn’t that already cover the problem?”
“Nope,” you say. In fact, that’s one of the main points behind design patterns —
they extend object-oriented programming (OOP).
Template method
Egy műveleten belül algoritmus vázat definiál, és ennek néhány lépésének implementálását a leszármazott osztályra bízza.
Példa: framework-ben dokumentum megnyitása
Command
Observer
Iterator
State
Interpreter
Strategy
Chain of Responsibility
Memento
Mediator
Visitor
Adott nyelvtan reprezentációja OO eszközökkel, ill. a nyelvtanhoz kapcsolódó értelmező megvalósítása.
Ritkán használatos.
Példa: római számról átalakító program
Különböző algoritmusok objektumba zárása közös intefésszel, a megfelelő algoritmus kiválasztása poliformizussal.
Definiáljuk algoritmusok egy családját, zárjuk őket egységbe és tegyük őket egymással kicserélhetővé.

Lehetővé teszi, hogy az algoritmus az őt használó kliensektől függetlenül változhasson.
Az üzenet vagy kérés küldőjét függetleníti a kezelő objektumoktól.
Több objektumnak adja meg a lehetőséget a kérés lekezelésére, amelyek láncot alkotnak. A kérés ezt a láncot járja be, míg le nem kezelik.

Lehetőség van a láncba különböző felelősségű kezelő objektumokat rakni.
Objektum állapotának tárolása, a belső tárolási szerkezet felfedése nélkül.

Megoldási lehetőséget kínál az objektum belső állapotához való hozzáféréshez anélkül, hogy megsértenénk vele az egységbe zárás szabályát.

Az objektum állapota később visszaállítható.
Példa: visszavonás funkció egy Dokumentumban
Példa: különböző rendezések
Parancsok, request-ek objektumba ágyazását, és ezen keresztül feladatok delegálást fogalmazza meg.

Dinamikusan rendelhetünk különféle parancsokat a kliensekhez, sorba állíthatjuk, naplózhatjuk, visszavonható műveleteket kezelhetünk.

Üzenetet ill. kérést objektum egységbezár.

Parancsok összetett parancsokká szervezhetőek, egy makrót képezve.
Példa: felhasználói parancsok
Aggregált (gyűjtemény) objemtumhalmaz elemeinek felsorolása a belső tárolási formától független módon.

Feladata:
Összetett objektum elemeinek elérése a belső szerkezetének ismerete nélkül
Többféle kiolvasási sorrend definiálása
Egységes interfész biztosítása a különböző szerkezetű elemeinek elérésére
Példa: listák
Több egymással kapcsolatot tartó objektum kommunikációjának egységbe zárása.

Megoldja, hogy az egymással kommunikáló objektumoknak ne kelljen egymásra hivatkozást tárolniuk, ezáltal biztosítva az objektumot laza csatolását.

Központosítja az irányítást.
Példa: egy form, vagy dialógus ablak
Lehetővé teszi egy objektum viselkedésének megváltoztatását, amikor megváltozik az állapota.

Példa: TCPConnection osztály egy hálózati kapcsolatot reprezentál.

3 állapota lehet: Listening, Established, Closed.

A kéréseket különbözően kezeli.
Egy objektumtól (annak állapotától) függő tetszőleges számú objektum értesítése az állapot megváltozásáról.

Egyik leggyakrabban használt minta.
Példa: MVC vagy Document-View architektúra - a felhasználó megváltoztatja az egyik nézeten az ablakot, hogya frissíti a többit?
Objektumhalmazon elvégzendő különböző műveletek egységbezátása, az objektumhalmaz ill. a benne szereplő objektumok változtatása nélkül.

Új művelet bevezetése az adott objektumokon úgy lehetséges, hogy nem szükséges az osztályaikon módosítani.
Design Patterns for Dummies
Spagetti kód (Spaghetti code)
nincs szeparáltság, kevés objektum (az igényekhez képest), teljes struktúrálatlanság, egyszerűbb újra irni mint módosítani
Vágólap kódolás (Clipboard coding)
Nem ismert kódot bemásolunk, amiről nem tudjuk mit csinál pontosan
Lávafolyam (Lava Flow)
Próbakódot tovább fejlesztik végtermékké, benne marad egy rakás eltávolíthatatlan kódtömeg
Funkcionális dekompozíció
Nem OO fejlesztők próbálnak OO nyelven alkalmazást írni, pl szubrutinokhoz osztályt hoznak létre
Kísértet (Poltergeist)
Tipikusan állapot nélküli osztályok, melyek más osztályok metódusait hívják meg, általában előre meghatározott sorrendben, redundáns navigációs utakat eredményeznek
A massza (The blob)
"Isten osztály", egyetlen olsztály tartalmaz szinte mindent
Arany pöröly (Golden Hammer)
Lasagna kód (Lasagna code)
Mágikus számok (Magic numbers)
Mágikus stringek (Magic strings)
Ellenpéldák
Anti-patterns
"Úgy gondolom, hogy tervezési minták, mint egész, segíthet az embereknek megtanulni az objektumorientált gondolkodást: hogyan hasznosítható a többalakúság, a összetételen alapuló tervezés, a delegálás, egyensúlyi felelősségi körök, továbbá plugin-szerű viselkedés biztosít. A tervezési minták tovább megy az objektumokra való alkalmazáson pl. számos grafikus formai példával, osztályhierarchia formákkal és többalakú rajzoló metódussal. Ténylegesen megtanulható a többalakúság, amikor megértjük a tervezési mintákat. Tehát a tervezési minták egyaránt használhatók OOP tanulásra illetve általános tervezésre"
Erich Gamma
Full transcript