|
|
1. sor: |
1. sor: |
| {{GlobalTemplate|Infoszak|OotVizsga20120522}}
| | # Java metódus kohéziója |
| | | # Visitor combinator tervezési minta felhasználása |
| ===OOterv vizsga 2012.05.22.===
| | # Aktív objektum tervezési mintás feladat |
| __TOC__
| | # REST, RMI, WS és CORBA összehasonlítása |
| ====1. Adott az alábbi szerkezet, és a D osztály ''zhcohesion'' metódusának vázlata. Milyen a metódus kohéziója? (3 pont)====
| | # WSDL 1.1 részei, mire valóak |
| | | # RMI távoli eljáráshívás során engedélyezett paraméterek |
| <pre>
| | # SwingWorker |
| public void zhcohesion(A param) {
| | # Java szálak állapotai |
| if (param instanceOf B) { ...; }
| | # CORBA: XHelper és XHolder osztály |
| else { ...; }
| | # Java szálkezelés, deadlockot kellett keresni |
| }
| |
| </pre>
| |
| | |
| {{InLineImageLink|Infoszak|OotVizsga20120522|feladat1_1.png}}
| |
| | |
| =====Refaktorálja a fenti tervet! Adja meg a D osztály metódus(ai)nak szignatúráját! (4 pont)=====
| |
| | |
| <pre>
| |
| | |
| public void zhcohesion (B param) {}
| |
| | |
| public void zhcohesion (C param) {}
| |
| | |
| </pre>
| |
| | |
| =====Hogyan érhető el, hogy a refaktorált zhcohesion metódus kliensének ne kelljen ismernie az A-t implementáló különböző konkrét típusokat? (2 pont)=====
| |
| | |
| pl. visitor minta használatával
| |
| | |
| =====Rajzolja be az ábrán az áttervezést követően fennálló relációkat!=====
| |
| | |
| {{InLineImageLink|Infoszak|OotVizsga20120522|feladat1_2.png}}
| |
| | |
| ====2. Az ismert vizitor kombinátorok (Identity, Fail, Sequence, Choice, Try) felhasználásával készítse el az ''if v1 then v2 else v3'' vizitort. Ha v1 rendben lefut akkor v2, ha v1 hibás, akkor v3 legyen végrehajtva. Tételezze fel, hogy v2 és v3 mindig lefut.====
| |
| | |
| <pre>
| |
| If_then_else(v1,v2,v3)= Choice(Sequence(v1,v2),v3)
| |
| </pre>
| |
| | |
| -- [[ApagyiGabor|gabooo]] - 2012.06.02.
| |
| | |
| ====3. Az alábbi ábrán látható a standard Command tervezési minta szerkezeti leírása.====
| |
| | |
| {{InLineImageLink|Infoszak|OotVizsga20120522|feladat3.png}}
| |
| | |
| =====Feleltesse meg az "Aktív objektum" CDP minta szereplőit a fenti minta elemeinek! (5 pont)=====
| |
| | |
| {| border="1"
| |
| | Client ||
| |
| |-
| |
| | Invoker ||
| |
| |-
| |
| | Command ||
| |
| |-
| |
| | Receiver ||
| |
| |-
| |
| | ConcreteCommand ||
| |
| |}
| |
| | |
| ====4. Töltse ki az alábbi táblázatot! (5 pont)====
| |
| | |
| {| border="1"
| |
| | || '''REST''' || '''RMI''' || '''WS''' || '''CORBA'''
| |
| |-
| |
| | '''Igaz-e, hogy különböző programnyelvek között is működik?''' || igen || nem || igen || igen
| |
| |-
| |
| | '''Mi a kommunikációs protokoll?''' || HTTP || RMI || SOAP || IIOP
| |
| |-
| |
| | '''Mi az interfészleíró?''' || nincs / WADL || Java Interface || WSDL || IDL
| |
| |}
| |
| | |
| ====5. Sorolja fel a WSDL 1.1 részeit, és foglalja össze 1-1 mondatban, hogy melyik rész mire való! (5 pont)====
| |
| | |
| ====6. Mik az engedélyezett paraméter-típusok RMI távoli eljáráshívás során? 1-1 rövid mondatban írjon mindegyik típus átadásának jellemzőiről! (3 pont)====
| |
| | |
| ====7. Kinek a feladata az alábbi ''SwingWorker'' metódusok meghívása, és mi történik a meghívás hatására? (2 pont)====
| |
| | |
| * protected final void publish(V... chunks)
| |
| * protected final void process(List<V> chunks)
| |
| | |
| ====8. Sorolja fel a Java szálak állapotait, röviden jellemezze őket, és adja meg, mely állapotok követhetik őket! (8 pont)====
| |
| | |
| 5 állapot van, ennyi biztos.
| |
| | |
| {| border="1"
| |
| | '''Állapot''' || '''Jellemző''' || '''Követő állapot'''
| |
| |-
| |
| | NEW || újonnan létrehozva || RUNNABLE
| |
| |-
| |
| | RUNNABLE || futásra kész || BLOCKED, WAITING, TIMED_WAITING, TERMINATED
| |
| |-
| |
| | BLOCKED || monitorra vár || RUNNABLE
| |
| |-
| |
| | WAITING, TIMED_WAITING || várakozó szál, Object.wait() || BLOCKED
| |
| |-
| |
| | TERMINATED || befejezte a működését || nincs
| |
| |}
| |
| | |
| A diákon rajta van egy lista, amin öt állapot van. Utána meg van egy kép, amin már hat állapottal van ábrázolva (viszont ott a Running dőlt betűvel van szedve). A megoldókulcsban ugyan úgy volt mint a listán a diában, illetve a java ref-ben: [http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.State.html Java ref.]. Az a trükk, hogy a Runnable és a Running igazából ugyanaz, a képen "csak a jobb megértést támogatva" szerepel a Running, valójában ilyen állapot nincs. A követő állapotok meg a diasorból egyértelmű.
| |
| | |
| -- [[ApagyiGabor|gabooo]] - 2012.06.02.
| |
| | |
| ====9. CORBA-ban IDL-t fordítottunk Java-ra. Létrejött az [[XHelper]] és [[XHolder]] osztály. Mi a felelősségük?====
| |
| | |
| ====10. Adott az alábbi kód:====
| |
| | |
| <pre>
| |
| | |
| synchronized public void placeAmount(double d) throws RemoteException {
| |
| amount += d;
| |
| }
| |
| | |
| synchronized public boolean transferAmount(double d, Account to) throws RemoteException {
| |
| if (to == null) return false;
| |
| amount -= d;
| |
| to.placeAmount(d);
| |
| return true;
| |
| }
| |
| </pre>
| |
| | |
| Mi történik az alábbi utasítások hatására?
| |
| | |
| <pre>
| |
| | |
| Account a=...;
| |
| | |
| a.transferAmount(1000, a);
| |
| | |
| </pre>
| |
| | |
| Deadlock lesz, mert különböző szálból hívunk. (Egyébként ha jól emlékszek, akkor ez az egész úgy nézett ki, hogy RMI-vel hívunk távoli függvényt.)
| |
| | |
| -- [[ApagyiGabor|gabooo]] - 2012.06.02.
| |
| | |
| -- [[HinelBalazs|Gollam]] - 2012.06.02.
| |
|
| |
| | |
|
| |
|
| [[Category:Infoszak]] | | [[Category:Infoszak]] |