Objektumorientált szoftvertervezés - Vizsga, 2012.05.22.

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:44-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotVizsga20120522}} ===OOterv vizsga 2012.05.22.=== __TOC__ ====1. Adott az alábbi szerkezet, és a D osztály ''zhcohesion'' metódusának …”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


OOterv vizsga 2012.05.22.

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)

public void zhcohesion(A param) {
	 if (param instanceOf B) { ...; }
	 else { ...; }
}


Ezen a helyen volt linkelve a feladat1_1.png nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


Refaktorálja a fenti tervet! Adja meg a D osztály metódus(ai)nak szignatúráját! (4 pont)

public void zhcohesion (B param) {}

public void zhcohesion (C param) {}

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!
Ezen a helyen volt linkelve a feladat1_2.png nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


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.

If_then_else(v1,v2,v3)= Choice(Sequence(v1,v2),v3)

-- gabooo - 2012.06.02.

3. Az alábbi ábrán látható a standard Command tervezési minta szerkezeti leírása.

Ezen a helyen volt linkelve a feladat3.png nevű kép a régi wiki ezen oldaláról. (Kérlek hozd át ezt a képet ide, különben idővel el fog tűnni a régi wikivel együtt)


Feleltesse meg az "Aktív objektum" CDP minta szereplőit a fenti minta elemeinek! (5 pont)
Client
Invoker
Command
Receiver
ConcreteCommand

4. Töltse ki az alábbi táblázatot! (5 pont)

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.

Á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: 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ű.

-- 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:


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;
}

Mi történik az alábbi utasítások hatására?


Account a=...;

a.transferAmount(1000, a);

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.)

-- gabooo - 2012.06.02.

-- Gollam - 2012.06.02.