Objektumorientált tervezési alapelvek
|
|
- Frigyes Balla
- 6 évvel ezelőtt
- Látták:
Átírás
1 Objektumorientált tervezési alapelvek Jeszenszky Péter Utolsó módosítás: december 13.
2 PMD Statikus kódelemző (programozási nyelv: Java, licenc: BSD-stílusú) Támogatott programozási nyelvek: Apex, Java, JavaScript, PLSQL, Visualforce, Apache Velocity, XML, XSL Bővítmények: Apache Maven PMD Plugin Gradle: The PMD Plugin Eclipse PMD Plug-in PMDPlugin (IntelliJ IDEA) SQE (NetBeans) 2
3 DRY (1) Ne ismételd magad (Don't Repeat Yourself) Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. A tudás minden darabkájának egyetlen, egyértelmű, hiteles reprezentációja kell, hogy legyen egy rendszerben. Forrás: Andrew Hunt, David Thomas. The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley, Az ellenkezője a WET. We enjoy typing, write everything twice, we edit terribly, 3
4 DRY (2) Az ismétlések fajtái: Kényszerített ismétlés (imposed duplication): a fejlesztők úgy érzik, hogy nincs választásuk, a környezet láthatólag megköveteli az ismétlést. Nem szándékos ismétlés (inadvertent duplication): a fejlesztők nem veszik észre, hogy információkat duplikálnak. Türelmetlen ismétlés (impatient duplication): a fejlesztők lustaságából fakad, az ismétlés látszik a könnyebb útnak. Fejlesztők közötti ismétlés (interdeveloper duplication): egy csapatban vagy különböző csapatokban többen duplikálnak egy információt. Kapcsolódó fogalom: kódismétlés (code duplication) 4
5 DRY (3) PMD támogatás: Copy/Paste Detector (CPD) Finding duplicated code d.html Támogatott programozási nyelvek: Apex, C/C++, C#, ECMAScript (JavaScript), Fortran, Go, Groovy, Java, Groovy, JSP, Matlab, Objective-C, Perl, PHP, PL/SQL, Python, Ruby, Scala, Swift, Visualforce Lásd: l#supported-languages 5
6 KISS Keep it simple, stupid 1960-as évek, amerikai haditengerészet. Kelly Johnson ( ) repülőmérnöknek tulajdonítják a kifejezést. Az egyszerűségre való törekvés: Leonardo da Vinci ( ): Az egyszerűség a kifinomultság csúcsa. Ludwig Mies van der Rohe ( ): A kevesebb több. Albert Einstein ( ): Everything should be made as simple as possible, but not simpler. Mindent olyan egyszerűen kell csinálni, amennyire csak lehetséges, de semmivel sem egyszerűbben. 6
7 Demeter törvénye (1) Demeter törvénye (Law of Demeter): Karl J. Lieberherr, Ian M. Holland, Arthur Joseph Riel. Object-Oriented Programming: An Objective Sense of Style. Proceedings on Objectoriented programming systems, languages and applications (OOPSLA), pp , Ian M. Holland, Karl J. Lieberherr. Assuring Good Style for Object- Oriented Programs. IEEE Software, vol. 6, no 5, pp , Más néven: ne beszélgess idegenekkel (Don't Talk to Strangers) Craig Larman. Applying UML and Patterns: An Introduction to Object- Oriented Analysis and Design and Iterative Development. 3rd ed. Prentice Hall,
8 Demeter törvénye (2) A metódusok üzenetküldési szerkezetét korlátozza. Azt mondja, hogy minden metódusnál korlátozott azon objektumok köre, melyeknek üzeneteket küldhet. Célja az osztályok közötti függőségek szervezése és csökkentése. 8
9 Demeter törvénye (3) Osztályokra vonatkozó változat (class form): Egy C osztály egy M metódusa csak az alábbi osztályok és ősosztályaik tagjait (adattagjait, metódusait) használhatja: C C adattagjainak osztályai M paramétereinek osztályai Osztályok, melyek konstruktorai M-ben meghívásra kerülnek M-ben használt globális változók osztályai Fordítási időben ellenőrizhető. 9
10 Demeter törvénye (4) Alkalmazása növeli a karbantarthatóságot és az érthetőséget. Ténylegesen szűkíti a metódusokban meghívható metódusok körét, ilyen módon korlátozza a metódusok csatoltságát. Információ elrejtés (szerkezet elrejtés) kikényszerítése: egy objektum belső felépítését kizárólag saját maga ismeri. 10
11 Demeter törvénye (5) Példa: Mind a négy hello() metódushívás megengedett az alábbi programkódban: class C { private B b; void m(a a) { b.hello(); a.hello(); Singleton.INSTANCE.hello(); new Z().hello(); } } Nem megengedett például az a.x.hello() metódushívás. Forrás: Yegor Bugayenko. The Law of Demeter Doesn't Mean One Dot
12 Demeter törvénye (6) Kapcsolódó PMD szabályhalmaz: Design (Java) esign.html Lásd a LawOfDemeter szabályt: 12
13 Vonatkozások szétválasztása (1) Vonatkozások szétválasztása (SoC Separation of Concerns): Egy szoftverrendszert oly módon érdemes tervezni, hogy minden egyes komponensének pontosan meghatározott szerepe legyen, ideális esetben ezek a szerepek ne fedjék át egymást. Példák: modell-nézet-vezérlő (MVC) architekturális minta, TCP/IP protokollkészlet, HTML + CSS + JavaScript, Felhasznált irodalom: Ian Sommerville. Software Engineering. 10th ed. Pearson Education,
14 Vonatkozások szétválasztása (2) A programok elemei (például osztályok, metódusok) pontosan egy dolgot csináljanak. Az egyes elemekkel úgy lehet foglalkozni, hogy nem kell tekintettel lenni a program többi elemére. Például a program egy része a vonatkozása ismeretében úgy érthető meg, hogy ahhoz nem szükséges a program többi elemének megértése. Amikor változtatások szükséges, azok csak kevés számú elemet érintenek. A program egyes részei egymástól függetlenül fejleszthetők, újrafelhasználhatók. 14
15 Vonatkozások szétválasztása (3) A vonatkozás valami olyan, ami érdekes vagy fontos egy érintett vagy érintettek egy csoportja számára. Például: teljesítmény, adott funkció biztosítása, karbantarthatóság, A rendszerkövetelményeket tükrözik. 15
16 Vonatkozások szétválasztása (4) Vonatkozások fajtái: Alapvető vonatkozások (core concerns): a rendszer elsődleges céljához kötődő funkcionális vonatkozások. Másodlagos vonatkozások (secondary concerns): például a rendszer nem funkcionális követelményeinek kielégítéséhez szükséges funkcionális vonatkozások. Átszövő vonatkozások (cross-cutting concerns): alapvető rendszerkövetelményeket tükröző rendszerszintű vonatkozások. A másodlagos vonatkozások lehetnek átszövőek is, bár nem minden esetben szövik át az egész rendszert. Például: biztonság, naplózás. 16
17 Vonatkozások szétválasztása (5) Kapcsolódó programozási paradigma: aspektus-orientált programozás (AOP aspectoriented programming) Például: AspectJ A Java programozási nyelv aspektus-orientált kiterjesztése. 17
18 GRASP (1) A felelősségek hozzárendelésének általános mintái (GRASP General Responsibility Assignment Software Patterns) Craig Larman. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. 3rd ed. Prentice Hall, A felelősségek hozzárendelésének alapelveit kifejező tervezési minták. Tanulási segédeszközök, melyek az objektumorientált tervezés megértését és alkalmazását segítik. 18
19 GRASP (2) Felelősség: egy osztályozó egy szerződése vagy kötelezettsége (UML). A felelősségek fajtái: Valaminek a tevése (doing) Valaminek a tudása (knowing) A felelősségek hozzárendelése az osztályokhoz a tervezés során történik. 19
20 GRASP (3) 9 tervezési minta és alapelv: Információs szakértő (Information Expert) Létrehozó (Creator) Laza csatolás (Low Coupling) Magas kohézió (High Cohesion) Vezérlő (Controller) Polimorfizmus (Polymorphism) Tiszta kitaláció (Pure Fabrication) Indirekció (Indirection) Védett változatok (Protected Variations) 20
21 GRASP (5) Mintasablon: Név: Probléma: Példa: Tárgyalás: Ellenjavallatok: Előnyök: Háttér: Kapcsolódó minták: 21
22 GRASP minták (1) Információs szakértő: A felelősséget az információs szakértőhöz rendeljük, vagyis ahhoz az osztályhoz, mely rendelkezik a felelősség megvalósításához szükséges információkkal. Példa: melyik osztály felelőssége tudni egy rendelés összértékét egy értékesítési rendszerben? 22
23 GRASP minták (2) Létrehozó: Az A osztály egy példánya létrehozásának felelősségét ruházzuk a B osztályra, ha az alábbiak valamelyike igaz: A B osztály A objektumokat aggregál. A B osztály A objektumokat tartalmaz. B nyilvántartja A példányait. B szorosan használja A-t. B rendelkezik azokkal az inicializáló adatokkal, melyek A-nak átadásra kerülnek a létrehozásakor (azaz B információs szakértő A létrehozása szempontjából). B az A objektumok létrehozója. Ha fenti pontok közül egynél több teljesül, akkor egy A-t aggregáló vagy tartalmazó B osztályt részesítsünk előnyben. 23
24 GRASP minták (3) Laza csatolás: A csatolás annak mértéke, hogy egy elem mennyire kapcsolódik más elemekhez, mennyi információja van róluk, vagy mennyire függ tőlük. A felelősségeket úgy rendeljük hozzá az elemekhez, hogy azok lazán csatoltak maradjanak. Az elemek közé tartoznak az osztályok, alrendszerek, rendszerek, Egy lazán (vagy gyengén) csatolt elem nem függ túl sok elemtől, ahol a túl sok környezetfüggő. Egy erősen csatolt osztály sok más osztálytól függ. Az ilyen osztályok nemkívánatosak, az alábbi problémákkal küzdenek: A kapcsolódó osztályokban történő változások lokális változásokat kényszerítenek ki. Nehezebb őket önmagukban megérteni. Nehezebb őket újrafelhasználni, mivel szükségesek hozzájuk azok az osztályok, melyektől függenek. 24
25 GRASP minták (4) Magas kohézió: A kohézió annak mértéke, hogy egy elem felelősségei milyen szorosan kapcsolódnak egymáshoz. A felelősségeket úgy rendeljük hozzá az elemekhez, hogy tartsuk fenn a magas kohéziót. Az elemek közé tartoznak az osztályok, alrendszerek, rendszerek, Magas a kohéziója egy olyan elemnek, melynek felelősségei szorosan kapcsolódnak és nem végez túl sok munkát. Egy alacsony kohéziójú elem sok egymáshoz nem kapcsolódó dolgot csinál. Az ilyen osztályok nemkívánatosak, az alábbi problémákkal küzdenek: Nehézen érthetőek. Nehéz az újrafelhasználhatóságuk. Nehéz a karbantartásuk. 25
26 GRASP minták (5) Vezérlő: A rendszer eseményei fogadásának vagy kezelésének felelősségét egy olyan osztályhoz rendeljük hozzá mely a teljes rendszert, alrendszert vagy eszközt ábrázolja, vagy egy olyan forgatókönyvet ábrázol, melyben az esemény bekövetkezik. A vezérlő egy nem felhasználói interfész objektum. 26
27 GRASP minták (6) Polimorfizmus: Amikor összetartozó viselkedések változnak típustól (osztálytól) függően, akkor a viselkedést leíró felelősséget polimorf műveletek segítségével rendeljük hozzá azon típusokhoz, melyeknél a viselkedés változik. Ne vizsgáljuk egy objektum típusát és ne használjunk feltételes programlogikát olyan változó alternatívák végrehajtásához, melyek a típustól függenek. Tiszta kitaláció: Szorosan összetartozó felelősségek egy halmazát rendeljük hozzá egy mesterséges osztályhoz, mely nem a probléma szakterületének egy fogalmát ábrázolja, hanem a magas kohézió, a laza kapcsolódás és az újrafelhasználhatóság támogatása érdekében találtuk ki. Példa: DAO osztályok 27
28 GRASP minták (7) Indirekció: Objektumok túl szoros kapcsolódásán lazíthatunk egy köztes objektummal, mely közöttük közvetítő szerepet tölt be. A közvetítő az objektumok közötti indirekciót hoz létre, mivel azok nem közvetlenül kapcsolódnak. Védett változatok: Azonosítsuk az előre látható változások és bizonytalanságok által érintett elemeket és hozzunk létre köréjük egy stabil interfészt. A polimorfizmus révén az interfészhez különféle implementációkat hozhatunk létre. 28
29 GoF alapelvek (1) Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison- Wesley, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Programtervezési minták: Újrahasznosítható elemek objektumközpontú programokhoz. Kiskapu,
30 GoF alapelvek (2) Interfészre programozzunk, ne implementációra! Program to an interface, not an implementation. Lásd a létrehozási mintákat! 30
31 GoF alapelvek (3) Részesítsük előnyben az objektum-összetételt az öröklődéssel szemben! Favor object composition over class inheritance. A két leggyakoribb módszer az újrafelhasználásra az objektumorientált rendszerekben: Öröklődés (fehér dobozos újrafelhasználás) Objektum-összetétel (fekete dobozos újrafelhasználás) A fehér/fekete dobozos jelző a láthatóságra utal. 31
32 GoF alapelvek (4) Az öröklődés előnyei: Statikusan, fordítási időben történik, és használata egyszerű, mivel a programozási nyelv közvetlenül támogatja. Az öröklődés továbbá könnyebbé teszi az újrafelhasznált megvalósítás módosítását is. Ha egy alosztály felülírja a műveletek némelyikét, de nem mindet, akkor a leszármazottak műveleteit is megváltoztathatja, feltételezve, hogy azok a felülírt műveleteket hívják. 32
33 GoF alapelvek (5) Objektum összetételt használó tervezési minták: Szerkezeti objektumminták: (objektum) illesztő, híd, összetétel, díszítő, homlokzat, pehelysúlyú, helyettes. Viselkedési objektumminták: felelősséglánc, parancs, bejáró, közvetítő, emlékeztető, megfigyelő, állapot, stratégia, látogató. 33
34 GoF alapelvek (6) Az öröklődés hátrányai: Először is, a szülőosztályoktól örökölt megvalósításokat futásidőben nem változtathatjuk meg, mivel az öröklődés már fordításkor eldől. Másodszor és ez általában rosszabb, a szülőosztályok gyakran alosztályaik fizikai ábrázolását is meghatározzák, legalább részben. Mivel az öröklődés betekintést enged egy alosztálynak a szülője megvalósításába, gyakran mondják, hogy az öröklődés megszegi az egységbe zárás szabályát. Az alosztály megvalósítása annyira kötődik a szülőosztály megvalósításához, hogy a szülő megvalósításában a legkisebb változtatás is az alosztály változását vonja maga után. Az implementációs függőségek gondot okozhatnak az alosztályok újrafelhasználásánál. Ha az örökölt megvalósítás bármely szempontból nem felel meg az új feladatnak, arra kényszerülünk, hogy újraírjuk, vagy valami megfelelőbbel helyettesítsük a szülőosztályt. Ez a függőség korlátozza a rugalmasságot, és végül az újrafelhasználhatóságot. 34
35 GoF alapelvek (7) Az objektum-összetétel dinamikusan, futásidőben történik, olyan objektumokon keresztül, amelyek hivatkozásokat szereznek más objektumokra. Az összetételhez szükséges, hogy az objektumok figyelembe vegyék egymás interfészét, amihez gondosan megtervezett interfészek kellenek, amelyek lehetővé teszik, hogy az objektumokat sok másikkal együtt használjuk. 35
36 GoF alapelvek (8) Az objektum összetétel előnyei: Mivel az objektumokat csak az interfészükön keresztül érhetjük el, nem szegjük meg az egységbe zárás elvét. Bármely objektumot lecserélhetünk egy másikra futásidőben, amíg a típusaik egyeznek. Továbbá, mivel az objektumok megvalósítása interfészek segítségével épül fel, sokkal kevesebb lesz a megvalósítási függőség. Az öröklődéssel szemben segít az osztályok egységbe zárásában és abban, hogy azok egy feladatra összpontosíthassanak. Az osztályok és osztályhierarchiák kicsik maradnak, és kevésbé valószínű, hogy kezelhetetlen szörnyekké duzzadnak. 36
37 GoF (9) Másrészről az objektum-összetételen alapuló tervezés alkalmazása során több objektumunk lesz (még ha osztályunk kevesebb is), és a rendszer viselkedése ezek kapcsolataitól függ majd, nem pedig egyetlen osztály határozza meg. 37
38 SOLID (1) Robert C. Martin ( Bob bácsi ) által megfogalmazott/rendszerezett/népszerűsített objektumorientált programozási és tervezési alapelvek. Bob bácsi honlapja: Uncle Bob. Getting a SOLID start Irodalom: Robert C. Martin. Agile Software Development: Principles, Patterns, and Practices. Pearson Education, C++ és Java nyelvű programkódok. Robert C. Martin, Micah Martin. Agile Principles, Patterns, and Practices in C#. Prentice Hall,
39 SOLID (2) Single responsibility principle (SRP) Egyszeres felelősség elve Open/closed principle (OCP) Nyitva zárt elv Liskov substitution principle (LSP) Liskov-féle helyettesítési elv Interface segregation principle (ISP) Interfész szétválasztási elv Dependency inversion principle (DIP) Függőség megfordítási elv 39
40 SOLID egyszeres felelősség elve (1) Robert C. Martin által megfogalmazott elv: A class should have only one reason to change. Egy osztálynak csak egy oka legyen a változásra. Kapcsolódó tervezési minták: díszítő, felelősséglánc 40
41 SOLID egyszeres felelősség elve (2) Egy felelősség egy ok a változásra. Minden felelősség a változás egy tengelye. Amikor a követelmények változnak, a változás a felelősségben történő változásként nyilvánul meg. Ha egy osztálynak egynél több felelőssége van, akkor egynél több oka van a változásra. Egynél több felelősség esetén a felelősségek csatolttá válnak. Egy felelősségben történő változások gyengíthetik vagy gátolhatják az osztály azon képességét, hogy eleget tegyen a többi felelősségének. 41
42 SOLID egyszeres felelősség elve (3) Példa az elv megsértésére: A Rectangle osztály két felelőssége: Egy téglalap geometriájának matematikai modellezése. Téglalap megjelenítése a grafikus felhasználói felületen. Computational Geometry Application «use» Rectangle +draw() +area(): double «use» Graphical Applicaton «use» GUI «use» 42
43 SOLID egyszeres felelősség elve (4) Példa az elv megsértésére: (folytatás) A számítógépes geometriai alkalmazásnak tartalmaznia kell a grafikus felhasználói felületet. Ha a grafikus alkalmazás miatt változik a Rectangle osztály, az szükségessé teheti a számítógépes geometriai alkalmazás összeállításának, tesztelésének és telepítésének megismétlését (rebuild, retest, redeploy). 43
44 SOLID egyszeres felelősség elve (5) Az előbbi példa az elvnek megfelelő változata: Computational Geometry Application Graphical Applicaton «use» «use» «use» Geometric Rectangle +area(): double «use» +draw() Rectangle «use» GUI 44
45 SOLID egyszeres felelősség elve (6) Példa: Mi a felelősség? Az alábbi Modem interfésznél két felelősség állapítható meg: a kapcsolatkezelés és az adatkommunikáció. Hogy érdemes-e őket szétválasztani, az attól függ, hogyan változik az alkalmazás. «interface» Modem +dial(pno: String) +hangup() +send(c: char) +recv(): char 45
46 SOLID egyszeres felelősség elve (7) Példa: Mi a felelősség? (folytatás) Ha például úgy változik az alkalmazás, hogy az hatással van a kapcsolatkezelő függvények szignatúrájára, akkor a két felelősséget szét kell választani. «interface» Data Channel +send(c: char) +recv(): char «interface» Connection +dial(pno: String) +hangup() Modem Implementation 46
47 SOLID egyszeres felelősség elve (8) Az elv megfogalmazásának finomodása: A class should have only one reason to change. Robert C. Martin. Agile Software Development: Principles, Patterns, and Practices. Pearson Education, p. 95. a class or module should have one, and only one, reason to change. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall, p
48 SOLID egyszeres felelősség elve (9) A vonatkozások szétválasztásának elve és az egyszeres felelősség elve szorosan összefügg. Így a felelősségek befoglaló halmazát alkotják a vonatkozások. Ideális esetben minden vonatkozás egy felelősségből áll, mégpedig a fő funkció felelősségéből. Azonban egy felelősségben gyakran több vonatkozás is keveredik. A vonatkozások szétválasztásának elve azt nem mondja ki, hogy egy felelősség csak egy vonatkozásból állhat, hanem csak annyit követel meg, hogy a vonatkozásokat el kell különíteni egymástól, vagyis tisztán felismerhetőnek kell lennie, ha több vonatkozás is jelen van. 48
49 SOLID egyszeres felelősség elve (10) Példa az egyszeres felelősség elvének megfelelő, de vonatkozások szétválasztásának elvét megsértő kódra: Artur Trosin. Separation of Concern vs Single Responsibility Principle ( SoC vs SRP ) cern-vs-single-responsibility-principle-soc-vs-srp 49
50 SOLID nyitva zárt elv (1) Bertrand Meyer által megfogalmazott alapelv. Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall, A szoftver entitások (osztályok, modulok, függvények, ) legyenek nyitottak a bővítésre, de zártak a módosításra. Kapcsolódó tervezési minták: gyártó metódus, helyettes, stratégia, sablonfüggvény, látogató 50
51 SOLID nyitva zárt elv (2) Az elvnek megfelelő modulnak két fő jellemzője van: Nyitott a bővítésre: azt jelenti, hogy a modul viselkedése kiterjeszthető. Zárt a módosításra: azt jelenti, hogy a modul viselkedésének kiterjesztése nem eredményezi a modul forrás- vagy bináris kódjának változását. 51
52 SOLID nyitva zárt elv (3) Példa az elv megsértésére: A Client és a Server konkrét osztályok. A Client osztály a Server osztályt használja. Ha azt szeretnénk, hogy egy Client objektum egy különböző szerver objektumot használjon, a Client osztályban meg kell változtatni a szerver osztály nevét. Client «use» Server 52
53 SOLID nyitva zárt elv (4) Az előbbi példa az elvnek megfelelő változata: Client «use» «interface» Client Interface Server 53
54 SOLID Liskov-féle helyettesítési elv Barbara Liskov által megfogalmazott elv. Barbara Liskov. Keynote Address Data Abstraction and Hierarchy Ha az S típus a T típus altípusa, nem változhat meg egy program működése, ha benne a T típusú objektumokat S típusú objektumokkal helyettesítjük. 54
55 SOLID interfész szétválasztási elv (1) Robert C. Martin által megfogalmazott elv: Classes should not be forced to depend on methods they do not use. Nem szabad arra kényszeríteni az osztályokat, hogy olyan metódusoktól függjenek, melyeket nem használnak. 55
56 SOLID interfész szétválasztási elv (2) Vastag interfész (fat interface) (Bjarne Stroustrup) terface An interface with more member functions and friends than are logically necessary. Az ésszerűen szükségesnél több tagfüggvénnyel és baráttal rendelkező interfész. 56
57 SOLID interfész szétválasztási elv (3) Az interfész szétválasztási elv a vastag interfészekkel foglalkozik. A vastag interfészekkel rendelkező osztályok interfészei nem koherensek, melyekben a metódusokat olyan csoportokra lehet felosztani, melyek különböző klienseket szolgálnak ki. Az ISP elismeri azt, hogy vannak olyan objektumok, melyekhez nem koherens interfészek szükségesek, de azt javasolja, hogy a kliensek ne egyetlen osztályként ismerjék őket. 57
58 SOLID interfész szétválasztási elv (4) Interfész szennyezés (interface pollution): Egy interfész szennyezése szükségtelen metódusokkal. 58
59 SOLID interfész szétválasztási elv (5) Amikor egy kliens egy olyan osztálytól függ, melynek vannak olyan metódusai, melyeket a kliens nem használ, más kliensek azonban igen, akkor a többi kliens által az osztályra kényszerített változások hatással lesznek arra a kliense is. Ez a kliensek közötti nem szándékos csatoltságot eredményez. 59
60 SOLID interfész szétválasztási elv (6) Példa: ATM (Robert C. Martin) Transaction {abstract} +execute() Deposit Transaction Withdrawal Transaction Transfer Transaction «interface» UI +RequestDepositAmount() +RequestWithdrawalAmount() +RequestTransferAmount() +InformInsufficientFunds() 60
61 SOLID interfész szétválasztási elv (7) Transaction {abstract} +execute() Deposit Transaction Withdrawal Transaction Transfer Transaction «interface» Deposit UI «interface» Withdrawal UI «interface» Transfer UI +RequestDepositAmount() +RequestWithdrawalAmount() +InformInsufficientFunds() +RequestTransferAmount() «interface» UI +RequestDepositAmount() +RequestWithdrawalAmount() +RequestTransferAmount() +InformInsufficientFunds() 61
62 SOLID függőség megfordítási elv (1) Robert C. Martin által megfogalmazott elv: Magas szintű modulok ne függjenek alacsony szintű moduloktól. Mindkettő absztrakcióktól függjön. Az absztrakciók ne függjenek a részletektől. A részletek függjenek az absztrakcióktól. 62
63 SOLID függőség megfordítási elv (2) Az elnevezés onnan jön, hogy a hagyományos szoftverfejlesztési módszerek hajlamosak olyan felépítésű szoftvereket létrehozni, melyekben a magas szintű modulok függenek az alacsony szintű moduloktól. Kapcsolódó tervezési minta: illesztő 63
64 SOLID függőség megfordítási elv (3) A magas szintű modulok tartalmazzák az alkalmazás üzleti logikáját, ők adják az alkalmazás identitását. Ha ezek a modulok alacsony szintű moduloktól függenek, akkor az alacsony szintű modulokban történő változásoknak közvetlen hatása lehet a magas szintű modulokra, szükségessé tehetik azok változását is. Ez abszurd! A magas szintű modulok azok, melyek meg kellene, hogy határozzák az alacsony szintű modulokat. 64
65 SOLID függőség megfordítási elv (4) A magas szintű modulokat szeretnénk újrafelhasználni. Az alacsony szintű modulok újrafelhasználására elég jó megoldást jelentenek a programkönyvtárak. Ha magas szintű modulok alacsony szintű moduloktól függenek, akkor nagyon nehéz az újrafelhasználásuk különféle helyzetekben. Ha azonban a magas szintű modulok függetlenek az alacsony szintű moduloktól, akkor elég egyszerűen újrafelhasználhatók. 65
66 SOLID függőség megfordítási elv (5) Példa a rétegek architekturális minta hagyományos alkalmazására: Presentation Layer Application Layer Business layer Data Access Layer 66
67 SOLID függőség megfordítási elv (6) Az előbbi példa az elvnek megfelelő változata: Minden egyes magasabb szintű interfész deklarál az általa igényelt szolgáltatásokhoz egy interfészt. Az alacsonyabb szintű rétegek realizálása ezekből az interfészekből történik. Ilyen módon a felsőbb rétegek nem függenek az alsóbb rétegektől, hanem pont fordítva. 67
68 Presentation Presentation Layer «interface» Presentation Service Interface Application Application Layer «interface» Application Service Interface Business Business Layer «interface» Business Service Interface Data Access Data Access Layer 68
69 SOLID függőség megfordítási elv (8) Az előbbi példa az elvnek megfelelő változata: (folytatás) Nem csupán a függőségek kerültek megfordításra, hanem az interfész tulajdonlás is (inversion of ownership). Hollywood elv: Ne hívj, majd mi hívunk. (Don't call us, we'll call you.) 69
70 SOLID függőség megfordítási elv (9) Függés absztrakcióktól: Ne függjön a program konkrét osztályoktól, hanem inkább csak absztrakt osztályoktól és interfészektől. Egyetlen változó se hivatkozzon konkrét osztályra. Egyetlen osztály se származzon konkrét osztályból. Egyetlen metódus se írjon felül valamely ősosztályában implementált metódust. A fenti heurisztikát a legtöbb program legalább egyszer megsérti. Nem túl gyakran változó konkrét osztályok esetén (például String) megengedhető a függés. 70
71 SOLID függőség megfordítási elv (10) Példa az elv megsértésére: Forrás: iented-design/dependency-inversion-principle/ ElectricPowerSwitch +ison(): boolean +press() 0..1 LightBulb +turnon() +turnoff() 71
72 SOLID függőség megfordítási elv (11) Az előbbi példa az elvnek megfelelő változata: «interface» Switch +ison(): boolean +press() ElectricPowerSwitch +ison(): boolean +press() 0..1 «interface» Switchable +turnon() +turnoff() LightBulb +turnon() +turnoff() 72
73 Függőség befecskendezés (1) Felhasznált irodalom: Dhanji R. Prasanna. Dependency Injection Design patterns using Spring and Guice. Manning, n Mark Seemann. Dependency Injection in.net. Manning, Steven van Deursen, Mark Seemann. Dependency Injection. Second Edition. Manning,
74 Függőség befecskendezés (2) A függőség befecskendezés (DI dependency injection) kifejezés Martin Fowlertől származik. Martin Fowler. Inversion of Control Containers and the Dependency Injection pattern A vezérlés megfordítása (IoC inversion of control) nevű architekturális minta alkalmazásának egy speciális esete. Martin Fowler. InversionOfControl
75 Függőség befecskendezés (3) Definíció (Seemann): Dependency Injection is a set of software design principles and patterns that enable us to develop loosely coupled code. A függőség befecskendezés olyan szoftvertervezési elvek és minták összessége, melyek lazán csatolt kód fejlesztését teszik lehetővé. A lazán csatoltság a kód karbantarthatóságát javítja. 75
76 Függőség befecskendezés (4) Egy objektumra egy olyan szolgáltatásként tekintünk, melyet más objektumok kliensként használnak. Az objektumok közötti kliens-szolgáltató kapcsolatot függésnek nevezzük. Ez a kapcsolat tranzitív. 76
77 Függőség befecskendezés (5) Függőség (dependency): egy kliens által igényelt szolgáltatást jelent, mely a feladatának ellátásához szükséges. Függő (dependent): egy kliens objektum, melynek egy függőségre vagy függőségekre van szüksége a feladatának ellátásához. Objektum gráf (object graph): függő objektumok és függőségeik egy összessége. Befecskendezés (injection): egy kliens függőségeinek megadását jelenti. DI konténer (DI container): függőség befecskendezési funkcionalitást nyújtó programkönyvtár. Az Inversion of Control (IoC) container kifejezést is használják rájuk. 77
78 Függőség befecskendezés (6) A függőség befecskendezés objektum gráfok hatékony létrehozásával, ennek mintáival és legjobb gyakorlataival foglalkozik. A DI keretrendszerek lehetővé teszik, hogy a kliensek a függőségeik létrehozását és azok befecskendezését külső kódra bízzák. 78
79 Függőség befecskendezés (7) Példa: nincs függőség befecskendezés public interface SpellChecker { } public boolean check(string text); public class TextEditor { private SpellChecker spellchecker; public TextEditor() { spellchecker = new HungarianSpellChecker(); } //... } 79
80 Függőség befecskendezés (8) Függőség befecskendezés konstruktorral (constructor injection): public class TextEditor { } private SpellChecker spellchecker; public TextEditor(SpellChecker spellchecker) { this.spellchecker = spellchecker; } //... 80
81 Függőség befecskendezés (9) Függőség befecskendezés beállító metódussal (setter injection): public class TextEditor { } private SpellChecker spellchecker; public TextEditor() {} public void setspellchecker(spellchecker spellchecker) { this.spellchecker = spellchecker; } //... 81
82 Függőség befecskendezés (10) Függőség befecskendezés beállító interfésszel (interface injection): public interface SpellCheckerSetter { } void setspellchecker(spellchecker spellchecker); public class TextEditor implements SpellCheckerSetter { private SpellChecker spellchecker; public TextEditor() public void setspellchecker(spellchecker spellchecker) { this.spellchecker = spellchecker; } //... } 82
83 Függőség befecskendezés (11) C++ keretrendszerek: [Boost].DI (licenc: Boost Software License) Fruit (licenc: Apache License 2.0) Hypodermic (licenc: MIT License) 83
84 Függőség befecskendezés (12) Java: JSR 330: Dependency Injection for Java Szabványos annotációk biztosítása függőség befecskendezéshez. A Java EE 6-ban jelent meg. javax.inject csomag. Lásd: A specifikációt implementáló DI keretrendszer szükséges használatához! Például: Dagger, Guice, HK2, Spring Framework, 84
85 Függőség befecskendezés (13) Java keretrendszerek: Dagger (licenc: Apache License 2.0) Guice (licenc: Apache License 2.0) HK2 (licenc: CDDL + GPLv2) Java EE CDI Spring Framework (licenc: Apache License 2.0) e.html 85
86 Függőség befecskendezés (14).NET keretrendszerek: Castle Windsor (licenc: Apache License 2.0) Ninject (licenc: Apache License 2.0) StructureMap (license: Apache License 2.0) 86
Objektumorientált tervezési alapelvek
Objektumorientált tervezési alapelvek Jeszenszky Péter jeszenszky.peter@inf.unideb.hu Utolsó módosítás: 2019. április 10. PMD Statikus kódelemző (programozási nyelv: Java, licenc: BSD-stílusú) https://pmd.github.io/
AZ OBJEKTUM-ORIENTÁLT TERVEZÉSI ALAPELVEK KRITIKAI VIZSGÁLATA
Kusper Gábor Eszterházy Károly Főiskola gkusper@aries.ektf.hu Márien Szabolcs Wit-Sys ZRt. szabolcs.marien@wit-sys.hu AZ OBJEKTUM-ORIENTÁLT TERVEZÉSI ALAPELVEK KRITIKAI VIZSGÁLATA Absztrakt A szakirodalom
A TANTÁRGY ADATLAPJA
A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș-Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika 1.3 Intézet Magyar Matematika és Informatika 1.4 Szakterület
Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem
A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 04. 17. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési
Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.
KIINDULÁS Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg. Programozás III Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk,
Több app. Egy kódbázis
Több app Egy kódbázis Agenda Bevezető Technology stack A kód szervezése Debug és tesztelés CI Supercharge 2 Bevezető Adott egy vezető telekommunikációs vállalat Self-care alkalmazása Ezzel az alkalmazással
Szoftver-technológia II. Tervezési minták. Irodalom. Szoftver-technológia II.
Tervezési minták Irodalom Steven R. Schach: Object Oriented & Classical Software Engineering, McGRAW-HILL, 6th edition, 2005, chapter 8. E. Gamma, R. Helm, R. Johnson, J. Vlissides:Design patterns: Elements
Java Programozó képzés A&K AKADÉMIA 2019.
Java Programozó képzés A&K AKADÉMIA 2019. Kedves érdeklődő! Engedd meg, hogy a következő oldalakon részletesebben is bemutassam képzéseink modulrendszerét! Ha további kérdéseid vannak, ne habozz, tedd
A TANTÁRGY ADATLAPJA
A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș-Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika 1.3 Intézet Magyar Matematika és Informatika 1.4 Szakterület
A Java EE 5 plattform
A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11. 13. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési
JAVA webes alkalmazások
JAVA webes alkalmazások Java Enterprise Edition a JEE-t egy specifikáció definiálja, ami de facto szabványnak tekinthető, egy ennek megfelelő Java EE alkalmazásszerver kezeli a telepített komponensek tranzakcióit,
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
Java best practices A&K AKADÉMIA MARKOS ANDRÁS
Java best practices A&K AKADÉMIA MARKOS ANDRÁS HT TPS://AK-AKADEMIA.HU Miről lesz ma szó? 1. Bevezetés A Java nyelv és verziói Új nyelvi elemek áttekintése 2. Programozási elvek YAGNI DRY vs. WET KISS
Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016
Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:
ANALYSIS PATTERNS MARTIN FOWLER ANALYSIS PATTERNS. Általános ismertető és Accountability Patterns
MARTIN FOWLER ANALYSIS PATTERNS Általános ismertető és Accountability Patterns ELTE, 2010. 11. 25. Herczeg István iherczeg@inf.elte.hu 1 Mi az a 'ANALYSIS PATTERN'? Mi az a minta? MF minta (pattern) definíciója:
Web-fejlesztés NGM_IN002_1
Web-fejlesztés NGM_IN002_1 Rich Internet Applications RIA Vékony-kliens generált (statikus) HTML megjelenítése szerver oldali feldolgozással szinkron oldal megjelenítéssel RIA desktop alkalmazások funkcionalitása
Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu
Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
JAVA PROGRAMOZÁS 2.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,
Komponens alapú programozás Bevezetés
Komponens alapú programozás Bevezetés Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ez a tananyag felhasználja a TEMPUS S_JEP-12495-97 Network Computing Chapter 8 Developing of Network Computing
A TANTÁRGY ADATLAPJA
A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș-Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika Kar 1.3 Intézet Magyar Matematika és Informatika Intézet 1.4
Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén
Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT richard.jonas@tsoft.
Komponensek együttműködése web-alkalmazás környezetben Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT Komponensek a gyakorlatban A szoftverkomponenseket fejlesztő csoportoknak szüksége van olyan
Interfészek. PPT 2007/2008 tavasz.
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált
Java programozási nyelv 5. rész Osztályok III.
Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
Junior Java Képzés. Tematika
Junior Java Képzés Tematika I. Szakmai törzsanyag A tematika tartalmaz algoritmuselméletet, programozási tételeket, tipikus adatfeldolgozó feladatokat, programozási nyelvi alapelemeket, technológiai ismereteket,
Programozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:
Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?
Szálkezelés 1. A szekvencia diagram feladata az objektumok egymás közti üzenetváltásainak ábrázolása egy időtengely mentén elhelyezve. Az objektumok életvonala egy felülről lefelé mutató időtengely. A
A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem
A J2EE fejlesztési si platform (application model) 1.4 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11.13. A J2EE application model A Java szabványok -
Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom
Szoftver újrafelhasználás (Software reuse) Irodalom Ian Sommerville: Software Engineering, 7th e. chapter 18. Roger S. Pressman: Software Engineering, 5th e. chapter 27. 2 Szoftver újrafelhasználás Szoftver
Programozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is
Programfejlesztési Modellek
Programfejlesztési Modellek Programfejlesztési fázisok: Követelmények leírása (megvalósíthatósági tanulmány, funkcionális specifikáció) Specifikáció elkészítése Tervezés (vázlatos és finom) Implementáció
Közösség, projektek, IDE
Eclipse Közösség, projektek, IDE Eclipse egy nyílt forráskódú (open source) projekteken dolgozó közösség, céljuk egy kiterjeszthető fejlesztői platform és keretrendszer fejlesztése, amely megoldásokkal
Szoftver-technológia II. Modulok és OOP. Irodalom
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,
Programozás módszertan p.1/46
Programozás módszertan Öröklődés Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS
MVC. Model View Controller
MVC Model View Controller Szoftver fejlesztés régen Console-based alkalmazások Pure HTML weboldalak Assembly, C Tipikusan kevés fejlesztő (Johm Carmack Wolfenstein, Doom, Quake..) Szűkös erőforrások optimális
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
OOP. Alapelvek Elek Tibor
OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós
Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok
Bevezetés a programozásba II 8. Előadás: Osztályok, objektumok, osztályszintű metódusok vektor.h #ifndef VEKTOR_H #define VEKTOR_H class Vektor { int meret, *mut; public: Vektor(int meret); int szamlal(int
Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 5. előadás Objektumorientált programozás és tervezés 2014.03.10. Giachetta Roberto groberto@inf.elte.hu
Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans
Enterprise JavaBeans Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans (EJB) server oldali komponens, amely Az üzleti
Objektumelvű programozás
Objektum, osztály Objektumelvű programozás Az elemzés együttműködő objektumok rendszereként fogalmazza meg a feladatot. Objektum-központú elemzés A tervezés a feladat tárgyköreit egy-egy objektum felelősségévé
Bevezetés a programozásba előadás: Öröklődés
Bevezetés a programozásba 2 5. előadás: Öröklődés emlékeztető Tagfüggvény struct koord { double x,y,r; void set(double ux, double uy) { x=ux; y=uy; r=sqrt(x*x+y*y); } Használat: koord k; k.set(4,5); Egységbezárás
Öröklés és Polimorfizmus
Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal
Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 9. ELŐADÁS - OOP TERVEZÉS 2014 Bánsághi Anna 1 of 31 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma
GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok
GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és Függvénysablonok Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban
1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010
Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása
Informatika szigorlati témakörök gazdasági informatika egyetemi képzés hallgatói részére
Informatika szigorlati témakörök gazdasági informatika egyetemi képzés hallgatói részére Az Informatika szigorlat alapvetően az IR-fejlesztés, valamint az OO-fejlesztés c. tantárgyi blokkok, valamint az
Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus
Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1
Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum
Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe
Webes alkalmazások fejlesztése Bevezetés az ASP.NET MVC 5 keretrendszerbe ASP.NET MVC Framework 2009-ben jelent meg az első verziója, azóta folyamatosan fejlesztik Nyílt forráskódú Microsoft technológia
OOP: Java 8.Gy: Abstract osztályok, interfészek
OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus
Programozási technológia 2.
Programozási technológia 2. Objektumorientált tervezési szempontok és minták Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. A tervezés Az objektumorientált tervezés során öt alapelvet célszerű követnünk
Objektumorientált tervezési alapelvek és tervezési minták döntésalapú elemzése, a döntésösszevonás elmélete és gyakorlata
Objektumorientált tervezési alapelvek és tervezési minták döntésalapú elemzése, a döntésösszevonás elmélete és gyakorlata Egyetemi doktori (PhD) értekezés A szerző neve: Márien Szabolcs A témavezető neve:
I. Szakmai törzsanyag
I. Szakmai törzsanyag A 19 témakör tartalmaz algoritmuselméletet, programozási tételeket, tipikus adatfeldolgozó feladatokat, programozási nyelvi alapelemeket, technológiai ismereteket, áttekinti a Java
Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor
Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig
Osztályok. 4. gyakorlat
Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum
Már megismert fogalmak áttekintése
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak
RIA Rich Internet Application
Áttekintés RIA Rich Internet Application Komplex felhasználói felülettel rendelkező web-alkalmazások Bevezető Flex áttekintés ActionScript Felhasználói felület tervezése Események Szerver oldali szolgáltatásokkal
Komponens alapú fejlesztés
Komponens alapú fejlesztés Szoftver újrafelhasználás Szoftver fejlesztésekor korábbi fejlesztésekkor létrehozott kód felhasználása architektúra felhasználása tudás felhasználása Nem azonos a portolással
UML (Unified Modelling Language)
UML (Unified Modelling Language) UML (+ Object Constraint Language) Az objektum- modellezés egy szabványa (OMG) UML A 80-as, 90-es években egyre inkább terjedő objektum-orientált analízis és tervezés (OOA&D)
A TANTÁRGY ADATLAPJA
A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș-Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika Kar 1.3 Intézet Magyar Matematika és Informatika Intézet 1.4
SOA modell: Ez az interfész definiálja az elérhető adatokat, és megadja, hogy hogyan lehet azokhoz hozzáférni.
Service-Oriented Architecture, SOA Az elosztott rendszerek fejlesztésének módja. Célja:az IT eszközök komplexitásának a kezelésének egyszerűsítése könnyebben újrafelhasználhatóság, egymással integrálhatóság
Objektum orientált programozás Bevezetés
Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban
Objektumorientált paradigma és programfejlesztés Bevezető
Objektumorientált paradigma és programfejlesztés Bevezető Vámossy Zoltán vamossy.zoltan@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Ficsor Lajos (Miskolci Egyetem) prezentációja alapján
Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22
Szerializáció Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 1 / 22 Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML
Google C++ style guide
Április 3, 2013 Tartalomjegyzék Amiről szó lesz... Header állományok Hatókör Osztályok Elnevezések Előzmények Az útmutató célja A Google nyílt forrású projektjeinél túlnyomórészt C++: hatékony szolgáltatások,
Programozási alapismeretek 4.
Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)
Metamodellezés. Simon Balázs BME IIT, 2011.
Metamodellezés Simon Balázs BME IIT, 2011. Bevezetés Metamodellezés EMF & ecore Tartalom (C) Simon Balázs, BME IIT, 2011. 2 Hétfő: Simon Balázs Bevezetés hetente felváltva: előadás és gyakorlat metamodellezés
Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:
Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban
Enterprise JavaBeans 1.4 platform (EJB 2.0)
Enterprise JavaBeans 1.4 platform (EJB 2.0) Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11.13. Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans
Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés
Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;
Abstract osztályok és interface-ek. 7-dik gyakorlat
Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,
Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
OOP és UML Áttekintés
OOP és UML Áttekintés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) OOP és UML Áttekintés 2013 1 / 32 Tartalom jegyzék 1 OOP Osztály Öröklődés Interfész, Absztrakt Osztály Kivétel kezelés
ELTE SAP Excellence Center Oktatóanyag 1
Oktatóanyag 1 Oktatóanyag 2 Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi. Oktatóanyag 3 A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat,
Elosztott rendszer architektúrák
Elosztott rendszer architektúrák Distributed systems architectures Irodalom Ian Sommerville: Software Engineering, 7th e. chapter 12. Andrew S. Tanenbaum, aarten van Steen: Distributed Systems: rinciples
2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése
Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,
Szoftver újrafelhasználás
Szoftver újrafelhasználás Szoftver újrafelhasználás Szoftver fejlesztésekor korábbi fejlesztésekkor létrehozott kód felhasználása architektúra felhasználása tudás felhasználása Nem azonos a portolással
Objektum orientált software fejlesztés (Bevezetés)
Objektum orientált software fejlesztés (Bevezetés) Lajos Miskolci Egyetem Általános Informatikai Tanszék Út az objektum orientált szemléletig 1. Klasszikus módszerek: program = adatszerkezetek + algoritmusok
A TANTÁRGY ADATLAPJA
A TANTÁRGY ADATLAPJA 1. A képzési program adatai 1.1 Felsőoktatási intézmény Babeș-Bolyai Tudományegyetem 1.2 Kar Matematika és Informatika 1.3 Intézet Magyar Matematika és Informatika 1.4 Szakterület
Java programozási nyelv 4. rész Osztályok II.
Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék
MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák
Java Web technológiák Bevezetés Áttekintés Model View Controller (MVC) elv Java EE Java alapú Web alkalmazások Áttekintés Model View Controller (MVC) elv Java EE Java alapú Web alkalmazások Áttekintés
Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez
Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez Székely István Debreceni Egyetem, Informatikai Intézet A rendszer felépítése szerver a komponenseket szolgáltatja Java nyelvű implementáció
Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft
Flash és PHP kommunikáció Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft A lehetőségek FlashVars External Interface Loadvars XML SOAP Socket AMF AMFphp PHPObject Flash Vars Flash verziótól függetlenül
Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft
Java-ról Kotlinra Ekler Péter peter.ekler@aut.bme.hu BME AUT Tartalom Java és Kotlin kapcsolata Hogyan próbálhatjuk ki? Kotlin kultúra kialakítása cégen belül Milyen a Kotlin a Java-hoz képest? Történet
01. gyakorlat - Projektalapítás
2 Követelmények 01. gyakorlat - Projektalapítás Szoftvertechnológia gyakorlat OE-NIK A félév során egy nagyobb szoftverrendszer prototípusának elkészítése lesz a feladat Fejlesztési módszertan: RUP CASE-eszköz:
Bevezető. Servlet alapgondolatok
A Java servlet technológia Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 06. Servlet Bevezető Igény a dinamikus WEB tartalmakra Előzmény: CGI Sokáig
Ismeretanyag Záróvizsgára való felkészüléshez
Ismeretanyag Záróvizsgára való felkészüléshez 1. Információmenedzsment az információmenedzsment értelmezése, feladatok különböző megközelítésekben informatikai szerepek, informatikai szervezet, kapcsolat
Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa
Web Technológiák Java Server Pages - JSP Répási Tibor egyetemi tanársegéd Miskolc Egyetem Infomatikai és Villamosmérnöki Tanszékcsoport (IVM) Általános Informatikai Tanszék Iroda: Inf.Int. 108. Tel: 2101
Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum
Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout
Interfészek. Programozás II. előadás. Szénási Sándor.
Interfészek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Polimorfizmus áttekintése Interfészek Interfészek alkalmazása
Objektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor
Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor A szotverarchitektúra fogalma A szoftverarchitektúra nagyon fiatal diszciplína. A fogalma még nem teljesen kiforrott. Néhány definíció: A szoftverarchitektúra