Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaFrigyes Faragó Megváltozta több, mint 9 éve
1
Haladó C++ Programozás Programtervezési minták – alapok Sonkoly Balázs
2
Programtervezési minták - alapok
Áttekintés Programtervezési minták – alapötletek Minták megadása Milyen tervezési problémákat oldanak meg? Minták csoportosítása Programtervezési minták - alapok
3
Programtervezési minták - alapok
Hatékonyság ↔ átláthatóság Most: hangsúly a tervezésen „Sokkal könnyebb egy jól működő programot hatékonnyá tenni, mint egy hatékonyt jól működővé.” [Yourdon] Jól tervezett program (pl. minták használata): általában több munka, mint az alkalmi megoldásokkal, de megéri újrahasznosíthatóság rugalmasság Programtervezési minták - alapok
4
Programtervezési minták (1)
Cél: jobb újrahasznosíthatóság nagyobb rugalmasság ötletek rögzítése a tervezéshez ne kelljen minden problémára új megoldást kidolgozni Objektumközpontú programozás előnyei rugalmasság modularitás átláthatóság Már bevált, működőképes megoldások újrahasznosítása nem kezdeti ötletek, hanem hosszú évek alatt kidolgozott megoldások többszöri újratervezés, újrakódolás Programtervezési minták - alapok
5
Programtervezési minták (2)
NEM egyszerű építőelemek, melyek egy osztályként megvalósíthatók összetett, teljes alkalmazások vagy alrendszerek készítéséhez használható tervezetek HANEM egymással együttműködő objektumok és osztályok leírásai, amelyek testre szabott formában valamilyen általános tervezési problémát oldanak meg egy bizonyos összefüggésben tulajdonképpen „receptek”, „megoldás sablonok” Programtervezési minták - alapok
6
Programtervezési minták - alapok
Minták – alapötlet Christopher Alexander – 1977 Épületek és városok mintái „Minden MINTA olyan problémát ír le, ami újra és újra felbukkan a környezetünkben, s aztán leírja hozzá a megoldás magját, oly módon, hogy a megoldás milliószor felhasználható legyen, anélkül, hogy valaha is kétszer ugyanúgy csinálnánk.” Programtervezési minták - alapok
7
Programtervezési minták - alapok
Minták megadása Minta neve jó név választása mindig fontos tudunk beszélni róla, hivatkozni rá Probléma leírása mikor alkalmazzuk a mintát a probléma és összefüggései Megoldás terv felépítéséhez szükséges elemek (osztályok, objektumok), viszonyaik, hatáskörük, együttműködési lehetőségeik nem konkrét megvalósítás – sablon, ami különböző helyzetekben alkalmazható Következmények előnyök, hátrányok értékelés – tervezési alternatívák Programtervezési minták - alapok
8
Tervezési problémák (1)
Minták: fontos tervezési problémákra adnak megoldást Megfelelő objektumok keresése Szükséges objektumok kiválasztása Objektumfelületek meghatározása alapfogalmak: művelet szignatúrája: név, input (objektum-) paraméterek, visszatérési érték objektum felülete: összes szignatúrája típus: egy bizonyos felület (objektumnak több típusa is lehet!) egyforma felületek futásidőben cserélhetők (polimorfizmus) kulcselemek azonosítása felületen áthaladó adatok mit ne tegyünk a felületbe felületek közötti kapcsolatok Programtervezési minták - alapok
9
Tervezési problémák (2)
Objektummegvalósítások meghatározása objektum típusa ↔ osztálya felületöröklés ↔ osztályöröklés felületöröklés: egy objektum mikor használható egy másik helyett osztályöröklés: objektum megvalósítása egy másik objektum megvalósításának segítségével C++ nem tesz különbséget, de tipikusan (tiszta) osztályöröklés: privát öröklés (tiszta) felületöröklés: nyilvános öröklés tisztán elvont osztályoktól 1. alapelv: Programozzunk a felületre a megvalósítás helyett! Az elvont osztályban meghatározott felületet bővítsük (felületöröklés) Változásra tervezve: új igények és változó igények megérzése (benne van a mintákban) Programtervezési minták - alapok
10
Öröklés vagy összetétel (kompozíció)?
Öröklés („fehér dobozos”) előnyök statikus (fordításkor) egyértelmű könnyebb az újrahasznosított megvalósítás módosítása (szülőnél) hátrányok örökölt megvalósítás futási időben nem változtatható megszegi az egységbezárást ez a függőség korlátozza az újrahasznosíthatóságot, rugalmasságot javaslat: csak elvont osztályoktól örököljünk Összetétel („fekete dobozos”) előnyök dinamikus (futási időben) figyelmesen tervezett felületek kellenek nem szegjük meg az egységbezárást kompatibilis típusú objektumok cserélhetők kevesebb megvalósítási függőség egyszerűbb osztályhierarchia hátrányok nehezebb érthetőség 2. alapelv: Használjunk objektum-összetételt osztályöröklés helyett, amikor csak lehet! Programtervezési minták - alapok
11
Képviselet (delegáció)
Speciális összetétel Örökléshez hasonló kód újrahasznosítási módszer Résztvevők: fogadó objektum és képviselője Példa: Ablak – Téglalap kapcsolat az Ablak egy Téglalap (osztályöröklés) helyett az Ablaknak van egy Téglalap példánya (képviselője), akire bizonyos műveleteket átruház Előnyök viselkedés kialakítása futási időben összetétel módja változtatható Hátrányok nehezebb érthetőség, mint statikusabb programoknál Javaslat: Csak akkor használjuk, ha többet egyszerűsít, mint bonyolít! Programtervezési minták - alapok
12
Öröklés és paraméterezett típusok
C++: sablonok Egy típus meghatározása anélkül, hogy minden általa felhasznált típust megadnánk Paraméterek Korábban volt részletesen Ezekkel most nem foglalkozunk Programtervezési minták - alapok
13
Objektummodell – jelölések (ism.)
Fontosabb relációk Öröklés (szülő-gyermek kapcsolat) („háromszög”) Komponens (összetétel, aggregáció) reláció („rombusz”) Hivatkozás (ismeretség) („folytonos vonal”) Példányosítás („szaggatott vonal”) Egy összetettebb példa Programtervezési minták - alapok
14
Minták csoportosítása
Cél szerint létrehozási szerkezeti viselkedési Hatókör szerint osztály objektum Programtervezési minták - alapok
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.