Objektno orjentirano programiranje Predavanje 1 Uvod Ciljevi Prvi program Konstante i varijable
Sadržaj Način provođenja nastave Obaveze studenata Sadržaj kolegija Oblik provođenja ispita
Toni Jakovčević A420 toni.jakovcevic@fesb.hr Konzultacije : po dogovoru Predavanja i laboratorijske vježbe
Način provođenja nastave Predavanja 3 sata tjedno Srijedom 11-14, B402 Vježbe 2 sata tjedno Ulazni kolokvij Termini: ČET 12:30-14:00 B525 ČET 14:00-15:30 B525 Samostalni rad Min. 2 sata tjedno Vrijeme i mjesto: po želji
Obaveze studenata Pohađanje predavanja Aktivno sudjelovanje Pohađanje vježbi Priprema za vježbe Rješavanje dodjeljenih zadataka Samostalan rad
Obaveze nastavnika Priprema literature za učenje Priprema zadataka za samostalni rad konzultacije
Preduvjeti Osnovna znanja o računalima i programiranju. Poznavanje C programskog jezika Varijable, operatori, kontrola toka, funkcije...dinamička alokacija memorije Poznavanje engleskog jezika
Ispit Kolokviji Ispit Pismeni + usmeni Pismeni: programerski zadaci Dijelovi programa Usmeni: objasniti kod
Sadržaj kolegija Način razmišljanja na objektno orijentiran način Osnove objektno orijentirane paradigme Principi programiranja. Vrste programskih jezika. Programski jezik C++. Varijable, funkcije. Kontola toka programa. Standardni ulaz i izlaz. Pojam klase i objekta. Elementi klase. Konstruktori, destruktori, mutatori pristupnici. Programski blokovi i moduli. Imenički prostori. Apstraktni tipovi podataka. Operatori i preopterećenje operatora. Nasljeđivanje i polimorfizam. Korištenje gotovih klasa lista, string, vektori, stog, red. Generičke klase, generičko programiranje i predlošci Rukovanje iznimkama.
Literatura Slajdovi sa predavanja Elearning portal The Object-Oriented Thought Process (4th Edition) (Developer's Library) by Matt Weisfeld (Author) Addison-Wesley Professional; 4 edition (March 23, 2013) Code Complete: A Practical Handbook of Software Construction, Second Edition, by Steve McConnell (Author) Microsoft Press; 2nd edition Object-Oriented Analysis and Design with Applications (3rd Edition), by Grady Booch, Robert A. Maksimchuk, Michael W. Engle, Bobbi J. Young, Jim Conallen, Kelli A. Houston (Authors) Addison- Wesley Professional Na hrvatskom Julijan Šribar i Boris Motik, Demistificirani C++
Razvojna okolina Microsoft Visual Studio ECLIPSE + CDT (C/C++ Development Tooling)
Kako naučiti C++ u 21 dan
Kako naučiti programirati
Zašto? Dobiti ocjenu? Završiti fakultet? Lakše se zaposliti? Rješavanje problema Automatizacija akcija Umjetna inteligencija Pametni okoliši...
Programiranje Računalno programiranje ili kodiranje Programiranje je pisanje uputa računalu što i kako učiniti, izvodi se u nekom od programskih jezika. Programiranje je umjetnost i umijeće u stvaranju programa za računala. sadrži u sebi elemente dizajna, umjetnosti, znanosti, matematike kao i inžinjeringa. Osoba koja stvara program zove se programer. wikipedia
Programiranje Vještina programiranja objedinjuje najbolje od: Matematike: koristi formalni jezik za označavanje ideja Inženjerstva : dizajniranje novih proizvoda, slaganje i kombiniranje dostupnih komponenti, uspoređivanje uspješnosti konkurentnih rješenja Prirodnih znanosti: pročavanje ponašanja kompleksnih sustava, prredviđanje ponašanja..
Osnovni dijelovi računala Memorija Procesor Ulazno izlazni uređaji
Osnovni dijelovi računala Procesor : srce (ili mozak) računala Izvršava instrukcije Obično jedan čip koji je u stanju izvršavati naredbe napisane strojnim jezikom Razumije svoj strojni jezik Memorija Radna memorija (RAM) Procesor čita naredbe iz memorije Memorija se koristi i za pohranu podataka koje koristi procesor u izvršavanju naredbi
Memorija Memorija je organizirana kao niz memorijskih lokacija Neke lokacije sadrže naredbe(program - code) Neke sadrže podatke (data) Stack automatske varijable korištene u funkcijama Heap dinamički alocirana memorija Podatke program dohvaća, čita i mijenja Stack Heap Static Data Code Process
Uređaji za ulaz/izlaz
Programski jezici Više razine Niže razine Kompajlerski Interpreterski
Nestrukturirano programiranje Prvi programi su obično niz naredbi u main modulu bez struktrure
Proceduralno Niz povezanih naredbi koje ispunjavaju jedan zadatak su grupirane u procedure (funkcije) Glavni program koristi pozive procedure za izvršavanje niza naredbi Procedure mogu primati parametre
Modularno Skup procedura koje čine logičku cjelinu grupira se u module Podaci: svaki modul brine se o svojim podacima Podaci modula = unutarnje stanje Svaki modul jednom se uključuje u program
Objektno orjentirano Mane modula: ne možemo uključivati više puta imati više verzija unutarnjih stanja Objekti su bolje rješenje Realni svjet sastavljen je od objekata a ne od funkcija
Objektno orjentirano programiranje Udruživanje podataka sa radnjama na njima Event driven programiranje Enkapsulacija Skrivanje podataka Nasljeđivanje Polimorfizam
Rješavanje problema Rješavanje problema: Formulirati problem Kreativno razmisliti o rješenju Izraziti rješenje točno i precizno Usvjanjem vještine programiranja: 1: problem: naučiti programirati 2: koristiti vještinu programiranja u rješavanju problema
Zahtjevi programiranja Pouzdanost - program mora raditi ono što se od njega traži. Za dobre podatke davati dobre rezultate Robustnost nepodložan pogreškama sustava. Iskoristivost (usability) ergonomičnost programa. Lak za korištenje krajnjim korisnicima Prenosivost izvoditi se na različitim softverskim i hardverskim platformama Lako održavanje proširenje, ispravke pogrešaka Efikasnost performansi - brzina izvođenja, zahtjev za memorijom, resursima...
Kako napisati svoj prvi program u c++ Instalirati C++ kompajler Kopirati #include <iostream> using namespace std; int main() { cout<<"dobar Dan!!"<< endl; } U tekstualnu datoteku Pohraniti datoteku na disk s imenom hello.cpp Kompajlirati kod Pokrenuti aplikaciju
Kompajliranje Pisanje uputa računalu Izvorni kod: upute napisane u nekom programskom jeziku Tekstualna datoteka!! Objektna datoteka Izvorni kod nakon obrade kompajlera Strojni kod.obj (win) ili.o (linux) datoteke Izvršna datoteka.exe nakon linkanja
Linkanje Broj.cpp i.obj datoteka je odnosa 1:1 Jedna datoteka izvornog koda kompajlira se u jedan objektni kod Za dobiti izvršnu datoteku potrebno je još povezati obj u exe Linker Cl, gcc i c++ su istovremeno i kompajleri i linkeri Make
Kompajleri Windows Microsoft Visual C++ (cl) MinGW (c++ ) Linux gnu c compiler (gcc) Razvojna okolina Visual studio ECLIPSE
C++ Nije potpuno objektno orjenitran (hibridni jezik) C with classes Potpuno komatibilan sa C jezikom Brz
C++ Bjarne Stroustrup Autor c++ jezika
Hello world! #include <iostream> using namespace std; //comment!! int main() { cout<<"dobar Dan!!"<< endl; }
Ulaz / izlaz Std namespace cin i cout Operator toka << i >> endl cout<<"hello! <<endl; cout<<"pick a number <<endl; cin>>x;
Varijable Memorijski objekti: podaci koji se nalaze u memoriji za vrijeme izvršavanja programa Memorijska adresa: redni broj lokacije u memoriji na kojoj je podatak nalazi Procesor : može mijenjati podatke u memoriji. Varijable : promjenjivi memorijski objekti Imaju ime Imaju tip
Deklaracija i inicijalizacija Deklaracija : ime i tip varijable Rezervira se prostor za memorijski objekt Tip određuje veličinu prostora Inicijalizacija : deklaracija u kojoj se određuje i početna vrijednost varijable.
Varijable Strongly typed (vs. weak ) Staticly typed (vs. Dynamicly) Deklaracija varijable: int i; float j; char z; double d;...
Tip podatka Određuje : način kodiranja podatka, način kako zauzima memoriju računala operacije koje su nad tim podatkom dozvoljene U većini programskih jezika standardni su tipovi podataka: numerički (cjelobrojni ili realni) logički znakovni
Osnovni tipovi podataka
// sizeof.cpp - Program koji ispisuje zauzeće memorije // za sve proste tipove C++ jezika #include <iostream> using namespace std; int main() { cout << "Sizeof(bool) = " << sizeof(bool) << endl; cout << "Sizeof(unsigned char) = " << sizeof(unsigned char) << endl; cout << "Sizeof(char) = " << sizeof(bool) << endl; cout << "Sizeof(short) = " << sizeof(short) << endl; cout << "Sizeof(unsigned short)= " << sizeof(unsigned short)<< endl; cout << "Sizeof(int) = " << sizeof(int) << endl; cout << "Sizeof(unsigned int) = " << sizeof(unsigned int) << endl; cout << "Sizeof(long) = " << sizeof(long) << endl; cout << "Sizeof(unsigned long) = " << sizeof(unsigned long) << endl; cout << "Sizeof(float) = " << sizeof(float) << endl; cout << "Sizeof(double) = " << sizeof(double) << endl; return 0; }
/* limits.cpp * Program koji ispisuje maksimalnu i minimalnu vrijednost * numeričkih tipova C++ jezika */ #include <iostream> #include <limits.h> #include <float.h> using namespace std; int main( void ) { cout << "Tip " << "Interval vrijednosti\n" << endl; cout << "bool " << false << "..." << true << endl; cout << "char " << CHAR_MIN << "..." << CHAR_MAX << endl; cout << "short int " << SHRT_MIN << "..." << SHRT_MAX << endl; cout << "int " << INT_MIN << "..." << INT_MAX << endl; cout << "long int " << LONG_MIN << "..." << LONG_MAX << endl; cout << "float " << FLT_MIN << "..." << FLT_MAX << endl; cout << "double " << DBL_MIN << "..." << DBL_MAX << endl; cout << "long double " << LDBL_MIN << "..." << LDBL_MAX << endl; return 0 ; }
char int Tip konstante unsigned float double a A \035 \x29 \n 156 0234 0x9C Literalni zapis 156U 0234U 0x9cU 15.6F 1.56e1F 15.6 1.56E1L Konstante Značenje znakovna konstanata a znakovna konstanata A znakovna konstanata 35 oktalno znakovna konstanata 29 heksadecimalno kontrolni znak nova linija decimalna notacija oktalna notacija cjelobrojne konstante heksadecimalna notacija decimalno oktalno heksadecimalno (sufiks U određuje kardinalni broj) realni broj jednostruki format određen je primjenom sufiksa F ili f konstante su tipa "double" ukoliko se ne koristi prefiks F. Nije nužno pisati sufiks L.
Aritmetički operatori Demistificirani c++
// area1.cpp - Program koji računa površinu kruga radijusa 2.1 m #include <iostream> using namespace std; int main() { cout << "Povrsina kruga radijusa 2.1 m je " << 2.1*2.1*3.14<< "m" << endl; cout << "Povrsina kruga radijusa 2 m je " << 2*2*3.14<< "m" << endl; return 0; }
// charvalue.cpp-program kojim se ispituje znakovne konstante #include <iostream> using namespace std; int main() { char c; // deklaracija varijable c tipa char int x; // deklaracija varijable x tipa int c = 'A'; // objema varijablama može se pridijeliti x = 'A'; // vrijednost znakovne konstante 'A' cout << "c = " << c << endl; cout << "Sizeof c = " << sizeof (c) << endl; cout << "x = " << x << endl; cout << "sizeof x = " << sizeof(x) << endl; cout << "Sizeof 'A' = " << sizeof('a') << endl; cout << 0.156e2<<endl; return 0; }
Posebni znakovi Znak Opis \b oznaka za povrat unatrag - backspace BS \f oznaka za stranicu unaprijed - form feed FF \n oznaka nove linije - new line NL \r oznaka za povrat na početak reda CR \t oznaka za horizontalni tabulator - HT \v oznaka za vertikalni tabulator \" uznaka za dvostruki navodnik \ oznaka za jednostruki navodnik \\ oznaka za znak \ - backslash \ooo \xhh znak kojem je ASCII kod zapisan oktalnim znamenkama ooo. znak kojem je ASCII kod zapisan heksadecimalnim znamenkama hh.
Konstante niz literalnih znakova String Niz znakova unutar dvostrukuh navodnika "Hello World!\n cout << "Hello World!" << endl; cout << "Hello World!" << \n ; cout << "Hello World!\n"; "Ovaj string je zapisan \ u dva retka" "Ovaj string" "ce biti pretvoren" "u jedan string" "Ovaj \"string\" sadrži znak \ a\ "
Logičke konstante Vrijednosti logičke istine i neistine 0 false Sve ostalo true Eksplicitno: true =1 false=0
Inicijalizacija varijabli int main() { int y, x; // deklaracija varijabli x i y x = 77; // početna vrijednost varijable x y = x + 7; // početna vrijednost varijable y... int main() { int y, x = 77; // deklaracija varijabli x i y // i inicijalizacija x na vrijednost 77 y = x + 7; // početna vrijednost varijable y... int a(76); //c++ je ekvivalentno iskazu: int a = 76;
Deklaracija simboličkih konstanti const double PI = 3.141592653589793; const char tab = '\t'; const zip = 12440; //podrazumjeva se tip int Vrijednost konstanti se ne mijenja u toku programa PI=PI+1; Pokušaj izmjene greška u kompajliranju
#define - direktiva Pretprocesorska direktiva #define PI 3.141592653589793 Kompajler će u kodu svaku pojavi znaka PI zamijeniti njegovom vrijednosšću Pretprocesorska direktiva: - svaki program u C-u mora imati barem jednu pretprocesorsku direktivu - to su naredbe pretprocesoru te ne završavaju znakom točkazarez #include uljučivanje datoteka zaglavlja #define definiranje simboličkih konstanti
#include <iostream> using namespace std; #define MESSAGE "Vrijednost broja pi = " #define PI 3.141592653589793 #define ENDL cout << "\n" int main( void) { cout << MESSAGE; cout << PI; ENDL; return 0; }
Korištenje standardnog ulaza Cin Dio biblioteke iostream int i; double x; char c;... cin >> i >> x >> c;
/* cin.cpp obrazac unosa i ispis podataka pomoću cin i cout */ #include <iostream> using namespace std; int main(void) { // 1. definiraj varijablu čiju vrijednost će unositi korisnik int unos; // 2. ispiši poruku korisniku da program očekuje unos broja: cout << "Molim otipkajte jedan cijeli broj >"; // 3. Za unos podataka koristi se standardni ulazni objekt - cin cin >> unos; // 4. obavi radnje s tom varijablom... // 5. ispiši rezultat obrada c cout << "Otkucali ste broj" << unos << endl ; return 0; }
Zadaci za vježbu 1. Napisati program koji pozdravlja korisnika po imenu 2. Napisati program koji zbraja dva unesena broja 3. Napisati program koji računa površinu kruga 4. Napisati program koji računa rješenja kvadratne jednadžbe