oop-objekti uvod u c - objekti i klase

Post on 29-Jun-2015

598 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Objektno-orijentisanoprogramiranje

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?

Š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).

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.

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.

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.

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.

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.

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();};

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>

}

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--;

}

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.

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;

Primer kreiranja objekata klase Vozilo

Vozilo bmw;

Vozilo* yugo;

yugo = new Vozilo;

...

delete yugo;

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;

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>)

Primer korišćenja funkcija članica klase

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

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.

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++;

}

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.

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.

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.

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;

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.

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.

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

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

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.

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.

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;}

Zadatak 1A. Inline funkcije

Funkcije za uzimanje koordinata x i ydefinisati kao inline funkcije.

Prenos parametara

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

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.

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).

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.

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.

Zadatak 1B. Prenos parametara po referenci

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

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.

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();…

};

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.

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;…

}

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.

top related