Szoftver technikák vizsga, 2007. 01. 30.
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.
1. feladat
DLL-ek definíciója, előnyei? Mi a különbség a statikus és dinamikus linkelés között? (10p?)
2. feladat
WINAPI: Menüpont hatására modális dialógusablak, benne egy beviteli mező, ami egy négyzet oldalhosszát kéri. OK után a négyzetet piros színnel kitöltve kirajzolja a bal felső sarokba. A kurzormozgató gombok hatására egy-egy pixellel az adott irányba lépteti. (18p)
3. feladat
MFC-ben milyen osztályokkal valósítják meg az MDI-os document-view architektúrát, ezek hogy érik el egymást? Hogyan oldják meg, hogy minden nézet ugyanazt mutassa, mik az előnyei?
4. feladat
Milyen életciklus modellt választanál egy 2-3 hónapos projekthez, amit már csinált a csapat? (3p)
- Magyarázd el az iteratív fejlesztést a rajz alapján (rajz is kellett persze). (5p)
- Három rétegű architektúra leírása. (5p)
5. feladat
Singleton tervezési minta mire jó, mikor használják, class diagram, osztályok szerepe? C++/C#/Java példával.
6. feladat
KDE
- Hogyan jelenítene meg egy modális dialógusablakot, és OK/Cancel lekérdezése. (5p)
- saveDocument (12p?)
Dialógusablak:
Wizarddal megszerkesztem a dialógusablakot, létrejön egy adag file
- =mydialog.xml(?)=: a dialógusablak paramétereit tartalmazza. Ebből fordítja az UIC (User Interface Compiler) a base osztályokat.
- =mydialogbase.h=, =mydialogbase.cpp=: absztrakt osztály, nem szabad módosítani, mert a designer felülírja. A subclassing wizarddal legeneráltatható a leszármaztatott osztályok váza is.
- =mydialog.h=, =mydialog.cpp=: itt kell implementálni a slotokat.
A =QDialog= slotjai: exec(), close(), accept() (=OK), reject() (=Cancel).
saveDocument:
bool SDIDoc::saveDocument(const KURL &url, const char *format) { QFile f(url.isLocalFile() ? url.path() : KTempFile().name()); // ez eredetileg 11 sor volt :) if (!f.open(IO_WriteOnly|IO_Truncate)) { KNotifyClient::event("Cannot save file"); return false; } // példa: QValueList<double> mentése QDataStream stream(&f); for (QValueList<double>::iterator it=data.begin(); it!=data.end(); it++) stream << *it; f.close(); if (!url.isLocalFile()) { if (!KIO::NetAccess::upload(f.name(), url)) { KNotifyClient::event("Cannot save file"); return false; } KIO::NetAccess::removeTempFile(f.name()); } modified=false; return true; }
7. feladat
Legalább négyféle tesztelés típus felsorolása és rövid jellemzése. (10p)