Upload
lehuong
View
247
Download
3
Embed Size (px)
Citation preview
Objektno orjentirano programiranje
Predavanje 1Uvod
CiljeviPrvi program
Konstante i varijable
Sadržaj
• Način provođenja nastave
• Obaveze studenata
• Sadržaj kolegija
• Oblik provođenja ispita
• Toni Jakovčević
– A420
– 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
Code
Static Data
Heap
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 ; • }
Konstante Tip
konstanteLiteralni
zapisZnačenje
char
’a’’A’’\035’’\x29’’\n’
znakovna konstanata aznakovna konstanata Aznakovna konstanata 35 oktalnoznakovna konstanata 29 heksadecimalnokontrolni znak nova linija
int15602340x9C
decimalna notacijaoktalna notacija cjelobrojne konstanteheksadecimalna notacija
unsigned156U0234U0x9cU
decimalnooktalnoheksadecimalno(sufiks U određuje kardinalni broj)
float15.6F1.56e1F
realni broj – jednostruki formatodređen je primjenom sufiksa F ili f
double15.61.56E1L
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;• }
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‘ znak kojem je ASCII kod zapisan oktalnim znamenkama ooo.
‘\xhh‘znak kojem je ASCII kod zapisan heksadecimalnim znamenkama hh.
Posebni znakovi
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čka-zarez
#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