Prog1 vizsgasegéd

Felüldefiniálás:
Polimorfizmus: Más néven felüldefiniálás, overriding. Amikor a származtatott osztály egy örökölt operáció saját implementációját is nyújthatja. Módosítja az ős viselkedését. Az objektumok felcserélhetőségét biztosítja. Az ős interfészét használjuk.
 
Példa öröklődésre:

Elöl tesztelő ciklus:
while (boolean-expression)
statement

Kompozíció-aggregáció (UML):
- objektum használata másik osztályban
- futás közben változtatható
- általában private

Láthatóságok:
Elérés vezérlők: (Access specifiers) --> láthatóság. Az osztálykönyvtárak esetén különösen fontos, hogy a kívülről elérhető részek ne változzanak, de szabadon változhat a rejtett rész. Erre szolgálnak az elérést vezérlők. Elérések: public (mindenki számára látható), protected (csak az a származtatott és a csomagon belüli osztályok látják), friendly (package private = csak csomagon belül látható), private (az osztályon kívül senki sem láthatja).

Mi a különbség az int[] a; és az int a[]; között?

Mi a különbség az interfész és az implementáció között?
Interfész: mi az amit üzenhetünk (deklaráció)
Implementáció: ami teljesíti a kérést (definíció)

Volt két XML-es példa: egy DTD-s külső alkészletet adott meg és abban rákérdezett az egyik elemre;
a másik: <fejezet> ... </fejezet> egészítsd ki a fejezet szerzőjével (vagy vmi ilyesmi).

Hogyan lehet Java-ban több osztályból örököltetni?
Javaban az Interfészek teszik lehetővé a "többszörös öröklődést" (nem igazi többszörös öröklődés mint c++-ban)

Végfeltételes ismétléses vezérlés?
do
statement
while (boolean-expression);

Mi a Java applet?
Kliens programozáshoz használják. Csak böngészőn belül fut, minden böngészőn működik ahol van Java interpreter (értelmező) nem a forráskód van értelmezve, hanem a lefordított kód kerül futtatásra

Mit tudsz a kliensről és szerverről?
szerver: ahol az adat (és program) van
kliens: aki eléri, feldolgozza (vagy csakmegjeleníti)

Mi a különbség objektum és osztály között?
Osztály: tulajdonság (állapot) + viselkedés
mi lehet az állapot
Objektum: az osztály egy példánya
mi az állapot

Mi a kései kötés?
Idegen kifejezéssel late binding. A fordító nem tudja eldönteni, hogy melyik konkrét operáció hívódik meg, az örökölt, vagy a felüldefiniált. Ez futás közben derül ki a konkrét típus alapján. Javaban minden operációhívás ilyen.
Upcast és downcast:
Upcast: A futás közbeni típusazonosítás egyik fajtája, az ősre konvertálás, más néven upcast. Ekkor elveszítjük a konkrét típust, és a konverzió biztonságos.
Downcast: Leszármazottra konvertálás, amikor jó lenne visszanyerni az eredeti típust. Ez a konverzió más nyelvekben nem biztonságos. Javaban igen, mert ellenőrizve van (RTTI). Hibás downcast-olás esetén ClassCastException dobódik.

Kliens-programozás web-en:
Kliens: aki eléri, feldolgozza az adatot, vagy csak eléri. Kezdetben minden interaktivitás a szerver oldalán volt. De ez eléggé lassú volt. Erre megoldás a kliens programozása volt, amit lehet, a kliens hajtson végre. Hasonló a hagyományos programozáshoz, csak másik platformra. Erre szolgálnak a script nyelvek, amelyek      a problémák 80%-át megoldják. Speciális problémákra speciális nyelvek léteznek, de mivel a HTML-ben benne van a forráskód, ezért nem lehet titkos. A legcélszerűbb a Java appletek használata, mivel az csak böngészőn belül fut, és abban már a lefordított kód van, ezért titkos is. Egyéb megoldás lehet az ActiveX, de az nem annyira biztonságos, mert a programletöltés vírusveszéllyel jár.
 
2 db xml kérdés

Java script és java applet közti különbség:
Szkript nyelvek
HTML-ben van benne a forráskód
(nem lehet titkos!)
speciális problémákra speciális nyelvek
JavaScript (semmi köze a Java-hoz), VBScript,
Tcl/Tk, …
a legtöbb böngésző támogatja a JavaScript-et
alapból, de némelyikhez plug-in kell

Szkript nyelvek a problémák 80%-t megoldják
A maradék 20%?
napjainkban a legnépszerűbb a Java
Kliens programozáshoz: applet
csak böngészőn belül fut
minden böngészőn működik ahol van Java interpreter (értelmező)
nem a forráskód van értelmezve, hanem a lefordított kód kerül futtatásra
JAR: tömörített formátum

Mi a lényege a friendly (package private) láthatóságnak?
Friendly (“package private”, “package access”)
csomagon belül minden osztály eléri (public)
csomagon kívül nem elérhető (private)
szorosan kapcsolódó osztályokat lehet így csoportosítani
(egymást használják)

Mi a különbség az overriding és az overloading között?
Amikor a származtatott osztály egy örökölt operáció saját implementációját is nyújthatja. Módosítja az ős viselkedését. Az objektumok felcserélhetőségét biztosítja. Az ős interfészét használjuk.

Olyan metódusok esetében, ahol ugyanaz a feladat, (kisebb különbséggel), minek lenne több különböző nevű függvényünk? Ekkor kiterjesztjük a metódust, ami azt jelenti, hogy írunk több azonos nevű metódust, de különböző paraméterlistával. A fordító a kiterjesztett metódusokat paraméterlistájuk alapján különbözteti meg. A hívás helyén az aktuális paraméterek típusai határozzák meg. A visszatérési érték NEM használható megkülönböztetésre.

Az öröklődésnél mit értünk az általánosítás és a specializálás alatt?
Általánosítás: Hasonlóság kifejezése az ős felé.
Specializálás: Különbség kifejezése a gyerek felé.


Írj egy program kommentezését tetszőlegesen javadoc-ban.
/**
Megjegyzés a soron következő
osztály/operáció/attribútum-hoz
*/
class A...

@see: más osztályokra hivatkozás – linket szúr be
@version: verzió
@author: szerző
@param: metódus paraméter szerepe
@return: metódus visszatérési értékének leírása
@throws: metódus milyen kivételeket dobhat

(XML 1) A DTD-nel volt valami #IMPLIED #REQUIRED #FIXED.

(XML 2) Téglalapok voltak felrajzolva úgy mintha adatb lenne és akkor mi akart az lenni (volt ott + jel meg *)?

Mit tárolhatnak a kollekciók?
Nem lehet mindig előre tudni hány objektum kell,mert változó élettartamúak Erre jó: kollekció (konténer) , tároló objektum, hivatkozásokat tárol a tárolandó objektumokra.

Mi lehet a konstruktor neve és visszatérési értéke?
- a neve = az osztály neve
- a konstruktornak is lehetnek paraméterei
- a konstruktornak nincs visszatérési értéke

Mi a különbség a java alkalmazás és a java Applet között?
Java alkalmazások:
A Java önálló programok írására is alkalmas, nem csak applet/servlet
Előnyei:portabilitás, gyorsan írhatók megbízható, robusztus programok

Java Applet:
Kliens programozáshoz használják. Csak böngészőn belül fut, minden böngészőn működik ahol van Java interpreter (értelmező) nem a forráskód van értelmezve, hanem a lefordított kód kerül futtatásra

Mi a garbage collector?
Szemétgyűjtés: javaban ezt a garbage collector végzi. Ennek végrehajtása nem szavatolt. Ha még sok szabad memória van, akkor elkerülhető a felesleges szemétgyűjtés, ami lassítja a programot. Kiszámíthatatlan, hogy mikor fog meghívódni. Kézzel is meg lehet hívni (System.gc()).

 

Öröklődés:
Az interfész újrafelhasználása. Osztályok közötti kapcsolat, ahol egy osztály megosztja struktúráját és viselkedését egy vagy több másik osztállyal. A származtatott (gyerek) osztály mindent örököl az őstől (relációkat is), és kiegészítheti azokat sajátokkal is. Az öröklődés az újrafelhasználhatóság alapeszköze.
 
Overriding:
Más néven felüldefiniálás, overriding. Amikor a származtatott osztály egy örökölt operáció saját implementációját is nyújthatja. Módosítja az ős viselkedését. Az objektumok felcserélhetőségét biztosítja. Az ős interfészét használjuk.

For ciklus:
for (initialization; boolean-expression; step)
statement

Több dimenziós tömb inicializálására példa:
int[ ] [ ][ ] xy = new int[2][3][4]

Mire jók a csomagok?
Miért van rá szükség?
- logikai csoportosítás
- nevek ütközésének elkerülése
Ha nagy rendszert írunk, célszerű csomagokat használni

Milyen fájl a .jar
Tömörített formátum.

XML-ben miért jó egyedeket deklarálni

DTD-ben milyen jelölések vannak (+,*,?-re gondoltak)

Kompozícióra forráskód példa + osztálydiagram:
Kompozíció: összetétel, aggregáció, rész-egész kapcsolat
Egy osztály egy attribútuma egy másik osztály vagy primitív típusú

 
Mi a jar-fájl?
            Javaban a .class fájlokat össze lehet tömöríteni egy .jar fájlba(~zip)

Iterator tervezési minta:
Iterator (Cursor) :tároló-objektum elemeinek sorozatos elérése a reprezentációtól függetlenül


- Számlálásos ismétléses vezérlés
for (initialization; boolean-expression; step)
statement

- Kompozíció
Kompozíció: összetétel, aggregáció, rész-egész kapcsolat
Egy osztály egy attribútuma egy másik osztály vagy primitív típusú

Mire jó a csomag?
A nagy rendszereknél elkerülhetetlen az osztályok csoportosítása. Hierarchikus szerkezetet biztosít és magasabb szintű absztrakciót valósít meg.

Mi a különbség osztálytag és példánytag között?
Osztálytag
Az osztályhoz tartozik
az osztály minden objektumára egyformán érvényes
Módosítója a static
Osztálytag lehet
osztályváltozó (statikus attribútum)
egy darab él belőle és a statikus memóriaterületen tárolódik
az egyes objektumok osztoznak rajta
osztálymetódus (statikus operáció)
csak a többi osztálytagot látja
nem hivatkozhat a this-re
Példánytag
Az objektumhoz (osztálypéldányhoz) tartozik
minden egyes objektumra különbözhet
Minden tag, amelynek nincs static módosítója
Példánytag lehet
példányváltozó
minden objektumban külön szerepel
értéke az objektum állapotára jellemző
példánymetódus
az osztály- és példánytagokat egyaránt látja
egyszerre egy adott objektumon dolgozik
Osztálytag és példánytag
Statikus metódus meghívható anélkül, hogy az osztályából
objektumot hoznánk létre
Statikus metódus csak az osztály statikus változóit és
metódusait éri el
nem statikus metódusokat csak élő objektumokra lehet meghívni
Kezdetben még nincsenek objektumok, így csak statikus
metódusokat hívhatunk, ezért statikus a main is
public static void main(String[] args) {}
Statikus metódust nem lehet felüldefiniálni
nem működik rá a polimorfizmus mechanizmus
korai kötést alkalmaz a fordító a függvényhívásra

Mire jó a címke a break és a continue után?
break [label]: megszakítja az aktuális (vagy a
label-el cimkézett) ismétlést és a szerkezetet követő
utasítással folytatja
continue [label]: megszakítja az aktuális (vagy a
label-el cimkézett) ismétlést és a következővel
folytatja

Kétdimenziós tömb inicializálása
public int[][] array = new int[10][10];

Mi az egységbezárás? + példa
Egységbezárás – absztrakt adattípus adatok és a rajtuk végzett műveletek egységbezárása (encapsulation)


Mi a különbség az absztrakt és interfész osztályok között?
Absztrakt osztály: Egy (ős)osztály absztrakt, ha csak interfészként van használva. Ebből nem jöhet létre objektum. Egy közös interfész biztosít a leszármazottaknak.

Interfész osztály: Mi az, amit üzenhet az objektum (deklaráció). Speciális absztrakt osztály, amelyben minden operáció impliciten absztrakt. Nagyon hasznos dolog, mert különválasztja az interfészt az implementációtól. Egy osztály több interfészt is implementálhat. Csak egy formát ad, implementáció nélkül. Egy protokollt valósít meg az osztályok között.

Miket lehet tárolni egy tömbben(objektumokat, referenciákat, pointereket, egyebek...)?
Referenciákat tárol ill. primitív típusnál értékeket

Mire jó a CLASSPATH környezeti változó?
Egy java környezeti változó, amely tartalmaz minden olyan elérési utat, ahol a Java csomagok elhelyezkednek a lokális rendszeren.

Mit nevezünk belső osztálynak?
Osztályon vagy metóduson belüli osztályok: Logikailag összetartozó osztályok csoportosítása. Megadható a láthatóságuk. Máshol nem használt algoritmust el lehet rejteni a külvilág elől. A belső osztályból elérhetőek a külső osztály elemei (kivéve, ha a belső osztály static).


 

A "siker háromszöge":

Overriding (szövegesen, példa)
Más néven felüldefiniálás, overriding. Amikor a származtatott osztály egy örökölt operáció saját implementációját is nyújthatja. Módosítja az ős viselkedését. Az objektumok felcserélhetőségét biztosítja. Az ős interfészét használjuk.

Öröklődés (példa, UML)
Osztályok közötti kapcsolat (reláció)
ahol egy osztály megosztja a struktúráját és/vagy a
viselkedését egy vagy több másik osztállyal

Mi a Garbage collector? előny, hátrány
Javaban ezt a garbage collector végzi. Ennek végrehajtása nem szavatolt. Ha még sok szabad memória van, akkor elkerülhető a felesleges szemétgyűjtés, ami lassítja a programot. Kiszámíthatatlan, hogy mikor fog meghívódni. Kézzel is meg lehet hívni (System.gc()).

Hogyan lehet megszűntetni egy objektumot?
Objektumok felszabadítása: automatikus: garbage collector (szemétgyűjtő) biztonságos, könnyebb a kezelés, de sokkal lassúbb

Erős és gyenge tartalmazás (UML, összehasonlítás)
gyenge tartalmazás – általános aggregáció
erős tartalmazás (Kompozíció) – részek élettartama szigorúan megegyezik az egészével


 

Hol keletkeznek az objektumok?
            Az objektumok a Javaban-mindig heap-en keletkeznek.

Java előnye, hátránya
Fő célkitűzés: Produktivitás
Alapoktól indulva lett megtervezve, az eddigi
programozási nyelvek tapasztalatait felhasználva
OOP
Jó osztálykönyvtárak
Hibakezelés nyelvi szinten (kivételek)
Nagy rendszerek írására is alkalmas
Könnyű elsajátítani egy olyan szinten amellyel már megbízható program írható
C++ nehezebb és ezért kevesebb a jó C++ programozó
Hátrány: lassúbb mint pl. C, C++

Szelekciós vezérlés:
switch (integral-selector) {
case integral-value1: statement; break;
case integral-value2: statement; break;
case integral-value3: statement; break;
// ...
default: statement;
}

Mi a defalut package
Ha nincs megadva csomag,
akkor minden új osztály egy ún. default package
csomagba kerül

Mire jó a this
Mire jó? Amikor valamire explicite fel akarjuk
használni, pl.:
- ha a metódus formális paraméterneve
megegyezik valamelyik attribútum nevével
- visszaadni egy metódussal

Példa generikus osztályra, ami egy típust tárol


Javaban osztályok tulajdonságai, viselkedése
Tulajdonság = attribútumok (adattagok, mezők)
Viselkedés = operációk (metódusok,
tagfüggvények)
A viselkedések üzeneteken keresztül aktiválhatók
~függvényhívás

Kompót tervezési minta
rész-egész szerkezetek leképezése objektumhierarchiára
rész és egész azonos kezelésével