| 1. Bevezetés |
Mennyi időt szánjunk analízisre, tervezésre, programozásra, tesztelésre? Fejlesztési processzek és módszertanok. Miért van rájuk szükség? Hogyan gondolkodjunk egy szoftver projektről? Muként szervezzük meg a buildeket? A Unified Process és az Extreme Programming alapvető elemei. Az Iterative Development jelentősége, főbb fázisai. Mik azok az Agile processzek? Jól használható Extreme Programming alapelvek. 2009+: Continous Integration Team Foundation Serverrel. |
| 2. Bevezetés az Objektumorientált analízisbe |
| Az OO analízis jelentősége, helye egy szoftver életciklusában. Mit jelent az analízis és a tervezés? Mi az az UML, mire való? A legfontosabb UML diagramok. OO analízis főbb eszközei: System Sequence Diagram (SSD), Domain Model, Interaction Diagram. Fogalmi (probléma-tartománybeli) osztályok megkeresése. Fogalmi osztály kategória lista, Főnevek keresése, Analízis könyvek, Analysis patterns. Asszociációk hozzáadása a Domain Modelhez. Domain Model rajzolása Visioban. Common Associations List, Coad Object Model Patternek. Attribútumok hozzáadása a Domain Modelhez. Operation Contractok. |
| 3. Objektumorientált fogalmi alapozás |
| Osztály, objektum fogalmak letisztázása. Identitás, állapot, viselkedés. Absztrakció fogalmának megvilágítása. Mi az az encapsulation? Objektumszintű és osztályszintű adatok. Statikus mezők, metódusok. Objektumorientált rendszerek felépítése: öröklődés, osztályhierarchiák, egyszeres -és többszörös öröklődés, polimorfizmus, absztrakt alaposztályok, interfészek, korai és kései kötés. |
| 4. Objektumorientált tervezési és UML alapok |
OOP tervezés alapvető eszközei: Class diagram, Interaction diagram, GRASP analízis, Sequence és Collaboration Diagramok. Az objektumorientált tervezés alapvető eszközei: Class diagram, Interaction diagram, GRASP analízis, Sequence és Collaboration Diagramok. Objektumok felelősségének tisztázása. Felelősség kategóriák. General Responsibility Assignment Software Patterns: alapvető felelősség elosztási patternek elemzése: Information Expert, Creator, Low Coupling, High Cohesion, Controller, Polimorphism, Indirection, Pure Fabrication, Protected Variations. UML class diagram visszafejtése programkódból. 2009+: a Visual Studio 2008 class modellező eszköze. |
| 5. Karbantartható kódírási alapelvek |
Tervezési alapok: erős kohézió, gyenge csatolás, no redundancia. A "Gang of Four" tervezési tanácsai. Interfész alapú programozás. Aggregálás vs. leszármaztatás. A leszármaztatás hátulütői. Az adatrejtés elvének kitágítása. Az objektumok fogalmának újraértelmezése. 2009+: Refactoring eszközök a Visual Studio 2008-ban. |
| 6. Mik azok a Design Patternek? |
| Fogalmi meghatározás. Mit ígérnek a patternek? Mire nem jók a patternek? Milyen témakörökben találhatunk patterneket? A Design Patterns könyv és alapvető használata. |
| 7. A Bridge pattern felderítése |
Egy Postscript és PDF kimentű rajzolóprogram példájából indulunk ki. Megnézzük, hogy hagyományos OO elvek alapján a leszármaztatás hatására exponenciálisan elszaporodnak az osztályok a problématartományban. Ezek után közösen gondolkodva bevetjük a korábbi fejezetekben alkalmazott GRASP patterneket valamint a GoF alapelveket, így megszüljük az egyik leghasznosabb patternt, a Bridge-et. Azaz "levezetjük" a patternt a korábban tanult alapelvek felhasználásával. Labor: Előkészítettünk egy példát, ami egy egyszerűsített ADO.NET alapú adatelérő réteg (Data Access Layer, DAL), ami SQL Server és Access háttérrel képes üzleti entitásokat elmenteni és visszatölteni. A példa szenved az exponenciális robbanás problémájától. A hallgatók feladata a példát úgy refactorolni, hogy az a Bridge pattern alapján minimális munkával bővíthető legyen új adatbázisokhoz és új üzleti entitásokhoz. |
| 8. A Strategy pattern |
Algoritmuscsaládok definiálása és kezelése. 2009+: példák a Windows Communication Foundationből és a Windows Presentation Foundationből. |
| 9. Az Adapter Pattern |
Hogyan hozzunk össze nem együttműködésre tervezett osztályokat, osztályhierarchiákat? Miként lehet összebékíteni egymással nem összeillő interfészeket? Hogyan lehet olyan komponenseket tervezni, amelyekhez a külvilág hozzácsatolhatja a saját bővítését (Pluggable Adapterek). Milyen eszközök vannak erre hagyományos interface és .NET-es delegate alapon? 2009+: SQL Bulk Copy adapter tetszőleges adatforrások nagyon gyors SQL Serverbe betöltéséhez (több 10x gyorsabban mint insertekkel). Labor: A laborpéldánk egy Windows Form TreeView osztályból leszármaztatott osztály, amely képes tetszőleges hierarhikus adatforrást bejárni és azt megjeleníteni. A hierarchia és a vezérlő között egy interface biztosítja az átjárást (illesztést). Adott egy diagnosztikai (object) adapter, amely a .NET Reflection felhasználásával képes bármely objektumot IListSource interfésszé átalakítani, így a DataGrid osztállyal kiírathatjuk bármilyen objektum jellemzőinek nevét és értékét. Feladat, hogy refactoroljuk az Object Adaptert Class Adapterré! |
| 10. A Singleton Pattern |
Egyedi példány biztosítása. Alosztályok készítése az Egyke osztályhoz. 2009+: Object pool singletonnal, a garbage collector okozta időveszteség csökkentésére. |
| 11. A Composite Pattern |
Hogyan építsünk fel rekurzív kompozíciókat (hierarchikus adatszerkezeteket), amelyekben az egyedi és a csoportokat reprezentáló csomópontok is egyformán kezelhetők? Mire használható ezek az adatszerkezetek? Hogyan segíthetnek ezek pl. üzleti szabályok kezelésében? Labor: Egy fájlrendszert reprezentáló osztályhierarchia összeállítása, amely képes visszaadni tetszőleges csomópont (fájl vagy könyvtár) hosszát. Gyorsítsuk fel a méret lekérdezését bizonyos információk előzetes letárolásával (cache-elés). |
| 12. A Decorator Pattern |
Hogyan bővítsük ki egy objektum működését futásidőben úgy, hogy se a hívó se a célobjektum ne vegye észre a bővítést? Labor: egy vizuális dekorátor komponens refactoringja a könyvbeli kanonikus implementációra. 2009+: Decoratorok a WPF-ben. |
| 13. Az Iterator Pattern |
Hogyan járjunk be egységes módon kollekciókat? Hogyan tegyük saját kollekciónkat bejárhatóvá a C# foreach operátorával? Hogyan írjunk szupergyors iterátorokat? 2009+: A yield és a linq érdekes felhasználásai. |
| 14. A Factory Method Pattern |
| Miként delegáljuk egy objektum létrehozásának felelősségét a leszármazott osztályoknak? |
| 15. Az Observer Pattern |
Hogyan biztosítsuk többrétegű alkalmazásokban a rétegek közötti kommunikációt úgy, hogy a minden réteg csak az alatta levő rétegtől függjön, a fölötte levőtől ne? 2009+: WPF observer példák. |
| 16. Builder pattern |
Vannak olyan objektumok és dokumentumok, amelyeket nem lehet egyetlen lépésben létrehozni, hanem csak sok apró részlépés segítségével lehet felépíteni. A pattern a részlépések összehangolásában és cserélhetővé tételében segít. Demó: A .NET Framework CodeDOM segítségével tetszőleges programnyelvű forráskód generálható. A példában a korábban bevezetett adatelérő réteg kódját generáltatjuk le a CodeDOM segítségével az adatbázistáblák alapján, ami a Builder pattern egy szép példája. |
| 17. Generation Gap pattern |
| Hogyan egészítsünk ki generált kódot (típusos DataSet, az Builder példánk DAL kódját, stb.) saját szolgáltatásokkal úgy, hogy a generált rész bármikor újraépíthető legyen? |