objektno orjentirano programiranje• // za sve proste tipove c++ jezika ... zadaci za vježbu 1....

Post on 05-Feb-2018

248 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

– 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

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

top related