V 1.0 Programozás I. Osztályok, objektumok 1 ÓE-NIK-AII, 2014.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozás alapjai.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
HEFOP 3.3.1–P /1.01 Az OOP elve A programozási paradigma (vagy elv) a számítógépes programok tervezésének és programozásának módszerét jelenti.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
V 1.0 ÓE-NIK-AII, Programozás I. Karaktersorozatok Feladatok.
Programozás III OOP ALAPOK.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
C Programozási alapok.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
Programozás I. Objektumorientált paradigma
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
V 1.0 OE-NIK, Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok.
a programegységek között
„Designer-barát” játéklogika
A C++ programozási nyelv
Objektum-orientált programozás Stringműveletek
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

V 1.0 Programozás I. Osztályok, objektumok 1 ÓE-NIK-AII, 2014

V 1.0 Hallgatói tájékoztató 2 ÓE-NIK-AII, 2014 A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges.

V 1.0 Osztályok 3 ÓE-NIK-AII, 2014 Belső adatok és a rajtuk végezhető műveletek által alkotott egységes adattípus –OOP paradigma alapeleme Az osztályok deklarálása a class kulcsszó segítségével történik class ComplexNumber { double real; double imaginary; double Abs() { return Math.Sqrt(Math.Pow(real, 2) + Math.Pow(imaginary, 2)); }

V 1.0 Osztályok alkotóelemei I. 4 ÓE-NIK-AII, 2014 class ComplexNumber { public double real; public double imaginary; public double Abs() { return Math.Sqrt(Math.Pow(real, 2) + Math.Pow(imaginary, 2)); }... } Metódusok (függvények) Adattagok

V 1.0 Adattagok 5 ÓE-NIK-AII, 2014 Az adattagok értéke a deklarációval egyszerre, helyben is megadható (inicializálás) Az adattagok lehetnek –Olvasható-írható adattagok Értékük tetszés szerint olvasható és módosítható az osztály függvényei által Kívülről a láthatóság függvényében –Csak olvasható adattagok Értékük futásidőben áll be, konstruktorban vagy helybeni inicializációval Utána nem módosíthatók – Konstans adattagok Értéküket a fordítóprogram előre letárolja, futásidőben nem módosíthatók string jegy = "jeles"; int j = -10; readonly string SosemVáltozomMeg = "I Will Stay The Same"; const double π = ; const int összeg = 23 * ( );

V 1.0 Metódusok 6 ÓE-NIK-AII, 2014 Minden metódus tagja egy osztálynak (tagfüggvény) A metódusok rendelkeznek: –Megadott, nulla vagy változó darabszámú paraméterrel (params kulcsszó). A paraméterátadás módja in (jelöletlen), out vagy ref. –Visszatérési értékkel (ha nincs: void) A paraméterek és a visszatérési értékek határozzák meg azt a protokollt, amelyet a metódus használatához be kell tartani –A visszatérési értéket és a paramétereket magában foglaló, a kifejtést nem tartalmazó megadási formát szokták a függvény szignatúrájának nevezni void EgyparaméteresMetódus(bool feltétel) {... } void TöbbparaméteresMetódus(int a, float b, out string c) {... } void MindenbőlSokatElfogadóMetódus(params object[] paraméterTömb) {... } void NincsVisszatérésiÉrtékem() {... } int EgészSzámotAdokVissza(float paraméter) {... } string VálaszomEgyKaraktersorozat(string bemenőAdat) {... } SajátTípus Átalakító(SajátTípus forrásObjektum, int egyikAdattagÚjÉrtéke, string másikAdattagÚjÉrtéke) {... } void TöbbparaméteresMetódus(int a, float b, string c);

V 1.0 Példányosítás 7 ÓE-NIK-AII, 2014 A class kulcsszó után megadott felépítés csak a típus leírása. Ahhoz, hogy egy ilyen típusú adatot használni tudjunk a programunkban, létre kell hozni a típus egy példányát (példányosítás/instantiation): –Gyakran nevezzük a példányt objektumnak is ComplexNumber c = new ComplexNumber(); c.real = 20; c.imaginary = 2; Console.WriteLine(c.Abs()); Tagok elérése: „. ” operátorral A new operátor elvégzi az objektum számára a memóriafoglalást, és meghívja a megfelelő konstruktort

V 1.0 Osztályok alkotóelemei II. 8 ÓE-NIK-AII, 2014 class ComplexNumber { public double real; public double imaginary; public ComplexNumber(double r, double i) { real = r; imaginary = i; } public double Abs() { return Math.Sqrt(Math.Pow(real, 2) + Math.Pow(imaginary, 2)); } ComplexNumber c = new ComplexNumber(20, 2); Console.WriteLine(c.Abs()); Adattagok Konstruktorok Metódusok

V 1.0 Konstruktorok I. 9 ÓE-NIK-AII, 2014 Speciális függvény, amely a példány létrehozásakor fut le, főként inicializációs feladatokat végez –A konstruktorok neve mindig megegyezik az osztály nevével –Visszatérési értéke nincs (void sem!) –A new kulcsszón kívül máshogyan kívülről nem hívható De egy konstruktor a this vagy base kulcsszavak segítségével meghívhat másik konstruktort Ha mi magunk nem deklarálunk konstruktort, a C# fordító automatikusan létrehoz egy paraméter nélkülit (alapértelmezettet): –Az első példában a fordító által létrehozott alapértelmezett konstruktort hívtuk: –Az előző példában egy általunk definiáltat: ComplexNumber c = new ComplexNumber(); ComplexNumber c = new ComplexNumber(20, 2);

V 1.0 Konstruktorok II. 10 ÓE-NIK-AII, 2014 Lehet több konstruktora is egy osztálynak – eltérő paraméterlistával class ComplexNumber { public double real; public double imaginary; public ComplexNumber(double r, double i) { real = r; imaginary = i; } public ComplexNumber(double r) { real = r; imaginary = 0; }... } ComplexNumber c = new ComplexNumber(20); //JÓ ComplexNumber c = new ComplexNumber(2, 20); //JÓ ComplexNumber c = new ComplexNumber(); //NEM JÓ

V 1.0 Példány élettartama, destruktor 11 ÓE-NIK-AII, 2014 Addig él, amíg van rá referencia Nem kell (nem is lehet) felszabadítanunk az általa elfoglalt helyet a memóriában – ezt az automatikus szemétgyűjtő (GC) teszi meg a már nem „élő” objektumoknál –Destruktor: ~ComplexNumber() {... } Akkor fut le, ha a példány megsemmisül Fő feladata: erőforrás-felszabadítás Nem hívható, a GC hívja ismeretlen időben - azonnali felszabadítást (pl. hálózati vagy adatbázis-kapcsolatok, fájlok lezárása...) más módon kell végezni (Dispose pattern) C#-ban a felesleges destruktorok overhead-et okoznak a GC működése miatt – kerüljük, és üres destruktort sohasem írunk

V 1.0 This 12 ÓE-NIK-AII, 2014 public ComplexNumber(double r, double i) { real = r; imaginary = i; } A helyi változók elrejtik az osztály saját, azonos nevű adattagjait this: referencia az aktuális objektumra public ComplexNumber(double real, double imaginary) { real = real; imaginary = imaginary; } public ComplexNumber(double real, double imaginary) { this.real = real; this.imaginary = imaginary; } Használjuk még pl.: –Elrejtett adattagok elérésére –Az aktuális objektum paraméterként való átadásakor –Másik saját konstruktor hívásakor

V 1.0 Gyakorló feladat 13 ÓE-NIK-AII, 2014 class Haromszog { public double a; //egyelőre mindenhol public – mindjárt lesz róla szó public double b; public double c; public Haromszog(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } public double Kerulet() { return a + b + c; } public double Terulet() //Hérón-képlet { double s = Kerulet() / 2; return Math.Sqrt(s * (s - a) * (s - b) * (s - c)); } Készítsünk Háromszög osztályt, amely egy háromszöghöz tárolja a három oldal hosszúságát! Legyen képes kerület, terület számítására.

V 1.0 Láthatóságok 14 ÓE-NIK-AII, 2014 Lehetnek olyan függvények, adattagok stb., amiket csak osztályon belül használunk Lehetnek olyanok, amelyeket kívülről is szabadon el lehet érni class ComplexNumber { public double real; public double imaginary; public ComplexNumber(double r, double i) { real = r; imaginary = i; } public double Abs() { return Math.Sqrt(Math.Pow(real, 2) + Math.Pow(imaginary, 2)); }

V 1.0 Láthatóságok 15 ÓE-NIK-AII, 2014 Alapelv: –A belső reprezentációt nem akarjuk a hívó kód felé megmutatni – adatrejtés –pontosan szabályozni akarjuk, mely tagokhoz férhetnek hozzá kívülről. Az osztály belső reprezentációját így bármikor módosíthatjuk, csupán a kívülről való elérés módját kell változatlan formában meghagynunk – egységbezárás; újrafelhasználhatóság publicKorlátlan protectedCsak az adott osztályban és az utódosztályokban érhető el (később) privateCsak az adott osztályban érhető el internalCsak az adott assemblyn belül lehet használni (később) protected internalCsak az adott assemblyn belül, vagy utódokban (később) A tagok alapértelmezett láthatósága private

V 1.0 Gyakorló feladat 16 ÓE-NIK-AII, 2014 public Haromszog() { Random rand = new Random(); do { a = rand.Next(0, 101); b = rand.Next(0, 101); c = rand.Next(0, 101); } while (!SzerkeszthetoEzAHaromszog()); }... private bool SzerkeszthetoEzAHaromszog() { return (a + b > c) && (a + c > b) && (b + c > a); } Egészítse ki a Háromszög osztályt egy olyan konstruktorral, amely véletlenszerű (0-100 közötti) oldalhosszúsággal rendelkező háromszöget generál. A keletkező háromszögnek szerkeszthetőnek kell lennie!

V 1.0 Tulajdonságok 17 ÓE-NIK-AII, 2014 Eddig public-ká tettük az adattagokat is, hogy hivatkozni tudjunk rájuk kívülről class ComplexNumber {... public double real; public double imaginary; public ComplexNumber(double r, double i) { real = r; imaginary = i; }... } Problémák: –Public láthatóságú adat írható és olvasható is Esetleg nem szeretnénk, hogy írni lehessen –Az értékadás kontrollálatlan –Nem akarjuk kifelé megmutatni a reprezentációt – még azt sem, hogy az adatok milyen formában vannak tárolva Lehet, hogy egy adat tárolási módja összetett Lehet, hogy egy adott adat nincs is tárolva, hanem on-the-fly kiszámoljuk?

V 1.0 Tulajdonságok 18 ÓE-NIK-AII, 2014 Kontrollált hozzáférést biztosítanak speciális formában megadott getter és setter metódusok segítségével class ComplexNumber {... private double real; public double Real { get { return real; } set { real = value; } }... } c.Real = 10; //JÓ Console.WriteLine(c.Real); //JÓ ComplexNumber c = new ComplexNumber(20, 2); c.real = 10; –Kívülről az elérés hasonló a változókéhoz –Valójában azonban a getter függvény fut le, ha lekérik a „változó” értékét –A setter fut le, ha beállítják A value speciális paraméter ebben a függvényben, az épp hozzárendelt értéket jelzi

V 1.0 Tulajdonságok 19 ÓE-NIK-AII, 2014 Akár a getter, akár a setter elhagyható private double real; public double Real { get { return real; } } Kívülről csak olvasható reális rész! – Az osztályon belül azonban elérjük a real változót közvetlenül is c.real = 10; //NEM JÓ c.Real = 10; //NEM JÓ Console.WriteLine(c.Real); //JÓ Akár komplex kód is írható a getter és setter törzsébe –Általában ellenjavallt! public double Real { get { return real; } set { Trace.WriteLine("real: " + real + " changed to " + value + " from " + new StackTrace().GetFrames()[0].GetMethod().Name); real = value; }

V 1.0 Tulajdonságok 20 ÓE-NIK-AII, 2014 Példa on-the-fly kiszámított tulajdonságra private double imaginary; private double real;... //z = a + bi komplex szám felírható z = r*(cosϕ + i*sinϕ) alakban... public double Radius { get { return Math.Sqrt(Math.Pow(real, 2) + Math.Pow(imaginary, 2)); } } public double Angle { get { return Math.Atan2(imaginary, real); } } ComplexNumber z = new ComplexNumber(10, 0); Console.WriteLine("z trigonometrikus alakja: " + z.Radius + "*(cos(" + z.Angle + ") + i*sin(" + z.Angle + "))"); Console.ReadLine();

V 1.0 Osztályok alkotóelemei III. 21 ÓE-NIK-AII, 2014 class ComplexNumber { private double real; private double imaginary; public double Real { get { return real; } set { real = value;} } public double Imaginary { get { return imaginary; } set { imaginary = value;} }... } Adattagok Metódusok (függvények) Konstruktorok Tulajdonságok

V 1.0 Gyakorló feladat 22 ÓE-NIK-AII, 2014 private double a; public double A { get { return a; } set { double regiA = a; a = value; if (!SzerkeszthetoEzAHaromszog()) //Ebben a megoldásban egyszerűen csak felhasználtuk ezt a régebben meglévő függvényt. a = regiA; }... Egészítse ki a Háromszög osztályt úgy, hogy módosíthatóak legyenek az oldalhosszak, de csak úgy, hogy a háromszög szerkeszthető maradjon! (Rossz oldalhossz megadása esetén maradjon meg az eredeti hossz.)

V 1.0 Gyakorló feladatok 23 ÓE-NIK-AII, 2014 Készítsen Kör osztályt, amely egy kört a középpontja koordinátáival és a sugárral reprezentál! Az osztályban legyen metódus, ami megállapítja, hogy egy adott pont benne van-e a körben vagy sem. Egészítse ki a Kör osztályt úgy, hogy legyen metódusa, amely megállapítja, hogy egy adott pont a kör középpontjától pontosan mekkora távolságra van. Készítsen példányt a tesztelésre: kérje be a felhasználótól egy kör adatait, majd kérjen be pontokat, és mondja meg, ezek benne vannak-e a körben vagy sem. Módosítsa a Kör osztályt Céltábla osztállyá úgy, hogy legyen benne metódus, amely egy adott pontnak a középponttól való távolsága szerint különböző pontszámokat ad! - Ezután készítsen céllövő játékot: hozzon létre egy véletlenszerű középpontú céltáblát, majd kérjen be a felhasználótól 15 lövést (pontot), és számolja, hány pontnyi találata van a felhasználónak a 15 lövés után. Minden lövés után segítségül közölje, mekkora volt a lövés távolsága a céltáblától. Készítsen a Körhöz egy új konstruktort, amely megadott sugárral, de véletlenszerű középponttal hozza létre a példányt.