Upload
dejan-marinkovic
View
70
Download
0
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
04/12/23 1
04/12/23 2
Od c ka c++ i c#
prvi Iskorak od • tradicionalnog, • proceduralnog,
• struktuiranog programiranjaka
• objektno orjentisanom programiranju
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.
04/12/23 4
Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke
main
podacipodaci
podacipodaci
podacipodaci
podacipodaci
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
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.
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
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);
• }
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;
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.
}};
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
Objektno orijentisano programiranje
04/12/23 13
Osnovni koncept OOP klasifikacija
(classification)
apstrakcija
(abstraction)
učaurenje
(encapsulation)
nasleđivanje
(inheritance)
polimorfizam
(polymorphism)
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
04/12/23 15
Moderni objektno orijentisani programski jezici omogucavaju da se definisu klase, koje kombinuju
ponasanja (metode) i
atribute (podatke).
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)
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,
04/12/23 18
Apstrakcija
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
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.
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.
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.
04/12/23 22
Enkapsuliranje, u slici
Pravougaonik
– AtributiDužina
Širina
– MetodeCrtaj ()
Obim ()
Povrsina ()
Pomeri()
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;• }
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
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; }
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
04/12/23 27
Nasleđivanje,razvrstavanje zajedničkih osobina različitih klasa
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
04/12/23 28
Polimorfizam, različit odgovor na isti metod
GeoOblikcrtaj()
GeoOblikcrtaj()
Elipsacrtaj()
Elipsacrtaj()
Pravougaonikcrtaj()
Pravougaonikcrtaj()
Trougaocrtaj()
Trougaocrtaj()
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
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
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
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()()
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
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
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,
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
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
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• }
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.
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• }
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);
– };
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
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 );
– };
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.
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
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;
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” !
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
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
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.
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);• }
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.
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
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);
– };
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
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
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
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.
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*/• }
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.
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
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
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
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
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)
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
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.
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.
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.
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.
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
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.
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.
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;};• };
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• };
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
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;• }