Spisak zadataka obrađenih na vežbama u toku školske 2008./2009. godine
Termini vežbi i obrađene teme
termin 1, 03.11.2008. (Predtavljanje 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.
termin 2, 06.11.2008. (Elementi jezika C++ koji nisu objektno orijentisani)
Prazan program na jeziku C++.
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, 13.11.2008. (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, 27.11.2008. (Klase)
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, 01.12.2008. (Konstruktori i destruktori, rad sa tokovima)
[Napomena: termin je trajao 3 časa]
Prevođenje tipičnog primera strukturiranog programiranja u pokazni OO primer (polazna osnova je zadatak 1.10 [2]).
Program 3.1 [3], konstruktor kopije, konverzije i podrazumevani konstruktor.
Zadatak 2.5 [2], kljucna rec explicit.
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 6, 04.12.2008. (Operatorske funkcije)
Program 4.1 [3], operator konverzije tipa, operator ispisa.
Program 4.2 [3], operator dodele.
Zadatak 10 [1], aritmetički operatori za razne tipove operanada, operatori == i !=, operatori unarno + i unarno -, operator <<; operatorske funkcije kao članice klase i kao prijateljske funkcije; ispravno određivanje povratnog tipa operatorske funkcije.
termin 7, 08.12.2008. (Operatorske funkcije, nabrajanja, izvedene klase i polimorfizam)
Program 4.3 [3], operator [].
Program 4.4 [3], operator ().
Program 4.6 [3], nabrajanja, ostali važni operatori.
Zadatak 4.2 [2], osnovne i izvedene klase, virtuelne metode.
termin 8, 11.12.2008. (Izvedene klase i polimorfizam)
Zadatak 4.1 [2], osnovne i izvedene klase - utvrđivanje gradiva, scenario izvršavanja konstruktora kod izvedenih klasa.
Zadatak 4.4 [2], apstraktne metode i apstraktne klase, ključna reč protected, realizacija i upotreba preklopljenog operatora << za klase sa pratećim izvedenim klasama, ukratko o UML klasnim dijagramima.
termin 9, 15.12.2008. (Utvrđivanje gradiva)
[Napomena: termin je trajao 3 časa]
Zadatak 4.5 [2]. Pristup privatnim atributima bazne 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. Virtuelni destruktor.
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.
termin 10, 18.12.2008. (Neke napredne teme, ukratko o STL klasama)
Zadatak 5.11.2 [3]. Pojam i ostvarenje iteratora.
Diskusija o vremenu života objekata i raspodeli odgovornosti za stvaranje i uništavanje objekata između u složenijim programskim sistemima.
Modifikacija zadatka 4.6 [2] koja koristi std::list.
termin 11, 22.12.2008. (Diskusija teksta domaćih zadataka, upotreba STL klasa i algoritama)
Diskusija teksta domaćih zadataka, upoznavanje sa najbitnijim konceptima.
Jednostavni primeri upotrebe STL zbirki i algoritama (vector, for_each, list, for_each, map).
Primer upotrebe šablonskih algoritama (copy, sort).
termin 12, 25.12.2008. (Projektni uzorci, najvažniji UML dijagrami, ukratko o TSS)
Projektni uzorci Visitor, Singleton i Composite. Detaljna diskusija i primeri (u stvarnom svetu, u TSS, u projektnom zadatku, u domaćim zadacima).
Singleton DP - jednostavan primer, ujedno primer upotrebe različitih STL zbirki za rešavanje istog problema (vector/priority_queue).
Composite DP - Jednostavan primer.
UML dijagrami: klasni dijagram i dijagram sekvence.
termin 13, 29.12.2008. (Projektni uzorci, najvažniji UML dijagrami, ukratko o TSS)
Projektni uzorci Strategy, Template Method. Detaljna diskusija i primeri (u stvarnom svetu, u TSS, u projektnom zadatku, u domaćim zadacima).
Izmenjeni zadatak 4.6 [3]. Primena Template Method DP pri realizaciji operatora <<.
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).
Ispit održan 01.10.2006. - rešenje ispitnog zadatka 5.
Ukupno 28 časova (predviđenih 14 nastavnih sedmica x 2 časa sedmično).
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.
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