Spisak zadataka obrađenih na vežbama u toku školske 2010./2011. godine


Termini vežbi i obrađene teme

termin 1, 13.10.2010. (Predstavljanje predmeta, upoznavanje sa razvojnim okruženjem)
Ukratko o predmetu i materiji koju predmet pokriva. Način izrade i bodovanja domaćih zadataka i projekta.
Predstavljanje osnovnih koncepata objedinjenih razvojnih okruženja (IDE) i predstavljanje MSVC.
Prazan program na jeziku C++.

termin 2, 20.10.2010. (Elementi jezika C++ koji nisu objektno orijentisani)
Zadaci 1.1 (standardni izlaz), 1.2 (standardni ulaz), 1.3 (rad sa dinamičkom memorijom) [2], sa osvrtom na svaku novinu u C++, uz paralelu sa jezikom C i podsećanje na najznačajnije elemente jezika C.
Zadaci 3, 4, 5 [1] usaglašeni sa važećim standardom za jezik C++.

termin 3, 27.10.2010. (Elementi jezika C++ koji nisu objektno orijentisani)
Zadaci 1.6 (standardni ulaz i izlaz), 1.7 (rad sa dinamičkom memorijom, konstante), 1.8 (reference), 1.9 (ugrađene funkcije) [2], sa osvrtom na svaku novinu u C++, uz paralelu sa jezikom C i podsećanje na najznačajnije elemente jezika C.
Zadaci 6, 7, 8 [1] usaglašeni sa važećim standardom za jezik C++.

termin 4, 03.11.2010. (Klase)
Prevođenje tipičnog primera strukturiranog programiranja u pokazni OO primer (polazna osnova je zadatak 1.10 [2]).
Zadaci 2.1. i 2.2 [2], pojmovi klase i instance; pojmovi const, friend i static, primeri njihove upotrebe; razlika izmedju friend funkcije i metode; konstrukcija projekta od više fajlova.

termin 5, 15.11.2010. (Klase, Konstruktori)
Utvrđivanje pojmova const, friend i static (upotrebljen tekst zadatka 2.2 [4]). Zadatak 2.4 [2], podrazumevani konstruktor, konstruktor konverzije, konstruktor sa više parametara; podrazumevane vrednosti argumenata funkcija. Zadatak 2.5 [2], ključna reč explicit.

termin 6, 17.11.2010. (Konstruktori i destruktori, rad sa tokovima na disku)
Program 3.1 [3], konstruktor kopije, konverzije i podrazumevani konstruktor; destruktor.
Otvaranje i zatvaranje datoteka, načini pristupa, čitanje/pisanje, menjanje formata (width, setw, fill, precision).
Jednostavni primeri rada sa datotekama (ispitivanje stanja toka, pozicioniranje unutar toka i menjanje formata).

termin 7, 25.11.2010. (Operatorske funkcije)
Program 4.1 [3], operator konverzije tipa, operator ispisa.
Program 4.2 [3], operator dodele; sličnosti i razlike između konstruktora kopije i operatora dodele.
Zadatak 10 [1], aritmetički operatori za razne tipove operanada, operatori == i !=, operatori unarno + i unarno -, operatori << i >>; operatorske funkcije kao članice klase i kao prijateljske funkcije; ispravno određivanje povratnog tipa operatorske funkcije.

termin 8, 02.12.2010. (Operatorske funkcije, nabrajanja, ukratko o nasleđivanju klasa)
Program 4.3 [3], operator [].
Program 4.4 [3], operator ().
Program 4.6 [3], nabrajanja, ostali važni operatori.
Uvodno izlaganje o nasleđivanju klasa.

termin 9, 09.12.2010. (Nasleđivanje klasa, polimorfizam)
Zadatak 4.1 [2], osnovne i izvedene klase; scenario izvršavanja konstruktora kod izvedenih klasa.
Zadatak 4.2 [2], virtuelne metode.
Zadatak 4.4 [2], apstraktne metode i apstraktne klase; realizacija i upotreba preklopljenog operatora << za klase sa pratećim izvedenim klasama; ukratko o UML klasnim dijagramima.


termin 10, 15.12.2010. (Polimorfizam, supstitucija, neke napredne teme)
Zadatak 4.4 [2] Diskusija o polimorfizmu, substituciji i mehanizmu konstrukcije objekata izvedenih klasa.
Zadatak 4.5 [2]. Pristup privatnim atributima osnovne klase iz izvedenih klasa, realizacija i upotreba preklopljenih operatora >> i <<.
Zadatak 4.6 [2]. Uslovno prevođenje. Definicije korisničkih tipova. Neke smernice za konstrukciju srednje složenog programskog sistema.
Diskusija o vremenu života objekata i raspodeli odgovornosti za stvaranje i uništavanje objekata u složenijim programskim sistemima.
Diskusija o mehanizmu pravljenja i unistavanja objekata klasa (nasledjivanje). Diskusija o virtuelnom destruktoru.

termin 11, 22.12.2010. (Upotreba STL klasa i algoritama)
Diskusija teksta domaćih zadataka.
Jednostavni primeri upotrebe STL zbirki i algoritama (vector, for_each, list, for_each, map).
Primer upotrebe šablonskih algoritama (copy, sort).
Diskusija o mehanizmu izuzetaka za detekciju i oporavak od gresaka u softverskim sistemima.

termin 12, 27.12.2010. (Projektni uzorci, najvažniji UML dijagrami)
Projektni uzorak Singleton (vector/priority_queue).
Projektni uzorak Composite (Composite DP - Jednostavan primer).
Projektni uzorak Template Method (Izmenjeni zadatak 4.6 [3]; primena Template Method DP pri realizaciji operatora <<).
Projektni uzorak Strategy (Strategy DP - Jednostavan primer).
Napomena studentima: ovaj primer ima nekoliko grešaka zbog kojih nije potpuno ispravan i treba ga koristiti samo za shvatanje koncepta Strategy (upozorenja koja prevodilac ispisuje ukazuju na mesta gde treba tražiti greške).
Projektni uzorak Visitor (diskusija u okviru TSS-a).
Detaljna diskusija i primeri (u stvarnom svetu, u TSS, u projektnom zadatku, u domaćim zadacima).
UML dijagrami: klasni dijagram i dijagram sekvence.

termin 13, 29.12.2010. (Diskusija teksta domaćih zadataka, TSS)
Diskusija teksta domaćih zadataka, upoznavanje sa najbitnijim konceptima.
TSS. Objašenjenje osnovnih koncepata. Definicije korišćenih tipova. Primena projektnih uzoraka u TSS.
UML dijagrami: klasni dijagram, dijagram sekvence i dijagram saradnje.

Ukupno 26 časova (predviđenih 13 nastavnih sedmica x dva časa sedmično).

Zadaci koji nisu obrađeni ove školske godine jer je relevantno gradivo obrađeno u okviru drugih zadataka:
Znatno olakšani zadatak 9 [1]. Olakšanje se ogleda u tome što je tip podataka u steku promenjen u sam tip podatka koji se čuva, umesto pokazivača na taj tip. Dalje, uklonjeno je preklapanje svih operatora koji su bili preklopljeni. Konačno, dodat je fajl sa main() funkcijom koji ilustruje upotrebu klase Stack.
Olakšani zadatak 9 [1], gde stek ne sadrži kopije podataka, već njihove adrese. Upotreba fstream sa preklopljenim operatorom <<, operator =, prefiksni i postfiksni operator ++, operator <<. Napomena studentima: obratite pažnju na namerno ostavljene greške koje su posledice neadekvatnog korišćenja klase Stack.
Prošireni zadatak 9 [1]. Upotreba klasa Stack i StkIterator, upotreba operatora () i *. Odnos između klasa Stack i StkIterator, utvrđivanje koncepta iteratora.


Napomene:
Zadatke koji su izmenjeni u odnosu na literaturu treba uporediti sa izvornim verzijama radi boljeg razumevanja učinjenih izmena.
Originalni programski kod TSS možete preuzeti odavde. Verziju programskog koda spremnu za rad u MSVC 6 možete preuzeti odavde. Verziju programskog koda usaglašenu sa standardom i spremnu za rad u MSVC 2005 možete preuzeti odavde. Verziju programskog koda očišćenu od nepreglednih komentara možete preuzeti odavde. UML model TSS možete preuzeti odavde.
Zadatak 4.6 [2] postoji i u [3], kao Zadatak 5.11.1, propraćen detaljnim objašnjenjima.

Korišćena literatura

[1] D. Milićev, Objektno orijentisano programiranje na jeziku C++ - skripta sa praktikumom
[2] L. Kraus, Rešeni zadaci iz jezika C++, 2. izdanje
[3] L. Kraus, Programski jezik C++ sa rešenim zadacima, 7. izdanje