SzoftTechVizsga110525

A VIK Wikiből

1. Mutasd be egy példán keresztül az objektum relációs leképezést (1-n, n-n)

1-több: a többes oldal táblájába felveszünk egy idegen kulcsot az egyes oldal táblájának elsődleges kulcsára.

Több-több: felveszünk egy új kapcsolótáblát, amely tartalmaz 1-1 idegen kulcsot az összekapcsolt táblák elsődleges kulcsára.

2. Mutasd be az ASP.NET-es vezérlőket példakóddal, mire jó, jellemzők leírása

3. Helyes-e az alábbi kód szálbiztonság szempontjából, hasonlítsd össze a lock, mutex-et, mire jó a semaphore?

Lock:

  • Egy objektum paramétert kell neki adni, ami csak referencia típus lehet.
  • Megvizsgálja, hogy zárolva van-e az objektum. Ha nincsen, akkor zárolja és tovább fut, ha zárolva volt, akkor vár.
  • A várakozás nem használ CPU időt.
  • A várakozó szálak egy sorba kerülnek, „érkezési sorrendben” kapnak hozzáférési jogot.
  • A lock blokkból való kilépéskor oldja a zárolást.
  • Zároló szál ismételten hívhat lock-ot.
  • Védeni kell a tagváltozókat:
    • Statikus változókat statikus tagváltozóval - osztályszintű zár
    • Nem statikusokat nem statikus tagváltozóval - objektumszintű zár
  • Más szálnak jelzésre nem alkalmas.

Mutex:

  • Olyan mint a lock, csak eltérő folyamatok szálai között is működik.
  • !Lock()-nál sokkal lassabb.
  • A WaitOne()-nal lehet lefoglalni (ami atomi módon zárolja, illetve blokkol, ha foglalt volt), elengedni a ReleaseMutex()-szel lehet.

Semaphore:

  • Olyan mint a Mutex, de egynél több (N darab, megadható) hozzáférést engedélyez, ha maximum N darab hozzáférést szeretnénk biztosítani.
  • A WaitOne()-nal lehet rá várakozni. Ha még szabad a szemafor, nem blokkol, eggyel csökkenti a szemafor számlálót. Ha nem szabad, akkor blokkol. Elengedni a ReleaseSemaphore()-ral lehet (ez növeli a számláló értékét eggyel).

4. Jellemezze a "Composite" tervezési mintát! Mire ad megoldást a "Composite" tervezési minta? Mutassa be konkrétan vagy egy példán keresztül a minta működését! Ezen felül rajzolja fel a minta osztálydiagramját, valamint adja meg a mintában szereplő osztályok szerepét!

  • Rész-egész viszonyban álló objektumokat fastruktúrába rendezi
  • A kliensek számára elérhetővé teszi, hogy az egyszerű és kompozit objektumokat egységesen kezelje.
  • Akkor használjuk, ha a kliensek számára el akarjuk rejteni, hogy egy objektum egyedi vagy kompozit objektum-e
  • Előnye, hogy elemi és összetett objektumokat egységesen lehet vele kezelni
  • Például: egy olyan grafikai alkalmazás, amely lehetővé teszi összetett grafikus objektumok létrehozását.
    • Van egy absztrakt ősosztályunk, aminek a leszármazottjai lehetnek egyszerű és összetett objektumok is. Ha ki akarjuk rajzolni őket, akkor elég az absztrakt ősosztály rajzol függvényét meghívni, így minden objektum ki tudja rajzolni saját magát és a felhasználónak nem kell tudnia, hogy az adott objektum egyszerű vagy összetett volt-e.


5. Ismertesse a Dokumentum/Nézet (Document-View) architektúrát. Ennek keretében rajzolja fel a minta osztály és szekvenciadiagrammját. Adja meg az egyes osztályok szerepét!

Document (Dokumentum):

  • Feladata: az adatok tárolása, menedzselése. Modellnek is szokás nevezni.
  • Olyan osztály(ok), melyek az adatokat tagváltozóikban tárolják és olyan tagfüggvényekkel rendelkeznek, melyek kezelik ezeket az adatokat (pl. Load, Save), és elérhetővé teszik más osztályok számára. (pl. View számára)

View (Nézet):

  • Feladata: az adatok megjelenítése a dokumentum adatai alapján és a felhasználói interakciók kezelése (pl. menük, egér, billentyűzet). A felhasználói interakciók során általában a Dokumentum tartalmát módosítja.
  • A View általában ablakként vagy tabfülként jelenik meg a kliensalkalmazásokban.

Document:

  • Az osztály objektumai reprezentálnak egy-egy dokumentumot, és a views nevű listájában tárolja a beregisztrált nézeteket.

ExcelDocument:

  • Egy példa Document leszármazottra
  • Tárolja a data, stb… tagváltozójában a dokumentum adatait (pl. cella értéke)
  • Publikus lekérdező függvényeket biztosít a többi osztály számára az adatokhoz (pl. GetData)
  • Publikus adatmódosító függvényeket biztosít a többi osztály számára (pl. SetData). Ezek módosítják a tagváltozókat, majd az UpdateAllViews() függvény meghívásával értesítik a többi nézetet a változásról.
  • Az UpdateAllViews() frissíti a beregisztrált nézeteket

View:

  • Az egyes nézetek közös őse vagy interfésze, lehetővé teszi egységes kezelésüket.
  • Tartalmaz egy referenciát a dokumentumra, amin keresztül a leszármazott nézetek elérhetik a dokumentumot, melynek adatait megjelenítik.

TableView, PieChartView :

  • A dokumentum teljes nézeteit reprezentálják.
  • A View-ból származnak.
  • Felüldefiniálják vagy implementálják a View Update() műveletét. Ebben a dokumentumban az aktuális állapota szerint frissítik a nézetet.

6. Milyen két - a jogosultságra vonatkozó - biztonsági megoldást támogat a .NET keretrendszer? Ismertesse őket röviden!

Szerep alapú biztonság ( role based security):

  • A felhasználó a rendszerben betöltött szerepén és jogain alapuló biztonsági mechanizmus.
  • A felhasználókat csoportokba rendezik szerepek alapján.
  • A .NET (akárcsak a Windows) szál szinten kezeli.
  • Nem véd a rosszindulatú kódtól.
  • Nincsenek felkészítve a mobil kódokra.
  • Ellenőrzés lehet:
    • Dekleratív:
      • felhasználói szerepeket megkövetelhetjük
      • felhasználó szinten is akár
      • minden azonosított felhasználóra engedélyezhetünk
    • Imperatív:
      • ha nincs elegendő információnk fordítási időben a felhasználóról, akkor programkódból is ellenőrizhetjük a feltételeket.

Kóderedet alapú biztonság (code access security):

  • Képes meghatározni, hogy a kód és a meghívott kód mit tehet, valamint képes egyértelműen azonosítani a kódot, nemcsak a felhasználót.
  • Szerelvényekhez kell meghatározni, hogy milyen jogaik vannak.
  • Ezt a rendszergazda állítja be a biztonsági házirendben. (nem egyesével)
  • Ebben a kód eredete alapján adhatunk jogokat a szerelvényeknek.

7. Mi az attribútum, mutass példát használatra (lekérdezés nem kell)

  • deklaratív jelleggel metaadatokat közölhetünk a kód bizonyos részeire vonatkozóan
  • minden nyelvi elemhez rendelhető (típushoz, osztályhoz, interfészhez, metódushoz, stb.)
  • megváltoztathatja a fordító viselkedését, VAGY futási időben lekérdezhető
  • saját attribútumok alkothatók (ilyenkor kötelezően le kell kérdezni)
  • általában az attribútumokkal csak a CLR számára szeretnénk információkat közölni
  • felhasználás: natív kóddal való együttműködés testreszabása, perzisztens osztályok létrehozása, metódusszintű jogosultság ellenőrzés, tranzakcióban részt vevő osztályok megjelölése, web szolgáltatások

Példa (sorosíthatóság):

[Serializable]
int a;

Példa (szerepkör ellenőrzés):

[PrincipalPermission(SecurityAction.Demand, Role="Admin")]
public void DeleteUser() { /* ... */ }

8. Rajzolj négyzetet, ami besötétedik öt másodperc alatt

Nem 100%-os megoldás, de nem is vészesen rossz.

public partial class Form1: Form
{
  public Form1
  {
	InitializeComponent();
  }

int counter = 0;
int szín = 255;
private Brush mybrush;
Timer timer1 = new Timer()
Timer.Interval = 1000; // 1 sec
timer1.Tick += new System.EventHandler(timer_Tick);
timer1.Start();

private void timer_Tick(object sender, EventArgs e){
 if( counter < 5 ){
	szin -= 51; // Ha mind a 3 RGB szín 0-s akkor tiszta fekete lesz
	counter++;}
 Invalidate();
}

protected override void OnPaint(PaintEventArgs e){
 base.OnPaint(e);
 using(mybrush = new SolidBrush(Color.FromArgb(szin, szin, szin))){
 e.Grapics.FillRectangle(mybrush, int x, int y, int weight, int height);
}

}

-- waczkor - 2011.05.31.

-- Évi - 2011.05.30.