SzoftTechKonzi

A VIK Wikiből
A lap korábbi változatát látod, amilyen Kiskoza (vitalap | szerkesztései) 2014. április 17., 10:21-kor történt szerkesztése után volt. (→‎2009 január 6.-i vizsga beugró első feladat megoldása, és magyarázat, hogy mit miért? (Deák Endre))
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

2008-09/1 félévben Cassus tartott nem hivatalos konzultációt. Itt találhatóak részben az ott elhangzott kérdések és válaszok.

Tartalomjegyzék

1.) Szekvencia diagram szerkesztésénél honnan lehet megállapitani, hogy egy hivás aszinkron vagy szinkron? És hogyan működik a hierarchikus számozás? (Sükösd Endre)

Szinkron (tele fejű nyil): a szinkron hivást call-nak nevezik, mert általában egy függvényhivás, melynek lesz visszatérési értéke, és erre várunk. Várakozás közben nem csinálunk mást. At-most-once tipusú, tehát maximum egyszer hajtódik végre. Példa: amikor az órás odaadja neked a megjavitott órát, hogy próbáld ki, akkor ez az órás részéről szinkron hivás, mert meg fogja várni, hogy próbáld ki és mond meg a véleményedet (térj vissza a visszatérési értékkel).

Aszinkron (rendes V fejű nyil): az aszinkron hivást message-nek nevezik, mert ez egy üzenet küldés, kérés, rendelés, amelyet csak kiadunk és utána nem várunk rá választ, eredményt, hanem csinálhatunk mást. Best-effort tipusú. Példa: amikor a postán feladsz egy levelet, bedobod a postaládába, akkor részedről ez egy aszinkron hivás. Feladod és mész utána a dolgodra, nem fogod várni, hogy jöjjön a postás kivegye, majd kézbesitse, majd jelezze vissza neked, hogy sikerült.

Hierarchikus számozás: Ha EGY példányból küldünk üzeneteket egymás után (lefele mozdulunk el), akkor nőni fog a a szám, illetve a legutolsó számjegy (1, 2, 3 vagy 2.1.1, 2.1.2, 2.1.3). Ha egy forrás_példányból küldött üzenet hatására a cél_példány küld egy üzenetet (oldalra mozdulunk el), akkor új pontot teszünk, és elölről kezdjük a számokat (3 -> 3.1 vagy 2.3 -> 2.3.1).

<a href = "UnderworldAnecdote.png">Vicces példa:)</a>

2.) Algebrai axiómáknál, miután behelyettesítettük a kontruktorokat a többi függvénybe, mitől függ, hogy axióma lesz-e vagy sem? (Gulyás Máté)

Először is felírjuk, hogy melyik hogy melyik függvény konstruktor, melyik modifier vagy behaviour. Kontruktorok az a legszűkebb halmaz, amellyel előállítható bármely formája az adott halmaznak. Például egy lista esetében a CRT() és az ADD(s) függvények kontruktorok, mert velük bármilyen összetételű lista létrehozható, mivel előbbivel egy üres listát tudunk létrehozni, utóbbival pedig a lista végére rakhatunk be elemeket. Ha ezzel megvagyunk, elkezdjük belerakosgatni a kontruktorokat a másik két ípusú függvényekbe, az alábbi séma szerint:

Behavior(Constructor(..)) =

Modifier(Constructor(..)) =

Van néhány kivételes eset, amikor ez az ökölszabály nem működik. Ilyen az, ha például van egy SUBSTR(s1,s2) és egy CRT() függvényünk, ahol a SUBSTR(s1,s2) igaz értékkel tér vissza, amennyiben s2 megtalálható s1-ben, a CRT() függvény pedig egy új, üres stringgel tér vissza. Ekkor a SUBSTR(CRT(),CRT()) függvény nem axióma, mivel ez csak egy szűkített esete a SUBSTR(s1,CRT()) axiómának, ami mindenhol igaz lesz, így akkor is ha s1 üres string.


3.)Hogyan jeloljuk UML2 szekvencia diagramon a feltételt?

Kreálunk egy keretet "alt" címkével(alt mint alternate).
Kettéosztjuk egy szaggatott vonallal.
Felso részébe írunk egy feltételt és berajzoljuk a felso részbe azt aminek a feltétel teljesulése esetén kell torténnie.
A másik részbe( szaggatott vonal alá) beírjuk ,h "else" és berajzoljuk ami a feltétel be nem kovetkezése esetén torténik.
Lásd az ábrán:

Ezen a helyen volt linkelve a uml2_sec_feltetel.jpeg 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)



4.) Hogyan jeloljuk UML2 szekvencia diagramon az iterációt?

A fentebb levo alt nevu kerethez hasonlóan(szaggatott vonal nélkul) csinálunk egy keretet és a "loop" címkével látjuk el.
Majd pedig belerajzoljuk azt a részt aminek ismétlodnie kell.
Ha meg akarjuk adni, h hányszor fusson le az iterácó akkor a keretet "loop (x)" címkével látjuk el, ahol az x az iterációk száma.

5.) Hogyan kell megszámozni a szekvencia diagramon az uzeneteket?

Ha átmegyunk másik példány életvonalára akkor 1., 1.1 , 1.1.1 ... Ha idoben megyunk lefele, akkor 1.1 után 1.2 , 1.1.1 után 1.1.2 attól fuggoen melyik példány életvonalán megyun lefelé az idoben.

6.) Miért vannak a példány életvonalán levo téglalapokon újabb téglalapok (execution specification) ?

Mert ha meghívunk egy másik fuggvényt a példányon belul, akkor abban elofordulhat ,h új váltózókat kell létrehozni és azokat tárolni a stackben.
Ezeket az új változókat jelenti a fuggvényhívás hatására keletkezett téglalapocska a másik téglalapon.


7.) Asszinkron hívás után mindig meghal az objektumpéldány?Hogyan mukodik ez szinkron esetében?

Nem, nem mindig.Attól fugg,h mikor hal meg,h hány utasítást kell még végrehajtania ezután.
Ameddig utasításokat hajt végre addig él az objektumpéldány is.(ergo rajzon vagy van vagy nincs téglalpocska az életvonalon a hívás után)

Szinkronnál csak akkor érhet véget a futás ha megérkezett a válasz.( <--- válasznyíl után a hívó objektum példánya meghalhat, de ez sem szukségszeru, addig viszont mindenképp él).Erre példa a 3.) kérdés ábrájának else ágában.

8.) Miért kell ures négyzetnek lennie az ábrán a digit * helyett?

Ezen a helyen volt linkelve a jsd_pelda.jpeg 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)



Azért mert egy szinten csak egyfajta entitás lehet.A digit meg a digit * kulonbozo entitások.

9.) JSD-s példák:

Mindig a legfelso téglalap mondja el mirol is szol az egész JSD diagram.


Ezen a helyen volt linkelve a jsd_alma.jpeg 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)


A leszed ° és a leesik ° szelekcióra példák.Vagy az egyik vagy a másik torténik meg.


Ezen a helyen volt linkelve a jsd_alma2.jpeg 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)


2009 január 6.-i vizsga beugró első feladat megoldása, és magyarázat, hogy mit miért? (Deák Endre)

Ezen a helyen volt linkelve a(z) szofttech090106.PDF nevű fájl ("{{{4}}}" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Infoalap/SzoftTechKonzi2009jan12_2 oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki@sch.bme.hu címre a kérésedet)


A feladat:

A - csak az elso tagmondat igaz  (+ -) 
B - csak a második tagmondat igaz  (- +) 
C - mindkét tagmondat igaz, de a következtetés hamis  (+ + -) 
D - mindkét tagmondat igaz és a következtetés is helyes  (+ + +) 
E - egyik tagmondat sem igaz  (- -) 


Ezen a helyen volt linkelve a 2009_jan_6_uml.jpeg 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)


(Az ábra megértését segíti az omg.org-ról letölthető UML2-ről szóló részletes pdf).

  • [E] Q bárhol helyettesítheto S-sel, mert S a Q leszármazottja.


*Indoklás*: A Liskov -féle helyettesítési elv szerint egy típus minden fontos tulajdonságát meg kell tartania az altípusaiban is, de S nem is Q altípusa. Tehát se az első, se a második állítás nem igaz.

  • [A] R qux(q:Q) metódusa nem kaphat paraméterül Z objektumot, mert a metódus absztrakt.


*Indoklás*: R qux(q:Q) jelentése, hogy a qux függvény Q típusú paramétert vár. Viszont a metódus nem absztrakt, annak a jelölése a dőlt betű.

  • [E] B foo(r:R) metódusa nem hívhat meg a paraméterül kapott objektumon foo() metódust, mert R-nek nincs ilyen metódusa


*Indoklás*: az R osztály az S osztály specializációja, S pedig megvalósítja az X interfészt, amelynek van publikus foo() metódusa. Ezért R-nek is kvázi lesz foo() metódusa, (a második állítás hamissága), valamint B foo() metódusa meg is hívhatja, mert R-t vár paraméterül.

  • [E] S bar(q:Q) metódusa nem módosíthatja az S inf attribútumát, mert az attribútum konstans.


*Indoklás*: osztály saját függvénye az osztály változóit módosíthatja (első állítás), S inf attribútuma pedig nem konstans, hanem private (a -kötőjel miatt).

  • [E] S bar(q:Q) metódusa nem hívhatja meg a paraméterül kapott objektum bar() metódusát, mert a Q osztálynak nincs ilyen szignatúrájú metódusa.


*Indoklás*: itt csel van, ugyanis Q a saját bar(x:X) metódusa mellé örökli Z-től a bar() metódust (második állítás). És mivel S bar metódusa Q-t vár paraméterül, hozzáfér Q-nak a Z-től öröklött publikus bar() metódusához.

  • [B] Z set(x:X) metódusa nem kaphat paraméterül B objektumot, mert B megvalósítja az X interfészt.


*Indkolás*: a második állítás azért igaz, mert B az S osztály egy specializációja, és S megvalósítja az X interfészt, tehát B is megvalósítja. Az első pedig a quxos kérdéshez hasonló: Z set(x:X) jelentése: X-et vár paraméterül.

  • [B] B módosíthatja egy Q objektum im attribútumát, mert S függ Q-tól.


*Indoklás*: a második állítás a nyíl miatt igaz (ez jelenti a függőséget), viszont Q im attribútuma private, így azt B nem módosíthatja (így az első állítás nem igaz).

  • [B] R és B bárhol felcserélhetık, mert közös az osük.


*Indoklás*: R és B közös őse S (lásd nyilak), tehát a második állítás igaz. Az első hamisságára pedig egy Cassus-példa: legyen S az emlősök, legyen R a kutya, B a macska, nem lehet kutya helyére macskát tenni (R és B tökmás osztályok).

  • Kis kiegészítés:


Ezeket a feladatokat úgy érdemes megoldani, hogy minden tagadó állításnál le kell takarni a nem szócskát, majd ellenőrizni az így született állítások igazságát, ez könnyebb, mint azon agyalni, hogy akkor most miért is nem lehet valamit csinálni, vagy miért nem örökli, stb. Az így kapott igazságtartalmat vissza kell negálni, és kész a jó megoldás.

JSD-s Balambéros virágvevos mozibavivos

Ezen a helyen volt linkelve a jsd_alma2.jpeg 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)


Mirol szól a Liskov-elv?

Ha valami alosztálya valaminek, akkor helyettesítheto vele.Például:

Van egy emlos ososztályunk , ebbol származtatunk egy macska alosztályt.
Az emlos osztály bárhol helyettesítheto a macska alosztállyal, mert a macska alosztály az emlos ososztály gyermeke és orokolte minden tulajdonságát(kivéve a private).
A macska alosztály a sepeciálisabb.

Ez olyan mint: Íróeszkozzel írsz.(Ez az ososztály)
Van egy tollad és egy ceruzád.(Ezek az alosztályok(gyermekosztályok,leszármazott osztályok)

Mindegyikkel tudsz írni,mert mindegyik íróeszkoz.Ahol neked írnod kell, ott bevetheted mindegyiket.
Ha te valamilyen rajzot szeretnél készíteni inkább ceruzát használsz, nem pedig akármilyen íróeszkozt.

Hogyan találkozhatunk vele kulonbozo diagramokon?


Ezen a helyen volt linkelve a Liskov_elv.jpeg 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)


Mirol szól a Demeter-torvény?

Minden egységnek csak a barátaival szabadna kommunikálnia.
Ne beszélj idegenekkel!!!

Aggregáció és kompozíció

Aggregáció - nem semmisulnek meg egyutt


Ezen a helyen volt linkelve a aggregacio.jpeg 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)



Kompozíció - egyutt semmisulnek meg


Ezen a helyen volt linkelve a kompozicio.jpeg 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)


Mikor van szinkron és mikor asszinkron hívás?

Szinkron: Elmész a bufébe kérsz teát, szendvicset és megvárod amíg odaadják a kezedbe.(ettol szinkron... vársz a válaszra,ami a kérésre érkezik)
Asszinkron: Sétálsz az utcán és bedobod a levelet a postaládába és tovább mész.Nem várod meg,h mikor jon már érte a postás és nézed ahogyan elviszi.(Ettol asszinkron, h nem vársz válaszra)

Milyen objektív módszerek léteznek a data-flow diagram megrajzolásakor az egyes processzek kiválasztására az első szinten, illetve hogyan döntöm el, mi megy egy processzbe, és mi külön?
Amikor az elején kigyűjtöm a főneveket, mi alapján tudom eldobálgatni, mint ahogy LZ az előadáson tette?
Honnan tudom, hogy az majd később nem kell?

Nincs objektív módszer. Rá kell érezni, intuitívan kell tervezni. "Ha csónak kölcsönző rendszert tervezünk, akkor fontos-e a kacsák tollának a színe?"

"Az alábbi UML diagram alapján - a kulcs felhasználásával - jellemezze az állításokat!" típusú kérdéseknél az objektumok, és metódusaik, változóik viszonya (hol helyettesíthető, mikor meghívható, stb).
(Matúz Tamás)

A liskov és a demeter elv használatával.
A demeter elv kimondja, hogy ne beszélj idegenekkel, vagyis csak azokat a függvényeket hívhatja meg egy bizonyos objektum amik olyan más objektumokhoz tartoznak amiket lát.
(itt megjegyezném, hogyha 'B' leszármazottja 'A'-nak, és 'C' látja 'B'-t, akkor 'B' tartalmazza az 'A'-tól örökölt függvényeket tehát 'A' örökölhető függvényeit is meghívhatjuk.)
liskov: minden esetben írhatsz 'A' helyére 'B'-t, ha 'B' az 'A' nak leszármazottja, hiszen 'B' speciálisabb mint 'A'. Ezt magyarázandó: Ha azt mondom, hogy van a 'kutya' osztály és belőle származik a 'pincsi' és a 'tacskó', akkor ha nekem kutya kell, jó lesz mind a 3 objektum, de ha pincsi kell, akkor nem lesz jó a kutya objektum.

Mik a különbségek UML2 és a régi között, ami a magyar jegyzetben van(mit kell másképp írni)? Mikor milyen nyilat kell használni az UML2 szekvenciadigrammban?
(Fehér Antal)

Mit jelent a kovetkezo ábra?

Ezen a helyen volt linkelve a UML.jpeg 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)


A-hoz 6 db B tartozik.


-- tomi - 2009.01.10. -- Cassus - 2009.01.21.