Osztálytervezés és C++ implementációs ajánlások I.

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Osztálytervezés és C++ implementációs ajánlások I."

Átírás

1 Osztálytervezés és C++ implementációs ajánlások I. Miskolci Egyetem Általános Informatikai Tanszék Osztálytervezés és implementációs kérdések I. OTERV1 / 1 Osztály tervezés Egy nyelv szabályrendszere számos konstrukciót megenged A software fejlesztés során egy adott problémát kell megoldani Az objektum orientált program a valóság valamely részének a modellje Szükséges tanulmányozni, hogy adott cél elérése érdekében milyen nyelvi szerkezet(ek) használata a legcélszerűbb Osztálytervezés és implementációs kérdések I. OTERV1 / 2 Mi is az osztály? Programozástechnikai szempontból típus. Programtervezési szempontból a modellezendő valóság valamely fogalmának modellje. A programokban kétféle osztályok lehetnek: közvetlenül az alkalmazási terület (application domain) fogalmait ábrázoló osztályok a programok elkészítéséhez szükséges osztályok Osztálytervezés és implementációs kérdések I. OTERV1 / 3

2 Mit ábrázolhatnak az osztályok? Alkalmazási terület osztályai: Felhasználói fogalmak (pl. teherauto) Felhasználói fogalmak általánosításai (pl. jármű) A megvalósítás osztályai: Hardware/software erőforrások (pl. memória, i/o) Más osztályok implementálásához szükséges osztályok (pl. listák, vermek stb.) Beépített adattípusok és vezérlési szerkezetek Osztálytervezés és implementációs kérdések I. OTERV1 / 4 Osztályok közötti kapcsolatok Logikai szintű kapcsolatok általánosítás/pontosítás (is-a) tartalmazás (has-a) használat (use) Osztálytervezés és implementációs kérdések I. OTERV1 / 5 Az általánosítás/pontosítás implementálása Leszármaztatási mechanizmus (öröklődés) segítségével public öröklési mód szükséges A leszármazott osztály objektuma egyben ős objektum is. Osztálytervezés és implementációs kérdések I. OTERV1 / 6

3 Példa: öröklődés class CSzemely { } class CHallgato : public CSzemely { } void SortIszik( const CSzemely& sz ); void FeladatotBead(const CHallgato& h); Osztálytervezés és implementációs kérdések I. OTERV1 / 7 Példa: öröklődés (folyt.) CHallgato nagypista; CSzemely kispista; SortIszik( kispista ); // OK // OK, mert egy Hallgato egyben // Szemely is SortIszik( nagypista ); // Hibás, mert egy Szemely nem // biztos, hogy Hallgato is FeladatotBead( kispista ); Osztálytervezés és implementációs kérdések I. OTERV1 / 8 Példa: hibás öröklődés class CMadar { public: CKaja MitEszik(void); void Repul(void); } class CStrucc: public CMadar { } A CStrucc örökli a repülés képességét a CMadar osztálytól. Osztálytervezés és implementációs kérdések I. OTERV1 / 9

4 Példa: hibás öröklődés (folyt.) A hiba oka: a természetes nyelv pontatlansága. Mit jelent pontosan: "A madár tud repülni" "Minden madár tud repülni" "A madarak általában tudnak repülni" Nem a valóság viszonyait modelleztük. Osztálytervezés és implementációs kérdések I. OTERV1 / 10 Példa: hibás öröklődés javítása Egyik lehetséges javítás: class CMadar { public: CKaja MitEszik(void); bool TudRepulni(void); } class CStrucc : public CMadar { } Csak a repülés lehetőségét örökli. Osztálytervezés és implementációs kérdések I. OTERV1 / 11 Példa: hibás öröklődés javítása (folyt) class CMadar { public: CKaja MitEszik( void ) ; }; class CGyalogMadar : public CMadar { }; class CRendesMadar : public CMadar { public : void Repul( void ) ; }; class CStrucc : public CGyalogMadar{ }; class CSas : public CRendesMadar{ }; Osztálytervezés és implementációs kérdések I. OTERV1 / 12

5 A tartalmazás implementálása Kétféle tartalmazás kapcsolat: agregáció: a rész az egészhez tartozik, de önállóan is létező entitás kompozíció: a rész önmagában nem létezhet, csak valaminek a részeként Osztálytervezés és implementációs kérdések I. OTERV1 / 13 A tartalmazás implementálása: aggregáció Lehetséges megoldások: tag objektum pointere vagy referenciája a tartalmazó osztályban hátrány: szoros kapcsolat a tartalmazó és a tartalmazott objektum között (konzisztencia!!!) a tartalmazott private leszármaztatása a tartalmazó osztályból hátrány: ilyenkor csak osztály szinten fejezi ki a tartalmazott önálló voltát. Osztálytervezés és implementációs kérdések I. OTERV1 / 14 Példa: aggregáció implementálása (Tag objektum hátrány: implementációs szinten nem fejezi ki a rész önállóságát!) Példa: class CAuto { Cmotor* m_motorja ; Ckerek* m_kerekei[5] ; } Osztálytervezés és implementációs kérdések I. OTERV1 / 15

6 Tartalmazás implementálása: kompozíció Lehetséges megoldások: tag objektum A tartalmazó osztályban lokális osztálydefiníció a tartalmazott számára Osztálytervezés és implementációs kérdések I. OTERV1 / 16 Használat kapcsolat implementálása Fajtái: (CX és CY osztályok) CX használja a CY nevet (feltételezi, hogy CY deklarált a használat helyén) adattag típusa tagfüggvény visszatérési értékének vagy paramétereinek típusa CX használja a CY osztályt (láthatósági szabályok alapján) a CY egy tagfüggvényét írja/olvassa a CY egy adattagját Osztálytervezés és implementációs kérdések I. OTERV1 / 17 Használat kapcsolat impl. (folyt.) CX létrehoz egy CY típusú objektumot statikus definíció new operátorral dinamikusan CX veszi CY méretét Probléma a használat kapcsolat implementálásával: Csak közvetett nyelvi eszközök jelzik az ilyen kapcsolatokat Korlátozó tényezők: azonosítók lexikális érvényességi tartománya osztály tagjainak láthatósági attribútumai Osztálytervezés és implementációs kérdések I. OTERV1 / 18

7 Információ rejtés A jól tervezett osztály belső részleteinek ismerete szükségtelen a használatához Az osztály használata csak annak interface-e segítségével lehetséges. Egy objektum a külvilággal csak az interface-en keresztül képes kommunikálni. Osztálytervezés és implementációs kérdések I. OTERV1 / 19 Osztály interface fogalma a public tagfüggvények összessége ezt kell ismernie az osztály használójának a leszármazott osztály se tételezzen fel implementációs részleteket a bázisosztályáról A friend függvények és osztályok csak feltétlenül szükséges esetben használjuk, mert ellentmond az információ rejtés alapelvének protected függvények és adattagok implementációs függést hoz létre az ős és a leszármazott osztály között Osztálytervezés és implementációs kérdések I. OTERV1 / 20 A jó osztály interface 1. Teljes minden funkciót tartalmaz, ami az osztálytól elvárható nem az adott alkalmazás szempontjai határozzák meg újrafelhasználható egység Minimális nem tartalmaz a felhasználó számára érdektelen (esetleg veszélyes) elemeket belső felhasználású funkciók private vagy protected minősítésűek a belső áttervezés nincs rá hatással Osztálytervezés és implementációs kérdések I. OTERV1 / 21

8 A jó osztály interface 2. Kezelhető méretű általában legfeljebb néhány tíz metódus A sok funkció között nagyobb valószínűséggel lesznek hasonlóak (félreértés veszélye!) A terjedelmes interface általában tervezési hibára utal: Az interface része belső funkció is Az osztály határait nem jól állapítottuk meg, és túl sok feladatot akarunk rábízni. A helyes architektúra kialakítása érdekében az eredetileg tervezett osztályt több osztályra kell bontani, és ezek között leszármaztatással vagy más mechanizmussal megteremteni a kapcsolatot. Osztálytervezés és implementációs kérdések I. OTERV1 / 22 Az osztály interface részei Kezelő függvények inicializáló, értékadó, konverziós stb. függvények sokszor nem is a felhasználó program, hanem a fordítóprogram implicite hívja meg. Elérési függvények Az adattagok értékének elérésére vagy azok értékének módosítására. Munkavégző függvények Az osztály lényegi funkcióit aktivizáló függvények. Osztálytervezés és implementációs kérdések I. OTERV1 / 23 Kezelő függvények A kezelő függvények kialakítása az osztály használhatóságát alapvetően befolyásolja Egyes kezelő függvények hiánya vagy helytelen implementációja a jól implementált munkavégző függvények ellenére is programhibákhoz vagy hibás működéshez vezethet Osztálytervezés és implementációs kérdések I. OTERV1 / 24

9 Kezelő függvények tervezésének szempontjai 1. Hogyan kell az objektumoknak létrejönniük és megszűnniük? konstruktorok száma, paraméterlistájuk a destruktor működése a new és delete operátorok esetleges átdefiniálásának szükségességét. Miben különbözik egy objektum inicializálása és értékadása? A konstruktorok és az értékadó operátor működése. Osztálytervezés és implementációs kérdések I. OTERV1 / 25 Kezelő függvények tervezésének szempontjai 2. Milyen kezdőállapoto(ka)t vehet fel egy objektum a keletkezése után? valamennyi tagfüggvény implementációját befolyásolja, hogy milyen állapotot tételezhet fel, illetve köteles ellenőrizni. Osztálytervezés és implementációs kérdések I. OTERV1 / 26 Kezelő függvények tervezésének szempontjai 3. Milyen legális állapotokat vehet fel az osztály egy objektuma? A tagfüggvények hibaellenőrzését befolyásolja. Van bázisosztálya az új osztálynak? Mely funkciók örökölhetők változatlanul? Vannak-e a bázisosztályban olyan függvények, amelyeket felül kell definiálni a leszármazott osztályban? Vannak-e a bázisosztályban olyan függvények, amelyek használatát le kell tiltani? Osztálytervezés és implementációs kérdések I. OTERV1 / 27

10 Kezelő függvények tervezésének szempontjai 4. Lesz-e várhatóan az osztálynak leszármazott osztálya? Mely tagfüggvények, esetleg adattagok legyenek protected minősítésűek? Osztálytervezés és implementációs kérdések I. OTERV1 / 28 Kezelő függvények tervezésének szempontjai 5. Milyen operátorok definiálása lehet hasznos az osztály használatában? Az operátor overloading tervezéséhez. A felhasználó számára nem ajánlott, de az osztály implementációja számára hasznos operátorok definiálhatók private (esetleg protected) minősítéssel. Osztálytervezés és implementációs kérdések I. OTERV1 / 29 Kezelő függvények tervezésének szempontjai 6. Miknek lehet szüksége a nem public tagok elérésére? Mely adattagokat és tagfüggvényeket célszerű protected minősítéssel ellátni? Mely osztályok illetve függvények kaphatják meg a friend minősítést? Információ rejtésnek ellentmondó konstrukciók => gondosan elemzendő a szükségességük. Különösen érdemes átgondolni, hogy a public adattag használata valóban elkerülhetetlen-e? Osztálytervezés és implementációs kérdések I. OTERV1 / 30

11 Konstruktor tervezésének szempontjai A felhasználás kényelme Az alapértelmzés szerinti paraméter értékek használata csökkentheti a szükséges konstruktorok számát. A konstruktornak konverziós szerepe is van! Alapértelmezés szerinti konstruktor átdefiniálása szükséges-e? copy konstruktor! Osztálytervezés és implementációs kérdések I. OTERV1 / 31 Destruktor tervezésének szempontjai Minden "mellékhatás" eltüntetése. Bármilyen (legális) állapotban levő objektumra működnie kell! Osztálytervezés és implementációs kérdések I. OTERV1 / 32 Operátorok tervezésének szempontjai 1. Alapszabály: minden olyan operátort definiálni kell, ami az adott osztály használata során természetesnek tűnik. Tervezési hiba, ha egy átértelmezett operátor jelentése a programozó számára nem egyértelmű. Különösen problémás egy, az operátor eredeti jelentésének ellentmondó jelentés definiálása. Különleges szerepe van az értékadó operátoroknak. Osztálytervezés és implementációs kérdések I. OTERV1 / 33

12 Operátorok tervezésének szempontjai 2. Ha egy relációs operátort értelmezünk, az összeset definiáljuk. Sokszor hasznos lehet (és bármilyen típusú objektumra alkalmazható) az == és a!= operátorok implementálása. Nagyon sokszor hívott funkcióra kényelmes megoldás lehet a () (függvényhívás-operátor) átdefiniálása. Osztálytervezés és implementációs kérdések I. OTERV1 / 34 Tagfüggvények implementációja Az eddigi programozói tapasztalatok tanulságai Két alapvető cél: Helytelen működés elkerülése Hatékonyabb működés biztosítása Osztálytervezés és implementációs kérdések I. OTERV1 / 35 A const minősítő Használjuk mindenütt, ahol lehetséges Szimbolikus konstans definiálására makródefiníció helyett használjunk const minősítésű és inicializált változót (ekkor vonatkozik rá a típusellenőrzés) Osztálytervezés és implementációs kérdések I. OTERV1 / 36

13 A const minősítő (emlékeztető) Konstansra mutató pointer const char* nev = "Ficsór"; A konstans értéke így nem változtatható meg a pointeren keresztül, de a pointer tetszőlegesen újradefiniálható. Konstans pointer char* const nev = "Ficsór"; A pointer értéke nem változtatható meg (hiszen konstans). Konstansra mutató konstans pointer const char* const nev = ""; Sem a pointer értéke, sem az általa címzett érték nem változtatható meg Osztálytervezés és implementációs kérdések I. OTERV1 / 37 Konstans tagfüggv ggvény Minősítése az argumentumlista után tett const alapszóval. Az alapszót mind a függvény prototípusában, mind a definícióban ki kell írni. Jelentése: a konstans tagfüggvény nem változtathatja meg egyetlen adattag értékét sem. Egy ilyen utasítás a függvény törzsében fordítási hibát okoz. Osztálytervezés és implementációs kérdések I. OTERV1 / 38 Konstans tagfüggvények használata 1. Minden olyan tagfüggvényt, amely nem változtatja meg az objektum állapotát, deklaráljunk konstans tagfüggvényként. Konstans objektumra csak konstans tagfüggvény hívható meg. Ha egy tagfüggvényből létezik const minősítésű és minősítetlen változat is, const objektumra const tagfüggvény hívódik meg. Osztálytervezés és implementációs kérdések I. OTERV1 / 39

14 Konstans tagfüggvények használata 2. Az, hogy egy tagfüggvény definíciója nem tartalmaz olyan utasítást, amely valamely adattag értékét közvetlenül megváltoztatja, még nem jelenti azt, hogy valamilyen közvetettebb módon nem változhat az objektum állapota. Egy tagfüggvény számára a const minősítés megadásához gyakran a működésének a funkcionális elemzése szükséges. Példa: CPPEX29 Osztálytervezés és implementációs kérdések I. OTERV1 / 40 Példa konstans tagfüggvényre 1. // Csapda van benne! class CString1 { char* m_pchelemek; public: CString1(const char* szoveg); ~CString1(void); char& operator[] (const int index)const; int hossz(void) const; }; Osztálytervezés és implementációs kérdések I. OTERV1 / 41 Példa konstans tagfüggvényre 2. //Latszolag konstans tagfuggveny, mert //nincs benne ertekadas egy adattagra sem char& CString1::operator[] (const int index) const { return m_pchelemek[index];} // Ez egy igazi const tagfuggveny int CString1::hossz(void) const { return strlen(m_pchelemek);} Osztálytervezés és implementációs kérdések I. OTERV1 / 42

15 Példa konstans tagfüggvényre 3. Hibás használatot tesz lehetővé: const CString1 nevem(""); cout << nevem[2] << "\n"; // OK! // A forditoprogram szamara OK, // mert const tagfuggvenyt hivunk // meg const objektumra nevem[0] = 'X'; // nevem.operator[](0) = X; Osztálytervezés és implementációs kérdések I. OTERV1 / 43 Példa konstans tagfüggvényre 4. Nem megoldás, hogy "elvesszük" a const minősítést az operator[] függvénytől: const CString2 nevem(""); cout << nevem[2] << "\n; A fordítóprogram hibát jelez, hiszen egy const objektumra nem const tagfüggvényt próbáltunk meghívni. Osztálytervezés és implementációs kérdések I. OTERV1 / 44 Példa konstans tagfüggvényre 5. Megoldás: külön változatot definiálunk az operator[] függvényből a konstans és a nem konstans objektumok számára char& operator[] (const int index); const char& operator[] (const int index) const; Osztálytervezés és implementációs kérdések I. OTERV1 / 45

16 Példa konstans tagfüggvényre 6. CString1 szoveg("szoveg"); // Korrekt, a // char& operator[] (const int index) // hivodik meg */ szoveg[0] = 'S'; Osztálytervezés és implementációs kérdések I. OTERV1 / 46 const CString1 en(""); // Korrekt: a // const char& operator[] (const int // index) const valtozat hivodik meg, // ezert hibajelzest kapunk en[0] = 'S'; A hibajelzést az okozza, hogy az értékadás baloldalán a const char& típusú függvényérték áll, és a fordítóprogram képes jelezni egy konstans érték referencián keresztül megkísérelt megváltoztatását. Osztálytervezés és implementációs kérdések I. OTERV1 / 47 Objektum átadása hivatkozás szerint 1. Az érték szerint átadott paraméterek és visszatérési érték hatékonysági szempontok miatt kerülendők. A pontos magyarázatra a későbbiekben még visszatérünk! A megváltoztatni nem kívánt paramétereket const minősítővel kell ellátni! Osztálytervezés és implementációs kérdések I. OTERV1 / 48

17 Referencia objektum helyett 1. Ne adjunk vissza referenciát, ha értéket kell visszaadni. Ez gyakran érvénytelen hivatkozás visszaadását jelenti. Osztálytervezés és implementációs kérdések I. OTERV1 / 49 Ne adjuk vissza lokális objektum címét 1. Helyes implementáció: class CKomplex { double m_valos; double m_kepzetes; public: CKomplex(double v, double k); CKomplex operator+(const Komplex& masik) {return CKomplex(m_valos + masik.m_valos, m_kepzetes + masik.m_kepzetes); } Osztálytervezés és implementációs kérdések I. OTERV1 / 50 Ne adjuk vissza lokális objektum címét 2. Helytelen implementáció: CKomplex& operator+(const CKomplex& masik) { CKomplex eredmeny(m_valos + masik.m_valos, m_kepzetes + masik.m_kepzetes); return eredmeny; } Hiba: megszűnt objektum referenciája! Osztálytervezés és implementációs kérdések I. OTERV1 / 51

18 Ne adjuk vissza lokális objektum címét 3. Másik helytelen implementáció: CKomplex& operator+(const CKomplex& masik) { CKomplex* eredmeny = new CKomplex ( m_valos + masik.m_ valos, m_kepzetes + masik. m_ kepzetes); return *eredmeny; } Hiba: ki szabadítja fel a lefoglalt helyet? Osztálytervezés és implementációs kérdések I. OTERV1 / 52 Korlátozott láthatóságú adattag 1. Egy tagfüggvény ne adja vissza olyan adattag referenciáját vagy pointerét, vagy olyan pointer vagy referencia típusú adattagot, amelynek a láthatósága kisebb, mint a függvényé. Példa: class CString { private: char* m_pchelemek; public: // HIBA!!! char* elemek(void) {return m_pchelemek;} }; Osztálytervezés és implementációs kérdések I. OTERV1 / 53

Osztálytervezés és implementációs ajánlások

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

Részletesebben

Osztálytervezés és implementációs ajánlások

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

Részletesebben

Osztály tervezési szempontok és C++ implementációs ajánlások

Osztály tervezési szempontok és C++ implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Osztály tervezési szempontok és C++ implementációs ajánlások Oktatási segédlet levelező hallgatók részére Összeállította: Ficsor Lajos Miskolc 2005 1 Tartalomjegyzék

Részletesebben

Osztály tervezési szempontok és C++ implementációs ajánlások

Osztály tervezési szempontok és C++ implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Osztály tervezési szempontok és C++ implementációs ajánlások Oktatási segédlet Összeállította: Ficsor Lajos Miskolc 2004 1 Tartalomjegyzék 1. Bevezetés...

Részletesebben

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Virtuális függvények (late binding)

Virtuális függvények (late binding) Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy

Részletesebben

és az instanceof operátor

é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

Részletesebben

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. 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

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

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

Részletesebben

Származtatási mechanizmus a C++ nyelvben

Származtatási mechanizmus a C++ nyelvben Származtatási mechanizmus a C++ nyelvben Miskolci Egyetem Általános Informatikai Tanszék CPP2 / 1 Az öröklődés s fogalma 1. Egy osztály deklarálható valamely más osztály(ok) leszármazottjaként. Az deklaráció

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

Programozás II. 4. Dr. Iványi Péter

Programozás II. 4. Dr. Iványi Péter Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

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

Részletesebben

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás: Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból

Részletesebben

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

Osztályok. 4. gyakorlat

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

Részletesebben

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók: Típuskonverzió a C++ nyelvben Miskolci Egyetem Általános Informatikai Tanszék Típus konverzió a C++ nyelvben CPP3 / 1 Lehetséges konverziók A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges

Részletesebben

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? 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"

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

C++ programozási nyelv Struktúrák a C++ nyelvben

C++ programozási nyelv Struktúrák a C++ nyelvben C++ programozási nyelv Struktúrák a C++ nyelvben Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/37 Bevezetés A

Részletesebben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

Osztály és objektum fogalma

Osztály és objektum fogalma Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály

Részletesebben

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. 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

Részletesebben

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás II gyakorlat. 8. Operátor túlterhelés Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

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,

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

Részletesebben

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció

Részletesebben

Visual C++ 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.

Visual C++ 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. Visual C++ 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. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék CPP0 / 1 Története A C++ programozási nyelv a C programozási nyelv objektum orientált kiterjesztése. Az ANSI-C nyelvet

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Számítógép és programozás 2

Számítógép és programozás 2 Számítógép és programozás 2 10. Előadás Öröklődés http://digitus.itk.ppke.hu/~flugi/ Tagfüggvény struct Particle { int x,y; unsigned char r,g,b; void rajzol() { gout

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

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

Részletesebben

ISA szimulátor objektum-orientált modell (C++)

ISA szimulátor objektum-orientált modell (C++) Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált

Részletesebben

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

Java programozási nyelv 4. rész Osztályok II.

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

Részletesebben

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: C++ referencia Izsó Tamás 2017. február 17. 1. Bevezetés A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: Sokan összetévesztik a pointerrel. Keveset alkalmazzák

Részletesebben

Programozás alapjai II. (4. ea) C++

Programozás alapjai II. (4. ea) C++ Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.03.01. -1-

Részletesebben

Már megismert fogalmak áttekintése

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

Részletesebben

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Bevezetés a programozásba II 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Emlékeztető struct Vektor { int meret, *mut; Vektor(int meret); int szamlal(int mit); }; int Vektor::szamlal(int mit)

Részletesebben

Programozás módszertan

Programozás módszertan Programozás módszertan p. Programozás módszertan Operátorok túlterhelése a C++ nyelvben Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA TANSZÉK Bevezetés Programozás

Részletesebben

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 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,

Részletesebben

Kivételkezelés a C++ nyelvben Bevezetés

Kivételkezelés a C++ nyelvben Bevezetés Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai:

Részletesebben

Objektumorientált szoftverfejlesztés alapjai

Objektumorientált szoftverfejlesztés alapjai Objektumorientált szoftverfejlesztés alapjai Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben @Katona József Kővári Attila Lektorálta: Dr. Fauszt Tibor DOI:

Részletesebben

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Bevezetés A C++ nem objektumorientált újdonságai 3 Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

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:

Részletesebben

Felhasználó által definiált adattípus

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció 1. Öröklés Az objektum orientált tervezés fontos sarkköve, az osztályok viszonyainak a megtervezése. 1.1. Rétegelés c l a s s Address {..... c l a s s Name {..... c l a s s P e r s o n { Name name ; Address

Részletesebben

Objektumelvű programozás

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é

Részletesebben

5. Gyakorlat. struct diak {

5. Gyakorlat. struct diak { Rövid elméleti összefoglaló 5. Gyakorlat Felhasználó által definiált adattípusok: A typedef egy speciális tárolási osztály, mellyel érvényes típusokhoz szinonim nevet rendelhetünk. typedef létező_típus

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

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

Részletesebben

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title; PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function

Részletesebben

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

Programozási nyelvek Java

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:

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Programozás módszertan p.1/46

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

Részletesebben

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} }; A C++ kódokban lévő makrókat melyik egység dolgozza fel az alábbiak közül? preprocessor A szabványos C++-ban nem is írhatunk makrókat (csak C-ben) assembler linker Az alábbi példában a Foo f(5); konstruktor

Részletesebben

Programozási nyelvek Java

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

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

Részletesebben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

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

Részletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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;

Részletesebben

Objektum orientált kiterjesztés A+ programozási nyelvhez

Objektum orientált kiterjesztés A+ programozási nyelvhez Szegedi Tudományegyetem Informatikai Tanszékcsoport Objektum orientált kiterjesztés A+ programozási nyelvhez Diplomamunka terve Készítette: Bátori Csaba programtervező matematikus hallgató Témavezető:

Részletesebben

1. Alapok. Programozás II

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

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. november A C++ programozási nyelv Soós Sándor 1/12 Tartalomjegyzék Miért

Részletesebben

OOP és UML Áttekintés

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

Részletesebben

Programozási Nyelvek: C++

Programozási Nyelvek: C++ Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise();

Részletesebben

Objektum orientált programozás Bevezetés

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

Részletesebben

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bánsághi Anna 2014 Bánsághi Anna 1 of 33 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance Az objektum-orientált programozás (röviden OOP) a természetes gondolkodást, cselekvést közelítő programozási mód, amely a programozási nyelvek tervezésének természetes fejlődése következtében alakult ki.

Részletesebben

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítá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

Részletesebben

500. AA Megoldó Alfréd AA 500.

500. AA Megoldó Alfréd AA 500. Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein. Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. április 8. Csak bázisosztályként használt/értelmezhető

Részletesebben

Alprogramok, paraméterátadás

Alprogramok, paraméterátadás ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több

Részletesebben

Programozás C++ -ban

Programozás C++ -ban 8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási

Részletesebben

ELTE SAP Excellence Center Oktatóanyag 1

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,

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. 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

Részletesebben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

Részletesebben

Bevezetés a programozásba előadás: Öröklődés

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észletesebben

Programozás C és C++ -ban

Programozás C és C++ -ban Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új

Részletesebben

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés A C programozási nyelv V. Struktúra Dinamikus memóriakezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv V. (Struktúra, memóriakezelés) CBEV5 / 1 A struktúra deklarációja 1.

Részletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 5. előadás Tömbök átméretezése public static void Resize( ref T[] array, int newsize ) Példa: int[] a=new int[20]; Array.Resize(ref a, 22); 2016. 10. 19.

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 6. Konstansok A C nyelvben konstansokat makróval is deklarálhatunk. Ebben az esetben mindenhol ahol a makró előfordul a fordító a definiált értéket behelyettesíti a makró helyére.

Részletesebben

Programozás II. 6.Öröklés Dr. Iványi Péter

Programozás II. 6.Öröklés Dr. Iványi Péter Programozás II. 6.Öröklés Dr. Iványi Péter 1 Öröklés Programozók lusta emberek, nem szeretnék valamit kétszer leírni Miért veszélyes? Nem hatékony Újra kell tárolni a kódot, újra le kell fordítani Karbantartás

Részletesebben

Abstract osztályok és interface-ek. 7-dik gyakorlat

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,

Részletesebben

Elemi Alkalmazások Fejlesztése II.

Elemi Alkalmazások Fejlesztése II. Elemi Alkalmazások Fejlesztése II. Osztályok közötti kapcsolatok öröklődés asszociáció aggregáció kompozíció 1. Feladat Készítsünk programot, amellyel testek térfogatát határozhatjuk meg, illetve megadhatjuk

Részletesebben

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

Bevezetés, a C++ osztályok. Pere László

Bevezetés, a C++ osztályok. Pere László Programozás módszertan II. p. Programozás módszertan II. Bevezetés, a C++ osztályok Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK

Részletesebben