Objektumorientált szoftvertervezés - Vizsga, 2009.05.28.

A VIK Wikiből

OO Vizsga 2009-05-28

Meg volt adva egy A osztály, melynek volt 1 private, 1 public, 1 static és 1 transient tagváltozója. Mellette egy kódrészlet, ahol egy A objektum létre van hozva, bevannak állítgatva a változói, majd le van szerializálva. Ezután még egy létre van hozva, bellítgatva és szerializálva. Végül a streamből be van olvasva egy A, és a kérdés, hogy mik lesznek a változóinak az értékei. (4 pont)

  • A private és a public arra áll vissza ami az első serializalt példánynál volt, a tranzient az null lesz, a static meg annak az érteket veszi fel amit masodik peldanynal allitottunk be. (ez utóbbi nem a szerializálás miatt ugyebár, de akkor is az lesz, mert osztályszintű a static, és A az A a beolvasásnál is, tehát valójában nem deserializálva lett hanem inicializálva) PZs

Booleant szeretnénk betenni OO adatbázisba. createRoot("bool",XXX). XXX helyére mit írhatunk

  • boolean értéket
  • Persistence aware objektumot, melynek van booleant visszaadó fv-je
  • Persistence ready objektumot, melynek van boolean tagváltozója
  • Előző 3-at
  • Mást: ............
  • Hat ha ez itt most a nagybetus Boolean, akkor csomgolot kell letrehozni, tehat "new Boolean(b)"-t peldaul, ahol b lehet true/false v. "true"/"false" is.
 * Mehet sima boolean, mert az autoboxing miatt Boolean lesz belőle. Feltéve, hogy nem a fos 1.3-as verziót kérik vissza... CsL

Meg volt adva egy Line osztály és 4 fv: create(m,b),getM(),getB(),y(x). Az y metódus a paraméterként kapott x koordinátához tartozó y koordinátát számolja ki az egyenes egyenletéből. Mennyi a LCOM? Mennyi a P és Q?

(A X B = A metszet B)

Acreate(m,b) = {m,b}
AgetM() = {m}
AgetB() = {b}
Ay(x) = {m,b}

Acreate(m,b) X AgetM() = {m}
Acreate(m,b) X AgetB() = {b}
Acreate(m,b) X Ay(x) = {m,b}
AgetM() X AgetB() = {}
AgetM() X Ay(x) = {m}
AgetB() X Ay(x) = {b}

P = 1 (AgetM() X AgetB()) Q=5 (tobbi)
LCOM = P - Q = 1 - 5 // *signum(x), ha negatív az eredmény, akkor 0 a megoldás!!!
LCOM = 0

Acceptor-Connector milyen problémán alapszik? Hogyan lehet megoldani?

  • Probléma: összefonódik akapcsolódó és a kommunikációs szerep.
  • Megoldás: a kapcsolódás és inicializálás különválasztása a szolgáltatás nyújtásától.

Hibernate-ben az objektumoknak milyen állapotai a persistence contexthez képest?

  • tranziens
  • perzisztens
  • lecsatolt (detached)

Ismert Visitor Combinatorokkal(Sequence, Choice, Try,Identity, Fail) if-then-else-t csinálni. Tehát ha v1 nem hal el, akkor v2, egyébként v3.

  • Choice(Sequence(V1, V2), V3) - Ha V1 exeptiont dob V2 nem fut le a Choice elkapja és lefut V3

(Ezzel már csak az a kérdésem maradt, hogy az nem baj, hogy a Sequence-nél nincsen throws VF ???, ha igen akkor kétségesnek tartom, hogy megoldható-e a feladat egyáltalán.) -- SzSzilveszter - 2011.05.23.

Fehérek játszanak feketék ellen. Mezőkön lépkednek, amin lehetnek aknák és sütik. A játékosok ütközhetnek aknával, sütivel, és egymással. Az ütközést Visitor patternnel kell megcsinálni. UML-t kell rajzolni ezekből, és metódusokat feltüntetni.


Holtponthoz vezet-e, ha B-t példányosítjuk? Miért?

class A {
	synchronized void bar() {
		System.out.println("Deadlocked");
	}
}
class B {
	private A a;
	public B() {
		a = new A();
	}
	void foo() {
		synchronized(a) {
			a.bar();
		}
	}
}

Nem, a példányosítás során semmi szinkronizálandó dolog nem fut. De ha meghívjuk B foo() metódusát, akkor sem, mert ezek egymásba ágyazhatóak.

RMI során átadható paraméterek osztályozása és a paraméterátadás módja (felsorolás + 1-1 rövid mondattal jellemzés)

XSD-ben sorrendiséget és gyakoriságot befolyásoló attribútumok

  • Sorrendiséghez:
    • all - tetszőleges sorrendben
    • choice - a listából csak az egyik
    • sequence - pontosan ugyanabban a sorrendben
  • Gyakoriság:
    • minOccurs maxOccurs attribútumok

Mi legyen Q és T, hogy a lehető legtágabb lehetőségekre legyen igaz?

class MySet<E> {
	 MySet() {...}
	 void push(E e) {...}
	 E pop() {...}
	 public E moveAndTake(MySet<T> m1, MySet<Q> m2){
		  E last = null;
		  while (!m1.isEmpty()){
				last = m1.pop();
				m2.push(last);
		  }
		  last = pop();
		  return last;
	 }
}
  • T - ? extends E
  • Q - ? super E

Milyen plusz függvényei vannak a ListIterator-nak az Iterator-hoz képest?

  • previousIndex()
  • nextIndex()
  • hasPrevious()
  • previous()
  • add()
  • set()

Verziókezelők fajtáiról írjon pár mondatot

  • RCS (Revision Control System)
  • CVS (Concurrent Versions System)
  • SVN (Subversion)

-- Endre - 2009.06.11.

-- Csádám - 2010.05.31.