© Kozsik Tamás 2000-2006 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.

Slides:



Advertisements
Hasonló előadás
© Kozsik Tamás Különböző nyelvekhez igazítás Internationalization - i18n.
Advertisements

C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Osztály leszármaztatás
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.
Tervezési minták és a PHP 5
AZ OOP ALAPJAI.
C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
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..
RMI = Remote Method Invocation
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
Objektum-elvű programozás (OOP)
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.
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 8. Gyakorlat Operator overloading II.
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/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 3. rész – Osztályok I.
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.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
Csomagok.
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.
© 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.
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.
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.
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.
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.
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ú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
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.
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ás III CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van.
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. 5. gyakorlat.
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.
Informatikai gyakorlatok 11. évfolyam
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][,
a programegységek között
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
Függvénysablonok használata
Előadás másolata:

© 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 ágyazhatók Sokszor kényelmes: frappáns, kompakt kód Vigyázat: könnyű nehezen olvashatóvá, bonyolulttá tenni a programunkat vele

© Kozsik Tamás Osztályok fajtái Kutya közönséges osztályok Beágyazott osztályok –statikus tagosztályok jelentős minőségi különbség –(nem statikus) tagosztályok –lokális osztályokbelső osztályok –névtelen osztályok

© Kozsik Tamás Alapprobléma Saját lista adattípus megvalósítása Lista, Elem –Az Elem osztály egy segédosztály –Láncolt ábrázolás E A L

© Kozsik Tamás Kapcsolat a Lista és az Elem között Nagyon erős kapcsolat közöttük Kifelé csak a Lista fontos, az Elem nem Megoldás: tegyük őket egy csomagba, de csak a Lista lesz publikus Mi van, ha kell egy Fa adattípus is? –Külön csomagba túl sok csomag lesz, nehéz használni –Ugyanabba a csomagba elveszik az elkülönültség előnye mégis ez lesz a megoldás...

© Kozsik Tamás Cél Egy csomagon belül van Lista, Elem, Fa, stb. A Lista és az Elem erősebb kapcsolatban legyen, mint Lista és Fa, vagy Elem és Fa A Lista és az Elem lássák egymás privát dolgait is, és a Fa egyáltalán ne lássa az Elem osztályt Rejtsük el az Elem osztályt a Lista osztályon belülre

© Kozsik Tamás Statikus tagosztály Tagok: adattagok és metódusok; plussz lehetnek osztályok is! Statikus tag: osztályszintű tag –static kulcsszó public class Lista { static private class Elem {... } private Elem első = null;... }

© Kozsik Tamás public class Lista { private Elem első; private static class Elem { Object adat; Elem előző, következő; Elem(Object adat, Elem előző, Elem következő){ this.adat = adat; this.előző = előző; this.következő = következő; } public void beszúr (Object adat) { első = new Elem(adat,null,első); if (első.következő != null) első.következő.előző = első; }... }

© Kozsik Tamás A statikus tagosztályok által kínált előnyök Logikai összetartozás kifejezése –kompaktság, olvashatóság Tokbazárás, adatelrejtés támogatása –Az Elem segédosztályt elrejtettük a külvilág elől A beágyazott osztály hozzáfér a befoglaló osztály privát adataihoz –A Felsoroló osztályból használhatjuk a Lista osztály privát adatait –Természetesen a befoglaló is a beágyazottéihoz

© Kozsik Tamás public class Lista { private Elem első = null;... private static class Felsoroló implements Iterator { final Lista lista; Elem aktuális; Felsoroló (Lista lista) { this.lista = lista; aktuális = lista.első; }... } public Iterator felsoroló(){ return new Felsoroló(this); }

© Kozsik Tamás Használat A megfelelő könyvtár importálása A Lista osztályból példány(ok) létrehozása Feltöltés adatokkal –létrejönnek az Elem objektumok a háttérben Egy iterátor lekérdezése –egy Felsoroló osztályú objektumot kapunk –hozzákapcsolódik a listához, amit be kell járnia Lista bejárása az iterátor segítségével –az iterátor tudja, melyik listát kell bejárnia

© Kozsik Tamás Nem statikus tagosztály Amikor létrehozunk egy Felsoroló objektumot, akkor az hozzákapcsolódik egy Lista objektumhoz Objektumok közötti kapcsolatot építettünk ki Ezt automatikusan megtehetjük nem statikus tagosztály segítségével is Tagként definiált osztály –példányszintű –nem kell a static kulcsszó

© Kozsik Tamás public class Lista { private Elem első = null;... private static class Felsoroló implements Iterator { final Lista lista; Elem aktuális; Felsoroló (Lista lista) { this.lista = lista; aktuális = lista.első; }... } public Iterator felsoroló(){ return new Felsoroló(this); }

© Kozsik Tamás public class Lista { private Elem első = null;... private class Felsoroló implements Iterator { Elem aktuális = első;... } public Iterator felsoroló(){ return new Felsoroló(); } elsőLista.this.első Felsoroló objektum létrehozása csak egy Lista objektumhoz képest lehetséges!

© Kozsik Tamás public class KülsőFelsoroló extends Lista.Felsoroló { public KülsőFelsoroló (Lista lista) { lista.super();... }... } Felsoroló objektum létrehozása csak egy Lista objektumhoz képest lehetséges!

© Kozsik Tamás Lokális osztályok Lokális változók mintájára Csak a befoglaló metóduson belül használható az osztálydefiníció –A lokális osztályú objektum viszont túlélheti az osztályát befoglaló metódust Pl. a Felsoroló osztályra csak a felsoroló() metódusban van szükség - definiáljuk ott! –A kód kompaktsága tovább nő ezzel

© Kozsik Tamás public class Lista { private Elem első = null;... public Iterator felsoroló(){ private class Felsoroló implements Iterator { Elem aktuális = első;... }; return new Felsoroló(); }

© Kozsik Tamás Egy másik példa... Alprogram típus helyett Java-ban interfészt használhatunk: –Valamilyen objektumon végzett művelet absztrakciója type Művelet = procedure (adat: Object); void (*f)(Object); public interface Művelet { void végrehajt (Object adat); }

© Kozsik Tamás Belső iterátor public class Lista {... public void mindre (Művelet művelet) { for ( Elem elem = elso; elem != null; elem = elem.kovetkezo ) művelet.végrehajt(elem.adat); } Valamilyen műveletet végrehajtunk minden listaelemen

© Kozsik Tamás static int multiplicitás (Lista lista, final Object minta) { class Számláló implements Művelet { int n = 0; public void végrehajt (Object adat) { if (adat.equals(minta)) n++; } Számláló számláló = new Számláló(); lista.mindre(számláló); return számláló.n; } Használhatjuk a metódus paramétereit és lokális változóit, csak annyi kell, hogy final-ek legyenek A metódus paramétere és lokális változója túlélheti a metódust

© Kozsik Tamás A final megkerülése Ha azt akarjuk, hogy egy paraméter vagy egy változó értéke megváltozhasson, de a final megmaradhasson valahogy, akkor tegyük be egy egy hosszúságú tömbbe static int multiplicitás (Lista lista, final Object[] minta) {...}

© Kozsik Tamás Névtelen osztályok Igazándiból a Felsoroló osztály definíciójára csak egy kifejezésben van szükségünk. Sőt, magára a Felsoroló osztályra sincs szükségünk, csak egy példányra belőle. Egy kifejezésben szereplő osztálydefiníció

© Kozsik Tamás public class Lista { private Elem első = null;... public Iterator felsoroló(){ return new Iterator(){ Elem aktuális = első;... }; } Névtelen osztály, fordítás után Lista$1.class Interfész megvalósítása vagy osztály kiterjesztése Értelemszerű megkötések, pl. konstruktor sem írható

© Kozsik Tamás Beágyazott osztályok használata Névtelen osztály a leggyakrabban AWT-ben eseménykezelők írása Observer

© Kozsik Tamás Feladat Listázzuk ki a tmp alkönyvtár összes txt kiterjesztésű fájljának a nevét. Ezt a feladatot már korábban megoldottuk. Írjuk át névtelen osztályosra a megoldást!