oop-objekti uvod u c - objekti i klase

41
Objektno-orijentisano programiranje Objekti i klase

Upload: marko-z-milosevic

Post on 29-Jun-2015

598 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: OOP-Objekti Uvod u C - Objekti i klase

Objektno-orijentisanoprogramiranje

Objekti i klase

Page 2: OOP-Objekti Uvod u C - Objekti i klase

Objekti svuda oko nas

U svakodnevnom životu svet spoznajemo kao skup objekata koji nas okružuju i koji medjusobno interaguju na različite načine.

Možemo li da definišemo objekat?

Page 3: OOP-Objekti Uvod u C - Objekti i klase

Šta je objekat?

Svaki objekat je odredjen: skupom svojih osobina (karakteristika

ili atributa), skupom funkcija koje može da obavlja

i implementacionim detaljima

(načinom realizacije funkcija).

Page 4: OOP-Objekti Uvod u C - Objekti i klase

Primer objektaPosmatrajmo automobil kao objekat. Atributi objekta:

- marka automobila,- boja,- maksimalna moguća brzina kretanja,- trenutna brzina kretanja,...

Funkcije koje obavlja:- paljenje,- gašenje, - promena brzine,...

Implementacioni detalji:U implementacione detalje spadaju postupci (algoritmi) za realizaciju svake od navedenih funkcija.

Page 5: OOP-Objekti Uvod u C - Objekti i klase

Koncept objekto-orijentisanogprogramiranja

Cilj objektno-orijentisanog programiranjaje da softverski sistem modelujemo onakokako doživljavamo svet oko nas.Umesto o tome kako rešiti problem, urazvoju OO softvera razmišljamo: koji se objekti u programu obradjuju i kako oni medjusobno interaguju.

Page 6: OOP-Objekti Uvod u C - Objekti i klase

Pojam klase Klasa je šablon za kreiranje objekata u

programu. Klasa je korisnički definisan tip podataka

koji se sastoji od atributa (kojima se opisuju karakteristike objekata koji će se kreirati) i funkcija (ili metoda) koje će objekti obavljati, tj. preko kojih će interagovati sa drugim objektima u programu. Atributi i funkcije se jednim imenom nazivaju članovi klase.

Page 7: OOP-Objekti Uvod u C - Objekti i klase

Definicja klase u programskom jeziku C++

Klasa se u programskom jeziku C++ obično definiše u posebnom fajlu koji ima sto ime kao i sama klasa i ekstenziju “.h”.

Format definicije klase u jeziku C++ je:class <ImeKlase>

{

<ListaClanovaKlase>

};

Lista članova sadrži definicije članova atributa i deklaracije funkcija.

Page 8: OOP-Objekti Uvod u C - Objekti i klase

Pravo pristupa članovima klaseSvaki član klase može biti dostupan: Samo sopstvenoj klasi (ako se može korisiti samo u

funkcijama članicama klase). Za takve članove se kaže da su privatni (private) članovi klase.

Sopstvenoj klasi i klasama izvedenim iz klase kojoj pripada – to su takozvani zaštićeni (protected) članovi.

Svim delovima aplikacije – to su javni (public) članovi klase.

NAPOMENA: Nepisano je pravilo da svi atributiklase budu definisani kao private članovi.

Page 9: OOP-Objekti Uvod u C - Objekti i klase

Primer definicije klase// Vozilo.hclass Vozilo{ private: int stanje; //definise da li je vozilo

// ukljuceno int max_brzina; int brzina; public: void ukljuci(); void iskljuci(); void ubrzaj(); void uspori();};

Page 10: OOP-Objekti Uvod u C - Objekti i klase

Implementacija funkcija članica klase

Funkcije članice klase se implementiraju u poseblom fajlu koji nosi isto ime kao klasa sa ekstenzijom “.cpp”.

Format implementacije funkcije članice klase:<povratni_tip> <ImeKlase>::<imeFunkcije>(<listaArgumenata>)

{

<teloFunkcije>

}

Page 11: OOP-Objekti Uvod u C - Objekti i klase

Primer implementacije funkcija klase Vozilo

// Vozilo.cpp

#include “Vozilo.h”

void Vozilo::ukljuci()

{

stanje = 1;

}

void Vozilo::iskljuci()

{

stanje = 0;

}

void Vozilo::ubrzaj()

{

if ( brzina < max_brzina)

brzina++;

}

void Vozilo::uspori()

{

if ( brzina > 0 ) brzina--;

}

Page 12: OOP-Objekti Uvod u C - Objekti i klase

Kreiranje objekata u programuObjekat klase, kao i svaki drugi podatak, može biti zapamćen u statičkoj ili dinamičkojzoni memorije. Objekat zapamćen u statičkoj zoni

memorije (statički objekat) definiše se naredbom:

<ImeKlase> imeObjekta;i kreira se kada se pri izvršenju programa dodje do tačke gde je objekat definisan, a briše se kada se završi izvšenje bloka u kojem je definisan.

Page 13: OOP-Objekti Uvod u C - Objekti i klase

Kreiranje objekta u dinamičkoj zoni memorije Za pristup objektu koji se pamti u

dinamičkoj zoni memorije (dinamičkom objektu) koristi se pokazivač koji se definiše naredbom:

<ImeKlase> *pokazivac;Dinamički objekat se kreira operatorom new:

pokazivac = new <ImeKlase>;a brise se operatorom delete:

delete pokazivac;

Page 14: OOP-Objekti Uvod u C - Objekti i klase

Primer kreiranja objekata klase Vozilo

Vozilo bmw;

Vozilo* yugo;

yugo = new Vozilo;

...

delete yugo;

Page 15: OOP-Objekti Uvod u C - Objekti i klase

Referenca Osim objekta i pokazivača na objekat, u

programskom jeziku C++ može se definisati i referenca na objekat.

Referenca je drugo ime nekog objekta. Referenca se u definiciji mora inicijalizovati. Definicija reference:

<ImeKlase>& ImePromenljive>=<PocetnaVrednost>; Primer:

Vozilo& stranoVozilo = bmw;Vozilo& domaceVozilo = *yugo;

Page 16: OOP-Objekti Uvod u C - Objekti i klase

Pristup članovima klase

Za pristup javnim članovima klase se koriste operatori . i ->.

Format izraza za pristup članovima klase je:<objekat>.<atribut>

<objekat>.<funkcije>(<stvarniArgumenti>)

<pokazivacNaObjekat>-><atribut>

<pokazivacNaObjekat>-><funkcija>(<stvarniArgumenti>)

Page 17: OOP-Objekti Uvod u C - Objekti i klase

Primer korišćenja funkcija članica klase

// main.cpp#include ”vozilo.h”;void main(){ vozilo bmw; vozilo *yugo; yugo = new vozilo(); bmw.ukljuci(); yugo->ukljuci();}

Page 18: OOP-Objekti Uvod u C - Objekti i klase

Pokazivač this

Da bi se zadržao princip da se prilikom pristupa članovima klase mora znati objekat čijem se članu pristupa, za pristup članovima klase iz funkcija članica klase može se koristiti pokazivač this.

this je pokazivač na objekat za koji je funkcija pozvana.

Page 19: OOP-Objekti Uvod u C - Objekti i klase

Primer korišćenja pokazivača this// Vozilo.cpp#include <vozilo.h>

void vozilo::ukljuci(){

this->stanje = 1;}

void vozilo::ubrzaj(){

if ( this->brzina < this->max_brzina ) this->brzina++;

}

Page 20: OOP-Objekti Uvod u C - Objekti i klase

Korišćenje standardnog ulaza i standardnog izlaza u C++ programima

Za učitavanje podataka sa standardnog ulaza iprikaz podataka na standardni izlaz u C++ aplikacijama se mogu koristiti: Bibliotečke funkcije definisane u standardnoj

biblioteci programskog jezika C (scanf, printf, ... )

Objekti cin i cout.

Page 21: OOP-Objekti Uvod u C - Objekti i klase

istream i ostream klase

Analogno standardnoj biblioteci funkcijau jeziku C, u programskom jeziku C++definisana je biblioteka klasa. U tojbiblioteci definisane su i klase: istream – za učitavanje podataka iz

različitih izvora; ostream – za upis podataka u različite

resurse.Obe ove klase definisane su u fajluiostream.h.

Page 22: OOP-Objekti Uvod u C - Objekti i klase

Objekti cin i cout cin je objekat klase istream koji se kreira kao

globalni objekat prilikom startovanja svake C++ aplikacije i služi za učitavanje podataka sa standardnog ulaza. Podaci standardnih tipova se učitavaju sa standardnog ulaza (tj. iz objekta cin) korišćenjem operatora >>.

cout je objekat klase ostream koji se kreira kao globalni objekat prilikom startovanja svake C++ aplikacije i služi za upis podataka na standardni izlaz. Podaci standardnih tipova se upisuju na standardni izlaz (tj. u objekat cout) korišćenjem operatora <<.Prelaz na novi red prilikom prikaza podataka na standarndi izlaz vrši se upisom konstante endl u objekat cout.

Page 23: OOP-Objekti Uvod u C - Objekti i klase

Primer korišćenja objekata cin i cout

int a,b;

// ucitavanje vrednosti promenljivih

// a i b sa standardnog ulaza

cin >> a >> b;

// prikaz zbira promenljivih a i b

// na standardni izlaz

cout << a+b << endl;

Page 24: OOP-Objekti Uvod u C - Objekti i klase

Zadatak 1. Klase – atributi i funkcije

Na programskom jeziku C++ kreirati klasuTacka koja sadrži: Privatne atribute:

- x i y koordinate tačke u Dekartovom Koordinatnom sistemu.

Javne metode za:- postavljanje tačke na zadatu poziciju,- pomeranje tačke za zadati pomeraj,- računanje rastojanja od druge tačke,- uzimanje x i y koordinate tačke.

Page 25: OOP-Objekti Uvod u C - Objekti i klase

Zadatak 1. Klase – atributi i funkcije

U funkciji main definisati jedan statički i jedandinamički Objekat klase klase Tacka, postavitiih na pozicije čije se koordinate učitavaju sastandardnog ulaza, izračunati i prikazatina standardni izlaz rastojanje izmedju njih,izvršiti pomeranje prve tačke za pomeraj(2.5,2.5) i štampati nove koordinate tetačke.

Page 26: OOP-Objekti Uvod u C - Objekti i klase

Faze kreiranja C++ aplikcaje uMicrosoft Visual C++ 6.0 okruženju

Kreiranje projekta; Kreiranje Definicje klase; Implementacija funkcija članica klase; Implementacija funkcije main.

Page 27: OOP-Objekti Uvod u C - Objekti i klase

Inline funkcije Kada se metode klase veoma često koriste,

a kada su im tela sasvim jednostavna, takve metode treba definisati kao inline metode.

Prilikom prevodjenja C++ programa, kompilator će u tački poziva inline funkcije kompletno telo funkcije ugraditi u izvršni kod. Na taj način će se vreme izvršenja programa znatno smanjiti, dok će se veličina izvršnog koda neznatno povećati.

Page 28: OOP-Objekti Uvod u C - Objekti i klase

Definicja inline funkcije

Funkcija je tipa inline ukoliko je: implementacija funkcije navedena u

samoj definiciji klase, ili u definiciji klase, ispred deklaracije

funkcije, navedena ključna reč inline, a implementacija funkcije navedena u header fajlu gde je i klasa definisana.

Page 29: OOP-Objekti Uvod u C - Objekti i klase

Primer inline funkcija// Vozilo.hclass Vozilo{ private: int stanje; int max_brzina; int brzina; public:

void ukljuci(); void iskljuci(); void ubrzaj(); void uspori();

int uzmiBrzinu() { return brzina; } inline void postaviBrzinu( int brzina );

}; void Vozilo::postaviBrzinu( int brzina ) {

this->brzina = brzina;}

Page 30: OOP-Objekti Uvod u C - Objekti i klase

Zadatak 1A. Inline funkcije

Funkcije za uzimanje koordinata x i ydefinisati kao inline funkcije.

Page 31: OOP-Objekti Uvod u C - Objekti i klase

Prenos parametara

U programskom jeziku C++ parametrise na funkciju mogu preneti: po vrednosti i po referenci.

Page 32: OOP-Objekti Uvod u C - Objekti i klase

Prenos parametara po vrednosti

Prilikom prenosa parametara po vrednosti, uTrenutku poziva funkcije pravi se kopija stvarnihargumenata, funkcija radi sa tim kopijama, a utrenutku završetka rada funkcije, kopije se brišuiz memorije. Nedostaci prenosa parametara po vrednosti:

izmene ulaznih argumenata se nikada neće videti u pozivajućem modulu;

pravljenje kopija za sve ulazne argumente troši veliku količinu dodatnog memorijskog prostora.

Page 33: OOP-Objekti Uvod u C - Objekti i klase

Prenos parametara po referenci Ukoliko se kao argunet funkcije ne

navede podatak (objekat), već referenca na taj podatak (objekat), referenca će se u trenutku poziva funkcije inicijalizovati tako da će ona predstavljati “drugo ime” za odgovarajući stvarni argument. U tom slučaju i pozivajući modul i funkcija će raditi sa istom kopijom podatka (objekta).

Page 34: OOP-Objekti Uvod u C - Objekti i klase

Prenos parametara po referenci Ovaj način prenosa parametara će se

koristiti kada: funkcija treba da promeni vrednost

ulaznog argumenta, kada je ulazni argument prilično glomazan

pa nema smisla rezervisati novi memorijski prostor za pamćenje njegove kopije.

Nepisano je pravilo da objekte treba uvekprenositi po referenci.

Page 35: OOP-Objekti Uvod u C - Objekti i klase

Zabrana promene parametra prenetog po referenci Kada je parametar prenet funkciji po referenci

ne zna se da li ce on u toj funkciji biti stvarno promenjen, ili je to uradjeno samo zbog uštede memorijskog prostora. Da bi se takva nedoumica eliminisala, parametre koje funkcija ne sme da menjati treba definisati kako konstantne za funkciju.

Primer:void f1( const T& a );

U ovom slučaju ukoliko u funkciji f1 pokušamo da promenimo objekat a, kompilator će prijaviti grešku.

Page 36: OOP-Objekti Uvod u C - Objekti i klase

Zadatak 1B. Prenos parametara po referenci

U funkciji za računanje rastojanja,tačku do koje se računa rastojanje,preneti po referenci.

Page 37: OOP-Objekti Uvod u C - Objekti i klase

Statički članovi klase Ponekad se javlja potreba da postoji isti atribut u svim

objektima (instancama) klase. U takvim slučajevima nema smisla da se isti podatak pamti u memoriji onoliko puta koliko se objekata te klase napravi u programu. Atributi koji su isti za sve instance klase, pa čak mogu da postoje i kada ni jedan objekat klase nije definisan, definišu se kao statički atributi klase.

Statička funkcija klase je funkcija čije dejstvo nije vezano za konkretne objekte (instance) klase. One se mogu pozivati i kada ni jedan objekat klase u programu nije kreiran.

Page 38: OOP-Objekti Uvod u C - Objekti i klase

Definicija statičkih članova klase U definiciji klase, ispred definicije statičkog podatka,

kao i ispred deklaracije statičke funkcije, navodi se ljučna reč static.

Primer:class Krug{

float r;public:

static float pi;float obim();…

};

Page 39: OOP-Objekti Uvod u C - Objekti i klase

Pristup statičkim članovima klase

Statičkim članovima klase se može pristupiti na dvanačina: Korišćenjem nekog od kreiranog objekta klase i

operator . ili -> (na isti način kako smo i do sada pristupali članovima klase).

Navodjenjem imena klase i operatora pripadnosti :::<ImeKlase>::<imeStatičkogAtributa>

tj. <ImeKlase>::<imeStatičkeFunkcije>(

<StvarniArgumenti>)Iz funkcija članica klase, statičkim članovima se možepristupiti kao i ostalim članovima klase.

Page 40: OOP-Objekti Uvod u C - Objekti i klase

Primeri pristupa statičkim članovima klase// pristup statickim clanovima klase iz// funkcija clanica iste klasefloat Krug::obim(){

return 2*Pi*r;}

// pristup statickim clanovima klase iz// ostalih delova programavoid main(){

Krug::pi = 3.14;…

}

Page 41: OOP-Objekti Uvod u C - Objekti i klase

Zadatak 2. Statički članovi klaseNa programskom jeziku C++, kreirati klasu Radnik čiji su članovi: privatni atributi: ime, prezime i koeficijent stručne spreme radnika; javni statički atributi: broj radnika preduzeća, cena rada za tekući

mesec u preduzeću, visina naknade za prevoz po radniku; javne metode za: učitavanje vrednosti privatnih atributa sa

standardnog ulaza, za štampanje imena prezimena i plate radnika na standardni izlaz (pri čemu se plata računa kao proizvod koeficijenta stručne spreme i cene rada);

javna statička metoda za izračunavanje ukupno potrebnih sredstava za isplatu naknade za prevoz radnika ukoliko se svima isplaćuje ista svota.

U funkciji main, učitati broj radnika, visinu cene rada, visinu naknadeza prevoz i podatke o svim radnicima sa standardnog ulaza i nastandardni izlaz prikazati platni spisak radnika i veličinu sredstavapotrebnih da se isplati naknada za prevoz svim radnicima.