77
07/03/22 1

Uvod u oop

Embed Size (px)

DESCRIPTION

Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja

Citation preview

Page 1: Uvod u oop

04/12/23 1

Page 2: Uvod u oop

04/12/23 2

Od c ka c++ i c#

prvi Iskorak od • tradicionalnog, • proceduralnog,

• struktuiranog programiranjaka

• objektno orjentisanom programiranju

Page 3: Uvod u oop

04/12/23 3

Osobine jezika C

• Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva.

• Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.

Page 4: Uvod u oop

04/12/23 4

Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke

main

podacipodaci

podacipodaci

podacipodaci

podacipodaci

Page 5: Uvod u oop

04/12/23 5

Osobine jezika C++

• Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja

Page 6: Uvod u oop

04/12/23 6

Osobine jezika C++

• Tako učaurenim podacima i operacijama definišemo interface prema korisniku tih klasa a takođe i interface između pojedinih klasa u hijerarhiji klasa, sakrivajući kao implementacione detalje sve ono što nije bitno za njihovo korišćenje. Na taj načiin stvaramo softverske komponente ( softverske čipove ) koje možemo nasleđivati novim klasama i na taj način iste ugrađujemo u nove softverske proizvode.

Page 7: Uvod u oop

04/12/23 7

Šta je c++

• Programski jezik c++ je jezik sa klasama, ili proširenje popularnog jezika c.

• C++ se zasniva na uvođenju nove korisničke strukture podataka tipa CLASS koja omogućava objedinjavanje podataka (atributa) i operacija (metoda ) nad njima u jednu celinu (paket) pomoću koje deklarišemo objekte.

• Korišćenje takvih objekata u programiranju naziva se OBJEKTNO ORJENTISANO PROGRAMIRANJE

Page 8: Uvod u oop

04/12/23 8

Sabiranje dva broja bez korišćenja klasa

– #include<stdio.h>– main ()– {– int a,b;– a=2;– b=4;– printf(“Suma dva broja je %6d\n",a+b);

• }

Page 9: Uvod u oop

04/12/23 9

i sa korišćenjem klasa• //Sabiranje dva broja Novi način označavanja komentara

• #include <iosteam.h> // Nova I/O strim biblioteka.

• Class paket // Novi korisnicki izvedeni tip podataka– // Klasa je novi tip za sve objekte koji se grade u njemu– // Klasa je ucaureni paket podataka i operacija koje operisu nad – // podacima.

• {int ImeAtributa; // podatak, atribut klase– // Podrazumeva se da je private sto znaci da se istom moze pristupiti – // preko metoda ove klase

• Public;

Page 10: Uvod u oop

04/12/23 10

i sa korišćenjem klasa

• Void suma (int a , int b ) // metoda (funkcija ) klase koja implementirana “in line “ u samoj klasi. Metoda je public sto znaci da se ista moze pozvati bilo gde u programu.

– { int ImeAtributa = a+b; // Punjenje objekta

• Cout << “suma dva broja je :” << ImeAtributa; – // Novi nacin prikaza cout je objekat ugradjene klase klase

iosteam za ekranski prikaz po difoltu, //”<<“ je poziv odgovarajuce operator funkcije za prosledjivane izlaznih podataka na ekran.

}};

Page 11: Uvod u oop

04/12/23 11

i sa korišćenjem klasa

• // Glavni program• Void main ()

• { paket objekat_zbir; //deklarisanje objekta

• objekat_zbir.suma(10,20); // Komunikacija sa objektom ostvaruje se posredstvom njegovih metoda

Page 12: Uvod u oop

Objektno orijentisano programiranje

Page 13: Uvod u oop

04/12/23 13

Osnovni koncept OOP klasifikacija

(classification)

apstrakcija

(abstraction)

učaurenje

(encapsulation)

nasleđivanje

(inheritance)

polimorfizam

(polymorphism)

Page 14: Uvod u oop

04/12/23 14

Klasifikacija

Koren reci klasifikacija je klasa.

Kada obrazujete klasu, vi sistematski uredujete informacije u smislenu celinu. Reč je o klasifikaciji a to svi rade, ne samo programeri

klasifikacija je duboko ukorenjena u nas nacin razmisljanja i komuniciranja, tako da je logicno pokusati da se programi pisu klasifikovanjem razlicitih koncepata svojstvenih nekom problemu i njegovom resenju i zatim modelirati te klase u programskom jeziku

Page 15: Uvod u oop

04/12/23 15

Moderni objektno orijentisani programski jezici omogucavaju da se definisu klase, koje kombinuju

ponasanja (metode) i

atribute (podatke).

Page 16: Uvod u oop

04/12/23 16

Klase su strukture kojima su pridodata svojstva:

• Privatni pristup Enkapsulacije (sakrivanje, učaurenje) podataka

(atributa) i operacija nad njima

• Metode

Operacije nad atributima klase

• Nasleđivanje

Osobina da klase sa nižih hijerarhijskih nivoa mogu naslediti atribute i metode klasa sa viših hijerarhijskh nivoa)

Page 17: Uvod u oop

04/12/23 17

Pokusaj definisanja klasa

Prototipski mehanizam za stvaranje objekta, omogućavajući njihovu klasifikaciju po grupama sa istim osobinama

Model za sve objekte koji se grade,

Agregacija podataka (atributa) obično različitog tipa i operacija, realizovanim funkcijama, nazvanim metodama koje obrađuju te atribute

Kolekcija više objekata koji imaju istu strukturu

Korisnički izveden tip podataka,

Page 18: Uvod u oop

04/12/23 18

Apstrakcija

Geometrijski obliciGeometrijski oblici

PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao

Page 19: Uvod u oop

04/12/23 19

Apstrakcija

Apstraktni tipovi podataka omogućavaju da napravite klase koje sadrže privatna polja, privatne podatke iprivatne metode koji izvršavaju privatna izračunavanja.

Ta polja i metode ne možete da apstrahujete van klase. Međutim, da bi klasa imala praktičnu vrednost, ona mora da obezbedi neku vrstu „interfejsa“ za komunikaciju. Taj interfejs je skup javnih metoda koje aplikacije mogu da pozivaju. Ti metodi definišu

funkcionalnost ovih aplikacija.

Page 20: Uvod u oop

04/12/23 20

Javni metodi mogu da koriste druge privatne metode i da pristupaju privatnim podacima da bi obavili svoj posao ali korisnika to ne zanima dok metodi rade ono što su obećali.

Pošto su mehanizmi koje javni metod koristi privatni, ili sakriveni, programer koji implementira klasu ima potpunu siobodu da obavi izračunavanja i da pristupa podacima kako god mu se čini pogodno.

Štaviše, neka kasnija verzija klase može potpuno da promeni te unutrašnje detalje (može, na primer, da upotrebi neki super novi algoritam koji je 100 puta brži od prvobitnog) ali, dok god javni „interfejs" ostaje isti (nudi se isti skup javnih metoda), sve postojeće aplikacije koje koriste ovu klasu i dalje funkcionišu.

Page 21: Uvod u oop

04/12/23 21

Sta je enkapsuliranje?

Enkapsuliranje ima dve znacajne uloge:

Da kombinuje metode i podatke u klasu; drugim recima, da podrzi klasifikaciju.

Da kontrolise dostupnost metoda i podataka; drugim recima, da kontrolise koriscenje klase.

Klasa je programska konstrukcija koja obezbeduje sintaksu i semantiku koje podrzavaju te dve osnovne uloge.

Page 22: Uvod u oop

04/12/23 22

Enkapsuliranje, u slici

Pravougaonik

– AtributiDužina

Širina

– MetodeCrtaj ()

Obim ()

Povrsina ()

Pomeri()

Page 23: Uvod u oop

04/12/23 23

Enkapsuliranje u reci

klasa po imenu Krug koja sadrzi jedan metod (za izracunavanje povrsine kruga) i jedan podatak (poluprecnik kruga):

• class Krug• {• double Povrsina()• {• return 3.141592 * poluprecnik * poluprefinik;• }• double poluprecnik;• }

Page 24: Uvod u oop

04/12/23 24

Kontrolisanje dostupnosti

Drugi kljucni aspekt enkapsuliranja: dostupnost. Za metod ili polje kaze se da je privatno ako je dostupno

samo unutarklase.

Da biste deklarisali da je metod ili polje privatno, napisacetekljucnu rec private ispred njegove deklaracije.

Za metod ili polje kaze se da je javno ako je dostupno i van i unutarklase

Da biste deklarisali da je metod ili polje javno, napisacete kljucnu rec public ispred njegove deklaracije

Page 25: Uvod u oop

04/12/23 25

Ponovo klasa Krug. Ovog puta se Povrsina deklarise kao javni metod, a poluprecnik se deklarise kao privatno polje:

class Krug{public double Povrsina(){return 3.141592 * poluprecinik * poluprecinik;}private double poluprecnik; }

Page 26: Uvod u oop

04/12/23 26

Objekti su…

Nezavisne programske celine koje sadrže metode (funkcije) i podatke

Različita pojavljivanja iste klase

Promenljive koje se kreiraju iz struktura tipa klase

Individualna realizacija klasa

Page 27: Uvod u oop

04/12/23 27

Nasleđivanje,razvrstavanje zajedničkih osobina različitih klasa

Geometrijski obliciGeometrijski oblici

PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao

Page 28: Uvod u oop

04/12/23 28

Polimorfizam, različit odgovor na isti metod

GeoOblikcrtaj()

GeoOblikcrtaj()

Elipsacrtaj()

Elipsacrtaj()

Pravougaonikcrtaj()

Pravougaonikcrtaj()

Trougaocrtaj()

Trougaocrtaj()

Page 29: Uvod u oop

04/12/23 29

Strukturno, naspram,objektno orijentisanom programiranju

Tendencije strukturnog programiranja

Proces u središteProces u središte

Algoritamskipristup

Algoritamskipristup

Objektno-orijentisane tendencije

Objekat u središteObjekat u središte

Baziran na porukama

Baziran na porukama

Monolitnost Monolitnost Modularnost Modularnost

Upotreba jedanputUpotreba jedanputPonovno korišćenjePonovno korišćenje

Podaci javniPodaci javniPodaci skriveniPodaci skriveni

1111

2222

3333

4444

5555

Page 30: Uvod u oop

04/12/23 30

Strukturni pristup u programiranju

CrtajPrav(...){}PomeriPrav(...){}PromeniVelPrav(){}RotirajPrav(...){}

CrtajPrav(...){}PomeriPrav(...){}PromeniVelPrav(){}RotirajPrav(...){}

Funkcije

prav1dužinaširinacentar

prav2dužinaširinacentar

prav3dužinaširinacentar

prav1dužinaširinacentar

prav2dužinaširinacentar

prav3dužinaširinacentar

Podatak

Page 31: Uvod u oop

04/12/23 31

Objektno-orijentisani pristup programiranju

dužinadužinaširinaširinacentcentaarr

dužinadužinaširinaširinacentcentaarr

Crtaj

Pomeri

Promeni vel.

Rotiraj

prav1 prav2

dužinadužinaširinaširinacentcentaarr

dužinadužinaširinaširinacentcentaarr

Crtaj

Pomeri

Promeni vel.

Rotiraj

Page 32: Uvod u oop

04/12/23 32

Atributi i metodi

• Sluzbenik

- ImeiPrezime: string - Maticnibroj:string- Pol: char- Datumrodjenja: double

+ Uzmimaticnibroj()- Zadajmaticnibroj()+ Uzmipol()- zaDajpol()

PlatniSpisakPlatniSpisak

PlataPlata:: double double

+Izracunajplatu+Izracunajplatu()()

Page 33: Uvod u oop

04/12/23 33

Atributi i metodi

U objektu se pored atributa nalaze odgovarajuće metode kojima se vrši zadavanje i vraćanje vrednosti atributa.

• ImeiPrezime• Maticnibroj• zadajmaticnibroj()• Uzmimaticnibroj()

Da bi se efikasno koristili metodi potrebno je znati:• Ime metode• Koji se parametri prosleđuju metodu• Povratni tip metoda

Page 34: Uvod u oop

04/12/23 34

Atributi i metodi

• Objekat platni spisak sadrži metod izracunajplatu(), koji računa platu datog službenika.

• Objekat platniSpisak mora imati matični broj datog službenika. Da bi došao do te informacije objekat platniSpisak mora poslati poruku objektu Sluzbenik (metodu Uzmimaticnibroj().

• Objekat Sluzbenik prepoznaje poruku i vraća traženu informaciju

Page 35: Uvod u oop

04/12/23 35

Ili, Klase su :

Prototipski mehanizam za stvaranje objekta, omogućavajući njihovu klasifikaciju po grupama sa istim osobinama

Šabloni za pravljenje objekata

Model za sve objekte koji se grade,

Agregacija podataka (atributa) obično različitog tipa i operacija, realizovanim funkcijama, nazvanim metodama koje obrađuju te atribute

Kolekcija više objekata koji imaju istu strukturu

Korisnički izveden tip podataka,

Page 36: Uvod u oop

04/12/23 36

Više o klasama • Deklarisanje klase • Class imeklase{ Telo klase u kome su definisani atributi I metode

klase}; Ili• Class imeklase{ Telo klase u kome su definisani atributi I metode

klase} objekat1, objekat2;Čim uspešno deklarišete klasu, njeno ime možete

koristiti za deklarisanje objekata.Ime klase ima isti status u C++ - u kao rezervisana

reč koja predstavlja tip podataka

Page 37: Uvod u oop

04/12/23 37

Atributi klase

• Class Ekran• {• short visina,sirina;

• Char *kursor, *ekran;

• } • // kursor pokazuje na tekuću poziciju kursora na ekranu

ekran adresira niz visina*sirina

– Deklaracija atributa klasa se ne razlikuje od deklaracije promenljivih, osim što ovde nije dozvoljrena eksplicitna deklaracija atributa

Page 38: Uvod u oop

04/12/23 38

Metode klase

• Class Ekran• { //definicija atributa• Public• Void home () {kursor=ekran} //Pozicioniranje

kursora

• Void move(int,int); // Pomera kursor na apsolutnu poziciju

• Char get (int,int); // vraća zadatu poziciju kursora• }

Page 39: Uvod u oop

04/12/23 39

Metode klase

• Metode klase se razlikuju od običnih funkcija u sledećem:

• Iste mogu pristupiti i privatnim podacima klase, dok obične funkcije to mogu učiniti samo javnim podacima

• Metode važe ( vidljive su ) samo u opsegu klasa, dok su obične funkcije vidljive u celom opsegu datoteke

• Ispred naziva metode mora stajati određeni prefiksime_klase :: ( dve dvotačke razjašnjavaju oblast

važenja ).Više klasa može imati metodu sa istim imenom.

Page 40: Uvod u oop

04/12/23 40

Definisanje metoda određene klase

• Sintaksa definisanja metode određene klase ima sledeći izraz

• povratni_tip ime_klase:: ime_metode (parametri)• {• Iskazi• }

Page 41: Uvod u oop

04/12/23 41

Deklarisanje klase– Class ime_klase {

• Deklaracije– };

– Class Cstr { – Private:

• Char sData [256];– public:

• char *get (void);• int getlength (void);• void cpy (Char*s);• void cat (Char*s);

– };

Page 42: Uvod u oop

04/12/23 42

Interface Versus Implementation

• We draw a sharp distinction between the declaration of a class and its implementation. The declaration of a class tells the compiler about the attributes of the class and what its capabilities are. We often refer to this declaration as the class's interface.

• Every method that is declared in the interface must be implemented: You must write the code that shows how it works.

• interface--The declaration of the methods of a class• implementation--The code showing how the class

methods work

Page 43: Uvod u oop

04/12/23 43

Povezanost klase sa deklaracijom I definicijom pripadajućih metoda

– Class Cstr { – Private:

• Char sData [256];– public:

• char *get (void);• int getlength (void);• void cpy (Char*s);• void cat (Char*s);

– };– #include <string.h> //vrati pokazivač na podatke znakovnog niza

• Char * Cstr :: get (void)• {• Return sData;• }• int Cstr :: getlength (void) //vrati dužinu• {• Return strlen(sdata);• }• Void Cstr :: cpy (Char*s) //kopiraj sadržaj argumenta• (• strcpy (sData, s );

– };

Page 44: Uvod u oop

04/12/23 44

Šta su Objekti ?

Nezavisne programske celine koje sadrže metode (funkcije) i podatke (elementarne i struktuirane)

Različita pojavljivanja iste klasePromenljive koje se kreiraju iz

struktura tipa klaseIndividualna realizacija klasaObjekat je intelegentna struktura

podataka koja može da odgovori na pozive funkcija.

Page 45: Uvod u oop

04/12/23 45

Classes and Objects

• A class is a type. When you make instances of that type, they are called objects. In fact, the action of creating an object is called instantiation.

• class--Defines a new type• object--An instance of the type defined by a class• instantiation--Creating an instance of a class: an

object

Page 46: Uvod u oop

04/12/23 46

Stvaranje objekata

• Objekti se deklarišu (stvaraju objavljuju) posredstvom klase koja je šablon (tip) objekta

• Nakon uspešno deklarisane klase njeno ime može poslužiti za deklarisanje promenljivih (OBJEKATA).

• Ime klase ima isti status u C++ - u kao rezervisana reč koja predstavlja tip podataka

• Cstr string1, string2,string3;

Page 47: Uvod u oop

04/12/23 47

Pozivanje metode, funkcije članice

• #include ”Cstr.h” • //Ova datoteka deklariše klasu Cstr. Svaki modul

koji koristi klasu Cstr mora učitati ovu datoteku• Cstr string1, string2, string3;• String1.cpy ( “Fide, sed qui vide”);• // Kopiraj znakovni niz u objekat string1. Ovaj

poziv funkcije članice je komanda objektu string1: “ Kopiraj u sebe dati znakovni niz” !

Page 48: Uvod u oop

04/12/23 48

Punjenje objekta I pristup podacima

• Objekat se može puniti podacima kao što to činimo sa svakom drugom strukturom

• Punjenje objekta (atributa objekta ) može biti direktno , posredstvom metoda ili prilikom deklarisanja aktiviranjem specijalnoh metoda – konstruktora za inicijalizaciju objekata

Page 49: Uvod u oop

04/12/23 49

Aktiviranje objekta

• Objekat se aktivira pozivom i izvršenjem njegovih metoda. Pošto metode pripadaju objektu iste se moraju aktivirati slanjem poruke (message) objektu.

• MojaBanka.podizanje(cek)

• // Ime objekta.poruka

Page 50: Uvod u oop

04/12/23 50

Šta se dešava u stvarnosti ?

Opšti oblik poziva metodeObjekat.metoda(argumenti) Prevodilac prepoznaje string1.cpy( ) kao

poziv metode. On zna da je string1 objekat klase Cstr.

Stoga se, poziv metode string1.cpy( ) razrešava kao poziv metode Cstr::cpy i kontrola se prosleđuje metodi Cstr::cpy.

Page 51: Uvod u oop

04/12/23 51

• Svaki objekat klase Cstr ima svoju kopiju argumenta sData

• String1.cpy ( “Fide, sed qui vide”);• Ovaj poziv funkcije članice je komanda

objektu string1: “ Kopiraj u sebe dati znakovni niz” !

• Iskaz poziva funkciju članicu Cstr::cpy( ) preko objekta string1

• Void Cstr::cpy(char *s){• Strcpy(SData, s);• }

Page 52: Uvod u oop

04/12/23 52

Kod i podaci u klasi Cstr

• Objekti iste klase dele kôd metoda.

• Poziv metode razrešava se tako što se utvrdi klasa objekta, a zatim se pozove klasa::metoda

• Svaki objekat ima svoju kopiju argumenata.

Page 53: Uvod u oop

04/12/23 53

Kod i podaci u klasi Cstr

• Metode klase Cstr

• Objekti klase Cstr

CpyCpy

GetGet

GetlengthGetlength

StrinString1g1

objectobject

sDatasData

String4String4

objectobject

sDatasData

String3String3

objectobject

sDatasData

String2String2

objectobject

sDatasData

Page 54: Uvod u oop

04/12/23 54

Klasa koja u tački određuje temperaturu

– Class Ctempoint { – Private:

• Int x,y,z;• double temp;

– public: • void setpoint( int x,y,z);• void getpoint (int *x,*y,*z);• void settemp (double newtemp);• double gettemp(void);

– };

Page 55: Uvod u oop

04/12/23 55

Objekti klase Ctempoint

• Ako definišemo četiri objekta klase Ctempoint

Ctempoint pointA, pointB, pointC,pointD;

• Svi primerci ove klase dele kod metode klase Ctempoint. Ipak svaka klasa ima svoju kopiju četiri podatka člana x,z,y,temp

Page 56: Uvod u oop

04/12/23 56

Metode i objekti klase CTempoint

• Metode klase CTempoint

• Objekti klase CTempoint

setpointsetpoint

GetpointGetpoint

SettempSettemp

gettempgettemp

pointApointA

objectobject

xx

yy

zz

temptemp

pointBpointB

objectobject

xx

yy

zz

temptemp

pointCpointC

objectobject

xx

yy

zz

temptemp

pointDpointD

objectobject

xx

yy

zz

temptemp

Page 57: Uvod u oop

04/12/23 57

Memorijske klase C jezika

• Pored pripadnosti odredjenom tipu promenjlive imaju i svoju memorijsku klasu.

• Memorijska klasa daje mogućnost da se odredi sa kojim funkcijama je povezana promenljiva ili koje funkcije imaju pristup promenljivoj.

• Pri opisu memorijske klase koriste se sledeće rezervisane reči:

auto static register extern

Page 58: Uvod u oop

04/12/23 58

Automatske promenljive• Automatske promenljive se deklarišu rezervisanom reči

auto ispred specifikacije tipa kao u sledećem primeru: • {• auto int a; • auto int b=777;• auto double d;• …• }• Oblast u kojoj deluje automatska promenljiva ograničena

je blokom (u granicama definisanim zagradama { } u kome je deklarisana). Dok god se blok koji je sadrži izvršava ona “živi” , kada program napusti taj blok promenljiva iščezava. Ona je dostupna i u svakom podbloku bloka u kome je deklarisana. Primer No 15 ilustruje oblast delovanja automatskih promenljivih.

Page 59: Uvod u oop

04/12/23 59

Example• main()• {• /*spoljasnji blok*/• auto int x=1;• {• /*podblok #1 */• auto int y=2;• printf(“%d%d\n”,x,y);• }• {• /*podblok #2*/• printf(“%d%d\n”,x,y);/*linija 12 */• }• printf(“%d%d\n”,x,y);/*linija 14*/• }

Page 60: Uvod u oop

04/12/23 60

Statičke promenljive• Kao i automatske, statičke promenljive su lokalne u

funkciji odnosno bloku u kome su deklarisane. Razlika je u tome što statičke promenljive ne iščezavaju kada funkcija koja ih sadrži prekine izvršavanje. Ako program ponovo pređe na izvršavanje funkcije koja sadrži statičku promenljivu ona će imati vrednost sa kojom je prekinuta funkcija u prethodnom izvršavanju. Primer deklaracije i inicijalizacije:

• {• Static int a = 1;• Float c = 0,0;• ...• }• U sledećem primeru Example No 16 funkcija uvećaj ( ) se

poziva tri puta. Inicijalna vrednost promenljive x je 0. U sledećim pozivima funkcije koristi se vrednost sačuvana iz prethodnog izvršavanja.

Page 61: Uvod u oop

04/12/23 61

Example• main()• {• Void uvecaj();• uvecaj();• uvecaj();• uvecaj();• }• void uvecaj()• {• static int x=0;• x++;• printf(“%d\n”,x);• }• Ispisuje se • 1• 2• 3

Page 62: Uvod u oop

04/12/23 62

Spoljašnje promenljive

• Promenljiva deklarisana van funkcije naziva se spoljašnja promenljiva. Ona se može deklarisati i u funkciji koja je koristi navođenjem rezervisane reči extern. Na primer:

• int x; /*deklaracija spoljasnje promenljive x */• char c;• double x;• main()• {• extern int a;• extern char c ;• extern double x ;• …..• }

• Navođenjem rezervisane reči extern spoljašnja promenljiva postaje dostupna funkciji definisanoj bilo gde u tom i u bilo kom file-u

Page 63: Uvod u oop

04/12/23 63

Primeri deklarisanja spoljašnjih promenljivih

• int x = 707; /* globalna deklaracija promenljive x */• main()• {

• printf(“%d/n”, x);• }

• Pošto je promenljiva x definisana van funkcije main() ona je globalna I funkcija joj može pristupiti. Izvrčavanjem programa dobija se 707

• A izvršenjem programa • int x = 707; /* globalna deklaracija promenljive x */• main()• {• int x = 101; /* lokalna deklaracija promenljive x */

• printf(“%d/n”, x);• }

• dobija se 101• U toku izvršavanja funkcije važeća je vrednost lokalne promenljive

Page 64: Uvod u oop

04/12/23 64

Enkapsulacija, sakrivanje ili učaurenje podataka C ++

• Klasa omogućava zatvaranje i sakrivanje podataka, od ostatka sveta, (atributa i metoda ) unutar klase.

• C++ omogućava tri nivoa zaštite podataka.

PublicPrivateProtected

Page 65: Uvod u oop

04/12/23 65

Public:

Proširuje pristup jednom ili više članova klase, tako da je sa njima moguće raditi kako unutra tako i van objekta

Treba ga primeniti kada je moguć pristup svim članicama objekta klase iz:

• bilo koje članice te iste klase,ili• bilo koje druge klase, ili• bilo koje predefinisane funkcije (definisane u

heder datotekama), ili • bilo koje naše (sopstvene )funkcije, ili• bilo kog izraza u glavnom programu ili izvan njega

pod uslovom da je taj objekat u svom opsegu važenja (scope)

Page 66: Uvod u oop

04/12/23 66

Private:

• Ograničava pristup članovima. Privatni članovi objekta su stvarno privatni, niko ne može da im pristupi van njihove klase.

• Pristup podacima klase je dozvoljen samo članicama klase tj metodama koje pripadaju toj klasi .

• Izuzetno, pristup je dozvoljen specijalnim metodama ispred čijeg naziva se stavlja reč FRIEND

Page 67: Uvod u oop

04/12/23 67

Primer, jednostavan• U sledećem primeru članovi a,b i c imaju private

pristup ali su a I b podrazumevano privatni

• Class Aklasa {• int a, b;• public:• Aklasa ( );• double x, y;• private: • int c;• };

• Članovima a,b i c mogu pristupiti samo funkcije članice klase Aklasa. Nijedan objekat druge klase ne može pristupiti privatnim podacima nekog objekta.

Page 68: Uvod u oop

04/12/23 68

Protected:

• Predstavlja oblast dejstva kada je moguć pristup svim podacima objekta bazne klase od strane bilo koje članice izvedene klase ( klase koja nasleđuje baznu klasu).

• Kada se rezervisana reč protected upotrebi u naznačavanju osnovne klase tada članovi koji su javni u osnovnoj klasi postaju zaštićeni u izvedenoj klasi.

• Članu sa zaštićenim pristupom može se pristupiti u okviru klase i njenih izvedenih klasa ali je svakoj drugoj oblasti taj član privatan.

Page 69: Uvod u oop

04/12/23 69

Primer

• U ovom primeru članovi x, y i z su zaštićeni. Članovi a i b su podrazumevano privatni.

• Class Aklasa {• int a, b;• protected:• double x,y ;• int c;• public:• Void postavi_promenljive (int I, int j, int k);• }; • Funkcije u izvedenim klasama mogu da pristupaju

svim članovima osim a i b.

Page 70: Uvod u oop

04/12/23 70

• Podrazumevani status osnovne klase je private ali,

• još jednom, • kada se rezervisana reč• protected • upotrebi u naznačavanju članova

osnovne klase, tada oni postaju dostupni u izvedenoj klasi.

Page 71: Uvod u oop

04/12/23 71

Vrlo važno, ali stvarno, jos jednom prava pristupima članovima klase- enkapsulacija

• Private - može mu se pristupiti samo u okviru klase u kojoj se nalazi

• Protected - može mu se pristupiti u okviru klase u kojoj se nalazi i u okviru izvedne klase

• Public - može mu se pristupiti u okviru klase u kojoj se nalazi,u okviru izvedene klase i iz glavnog programa

Page 72: Uvod u oop

04/12/23 72

Primer koriscenja razlicitih prava pristupa clanovima klase.

• Deklarisati klasu kOtac koja sadrzi sledece • atribute:• pKola - celobrojna promenjiva,tipa private;• pNovac - celobrojna promenljiva,tipa protected;• pTV - celobrojna promenljiva,tipa public;• funkcije:• fUzmiKola() -tipa private,koja stampa poruku:Kola;• fUzmiNovac() -tipa protected,koja stampa

poruku:Novac;• fGledajTV() -tipa public,koja stampa poruku:TV;• i konstruktor Otac(), koji inicijalizuje vrednost

svih atributa na 0.

Page 73: Uvod u oop

04/12/23 73

• Deklarisati klasu iSin, koja nasledjuje klasu kOtac i ima dodatni atribut

• pDevojka (celobrojna vrednost,tipa private),• funkcije:• fizvestiDevojku -tipa private,koja stampa

poruku: Devojka;• fUcenje -tipa public,koja stampa

poruku:Ucim;• konstruktore:• iSin() -koji inicijalizuje vrednosti atributa

Kola,Novac,TV i Devojka na 1;• iSin() -koji inicijalizuje vrednosti atributa Novac,TV i

Devojka na 1.• Kreirati objekat oVeliki klase kOtac i • objekat oMali klase iSin.• Napisati glavni program koji pokazuje razliku u

koriscenju private,protected i public prava pristupa.

Page 74: Uvod u oop

04/12/23 74

• #include<inostream.h>• //deklaracija klase kOtac• Class kOtac• {• Private:• Int pKola;• Int fUzmiKola () {cout<<”Kola;return 0;};• Protected:• Int pNovac;• Int fUzmiNovac(){cout<<”Novac”;return 0;};• Public:• Int pTV;• Int fGledajTV()• {cout<<”TV”;return 0;};• kOtac ()• {Kola=0;Novac=0;TV=0;};• };

Page 75: Uvod u oop

04/12/23 75

• //deklaracija izvedene klase iSin

• Class iSin:public kOtac• {• Int pDevojka;• Int fizvestiDevojku () • {cout<<”Devojka”;return 0;};• Public:• Int fUcenje(){cout<<”Ucim”;return 0;};• iSin()• {Kola=1;Novac=1;TV=1;Devojka=1;}; // greska, Kola su

privatni atribut• iSin (){Novac=1;TV=1;Devojka=1;}; // moze jer je Novac

protected• };

Page 76: Uvod u oop

04/12/23 76

• Int main()• {• kOtac oVeliki; //kreiranje objekta Veliki klase Otac• iSin oMali //kreiranje objekta Mali izvedene klase Sin• //pristup atributu pTV• pT=oMali.pTV; //pT=1• pT=oVeliki.pTV //pT=0;• //Pristup atributu pNovac• pN=oMali.pNovac; //greska,jer je pNovac protected• pN=oVeliki.pNovac; //greska,jer je pNovac protected• //pristup atributu pKola• pK=oMali.pKola //greska,jer je pKola private• pK=oVeliki.pKola; //greka,jer je pKola private• //pristup atributu pDevojka• pD = o MalipDevojka; //greska,jer je pDevojka private

Page 77: Uvod u oop

04/12/23 77

• //pozivanje funkcija klase kOtac preko objekta oVeliki

• oVeliki.fGledajTV (); //moze,stampa TV• oVeliki.fUzmiNovac(); //greska,jer je fUzmiNovac protected• oVeliki.fUzmi Kola(); //greska,jer je fUzmiKola private

• //pozivanje funkcija klase kOtac preko objekta oMali izvedene klase iSin

• oMali.fGledajTV(); //moze,stampa TV• oMali.fUzmiNovac(); //greska,jer jefUzmiNovac protected• oMali.fUzmiKola(); //greska,jer je fUzmiKola private• //pozivanje funkcija klase iSin preko objekta oMali

• oMali.fUcenje(); //moze,stampa Ucim• oMali.fizvestiDevojku(); //greska,jer je fizvestiDevojku private• return 0;• }