„Objektumorientált szoftvertervezés - Vizsga, 2008.05.27.” változatai közötti eltérés
Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotVizsga20080527}} ===OO Vizsga 2008-05-27=== __TOC__ ====01. Van az ObjectOutput interfész és abban egy writeObject metódus, illetve v…” |
autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat |
||
(5 közbenső módosítás, amit 3 másik szerkesztő végzett, nincs mutatva) | |||
1. sor: | 1. sor: | ||
===OO Vizsga 2008-05-27=== | ===OO Vizsga 2008-05-27=== | ||
__TOC__ | __TOC__ | ||
==== | ====Van az ObjectOutput interfész és abban egy writeObject metódus, illetve van egy saját osztályunk (XClass), amiben szintén lehet writeObject metódus. Mi az ObjectOutput és az XClass közötti viszony? (2p)==== | ||
* | * XClass függ az ObjectOutput interface-től. | ||
* Perzisztencia 20 és 26 dia: Az új diasorban ez az ábra megváltozott, és nincs nyíl köztük, de az ObjectOutput megvalósítása az ObjectOutputStream, amitől viszont függ a MyClass. -- [[MetykoCecilia|Ciana]] - 2010.06.11. | * Perzisztencia 20 és 26 dia: Az új diasorban ez az ábra megváltozott, és nincs nyíl köztük, de az ObjectOutput megvalósítása az ObjectOutputStream, amitől viszont függ a MyClass. -- [[MetykoCecilia|Ciana]] - 2010.06.11. | ||
15. sor: | 12. sor: | ||
==== | ====Van egy Car osztály, aminek perzisztens példányait az Objectstore adatbázis db példányában tárolunk mycars root alatt. Volt a Car-nak vmi privát int változója és az azt visszaadó metódus ( getXXX() ). Egészítse ki a következő 3 sort úgy hogy a result-ban azok a car példányok legyenek melyek int változója kisebb mint 20000.(6p)==== | ||
Query q = ... | Query q = ... | ||
29. sor: | 26. sor: | ||
</pre> | </pre> | ||
==== | ====Volt 3 darab ábra, amin Thread Session és Database példányok kapcsolatai voltak feltüntve különbözőképpen. Ezeket kellett jellemezni (3p) (Volt köztük egy olyan is ahol egy Thread két Sessionhöz kapcsolódott, ami ha jól tévedek helytelen!)==== | ||
Jegyzetből: | Jegyzetből: | ||
[[File:OotVizsga20080527_thrdsssn.jpg]] | |||
==== | ====Mi a discriminator tag, mi a szerepe? (2p)==== | ||
* Akkor használjuk ha hibernate-tel több osztály példányait tároljuk egy táblában. A discriminator tag a leíró xml-ben van, azt mondja meg mi legyen a neve annak az oszlopnak, ami az adott sor típusát jelzi. | * Akkor használjuk ha hibernate-tel több osztály példányait tároljuk egy táblában. A discriminator tag a leíró xml-ben van, azt mondja meg mi legyen a neve annak az oszlopnak, ami az adott sor típusát jelzi. | ||
* (Alapból az osztály FQN-je jelöli a típust (com.example.Valami), de a discriminator-value tag-gel ez felülírható.) | * (Alapból az osztály FQN-je jelöli a típust (com.example.Valami), de a discriminator-value tag-gel ez felülírható.) | ||
==== | <b>A discriminator tag a hibernate table-per-class-hierarchy esetében adja meg, hogy az adott táblázat sorában milyen osztály szerepel</b> | ||
====Mivel térhet még vissza listán kívül a Hibernate Query? (2p)==== | |||
* objektum | * objektum | ||
* iterátor | * iterátor | ||
==== | ====Mikor procedurális a metódus kohézió? Miről lehet könnyen felismerni? (2p) -az első kérdés valószínűleg nem így volt fogalmazva ezt ne vegyétek készpénznek!-==== | ||
* instanceof (???) (ootervezes_metrics 13-as dia) | * instanceof (???) (ootervezes_metrics 13-as dia) | ||
56. sor: | 55. sor: | ||
Én erről azt találtam, hogy akkor procedurális a metódus kohézió, ha adott műveletet végez el különböző adatokon(pl. printf) | Én erről azt találtam, hogy akkor procedurális a metódus kohézió, ha adott műveletet végez el különböző adatokon(pl. printf) | ||
==== | ====Az Aktív objektum mintában mi a Future osztály szerepe? (2p)==== | ||
* Tárolja az eljáráshívás eredményét | * Tárolja az eljáráshívás eredményét | ||
64. sor: | 63. sor: | ||
* [http://www.paulbridger.com/active_object/ C++-os megvalósítás] | * [http://www.paulbridger.com/active_object/ C++-os megvalósítás] | ||
==== | ====Van A B C osztály, melyek megvalósítják a HC interfészt, és van V1 V2 osztály, melyek Visitor-ai a HC interfésznek (vagy az A B C osztályoknak nemtom hogy volt fogalmazva de értitek remélem). Rajzolja fel a Hagyományos Visitor mintának megfelelő osztálydiagramot ezek alapján és tüntesse fel a jellegzetes metódusokat is! (6p)==== | ||
* ooterv_metrics 63-as dia | * ooterv_metrics 63-as dia | ||
==== | ====Mit ír ki? Ha nem tévedek tökéletesen megegyezik a Java gyak mitírkijével. Volt egy A osztály privát f1 és f5 metódussal mely meghívja f1-t illetve volt B osztály mely származott A-ból szintén rendelkezett privát f1-el. A main-ben A a1 = new A(); a1.f5(); A a2 = new B(); a2.f5(); (2p) -Ha jól mondom akkor mindkettő A f1-t fog eredményezni- ==== | ||
!!! | !!! | ||
Nem lattam a feladatot, de ha jol ertem ez heterogen kollekcio pelda es kb igy nezhetett ki: | Nem lattam a feladatot, de ha jol ertem ez heterogen kollekcio pelda es kb igy nezhetett ki: | ||
100. sor: | 99. sor: | ||
(ez a heterogen kollekcio lenyege szerintem) | (ez a heterogen kollekcio lenyege szerintem) | ||
==== | ====Miért jelöli a Java nyelv a Thread stop resume és suspend metódusait deprecated-nek? (2p)==== | ||
A stop()-ot azért mert a leállított Thread foglalt monitorjai mind felszabadulnak, azonban lehet hogy valamely eddig monitorral védett objektum inkonzisztens állapotban marad, és így elérhető a többi thread számára. Ez kiszámíthatatlan hibákhoz vezethet, ezért ellenjavalt. | A stop()-ot azért mert a leállított Thread foglalt monitorjai mind felszabadulnak, azonban lehet hogy valamely eddig monitorral védett objektum inkonzisztens állapotban marad, és így elérhető a többi thread számára. Ez kiszámíthatatlan hibákhoz vezethet, ezért ellenjavalt. | ||
108. sor: | 107. sor: | ||
[http://java.sun.com/javase/6/docs/api/java/lang/Thread.html JavaDoc] | [http://java.sun.com/javase/6/docs/api/java/lang/Thread.html JavaDoc] | ||
==== | ====Mi a különbség a Java nyelv notify és notifyAll metódusai között? (2p)==== | ||
* notify(): felébreszt egyet az objektumon váró szálak közül, a felébresztett szál csak akkor folytathatja futását, ha a hívó szál kilépett a monitorból | * notify(): felébreszt egyet az objektumon váró szálak közül, a felébresztett szál csak akkor folytathatja futását, ha a hívó szál kilépett a monitorból | ||
115. sor: | 114. sor: | ||
mindkét esetben a szálnak az objektum monitorában kell lenni | mindkét esetben a szálnak az objektum monitorában kell lenni | ||
==== | ====Mi a különbség a Naming és a Trading Service között? (2p)==== | ||
* Naming Service - "telefonkönyv", nevekhez tárolja a szolgáltatót, hierarchikus névtér elengedhetetlen (pl. DNS) | * Naming Service - "telefonkönyv", nevekhez tárolja a szolgáltatót, hierarchikus névtér elengedhetetlen (pl. DNS) | ||
* Trading Service - "arany oldalak", szolgáltatások jegyzéke, megadhat plusz paramétereket is | * Trading Service - "arany oldalak", szolgáltatások jegyzéke, megadhat plusz paramétereket is | ||
==== | ====Távoli eljáráshívás esetén milyen problémákat jelenthetnek az összetett típusok? (4p)==== | ||
* deep copy szükséges minden esetben | * deep copy szükséges minden esetben | ||
126. sor: | 125. sor: | ||
* inout paraméterek kezelése | * inout paraméterek kezelése | ||
==== | ====A Java SecurityManager checkXXX metódusai milyen módon jelzik, ha a hozzáférést megtagadják? (1p)==== | ||
* elutasítás esetén SecurityExceptiont dobnak | * elutasítás esetén SecurityExceptiont dobnak | ||
==== | ====Implementáljon Java nyelven bináris szemafórt! (6p)==== | ||
<pre> | <pre> | ||
153. sor: | 152. sor: | ||
</pre> | </pre> | ||
==== | ====Ismertesse az elosztot garbage-collection-t! (4p)==== | ||
A távoli objektumokra a kliens oldali stub-oknak is van referenciájuk. Ha az objektum távoli referenciái megszűntek, az objektumot az RMI weak reference-ként tartja számon. | A távoli objektumokra a kliens oldali stub-oknak is van referenciájuk. Ha az objektum távoli referenciái megszűntek, az objektumot az RMI weak reference-ként tartja számon. | ||
180. sor: | 179. sor: | ||
</pre> | </pre> | ||
==== | ====Mondjon jellemzőket (jellemzőként 1-2 mondatban) a mobil ügynökre! (4p) -Erre volt egy nyúlfarknyi hely, nem igazán tudom mire gondolt Balázs erre a jellemzőkegykétmondatbankishelyen kérdéssel 4 pontért... és külön lapot nem lehetett beadni! ==== | ||
* A kliens által küldött objektum futtatható kódja nincs meg a szerveren | * A kliens által küldött objektum futtatható kódja nincs meg a szerveren |
A lap jelenlegi, 2017. július 12., 15:22-kori változata
OO Vizsga 2008-05-27
Van az ObjectOutput interfész és abban egy writeObject metódus, illetve van egy saját osztályunk (XClass), amiben szintén lehet writeObject metódus. Mi az ObjectOutput és az XClass közötti viszony? (2p)
- XClass függ az ObjectOutput interface-től.
- Perzisztencia 20 és 26 dia: Az új diasorban ez az ábra megváltozott, és nincs nyíl köztük, de az ObjectOutput megvalósítása az ObjectOutputStream, amitől viszont függ a MyClass. -- Ciana - 2010.06.11.
- Szerintem inkább specializációról van szó. (ootervezes_metrics 11-es dia)
- Nem, ez a perzisztenciarol szolo diasor 27. oldalan van, es valoban a dependency a helyes valasz, a nyil vegzodesbol lathato. Pzs
Van egy Car osztály, aminek perzisztens példányait az Objectstore adatbázis db példányában tárolunk mycars root alatt. Volt a Car-nak vmi privát int változója és az azt visszaadó metódus ( getXXX() ). Egészítse ki a következő 3 sort úgy hogy a result-ban azok a car példányok legyenek melyek int változója kisebb mint 20000.(6p)
Query q = ...
Collection cars = ...
Set result = ...
Query q = new Query(Car.class, "getXXX()<20000"); Collection cars = (Collection) db.getRoot("mycars"); Set result = q.select(cars);
Volt 3 darab ábra, amin Thread Session és Database példányok kapcsolatai voltak feltüntve különbözőképpen. Ezeket kellett jellemezni (3p) (Volt köztük egy olyan is ahol egy Thread két Sessionhöz kapcsolódott, ami ha jól tévedek helytelen!)
Jegyzetből:
Mi a discriminator tag, mi a szerepe? (2p)
- Akkor használjuk ha hibernate-tel több osztály példányait tároljuk egy táblában. A discriminator tag a leíró xml-ben van, azt mondja meg mi legyen a neve annak az oszlopnak, ami az adott sor típusát jelzi.
- (Alapból az osztály FQN-je jelöli a típust (com.example.Valami), de a discriminator-value tag-gel ez felülírható.)
A discriminator tag a hibernate table-per-class-hierarchy esetében adja meg, hogy az adott táblázat sorában milyen osztály szerepel
Mivel térhet még vissza listán kívül a Hibernate Query? (2p)
- objektum
- iterátor
Mikor procedurális a metódus kohézió? Miről lehet könnyen felismerni? (2p) -az első kérdés valószínűleg nem így volt fogalmazva ezt ne vegyétek készpénznek!-
- instanceof (???) (ootervezes_metrics 13-as dia)
- Olyan tevékenységek végrehajtása, melyek a szoftvertermék használatához kapcsolódó eljárásokkal vannak összhangban
- egyáltalán nem újra felhasználható
- pl: read_part_number_and_update_repair_record_on_master_file
- Procedural cohesion is when parts of a module are grouped because they always follow a certain sequence of execution (e.g. a function which checks file permissions and then opens the file).
Én erről azt találtam, hogy akkor procedurális a metódus kohézió, ha adott műveletet végez el különböző adatokon(pl. printf)
Az Aktív objektum mintában mi a Future osztály szerepe? (2p)
- Tárolja az eljáráshívás eredményét
- Randevú lehetőséget biztosít a kliens számára
- (ootervezes_metrics 45-47-es dia)
- This object acts as a placeholder for the result of the not-yet-performed method invocation. forrás
- C++-os megvalósítás
Van A B C osztály, melyek megvalósítják a HC interfészt, és van V1 V2 osztály, melyek Visitor-ai a HC interfésznek (vagy az A B C osztályoknak nemtom hogy volt fogalmazva de értitek remélem). Rajzolja fel a Hagyományos Visitor mintának megfelelő osztálydiagramot ezek alapján és tüntesse fel a jellegzetes metódusokat is! (6p)
- ooterv_metrics 63-as dia
Mit ír ki? Ha nem tévedek tökéletesen megegyezik a Java gyak mitírkijével. Volt egy A osztály privát f1 és f5 metódussal mely meghívja f1-t illetve volt B osztály mely származott A-ból szintén rendelkezett privát f1-el. A main-ben A a1 = new A(); a1.f5(); A a2 = new B(); a2.f5(); (2p) -Ha jól mondom akkor mindkettő A f1-t fog eredményezni-
!!! Nem lattam a feladatot, de ha jol ertem ez heterogen kollekcio pelda es kb igy nezhetett ki:
- A.java
class A { public void f1 () { System.out.println("A::f1"); } public void f5 () { f1(); } }
- B.java
class B extends A { public void f1 () { System.out.println("B::f1"); } }
- Test.java:
class Test { public static void main (String[] params) { A a = new A(); a.f5(); A b = new B(); b.f5(); } }
- Kimenet:
> javac *.java && java Test
A::f1 B::f1
(ez a heterogen kollekcio lenyege szerintem)
Miért jelöli a Java nyelv a Thread stop resume és suspend metódusait deprecated-nek? (2p)
A stop()-ot azért mert a leállított Thread foglalt monitorjai mind felszabadulnak, azonban lehet hogy valamely eddig monitorral védett objektum inkonzisztens állapotban marad, és így elérhető a többi thread számára. Ez kiszámíthatatlan hibákhoz vezethet, ezért ellenjavalt.
A suspend() - (és a csak vele párban használható resume() ) pedig azért deprecated, mert holtponthoz vezethet. Suspend()-kor ugyanis nem szabadulnak fel a monitorok. Ha a resume()-ot hívó thread-nek a resume() előtt szüksége van valamely, az alvó által foglalt monitorra, akkor az a deadlock tipikus esete.
Mi a különbség a Java nyelv notify és notifyAll metódusai között? (2p)
- notify(): felébreszt egyet az objektumon váró szálak közül, a felébresztett szál csak akkor folytathatja futását, ha a hívó szál kilépett a monitorból
- notifyAll(): felébreszti az objektumra váró összes szálat, kölcsönös kizárás érvényesül
mindkét esetben a szálnak az objektum monitorában kell lenni
Mi a különbség a Naming és a Trading Service között? (2p)
- Naming Service - "telefonkönyv", nevekhez tárolja a szolgáltatót, hierarchikus névtér elengedhetetlen (pl. DNS)
- Trading Service - "arany oldalak", szolgáltatások jegyzéke, megadhat plusz paramétereket is
Távoli eljáráshívás esetén milyen problémákat jelenthetnek az összetett típusok? (4p)
- deep copy szükséges minden esetben
- saját foglaló és felszabadító függvények
- inout paraméterek kezelése
A Java SecurityManager checkXXX metódusai milyen módon jelzik, ha a hozzáférést megtagadják? (1p)
- elutasítás esetén SecurityExceptiont dobnak
Implementáljon Java nyelven bináris szemafórt! (6p)
public class Semaphore { private int s; public Semaphore (int v) { s=v; } synchronized public void P() throws InterruptedException { while (s <= 0) {wait();} s--; } synchronized public void V() { s++; notify(); } }
Ismertesse az elosztot garbage-collection-t! (4p)
A távoli objektumokra a kliens oldali stub-oknak is van referenciájuk. Ha az objektum távoli referenciái megszűntek, az objektumot az RMI weak reference-ként tartja számon.
Értesítés a referenciák megszűntéről:
- java.rmi.server.Unreferenced interfész
- public void unreferenced() metódusa
// Client Account a1 = bank.openAccount("acc01"); ... a1.close(); a1 = null; public void close() throws RemoteException { bank.closeAccount(number); } public void closeAccount(String anumber) { AccountImpl a = table.get(anumber); try { unexportObject(a, false); } catch (Exception e) {} table.remove(anumber); } }
Mondjon jellemzőket (jellemzőként 1-2 mondatban) a mobil ügynökre! (4p) -Erre volt egy nyúlfarknyi hely, nem igazán tudom mire gondolt Balázs erre a jellemzőkegykétmondatbankishelyen kérdéssel 4 pontért... és külön lapot nem lehetett beadni!
- A kliens által küldött objektum futtatható kódja nincs meg a szerveren
- Adat és kód együtt kerül a szerverhez
(Mitől ügynök az ügynök?)
- aktív és autonóm
- saját szálon fut
- a döntéseit maga hozza
- a környezet figyelembevételével
- kapcsolatképes (reaktív)
- más ügynökökkel kommunikálhat
- tanulékony
- a tapasztalatait összegzi
- mobil
- képes az ügynökségek közötti közlekedésre
-- Balázs - 2008.06.01.
-- aldaris - 2009.05.27.