V 1.0 Szabó Zsolt, Óbudai Egyetem, 2011 1 Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.

Slides:



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

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
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,
C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Parallel.For()
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Ö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ási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
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
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. 7. Gyakorlat Operator overloading.
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
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.
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# tagfüggvények.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
ADATBÁZISOK
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Turóczy Attila (MCT, MCP, MCTS) Livesoft Kft. A.NET Framework a gyűjtemény osztályok széles skáláját biztosítja a fejlesztők számára. NévLeírás ArrayListIndex.
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.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Lambda kifejezések LINQ
Összetett adattípusok
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
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 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.
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 Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
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ú,
Scala KOVÁCS VINCENT. Gyűjtemények – Collections  Scala több féle gyűjteménnyel rendelkezik:  Listák (Lists)  Halmazok (Sets)  Maps  Tuple  A gyűjtemények.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Webprogramozó tanfolyam
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
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.
Programozás II. labor 2. rész (Adatszerkezetek)
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][,
Adatkötés Sablonokkal
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Filmes példaalkalmazás I.
Előadás másolata:

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Metódusok "előírására", kötelezővé tételére használható Az osztályban kötelezően kell lennie egy publikus Eldönt() eljárásnak (ha nincs: a fordító reklamál) Hasonló, de teljesen másra használt: absztrakt osztály Kifejezés: "az X osztály implementálja az Y interfészt" Interfészek

V 1.0 Szabó Zsolt, Óbudai Egyetem, Egy interfészt implementáló osztály egy példányára akár interfész típusú változó is mutathat: IEldönthető valtozo=new SajátOsztály(); Egy interfész-metódus szokványosan elérhető az osztálypéldányon keresztül: SajátOsztály valtozo=new SajátOsztály(); valtozo.Eldönt(); … Vagy az interfészen keresztül: (valtozo as IEldönthető).Eldönt(); Ez utóbbira akkor van szükség, ha explicit megvalósítású az interfész az osztályban, vagy a változó típusából nem egyértelmű az interfész implementálása Interfészek - lehetőségek

V 1.0 Szabó Zsolt, Óbudai Egyetem, Explicit implementáció Azonos eljárást előíró interfészek esetén lehet szükséges

V 1.0 Szabó Zsolt, Óbudai Egyetem, Explicit Implementáció

V 1.0 Szabó Zsolt, Óbudai Egyetem, Explicit implementáció használata A következő órán fogunk saját interfészt létrehozni, ezen az órán csak meglévő interfészeket használunk

V 1.0 Szabó Zsolt, Óbudai Egyetem, Interfészek használata Tipikusan: funkcionalitás előírásánál, avagy előírásnak megfelelésnél (pl. VEP: ha az INotifyPropertyChanged interfészt implementálom egy olyan osztálynál, aminek a példányait ListBox vezérlőben helyezem el, akkor ez előír egy eseményt, amire a ListBox feliratkozik – ezen az eseményen keresztül tudja a ListBox, ha frissítenie kell) "A változó típusából nem egyértelmű az interfész implementálása"  Ugyanaz, mint amikor OOP-ben ős típusú volt a tömb, és nem tudtuk, hogy az egyes tömbelemek milyen típusúak Van olyan eset, amikor a gyűjteményből/tömbből csak néhány elem implementál egy bizonyos interfészt, az interfész implementálását ugyanúgy az IS kulcsszóval lehet ellenőrizni

V 1.0 Szabó Zsolt, Óbudai Egyetem, Interfészek használata

V 1.0 Szabó Zsolt, Óbudai Egyetem, Array.Sort(tömb)  tömb rendezése. int[] esetén tökéletesen működik Készítsünk egy osztályt, amelynek segítségével hallgatókat tudunk tárolni: név, neptun kód, teljesített kreditek Töltsünk fel egy 10 elemű tömböt hallgatókkal. Hogyan tudjuk ezt a tömböt a fenti módon névsorba vagy teljesített kreditek szerinti sorba rendezni?  IComparable  IComparable.CompareTo(object) Interfészek használata

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok (© Erdélyi Krisztina) Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus Osztályok A generic fogalma Generikus osztályok Generikus metódusok Megszorítások Statikus tagok Öröklés A generic-ek működése.NET-ben

V 1.0 Szabó Zsolt, Óbudai Egyetem, Bevezetés – feladat Cél: halmaz típus létrehozása, egy elemet egyszer tartalmazhat, a lehető legáltalánosabb módon Milyen elemekből álljon a halmaz? –Személy – akkor a kutya-klubhoz át kell írni –A személy és a kutya őse – ez biztos, hogy elég általános? –Object ez mindennek az őse - ez lehet megoldás  ArrayList,.NET1, csak object-et tárol, állandó castolás –A típust adjuk meg paraméterként, így elég a deklarációban megadni a konkrét típust – ez is megoldás Vizsgáljuk meg ezt közelebbről!

V 1.0 Szabó Zsolt, Óbudai Egyetem, A generic fogalma.NET-ben Paraméterezett típus vagy metódus Minden egyes paraméter egy még meg nem határozott típus helye Más néven sablon vagy template Az osztály tervezésekor csak T néven hivatkozok a típusra, csak az osztály példányosításakor definiálom, hogy ez a T pontosan mi

V 1.0 Szabó Zsolt, Óbudai Egyetem, Paraméterezett típusok A paraméter a típus fejrészében helyezkedik el class MyGenericClass { } Deklarációnál és példányosításkor az aktuális típus kerül a paraméter helyére MyGenericClass mgcINT = new MyGenericClass (); A generic-ek tipikusan gyűjtemények létrehozásához valók, mivel a gyűjtemények több típussal is használhatók

V 1.0 Szabó Zsolt, Óbudai Egyetem, Saját generikus osztály létrehozása

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus osztály használata

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus gyűjtemények ArrayList  object típust tárol, állandó castolás, elavult List : Add(), Insert(), Remove(), RemoveAt(), Reverse(), [], Clear(), Contains(), Count Queue : Enqueue(), Dequeue(), Peek(), Clear(), Contains(), Count Stack : Push(), Pop(), Peek(), Clear(), Contains(), Count Dictionary : Add(), Remove(), TryGetValue(), Keys, Values, Clear(), ContainsKey(), ContainsValue(), Count

V 1.0 Szabó Zsolt, Óbudai Egyetem, Paraméterezett típus inicializálása Nem tudható, hogy érték vagy referencia típusú-e a paraméter Megoldás: default expression –Referenciánál null-t ad vissza –Érték típusnál bitenkénti nullát this.elem = default(T);

V 1.0 Szabó Zsolt, Óbudai Egyetem, Megszorítások Lefordulnak a következő kódok? Ha nem, akkor mi a megoldás? Annyit feltételezhetünk, hogy a T típus a System.Object-ből származik Ezért ennek megfelelően viselkedik

V 1.0 Szabó Zsolt, Óbudai Egyetem, class MyClass2 where T : IEnumerable { public void Iterate(T data) { foreach (object item in data) { Console.WriteLine(item); } Interfész megszorítás class MyClass2 { public void Iterate(T data) { foreach (object item in data) { Console.WriteLine(item); } Nem biztos, hogy T felsorolható! (A foreach ciklus akkor működik saját típuson, ha a saját típus megvalósítja a IEnumerable interfészt, ld. később) OK

V 1.0 Szabó Zsolt, Óbudai Egyetem, Konstruktor megszorítás class MyClass { T obj = new T(); } class MyClass where T:new() { T obj = new T(); } Nem biztos, hogy T-nek van alapértelmezett konstruktora! OK

V 1.0 Szabó Zsolt, Óbudai Egyetem, Művelet megszorítás??? class Arithmetic { public T Cubed(T number){ return number * number * number; } class Arithmetic where T : System.Int32{ public T Cubed(T number){ return number * number * number; } Nem biztos, hogy T-n értelmezett a szorzás! Érték és primitív típusok nem lehetnek megszorítások! Súlyos korlátja a generic-ek használatának, hogy standard operátorok az érték típusokkal nem használhatók.

V 1.0 Szabó Zsolt, Óbudai Egyetem, A Generic korlátja class Program2 { public T Min (T a, T b) where T : IComparable { if (a<b) return a; else return b; } class Program { public T Min (T a, T b) where T : IComparable { if (a.CompareTo(b)<0) return a; else return b; }… } A standard operátorok nem használhatók.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Megszorítások A megszorítások a típus paraméterektől elvárt viselkedést írják le A where kulcsszóval vezetjük be Típusnál és metódusnál is használhatók Fajtáik: –Leszármazott (where T : Személy) –Interfész (where T: IEnumerable ) –Érték típus (where T: struct) –Referencia típus (where T: class) –Konstruktor (where T: new()) Az alábbi típusok nem lehetnek megszorításban: –Lezárt osztályok –Primitív típusok –System.Array –System.Delegate –System.Enum –System.ValueType

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus metódus Tartozhat generikus vagy nem generikus típushoz Azért, mert az osztály generikus, a metódus még nem A metódus generikus, ha saját típusparamétere(i) van(nak) A típusparaméter megjelenhet visszatérési értékként vagy a paraméterlistában

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus metódusok meghívása A metódus meghívásakor a paraméterek típusa adja meg a típusparaméter aktuális értékét: int i=Min(2, 3); //egészek float f=Min(2.0, 3.0); //valósak Ellentmondás esetén a nem-generikus eljárás hívódik: mi van, ha T=int?  a nem-generikus változat hívódik meg Ha két generikus metódus van különböző generikus paraméterrel pl. Method(T arg), Method(U arg), és T és U konkrétan ugyanaz, akkor a metódus meghívásánál jelez hibát.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Statikus tagok A statikus tagok eléréséhez be kell helyettesíteni egy konkrét típust a paraméterbe MyGenericClass.Count(); Különböző behelyettesített típusokhoz különböző statikus tagok tartoznak A statikus konstruktor implicit meghívódik, és a behelyettesített típusnak megfelelően inicializálja a statikus mezőket

V 1.0 Szabó Zsolt, Óbudai Egyetem, Példányok számolása class MyGenericClass { private static int counter = 0; public MyGenericClass() { counter++; } public static void Count() { Console.WriteLine(counter); }

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus osztályok az öröklésben Generikus osztály lehet őse generikus és nem generikus osztálynak Generikus osztály származhat generikus vagy nem generikus osztályból De mindkét állítás csak bizonyos esetekben igaz! Gondoljunk arra, hogy az utód példányosításakor a típusparaméterek értékét mindenképpen meg kell határozni

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus osztályok az öröklésben Melyik eset lehetséges?

V 1.0 Szabó Zsolt, Óbudai Egyetem, Generikus osztályok az öröklésben és a.NET-ben A típusra vonatkozó ős osztálybeli megszorításokat az utódosztályban meg kell ismételni Az utódosztály tartalmazhat további megszorításokat Nem nyelvspecifikus, minden felügyelt nyelvben elérhető A köztes kódra való fordítás során metaadatok és a generic-ekre vonatkozó MSIL kód áll elő A JIT fordítás során történik meg a konkrét típusok behelyettesítése Lehetőség van több típus használatára: class valami { }

V 1.0 Szabó Zsolt, Óbudai Egyetem, A generic-ek működése.NET-ben A fenti kódhoz három osztály jön létre. A két MyGenericClass osztozik egy osztályon. A MyGenericClass külön osztály. A MyGenericClass és a MyGenericClass osztozik egy osztályon.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Feladat: halmaz Hozzunk létre egy generikus halmaz osztályt, amelyben List segítségével tároljuk az elemeket Kell: konstruktor, copy konstruktor, elem hozzáadása Cél: foreach ciklus működjön:

V 1.0 Szabó Zsolt, Óbudai Egyetem, IEnumerable / IEnumerator A foreach ciklus akkor működik saját típuson, ha a saját típus megvalósítja a IEnumerable interfészt Ez az interfész előírja a GetEnumerator() eljárást, ami visszaad egy olyan objektumpéldányt, ami megvalósítja az IEnumerator interfészt Az IEnumerator előírja a következő műveleteket: Aktuális elem olvasása (Current), következő elemre mozgás (MoveNext()), visszaállás az első előtti elemre (Reset())  lista bejárása Mindegyik interfész előírja a nemgenerikus (object) változatot is Saját enumeratort a következő órán fogunk implementálni, addig meglévő enumeratort használunk

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Operator Overloading halmaz ha = new halmaz (); halmaz hb = new halmaz (); ha.hozzaad(42); hb.hozzaad(15); ha.hozzaad(23); halmaz hc = ha + hb;  unió  public static halmaz operator +(halmaz h1, halmaz h2) { } halmaz hc = ha - hb;  különbség halmaz hc = ha * hb;  metszet halmaz hc = ha + 5;  elem hozzáadása halmaz hc = ha - 5;  elem törlése A kimenet mindig ÚJ objektumpéldány Új operátort nem lehet feltalálni Az azonos/hasonló operátorok lehetőleg hivatkozzanak egymásra

V 1.0 Szabó Zsolt, Óbudai Egyetem, Operator Overloading Implicit konverzió, T  halmaz –halmaz ha = 5; halmaz hb="Hello"; –public static implicit operator halmaz (T elso) { } Explicit konverzió, halmaz  string –string valami = (string)ha; –public static explicit operator string(halmaz be) { } Ugyanarra a típusra nem lehet mindkettő konverziót definiálni! A kimeneti típus vagy a bemeneti típus kötelezően az operátort tartalmazó osztály! if (ha==hb) / if (ha!=hb) / if (ha.Equals(hb)) Equals: példányok tartalmi egyezés-vizsgálata. Sok mező/beágyazott osztály esetén inkább javasolt: GetHashCode()

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztelés

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Láncolt Lista Egyszeresen láncolt, ciklikus, kétszeresen láncolt listák (ld. Ea.) Strázsa-elemes, rendezett láncolt listák (ld. Ea.) Órai feladat: telefonkönyv-bejegyzések (név, cím, telefonszám) egyirányú, nem rendezett láncolt listába fejtése ZH: egyéb láncolás is lehetséges

V 1.0 Szabó Zsolt, Óbudai Egyetem, A fejlesztés menete 1.Generikus osztályként megtervezzük a ListaElem osztályt, amely egy T típusú referenciát tárol, valamint egy referenciát a következő listaelemre 2.Generikus osztályként megtervezzük a Lista osztályt, amely tárol egy referenciát az első listaelemre, emellett itt implementáljuk az eljárásokat is: a)public void Beszúr(T elem) b)public T Keres(T mitkeres, out bool talalt) c)public bool Töröl(T elem) d)public bool Töröl(int index) e)Cél: a lista osztályt be lehessen járni foreach ciklussal 3.A foreach ciklus működése miatt tervezünk egy saját felsorolót 4.Megtervezzük a bejegyzés osztályt, amit ténylegesen tárolni akarunk 5.Tesztprogram írása

V 1.0 Szabó Zsolt, Óbudai Egyetem, Lista + ListaEnumerator ListaElem Elso; + konstruktor? public void Beszúr(T elem)  PPT előadás public T Keres(T mitkeres, out bool talalt)  PPT előadás, p.Elem.Equals(mitkeres) public bool Töröl(T elem)  PPT előadás, ugyanúgy Equals() public bool Töröl(int index)  index szerinti törlés Cél: a lista osztályt be lehessen járni foreach ciklussal –  saját felsoroló készítése: konstruktor (*), aktuális elem kiolvasása, következőre való mozgás, első előttire való visszaállás (*) ListaElem T típusú adatot tárol + egy referenciát a következő elemre Tulajdonságok, konstruktor, ToString()

V 1.0 Szabó Zsolt, Óbudai Egyetem, Telefonkönyv bejegyzés Név + Cím + Telefonszám Konstruktor + ToString() Speciális Equals() : rész-egyenlőség visszaadott értéke is true Tesztprogram Lista telefonszámok = new Lista (); Bejegyzes keresett, talalt; bool van;

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztprogram

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztprogram

V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus osztályok Operator overloading Adatstruktúrák Láncolt Lista Bináris keresőfa Gráfok Dijkstra algoritmus Kruskal algoritmus

V 1.0 Szabó Zsolt, Óbudai Egyetem, Bináris keresőfa

V 1.0 Szabó Zsolt, Óbudai Egyetem, A fejlesztés menete 1.Generikus osztályként megtervezzük a csucs osztályt, amely egy T típusú referenciát tárol, valamint egy referenciát a jobb és a bal oldali gyermek-elemre 2.Generikus osztályként megtervezzük a fa osztályt, amely tárol egy referenciát a gyökérelemre, valamint azt, hogy milyen bejárást akarunk használni (szélességi, mélységi, inorder, preorder, postorder), emellett itt implementáljuk az eljárásokat is: a)public bool bennevan(T elem) b)public void beszur(T ujelem) c)public bool torol(T x) d)Cél: a fát be lehessen járni foreach ciklussal 3.A foreach ciklus működéséhez az éppen kiválasztott bejárást hívjuk meg, és a produkált lista felsorolóját ( List >.GetEnumerator() ) használjuk fel 4.Tesztprogram írása, amiben a fa számokat tárol

V 1.0 Szabó Zsolt, Óbudai Egyetem, Fejlesztési sajátosságok A csúcs osztályban a gyermek-elemekhez ne csináljuk tulajdonságot, maradjanak publikus adattagok – ez nem szép megoldás, de ha a gyermekcsúcsokat referenciaként akarom továbbadni, akkor erre szükség van Az előadáson bemutatott eljárások egyik paramétere az aktuális csúcs, ami kiindulási állapotban a gyökér. Ugyanakkor a publikus eljárásban ez nem szerepel, pl. public void beszur(T ujelem) Megoldás: a publikus eljárás nem-publikus eljárásra hivatkozik, pl. priv_beszur(ref FRoot, ujelem) A "referencia referenciája" probléma: miért kell a ref csucs némelyik paraméternél? Szélességi bejárás sor, mélységi bejárás verem adatszerkezettel xxOrder bejárás rekurzióval Fa magsságának számolása fa  int explicit konverziónál

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztprogram I.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztprogram II.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Tesztprogram III.

V 1.0 Szabó Zsolt, Óbudai Egyetem, Képek forrásai (megjegyzés: a fenti oldal nagyon jó, de kicsit más a BST, mint az előadáson ismertetett: törlés-C esetnél (amikor mindkét gyermekeleme létezik a törlendő elemnek) nem a bal oldali részfa legjobboldalibb elemét, hanem a jobb oldali részfa legbaloldalibb elemét használja)

V 1.0 Szabó Zsolt, Óbudai Egyetem, Képek forrásai