„Objektumorientált szoftvertervezés - Vizsga, 2008.05.27.” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(Ú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…”)
 
1. sor: 1. sor:
{{GlobalTemplate|Infoszak|OotVizsga20080527}}
 
 
 
===OO Vizsga 2008-05-27===
 
===OO Vizsga 2008-05-27===
 
 
__TOC__
 
__TOC__
  
====01. 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)====
+
====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.
 
* [[XClass]] függ az ObjectOutput interface-től.
15. sor: 12. sor:
  
  
====02. 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)====
+
====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>
 
   
 
   
====03. 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!)====
+
====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:
35. sor: 32. sor:
 
{{InLineImageLink|Infoszak|OotVizsga20080527|thrdsssn.jpg}}  
 
{{InLineImageLink|Infoszak|OotVizsga20080527|thrdsssn.jpg}}  
  
====04. Mi a discriminator tag, mi a szerepe? (2p)====
+
====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.  
41. sor: 38. sor:
 
* (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ó.)
 
   
 
   
====05.Mivel térhet még vissza listán kívül a Hibernate Query? (2p)====
+
====Mivel térhet még vissza listán kívül a Hibernate Query? (2p)====
 
 
 
* objektum
 
* objektum
 
* iterátor
 
* iterátor
 
   
 
   
====06.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!-====
+
====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: 53. 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)
 
   
 
   
====07.Az Aktív objektum mintában mi a Future osztály szerepe? (2p)====
+
====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: 61. 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]
  
====08.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)====
+
====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
 
   
 
   
====09. 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- ====
+
====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: 97. sor:
 
(ez a heterogen kollekcio lenyege szerintem)
 
(ez a heterogen kollekcio lenyege szerintem)
 
   
 
   
====10. Miért jelöli a Java nyelv a Thread stop resume és suspend metódusait deprecated-nek? (2p)====
+
====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: 105. 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]
  
====11. Mi a különbség a Java nyelv notify és notifyAll metódusai között? (2p)====
+
====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: 112. 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
 
   
 
   
====12. Mi a különbség a Naming és a Trading Service között? (2p)====
+
====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
 
   
 
   
====13. Távoli eljáráshívás esetén milyen problémákat jelenthetnek az összetett típusok? (4p)====
+
====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: 123. sor:
 
* inout paraméterek kezelése
 
* inout paraméterek kezelése
 
   
 
   
====14. A Java SecurityManager checkXXX metódusai milyen módon jelzik, ha a hozzáférést megtagadják? (1p)====
+
====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
 
   
 
   
====15. Implementáljon Java nyelven bináris szemafórt! (6p)====
+
====Implementáljon Java nyelven bináris szemafórt! (6p)====
  
 
<pre>
 
<pre>
153. sor: 150. sor:
 
</pre>
 
</pre>
 
   
 
   
====16. Ismertesse az elosztot garbage-collection-t! (4p) -fogalmazás megint nem helyes de a lényege ez====
+
====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: 177. sor:
 
</pre>
 
</pre>
 
   
 
   
====17. 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! ====
+
====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 2013. január 3., 17:54-kori változata

OO Vizsga 2008-05-27

Tartalomjegyzék

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:


Ezen a helyen volt linkelve a thrdsssn.jpg 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)


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

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.

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