Fejezetek az "Effective Java" c. könyvből
|
|
- Lilla Pap
- 9 évvel ezelőtt
- Látták:
Átírás
1 Budapesti Műszaki és Gazdaságtudományi Egyetem Java technológia
2 A könyv Joshua Bloch, Effective Java, Programming Language Guide, Sun Microsystems Inc., A könyvben 57 fejezet ("item") található, amelyek egy-egy problémát mutatnak be, tanulságos példákkal illusztrálva. Az előadás a könyvben található fejezetek közül tartalmaz néhányat, minden fejezetnél fel van tüntetve a könyvbeli fejezet száma és címe is. Az előadásban bemutatott példaprogamok részben a könyvből származnak. 2
3 Item 2 Enforce the singleton property with a private constructor. A singletonok olyan objektumok, amelyeket legfeljebb egyszer lehet példányosítani. Ezek gyakran olyan rendszerkomponenseket reprezentálnak, amelyekből csak egy létezik (például a képernyő, vagy a billentyűzet). A singleton osztályokat mindig úgy kell megvalósítani, hogy a singleton tulajdonságot automatikusan kikényszerítse. 3
4 Item 2 A megvalósítások közös jellemzője, hogy a konstruktor privát, így a példányok létrehozását az osztály szigorúan kézbentarthatja. Az első lehetséges megoldás egy publikus mező alkalmazása: public class Singleton { private Singleton () { public static final Singleton INSTANCE = new Singleton (); Ekkor az egyedi példányhoz az alábbi módon férhetünk hozzá: Singleton s = Singleton.INSTANCE; 4
5 Item 2 A másik lehetőség, hogy egy statikus metódust alkalmazunk a példány "kinyerésére". Ennek a megoldásnak az az előnye, hogy az API megváltoztatása nélkül később megszüntethetjük az osztály singleton tulajdonságát. public class Singleton { private Singleton () { public static getinstance () { return INSTANCE; private static final Singleton INSTANCE = new Singleton (); 5
6 Item 2 Az utóbbi megoldás esetén a getinstance metódust használhatjuk a példány lekérésére: Singleton s = Singleton.getInstance (); Ha a példány létrehozása időigényes, és nem biztos, hogy a program futása során bárkinek is szüksége lesz rá, érdemes a "lusta példányosítás" módszerét alkalmazni. public class Singleton { private Singleton () { public static getinstance () { if (instance == null) instance = new Singleton (); return instance; private static Singleton instance; 6
7 Item 3 Enforce noninstantiability with a private constructor. Előfordul, hogy olyan osztályt készítünk, amelyet nem arra szánunk, hogy példányokat hozzunk létre belőle. Az ilyen osztályok tipikusan egy-egy adattípushoz vagy objektumhoz tartozó műveletek csoportosítására valók, mint a java.util.arrays, vagy a java.util.collections. Az ilyen osztályok példányosítását célszerű megakadályozni úgy, hogy elhelyezünk benne egy privát konstruktort. public class NonInstantiable { private NonInstantiable () { 7
8 Item 3 A konstruktornak természetesen nem kell csinálnia semmit, célja csak az, hogy megakadályozzuk a fordító által automatikusan generált publikus default konstruktor létrejöttét. Bár az abstract módosítóval is elérhetnénk azt, hogy az osztályt ne lehessen példányosítani, ez nem célszerű, mert ha valaki egy leszármazottat készít, az már példányosítható lesz. Következmény: az egyedüli privát konstruktor léte megakadályozza az osztály leszármaztatását, hiszen a leszármazottak konstruktora mindig meghívja az ős konstruktorát, ebben az esetben azonban nincs hozzáférhető konstruktor az ősben. 8
9 Item 14 Favor composition over inheritance. A leszármaztatás célja általában az, hogy egy meglévő osztályt új tulajdonságokkal, funkciókkal bővítsünk, illetve a meglévő funkciók viselkedését megváltoztassuk. A leszármaztatással azonban az a probléma, hogy megsérti az encapsulation elvét. Tegyük fel, hogy egy olyan HashSet variánst akarunk készíteni, amely nyilvántartja, hogy hány elemet adtak hozzá. 9
10 Item 14 A naív megoldás az alábbi: public class CounterHashSet extends HashSet { public CounterHashSet () { public CounterHashSet (Collection c) { super (c); public CounterHashSet (int ic) { super (ic); public CounterHashSet (int ic,float lf) { super (ic,lf); public boolean add (Object o) { counter++; return super.add (o); public boolean addall (Collection c) { counter += c.size (); return super.addall (c); public int getcounter () { return counter; private int counter = 0; 10
11 Item 14 A kisebb probléma az, hogy a HashSet négy konstruktorának megfelelő konstruktorokat el kellett készíteni. A nagyobbik probléma az, hogy ha az alábbi kódot lefuttatjuk: CounterHashSet chs = new CounterHashSet (); chs.addall (Arrays.asList (new String[] { "alma","szolo","korte" )); System.out.println (chs.getcounter ()); A várt 3 helyett 6-ot kapunk. Miért? Azért, mert a HashSet megvalósításában az addall nem csinál mást, mint a paraméterként átadott Collection minden elemére meghívja az add metódust. A CounterHashSet megoldás tehát azért rossz, mert függ a HashSet belső megvalósításától. 11
12 Item 14 Jobb megoldás, ha kompozíciót (composition) alkalmazunk. A kompozíció azt jelenti, hogy a kiegészítendő osztály egy példányát beburkoljuk egy új osztályba, ez a burkoló osztály (wrapper class). Ezt a megoldást dekorátornak (decorator) is hívják, mert a burkoló osztály új funkciókkal "dekorálja" a másik osztályt. A kiegészítendő osztály metódusait továbbító metódusokon keresztül (forwarding method) továbbítjuk a burkoló osztályba. Ezt a megoldást gyakran (tévesen) delegációnak (delgation) nevezik. 12
13 Item 14 public class CounterSet implements Set { public CounterSet (Set set) { this.set = set; public boolean add (Object o) { counter++; return set.add (o); public boolean addall (Collection c) { counter += c.size (); return set.addall (c); public void clear () { set.clear (); public boolean contains (Object o) { return set.contains (o); // a Set interface többi metódusa public int getcounter () { return counter; private int counter = 0; private Set set; 13
14 Item 14 A fenti megoldás legfőbb előnye, hogy jól működik, mert az adott Set implementációjától független: CounterSet cs = new CounterSet (new HashSet ()); cs.addall (Arrays.asList (new String[] { "alma","szolo","korte" )); System.out.println (cs.getcounter ()); További előny, hogy tetszőleges Setre alkalmazható, mert a Set interface-en alapul. Ebből kifolyólag a konkrét megvalósítás konstruktorainak megfelelő konstruktorokat sem kell megvalósítani. Mivel csak burkolóként működik, akár ideiglenesen is beburkolhatunk vele egy Setet. Hátrányai, hogy visszahívó (callback) helyzetekben nem működik, mert a burkolt objektum nem tud a burkolóról, illetve hogy a továbbító metódusokat meg kell valósítani. 14
15 Item 14 Öröklődést általában csak akkor szabad használni, ha az A osztályból leszármaztatott B osztályra igaz az, hogy "a B az egy A". A fenti kitétel tipikusan igaz a Barack és a Kajszi osztályokra, de nem igaz a Körte és a Villanykörte osztályokra. Akkor is érdemes kompozíciót használni, ha a kibővítendő osztálynak olyan API hiányosságai vannak, amelyeket el szeretnénk fedni a felhasználók elől. 15
16 Item 27 Return zero-length arrays, not nulls. Gyakori, ám helytelen megoldás, hogy az olyan metódusok, amelyek egy tömböt adnak vissza, nulla méretű tömb helyett nullt adnak vissza: public Object[] getobjects () { if (!objectsavailable) return null; Ez egyrészt azért nem szerencsés, mert a hívót meglepi ez a viselkedés, másrészt azért, mert a visszatérési érték korrekt kezeléséhez egy plusz feltételvizsgálat szükséges: 16
17 Item 27 Object[] objects = getobjects (); if (objects == null) System.out.println ("Object count: 0"); else System.out.println ("Object count: " + objects.length); Ha azonban a metódus null helyett nulla méretű tömböt ad vissza, ez a probléma nem jelentkezik: public Object[] getobjects () { if (!objectsavailable) return new Object [0]; 17
18 Item 27 Object[] objects = getobjects (); System.out.println ("Object count: " + objects.length); Mivel egy nulla méretű tömb immutábilis, elég egyetlen példányt használni belőle, így nem kell minden alkalommal újat létrehozni: private static final Object[] EMPTY_ARRAY = new Object [0]; public Object[] getobjects () { if (!objectsavailable) return EMPTY_ARRAY; 18
19 Item 31 Avoid float and double if exact answers are required. A float és a double lebegőpontos típusok. Céljuk az hogy, széles értéktartományon jelenítsenek meg törtszámokat, de pontos számításokra nem alkalmasak. Vannak olyan számok, amelyeket nem lehet pontosan megjeleníteni floatban vagy double-ben: System.out.println ( ); Ez helyett öt ír ki. Ez a viselkedés például pénzügyi számítások esetén teljesen elfogadhatatlan. 19
20 Item 31 A következő program 1 Forintból von ki 10 filléreket: double money = 1; for (int i = 0;i < 10;i++) { money -= 0.1; System.out.println ("marad: " + money); Az eredmény szomorú: marad: 0.9 marad: 0.8 marad: marad: marad: marad: marad: marad: marad: marad: E-16 20
21 Item 31 A megoldás: ne használjuk a float, illetve double típusokat, hanem az int, long, illetve BigDecimal típusok valamelyikét: BigDecimal TIZ_FILLER = new BigDecimal ("0.1"); BigDecimal money = new BigDecimal ("1"); for (int i = 0;i < 10;i++) { money = money.subtract (TIZ_FILLER); System.out.println ("marad: " + money); Most már jobb a helyzet: marad: 0.9 marad: 0.8 marad: 0.1 marad:
22 Item 31 A BigDecimal egy immutábilis, tetszőleges pontosságú decimális értéket reprezentál. Egy skálázatlan értékből, és egy skálatényezőből áll. Használatának előnye az intként, illetve longként ábrázolt fixpontos számokkal szemben, hogy a skálatényező követésére nincs szükség, illetve a BigDecimal osztály megvalósítja az összes szükséges műveletet. Hátránya, hogy operator overloading híján némileg kényelmetlen a használata. 22
23 Item 33 Beware the performance of string concatenation. A stringek összefűzésére gyakori módszer a + operátor használata. Ez a megoldás teljesen jó akkor, ha csak néhány stringet kell összefűzni, de nagyon rosszul skálázható. Ennek oka az, hogy a String immutábilis, így két string összefűzésekor mindkettő tartalma átmásolódik egy harmadikba. A string összefűzés futásideje így az összefűzendő stringek számában o(n2). 23
24 Item 33 Az alábbi metódus egy borzasztóan hatékonytalan megoldás stringek összefűzésére: public String concatenate (String[] strings) { String result = ""; for (int i = 0;i < strings.length;i++) result = result + strings [i]; return result; A megoldás a StringBuffer osztály alkalmazása. A fenti metódus lényegesen hatékonyabb változata tehát: public String concatenate (String[] strings) { StringBuffer result = new StringBuffer (); for (int i = 0;i < strings.length;i++) result.append (strings [i]); return result.tostring (); 24
25 Item 34 Refer to objects by their interfaces. Az alábbi példa a szokásos megoldást mutatja: ArrayList list = new ArrayList (); A fenti megoldás hátránya, hogy az ArrayList típus túlságosan megköti a list változót: nem használhatunk más List implementációt az ArrayList helyett, ha mégis mást akarunk használni, át kell írni a list típusát. Sokkal szerencsésebb tehát azt az interface-t megadni típusként, amely alapján a változót használjuk: List list = new ArrayList (); 25
26 Item 34 Ebben az esetben könnyű áttérni másik List megvalósításra: List list = new Vector (); Ez az elv metódusparaméterek esetén még fontosabb, hogy ne nyírbáljuk meg a felhasználó szabadságát: public void method (ArrayList list) { helyett: public void method (List list) { A fentiek alól kivétel lehet, ha nincs értelmesen használható interface, vagy egy konkrét implementáció speciális funkcióit akarjuk használni, mint például a LinkedList esetében. 26
27 Item 47 Don't ignore exceptions. Az alábbihoz hasonló kódrészleteket, sajnos, nagyon gyakran láthatunk: try { catch (Exception e) { Nyilvánvaló, hogy a fenti kódrészlet nagyon veszélyes. A kivételek lenyelése miatt a program végrehajtása a hiba ellenére is folytatódik, így a probléma később, a program egy teljesen más részében jelenik meg, rendkívül nehezen felderíthető helyzetet idézve elő. 27
28 Item 47 A kivételek lenyelésénél még az is jobb, ha ellenőrzetlen kivételeket hagyunk terjedni felfelé a hívási lánc mentén, mert akkor legalább leáll a program, és a stack trace alapján (általában) azonosítható a hiba forrása. Kivételek lenyelése kivételes esetekben mégis megengedhető, például real-time alkalmazásokban (video lejátszás), ahol egy-egy ütem kiesése megengedhető. A "legális lenyelés" még egy jellegzetes esete: try { Thread.sleep (500); catch (InterruptedException e) { Fontos, hogy ilyenkor a lehető legkonkrétabb kivételtípust adjuk meg a catch blokkban (mint a fenti példában is). 28
29 Item 50 Never invoke wait outside a loop. A wait metódust egy megadott feltétel bekövetkeztére való várakozásra használjuk. Naív (és rossz) használata: synchronized (object) { object.wait (); Elvileg egy másik szál ébreszti fel ezt a szálat egy notify vagy notifyall hívással, ha a várt feltétel bekövetkezett. 29
30 Item 50 A fenti megoldás azonban önmagában kevés. Ha a feltétel már korábban bekövetkezett, mint ahogy a szál elaludt, a notify hatástalan marad, és a szál soha nem ébred fel többé. Emiatt szükség van a feltétel előzetes vizsgálatára elalvás előtt: synchronized (object) { if (!condition) object.wait (); 30
31 Item 50 Még mindig baj van akkor, ha: a feltétel hamissá vált a notify meghívása, és a szál felébredése között, egy szál meghívta a notify-t, noha a feltétel nem következett be (például ha több szál várakozik különböző feltételekre, az ébresztés pedig a notifyall hívással történik), hamis ébredés (spurious wakeup) történik, vagyis a szál notify nélkül is felébred (ez a VM-en kívüli jelenség). A fentiek megelőzésére az ébredés után is meg kell vizsgálni a feltétel fennállását. 31
32 Item 50 synchronized (object) { while (!condition) object.wait (); A fenti megoldás tökéletes, mert mind ébredés előtt, mind ébredés után megvizsgálja a feltételt, és ha szükséges, "visszaalszik". A wait metódust tehát kizárólag ciklusban szabad használni. 32
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
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
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Programozási technológia
Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek
Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread
Végrehajtási szálak Runnable, Thread Végrehajtási szálak Java-ban A Java program az operációs rendszer egy folyamatán (process) belül fut. A folyamat adat és kód szegmensekből áll, amelyek egy virtuális
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
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
OOP: Java 8.Gy: Abstract osztályok, interfészek
OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus
Programozá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
Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o
Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform
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:
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
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
JAVA PROGRAMOZÁS 2.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,
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
List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error
Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,
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:
Generikus osztályok, gyűjtemények és algoritmusok
Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java
Programozási technológia
Programozási technológia Osztályszintű elérés Kivételkezelés, Fájlkezelés Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Osztályszintű elérés (statikusság) Az osztályban definiált attribútumok és műveletek
Osztályszintű elérés, kivételkezelés, fájlkezelés
Programozási, kivételkezelés, fájlkezelés Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 3 4 2 (statikusság) Az osztályban definiált attribútumok és műveletek az osztályból példányosított
OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek
OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető
2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése
Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,
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
OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN
OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás
Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus
Programozási nyelvek és módszerek Java Thread-ek
Programozási nyelvek és módszerek Java Thread-ek Laki Sándor lakis@inf.elte.hu 2006. május 3. 0-0 Szálak (Threads) Ahhoz, hogy egy mai rendszer m ködhessen több 10-100 folyamatnak kell futnia. A folyamatok
Programozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked
Segédanyag: Java alkalmazások gyakorlat
Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
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
Concurrency in Swing
Concurrency in Swing A szálkezelés a swing alkalmazásokban is fontos. Cél egy olyan felhasználói felület készítése, amely soha nem fagy, mindig válaszol a felhasználói interakciókra, bármit is csináljon
Szoftvertechnológia alapjai Java előadások
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?
Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java
Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:
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,
Programozási nyelvek II. JAVA EA+GY 1. gyakolat
Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről
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"
Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani
Mi a legabsztraktabb típus a JAVA-ban? Object Mikor preferált interface-ek használata a konkrét típusok helyett? Ha egy osztály több interfacet is használhasson, vagy ha fvek implementálását a az osztályra
Collections. Összetett adatstruktúrák
Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,
OOP. Alapelvek Elek Tibor
OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós
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
Objektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 3. rész Tulajdonságok Indexelők Kivételkezelés Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát
STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1
STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat
Magas szintű programozási nyelvek 2 Előadás jegyzet
Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás
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
Szoftvertechnológia alapjai Java előadások
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html 1 Kivételkezelés I. szokatlan, váratlan
Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit
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
JAVA PROGRAMOZÁS 3.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram
Programozás I. Első ZH segédlet
Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett
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
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok
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)
Programozási nyelvek Java
Programozási nyelvek Java 11.gyakorlat Operációsrendszertől függő tulajdonságok PATH elválasztó Unix ":" Windows ";" final String PATH_SEPARATOR = File.pathSeparator; Ugyanaz, csak karakterkent final char
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban
Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN
Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.
Java programozási nyelv
Szoftvertechnológia sáv Java programozási nyelv Dirk Louis-Peter Müller: Java (Belépés az internet világába) Panem kiadó, Budapest, 2002. Webvilág sorozat Készítette: Gregorics Tibor Vázlatos áttekintés
Objektumorientált programozás C# nyelven III.
Objektumorientált programozás C# nyelven III. Kivételkezelés Tulajdonságok Feladatok Készítette: Miklós Árpád Dr. Kotsis Domokos Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és
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)
Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.
Programozás III CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van a fejlesztő környezet és az osztálykönyvtárak is: rt.jar fájl
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
Objektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
Vizuális és eseményvezérelt programozás , II. félév BMF NIK
Vizuális és eseményvezérelt programozás 2006 2007, II. félév BMF NIK Eseménykezelés A képviselő( delegate ) Képviselők C# nyelvi megvalósítása Metódushívás képviselőn keresztül Az esemény ( event ) Esemény
.Net adatstruktúrák. Készítette: Major Péter
.Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek
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
Segédanyag: Java alkalmazások gyakorlat
Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 12. gyakorlat 1 Távoli metódushívás Java-ban (RMI) Java-ban a távoli metódushívás ( Remote Method Invocation, RMI) egy
Interfészek. PPT 2007/2008 tavasz.
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált
C#, OOP. Osztályok tervezése C#-ban
C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat
3. Gyakorlat Ismerkedés a Java nyelvvel
3. Gyakorlat Ismerkedés a Java nyelvvel Parancssori argumentumok Minden Java programnak adhatunk indításkor paraméterek, ezeket a program egy tömbben tárolja. public static void main( String[] args ) Az
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;
Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.
KIINDULÁS Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg. Programozás III Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk,
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
Objektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Láthatósági szintek Névterek és hatókörök Osztály szintő tagok Beágyazott osztályok
7. K: JAVA alapok Konzultáció
Objektum Orientált Programozás 7. K: JAVA alapok Konzultáció 35/1B IT MAN B IT v: 2017.05.03 MAN Hiba, biztonságos program 01. Szintaktikai hiba imt i = 0; system.out.println( alma ); for (int i = 0, i
Függőség injekció Konstantinusz Kft 2010
Függőség injekció Konstantinusz Kft 2010 1 Tartalomjegyzék 1 Tartalomjegyzék 2 2 Bevezetés 3 3 Függőségek formái 4 4 Függőség kezelés problémái 8 5 Megvalósítás 9 2/16 2 Bevezetés Egy objektum modellben
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
C# osztályok. Krizsán Zoltán
C# osztályok Krizsán Zoltán Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC
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
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
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.
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ó
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ő:
Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész
Java Programozás 9. Gy: Java alapok Adatkezelő 5.rész 15/1 B ITv: MAN 2018.04.22 A Keresés funkció Programlogika: 1. A keresés az etm táblamodellben fog keresni, és a találat rekordokat átmásolja egy másik
Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:
Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba
JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István david@cs.bme.hu
JAVA nyelvi alapok Adatbányászati technikák (VISZM185) Dávid István david@cs.bme.hu Bevezető Hol és miért van szükség a JAVÁra az adatbányászatban? Programozott végrehajtás (imperatív, WF ) Platform (JRE
Programozási nyelvek Java
Objektum-orientált szemlélet - Egységbe zárás (incapsulation) - Információ elrejtés - Öröklődés altípusosság dinamikus kötés Öröklődés Programozási nyelvek Java - kiterjesztem, kibővítem, megváltoztatom
Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016
Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:
PHP5 Új generáció (2. rész)
PHP5 Új generáció (2. rész)...avagy hogyan használjuk okosan az osztályokat és objektumokat PHP 5-ben. Cikksorozatom elõzõ részében képet kaphattunk arról, hogy valójában mik is azok az objektumok, milyen
Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor
Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig
OOP: Java 8.Gy: Gyakorlás
OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét
Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010
Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása
Objektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 3. rész Tulajdonságok Indexelık Kivételkezelés Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendı anyag vázlatát
Generikus Típusok, Kollekciók
Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections
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)
III. OOP (objektumok, osztályok)
III. OOP (objektumok, osztályok) 1. Természetes emberi gondolkozás Az Objektumorientált paradigma alapelvei nagyon hasonlítanak az emberi gondolkozásra. Érdemes ezért elsőként az emberi gondolkozás elveit
Delegátumok C#-ban Krizsán Zoltán iit
Krizsán Zoltán Események kezelése Nem kell vizuális felületnek letnek lennie. segíts tségével valósíthatja meg a.net. 2 Típusos fv.. pointer Biztonságos kódkk dkészítés s miatt tiltott a pointer aritmetika
Programozás II. labor
Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés
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