Ciljevi kolegija Objektno programiranje (C++)

Pretpostavke:

  • Poznavanje osnova programskog jezika C++.
  • Poznavanje osnova STL-a: ulaz/izlaz, stringovi, vektori, itd.

Organizacija kolegija

Ocjenjivanje

Elementi ocjenivanja

  1. Završni ispit (50 %),
  2. Domaće zadaće (50 %).
  3. Aktivnost u nastavi.

Prvi element ocjenjivanja

  • Završni pismeni ispit piše se na papiru i uključuje čitavo gradivo. Pravo pristupa ispitu dobiva se ispunjavanjem uvjeta prema drugom i trećem elementu ispitivanja.
  • Minimalni uvjeti za prolaz na prvom elementu ocjenjivanja je postići 30 od mogućih 100 bodova na završnom ispitu.
  • Popravni završni ispit organizira se za sve studente koji su pristupili završnom ispitu i nisu postigli dovoljno bodova za prolaznu ocjenu, kao i za studente koji nisu pristupili završnom ispitu.

Drugi element ocjenjivanja

  • Sastoji se od zadaća koje se boduju ako su predane u zadanom roku. Neke zadaće su manje i uključuju samo doradu programa rađenih na vježbama, dok druge mogu biti opsežnije.
  • Minimalni uvjeti za prolaz na drugom elementu ocjenjivanja je postići 30 od mogućih 100 bodova na zadaćama. To je uvjet za pristup završnom ispitu.
  • Mogućnosti popravka drugog elementa ocjenjivanja nema.

Treći element ocjenjivanja

  • Aktivnost u nastavi je nužan preduvjet za bodovanje zadaća te stoga i za pristup završnom ispitu. Nužno je biti prisutan na 70 % vježbi i 50 % predavanja.
  • Manju aktivnost od minimalno propisane moguće je opravdati samo posebnim razlozima.

Zaključivanje ocjene

  • Ukupni broj bodova = (bodovi na završnom ispit + bodovi na zadaćama)/2.
  • Ocjena se dobiva iz ukupnog broja bodova prema sljedećoj tablici:
bodovi ocjena

0 do 44

nedovoljan

45 do 59

dovoljan

60 do 74

dobar

75 do 89

vrlo dobar

90 do 100

izvrstan

Literatura

Osnovna:

  • Stanley B. Lippman, Josée Lajoie, Barbara E. Moo: C++ Primer, Fifth Edition, Addison Wesley Professional, 2012.

Napredna:

  • Bjarne Stroustrup: The C++ Programming Language, Fourth Edition, Addison Wesley, 2013.
  • Nicolai Josuttis: The C++ Standard Library - A Tutorial and Reference, 2nd Edition, Addison Wesley, 2012.
  • Nicolai Josuttis: C++17 - The Complete Guide: First Edition, NicoJosuttis, 2019.
  • David Vandevoorde, Nicolai Josuttis, Douglas Gregor: C++ Templates: The Complete Guide, 2nd Edition, Addison Wesley, 2018.
  • Scott Meyers: Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14, O’Reilly Media Inc, 2015.
  • Scott Meyers: Effective C++, Third Edition, Addison-Wesley, 2006.
  • Scott Meyers: Effective STL, Addison-Wesley, 2001.
  • Herb Sutter: Exceptional C++, Addison Wesley, 2000.
  • Stephen C. Dewhurst: C++ Common Knowledge, Addison Wesley, 2005.
  • Erich Gamma, et. all: Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series).
  • Andrei Alexandrescu: Modern C++ Design: Generic Programming and Design Patterns Applied, Addison-Wesley, 2001.

Programski jezik C++

Povijest

  • Programski jezik C++ nastao je razvojem jezika C i zadržava visoku kompatibilnost s njime.
  • Kreator jezika je Bjarne Stroustrup (www.stroustrup.com). Razvoj je započeo 1979. g.; ime C++ skovano je 1983. godine, a prva komercijalna implementacija pojavila se 1985.
  • Između 1985. i 1989. jezik je doživio veće inovacije: zaštićeni članovi, parametrizirane klase, višestruko nasljeđivanje itd.
  • Jezik je 1997. godine definiran je ISO standardnom. To je prva standardizacija jezika.
  • Godina 2003. — manja revizija prvog standarda.
  • Godina 2011. — novi standard s brojnim novostima i poboljšanjima.
  • Godina 2014. — Revizija standarda iz 2011. godine.
  • Godina 2017. — Revizija standarda iz 2014. godine.
  • Godina 2020. — Očekuje se novi standard.

Za informacije o standardu vidjeti: isocpp.org/std/.

Karakteristike jezika

Jezik opće namjene visoke efikasnosti. Omogućava programiranje niske razine i programiranje s apstrakcijama. Slijedi princip da apstrakcija ne smije negativno utjecati na efikasnost koda.

Razvoj softvera

Razvoj programske aplikacije ili programske biblioteke zahtjeva korištenje niza softverskih alata i sustava među kojim su temeljni sljedeći:

Prevodioci za C++

Linux

Microsoft Windows

Softverske biblioteke

Standardna biblioteka ne uključuje biblioteku za konstrukciju grafičkog sučelja. S druge strane, postoji čitav niz različitih C++-biblioteka za konstrukciju grafičkog sučelja. Na primjer:

Sustav za upravljanje kodom

Stoga se javlja potreba za sustavom koji bilježi sve promjene učinjene u svakoj izvornoj datoteci i nudi mogućnost rješavanja konflikata koji nastaju kada više programera pokušava mijenjati istu datoteku. Takvi se sustavi nazivaju sustavima za upravljanje kodom (eng. version control systems).

Sustavi za upravljenje kodom otvorenog tipa

Distribuirani

Centralizirani

Sustav distribucije koda

Softverski sustavi mogu se distribuirati kao binarni kod spreman za izvršavanje ili kao izvorni kod koji prvo treba kompilirati.

Distribucija izvornog koda

koji zajedno čine autotools (Unix/Linux platforme)

Autotools sustav je danas istisnut CMake sustavom koji je postao industrijski standard.

Integrirane okoline za razvoj programa

Integrirane okoline za razvoj programa nude editor za pisanje programa i različite alate za prevođenje, analizu, ispravljanje programa itd. One često integriraju i sustav za upravljanjem kodom i sustav za distribuciju koda.

Microsoft Windows

Ostali sustavi:

Objektno orijentirano programiranje

U centru interesa softverskog inženjerstva su složene aplikacije. Problemi:

Tehnike programiranja:

Proceduralna.

  • Razlaganje programa na manje cjeline — implementacija pomoću funkcija, procedura.
  • Nemogućnost definiranja apstrakcije koncepata iz aplikacijske domene.
  • Ne nudi podršku za postizanje održivosti i proširivosti.

Objektno orijentirana.

  • Klase predstavljaju koncepte iz aplikacijske domene.
  • Program se sastoji od objekta (instance klasa) i njihove komunikacije.
  • Objekti imaju punu odgovornost za svoje ponašanje.

Osnovni elementi OO tehnike:

Generičko programiranje

Pojam generičkog programiranja odnosi se na generalizaciju softverskih komponenti kako bi se lako mogle koristiti u različitim situacijama. Osnovni elementi generičkog programiranja u C++-u su parametrizirane klase i funkcije.