Modulok és OOP Irodalom Steven R. Schach: Object Oriented & Classical Software Engineering, McGRAW-HILL, 6th edition, 2005, chapter 7. 2
Modulok és objektumok Modulok Lexikálisan folytonos utasítás sorozatok, határoló elemekkel és saját azonosítóval ez egy tág definíció 3 Tervezési példa Melyik megoldás jobb? Miért? 4
A kívánatos struktúra Modulok maximális bels! kapcsolatok maximális interakció a modulon belül minimális küls! kapcsolatok minimális küls! interakció a modulok között Modul kohézió bels! interakció foka Modul csatolás modulok közötti interakció foka 5 Kohézió Modulon belüli interakciók foka, jellege 7 kategória: Információs Funkcionális Kommunikációs Procedurális Id!beli Logikai Esetleges 6
Esetleges kohézió Többféle, egymástól teljesen független tevékenységek egy modulba szervezve általában a modulméretre vonatkozó el!írások szüleménye pl.: print_next_line, reverse_string_of_characters_comprising_second_parameter, add_7_to_fifth_parameter, convert_fourth_parameter_to_floating_point 7 Esetleges kohézió (folyt.) Jellemz!k: nehéz karbantartani nem újra felhasználható 8
Logikai kohézió Logikailag (formálisan) hasonló tevékenységek, hívó modul választja ki, hogy pontosan melyik kerüljön végrehajtásara pl.: function_code = 7; new_operation (op code, dummy_1, dummy_2, dummy_3); // dummy_1, dummy_2, and dummy_3 are dummy variables, // not used if function code is equal to 7 9 Logikai kohézió (folyt.) Jellemz!k: interfészt nehéz megérteni több különböz! tevékenység kódja összefügghet nehéz az újra felhasználás 10
Id!beli kohézió Id!ben összefügg! tevékenységek sorozata egy modulban pl.: open_old_master_file, new_master_file, transaction_file, and print_file; initialize_sales_district_table, read_first_transaction_record, read_first_old_master_record (a.k.a. perform_initialization) 11 Id!beli kohézió (folyt.) Jellemz!k: tevékenységek egymással kevéssé függnek össze er!s kapcsolatok más modulok tevékenységeivel nem újra felhasználható 12
Procedurális kohézió Olyan tevékenységek végrehajtása, melyek a szoftvertermék használatához kapcsolódó eljárásokkal vannak összhangban pl.: read_part_number_and_update_repair_record_on_master_file 13 Procedurális kohézió (folyt.) Jellemz!: egyáltalán nem újra felhasználható 14
Kommunikációs kohézió A szoftvertermék használatához kapcsolódó tevékenységek, melyeket ugyanazokon az adatokon kell elvégezni pl.: update_record_in_database_and_write_it_to_audit_trail Jellemz!: nem újra felhasználható 15 Funkcionális kohézió A modul pontosan egy adott funkciót megvalósító tevékenységet végez pl.: write_to_floppy_disk 16
Funkcionális kohézió (folyt.) Jellemz!k: jobban újra felhasználható javító karbantartás egyszer"bb könnyebb hibalokalizálás kevesebb regressziós hiba könnyebb a termék b!vítése 17 Információs kohézió külön (saját) belépési pontú, független kódú m"veletek, azonos adatszerkezeteken végrehajtva pl.: 18
Csatolás Két modul közötti interakció foka, jellege 5 kategória: adat csatolás adatszerkezet csatolás vezérlési csatolás közös terület csatolás tartalom csatolás 19 Tartalom csatolás Az egyik modul a másik modul tartalmát közvetlenül (nem néven keresztül) eléri (adatok, vezérlés) Problémák a hivatkozott modul megváltoztatása a hivatkozó megváltoztatásával jár a két modul csak együtt újra felhasználható 20
Közös terület csatolás Csatolás globális adatterületen (globális változókon) keresztül pl.: 21 Közös terület csatolás (folyt.) olvashatatlan kód pl.: mellékhatások globálisok változtatása egy modulhoz a többi modul változtatásával jár nehéz újra felhasználás 22
Közös terület csatolás (folyt.) rejtett csatolás csatolási fok n!, pedig a modul nem változott (újabb modulok megjelenése a rendszerben) nehéz karbantartás, regressziós hibák pl. Linux kernel kód méret lineárisan n!tt a verziószámmal, összcsatolás exponenciálisan 23 Vezérlés csatolás Az egyik modul megváltoztatja a másik vezérlési folyamát vezérlési döntésekben szerepl! adatok átadása Nem független modulok ismerni kell a másik modul vezérlését 24
Adatszerkezet csatolás Összetett adatszerkezetek átadása, de csak részekre van szükség pl.: satellite_altitude kell, de satellite_coordinates_rec megy 25 Adatszerkezet csatolás (folyt.) Problémák melyik mez!k érdekesek, változnak? nehéz újra felhasználás adat hozzáférési, biztonsági kérdések 26
Adat csatolás Modulok között átadott adatok egységes, homogén adatelemeket jelentenek egyszer" adatok teljesen felhasznált összetett adatok Egyszer" karbantarthatóság, újra felhasználás 27 A megfelel! struktúra kialakítása Cél Nagyfokú kohézió Alacsony csatolás Tervezési elvek (absztrakciók) adat egységbezárás, betokozás információ elrejtés 28
Adat egységbezárás Nem alacsonyszint" adatszerkezetek és rajtuk elvégzend! m"veletek, hanem koncepcionális elemek m"veletek, funkciók valamint adatszerkezet koncepcionális függetlenség összes lényeges elem a modulban 29 Hagyományos (struktúrált) megközelítés problémái Hagyományos megközelítés adat absztrakció eljárás absztrakció egyik dominál a másikkal szemben 30
Adat egységbezárás OO nyelvekben 31 Információ elrejtés T.k. módosíthatósági architektúrális taktika Implementációs részletek elrejtése Közös terület csatolás csökkentése 32
Információ elrejtés OO nyelvekben 33 Absztrakt adattípusok adatokat reprezentáló adatszerkezetek + példányaikon elvégezhet! m"veletek adat absztrakció eljárás absztrakció könnyen b!víthet!k új m"veletekkel jól újra felhasználhatók 34
Szervezési koncepciók Modulok Modulok magas kohézióval, alacsony csatolással Adat egységbezárás Absztrakt adattípusok Információ elrejtés Objektumok 35 Objektumok Objektum absztrakt adattípus példánya információs kohéziós modul adatok (attribútum, adattag) m"velet (metódus, tagfüggvény) örökl!dés 36
Örökl!dés Új típusok hozhatók létre a korábban definiáltakból pl.: 37 Örökl!dés OO nyelvekben 38
Osztályok közötti kapcsolatok Generalizálás <-> Specializálás Asszociáció Aggregáció Kompozíció 39 Több-alakúság Klasszikus paradigma típusnak megfelel! függvény hívása pl.: 40
Több-alakúság (folyt.) OOP paradigma Eltér! megvalósítás az alosztályokban Automatikus kiválasztás Kés!i (futási idej") kötés 41 Több-alakúság OOP paradigma (folyt.) 42
Több-alakúság (folyt.) Polimorfizmus és kés!i kötés nehezen követhet! kód fordításkor nem derülnek ki hibák speciális tesztelés kell 43 Az OO paradigma Sikeres egyenl! súly az adatoknak és m"veleteknek jól tervezett osztályokkal modellezhet! az összes lényeges szempont az implementációs részletek rejtve maradhatnak alkalmas nagyméret" projektekhez lépésenkénti finomítás jó újra felhasználhatóság 44
Az OO paradigma (folyt.) Implementációs különbség a két paradigmában Eljárás 1 Eljárás 2 Üzenet M!velet 1 M!velet 2 Üzenet Adat szerkezet Attrib. M!velet 3 Eljárás 3 Üzenet Klasszikus OOP 45 Az OO paradigma (folyt.) El!nyök elemzési és tervezési fázis szorosabb kapcsolata objektumok (osztályok) az életciklus elején megjelennek könnyebb átmenet a fejlesztési fázisok között iterációs lehet!ség 46
Az OO paradigma (folyt.) Problémák törékeny bázis osztály bázis osztály változatása hatással van a leszármaztatottakra gondos el!zetes tervezés igénye öröklési lánc alján komplex osztályok nincs garancia jó kód írására nehezebb tanulási folyamat 47 OO programozási nyelvek 1960-as évek: Simula Osloi Számító Központ 1970-es évek: Smalltalk Xerox PARC 1980-as évek: C++ AT&T, B. Stroustrup Objective-C, Brad Cox 1995 Java Sun Microsystems 48