Programtervezési minták értelmezése normálformákként Kusper Gábor, gkusper@aries.ektf.hu Eszterházy Károly Főiskola
Tartalomjegyzék Programtervezési minták A Relációs Adatmodell és az Objektum Orientált Programozás Normálformák a Relációs Adatmodellben Javasolt OOP Normálformák 2018.11.27.
Programtervezési minták A 90-es évektől kezdve kerülnek középpontba a GOF könyvvel: E. Gamma, R. Helm, R. Johnson és J. Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software „Recept” a programozó számára Nehezen formalizálható 2018.11.27.
A Pehelysúlyú minta Ez a minta akkor használandó, ha az alkalmazás nagy számú objektumot használ és a legtöbb objektum-tulajdonság külsővé tehető. 2018.11.27.
Normálformák a Relációs Adatmodellben 1NF: Egy reláció első normálformában van, ha a reláció minden értéke elemi. 2NF: Egy reláció második normálformában van, ha első normálformájú, továbbá egyetlen másodlagos attribútuma sem függ funkcionálisan egyetlen kulcsának valódi részhalmazától sem. 3NF: Egy reláció második normálformában van, ha első normálformájú, továbbá a másodlagos attribútumai közt nincs funkcionális függőség. 2018.11.27.
Függőségi és Csatolási fogalmak a GOF könyvben Fordítási függőség (compilation dependence) Megvalósítási függőség (dep. on implementation) Környezeti függőség (dep. on environment) Szoros csatolás (tight coupling) Laza csatolás (loose coupling) Elvont csatolás (abstract coupling) Rétegezés (layering) 2018.11.27.
A programtervezési minták két alapelve Programozzunk a felületre a megvalósítás helyett. Használjunk objektum-összetételt osztályöröklés helyett, amikor csak lehet. Csökkentik az osztályok függőségét, csatoltságát, ami növeli a kód rugalmasságát, bővíthetőségét és megérthetőségét. A GOF könyv a csatolás lazítását javasolja! 2018.11.27.
A Relációs Adatmodell és az Objektum Orientált Programozás 2018.11.27.
A Relációs Adatmodell és az Objektum Orientált Programozás Ezek alapján a megfeleltetés a következő: Tábla Attribútum Egyed Elsődleges kulcs Idegen kulcs Osztály Metódus Objektum this Referencia 2018.11.27.
OOP Normálformák Nem lehet azonban egyszerűen csak átírni a normálformákat ezen megfeleltetés alapján: Már az első normálforma ilyen módú használatánál felmerülne az összetett típusok kérdése, Másrészt a normálformák az egyedek belső szerkezetére tesznek megkötést (funkcionális függőség tiltása), de az objektumok belső állapota rejtve van. Ugyanakkor a funkcionális függőség feloldása a külső szerkezet változását vonja maga után (egy táblából több tábla). Az OOP normálformáknak biztosítaniuk kell, hogy az osztályok lazán legyenek csatolva. 2018.11.27.
Csatoltság Definíció: A csatolás (coupling) annak mértéke milyen erős kapcsolatban áll egy osztály a többi osztállyal. A csatolás mértéke két osztály, A és B, között növekszik, ha: A-nak van B típusú mezője; A meghívja B valamelyik metódusát; A-nak van olyan metódusa, amelynek visszatérési típusa B; A B-nek leszármazottja, vagy implementálja B-t. 2018.11.27.
A javasolt OOP Normálformák 1NF: Az osztály első normálformában van, ha környezete elől elrejti a mezőit. 2NF: Az osztály második normálformában van, ha első normálformájú, továbbá a referencia típusú mezői elvont osztály típusúak. 3NF: Az osztály harmadik normálformában van, ha második normálformájú, továbbá minden metódus hívás által visszaadott érték és belsőállapot-átmenet a környezetétől független. 2018.11.27.
Az OOP Normálformák következményei 1NF: Az egységbezárás elvének következménye, hogy a mezőket csak az objektum saját metódusai írhatják, olvashatják. De ennek betartása nem kötelező, egy mező akár publikus is lehet. Ezt zárja ki az első normálforma. 2018.11.27.
Az OOP Normálformák következményei 2NF: Tulajdonképpen a programtervezési minták első alapelvét fogalmazza meg, hiszen ha csak elvont osztályokat ismerünk, akkor csak a felületet ismerhetjük. „Programozzunk a felületre a megvalósítás helyett!” 2018.11.27.
Az OOP Normálformák következményei 3NF: ha egy objektum metódusát meghívjuk. akkor az egyrészt visszaad egy értéket, másrészt megváltoztathatja az objektum belső állapotát. Ha a visszatérési érték és az állapot átmenet is csak az objektum belső állapotától és a metódus paramétereitől függ, akkor harmadik normálformában van az osztály. 2018.11.27.
Környezeti függőség Definíció: Azt mondjuk, hogy az objektum függ a környezetétől, ha megvalósítsa felhasználja a környezetében lévő objektumok által okozott mellékhatásokat. Mellékhatásnak nevezzük, ha egy objektum megváltozatja környezetét. 2018.11.27.
A Pehelysúlyú minta Szoros összefüggés a Programtervezési minták és az OOP NF-ek között. A Pehelysúlyú (Flyweight) minta: 2018.11.27.
A Pehelysúlyú minta Mit is jelent ez a mi modellünkben? A műveletek a külső állapotot a paraméteriben kapják. Eredményük csak ettől és a belső állapottól függ Ez alapján a mi modellünk szerinti 3NF-ben van. 2018.11.27.
Más OOP Normálformák Más javaslatok is léteznek OOP normálformákra. Legismertebb a Building Object Applications That Work című könyvben található: 1ONF: A class is in 1ONF when specific behavior required by an attribute that is actually a collection of similar attributes is encapsulated within its own class. 2ONF: A class is in 2ONF when it is in 1ONF and when “shared” behavior that is needed by more than one instance of the class is encapsulated within its own class(es). 3ONF: A class is in 3ONF when it is in 2ONF and when it encapsulates only one set of cohesive behaviors. 2018.11.27.
The Object-Rational Impedance Mismatch Sok szerző vallja, hogy nem egyeztethető össze az adatok állandóságára koncentráló Relációs Adatmodell és az objektumok dinamikus változását szem előtt tartó OOP. Ezt a nézetmódbeli eltérést az irodalom „The Object-Rational Impedance Mismatch”-nek nevezi. 2018.11.27.
Összefoglalás Abból indultunk ki, hogy a Pehelysúlyú minta valamilyen normálformában van. Ehhez próbáltunk megfelelő normálforma fogalmat keresni. A Relációs Adatmodell és az OOP fogalmai közt található párhuzamból indultunk ki. 2018.11.27.
Összefoglalás Megvizsgáltuk a RA normálformákat, amik a funkcionális függőségen alapszanak. Megvizsgáltuk a GOF könyvet, ami a csatolás lazítását javasolja. Találtunk egy alkalmasnak tűnő OOP normálforma fogalmat! Alkalmasnak tűnő függőségi fogalmat nem sikerült találni. 2018.11.27.
A javasolt OOP Normálformák 1NF: Az osztály első normálformában van, ha környezete elől elrejti a mezőit. 2NF: Az osztály második normálformában van, ha első normálformájú, továbbá a referencia típusú mezői elvont osztály típusúak. 3NF: Az osztály harmadik normálformában van, ha második normálformájú, továbbá minden metódus hívás által visszaadott érték és belsőállapot-átmenet a környezetétől független. 2018.11.27.
Köszönöm a figyelmet!