Uvod­ u oop
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Uvod­ u oop

on

  • 332 views

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

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

Statistics

Views

Total Views
332
Views on SlideShare
332
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Uvod­ u oop Presentation Transcript

  • 1. 08/21/13 1
  • 2. 08/21/13 2 Od c ka c++ i c# prvi Iskorak od • tradicionalnog, • proceduralnog, • struktuiranog programiranja ka • objektno orjentisanom programiranju
  • 3. 08/21/13 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.
  • 4. 08/21/13 4 Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke main  podacipodaci  podacipodaci  podacipodaci  podacipodaci
  • 5. 08/21/13 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
  • 6. 08/21/13 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.
  • 7. 08/21/13 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
  • 8. 08/21/13 8 Sabiranje dva broja bez korišćenja klasa – #include<stdio.h> – main () – { – int a,b; – a=2; – b=4; – printf(“Suma dva broja je %6dn",a+b); • }
  • 9. 08/21/13 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;
  • 10. 08/21/13 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. } };
  • 11. 08/21/13 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
  • 12. Objektno orijentisano programiranje
  • 13. 08/21/13 13 Osnovni koncept OOP klasifikacija (classification) apstrakcija (abstraction) učaurenje (encapsulation) nasleđivanje (inheritance) polimorfizam (polymorphism)
  • 14. 08/21/13 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
  • 15. 08/21/13 15 Moderni objektno orijentisani programski jezici omogucavaju da se definisu klase, koje kombinuju ponasanja (metode) i atribute (podatke).
  • 16. 08/21/13 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)
  • 17. 08/21/13 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,
  • 18. 08/21/13 18 Apstrakcija Geometrijski obliciGeometrijski oblici PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
  • 19. 08/21/13 19 Apstrakcija Apstraktni tipovi podataka omogućavaju da napravite klase koje sadrže privatna polja, privatne podatke i privatne 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.
  • 20. 08/21/13 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.
  • 21. 08/21/13 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.
  • 22. 08/21/13 22 Enkapsuliranje, u slici Pravougaonik – Atributi Dužina Širina – Metode Crtaj () Obim () Povrsina () Pomeri()
  • 23. 08/21/13 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; • }
  • 24. 08/21/13 24 Kontrolisanje dostupnosti Drugi kljucni aspekt enkapsuliranja: dostupnost. Za metod ili polje kaze se da je privatno ako je dostupno samo unutar klase. Da biste deklarisali da je metod ili polje privatno, napisacete kljucnu rec private ispred njegove deklaracije. Za metod ili polje kaze se da je javno ako je dostupno i van i unutar klase Da biste deklarisali da je metod ili polje javno, napisacete kljucnu rec public ispred njegove deklaracije
  • 25. 08/21/13 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; }
  • 26. 08/21/13 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
  • 27. 08/21/13 27 Nasleđivanje, razvrstavanje zajedničkih osobina različitih klasa Geometrijski obliciGeometrijski oblici PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
  • 28. 08/21/13 28 Polimorfizam, različit odgovor na isti metod GeoOblik crtaj() GeoOblik crtaj() Elipsa crtaj() Elipsa crtaj() Pravougaonik crtaj() Pravougaonik crtaj() Trougao crtaj() Trougao crtaj()
  • 29. 08/21/13 29 Strukturno, naspram, objektno orijentisanom programiranju Tendencije strukturnog programiranja Proces u središteProces u središte Algoritamski pristup Algoritamski pristup Objektno-orijentisane tendencije Objekat u središteObjekat u središte Baziran na porukama Baziran na porukama MonolitnostMonolitnostModularnostModularnost Upotreba jedanputUpotreba jedanputPonovno korišćenjePonovno korišćenje Podaci javniPodaci javniPodaci skriveniPodaci skriveni 1111 2222 3333 4444 5555
  • 30. 08/21/13 30 Strukturni pristup u programiranju CrtajPrav(...) { } PomeriPrav(...) { } PromeniVelPrav() { } RotirajPrav(...) { } CrtajPrav(...) { } PomeriPrav(...) { } PromeniVelPrav() { } RotirajPrav(...) { } Funkcije prav1 dužina širina centar prav2 dužina širina centar prav3 dužina širina centar prav1 dužina širina centar prav2 dužina širina centar prav3 dužina širina centar Podatak
  • 31. 08/21/13 31 Objektno-orijentisani pristup programiranju dužinadužina širinaširina centcentaarr dužinadužina širinaširina centcentaarr Crtaj Pomeri Promeni vel. Rotiraj prav1 prav2 dužinadužina širinaširina centcentaarr dužinadužina širinaširina centcentaarr Crtaj Pomeri Promeni vel. Rotiraj
  • 32. 08/21/13 32 Atributi i metodi • Sluzbenik - ImeiPrezime: string - Maticnibroj:string - Pol: char - Datumrodjenja: double + Uzmimaticnibroj() - Zadajmaticnibroj() + Uzmipol() - zaDajpol() PlatniSpisakPlatniSpisak PlataPlata:: doubledouble +Izracunajplatu+Izracunajplatu()()
  • 33. 08/21/13 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
  • 34. 08/21/13 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
  • 35. 08/21/13 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,
  • 36. 08/21/13 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
  • 37. 08/21/13 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
  • 38. 08/21/13 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 • }
  • 39. 08/21/13 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 prefiks ime_klase :: ( dve dvotačke razjašnjavaju oblast važenja ). Više klasa može imati metodu sa istim imenom.
  • 40. 08/21/13 40 Definisanje metoda određene klase • Sintaksa definisanja metode određene klase ima sledeći izraz • povratni_tip ime_klase:: ime_metode (parametri) • { • Iskazi • }
  • 41. 08/21/13 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); – };
  • 42. 08/21/13 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
  • 43. 08/21/13 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 ); – };
  • 44. 08/21/13 44 Šta su Objekti ? Nezavisne programske celine koje sadrže metode (funkcije) i podatke (elementarne i struktuirane) Različita pojavljivanja iste klase Promenljive koje se kreiraju iz struktura tipa klase Individualna realizacija klasa Objekat je intelegentna struktura podataka koja može da odgovori na pozive funkcija.
  • 45. 08/21/13 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
  • 46. 08/21/13 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;
  • 47. 08/21/13 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” !
  • 48. 08/21/13 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
  • 49. 08/21/13 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
  • 50. 08/21/13 50 Šta se dešava u stvarnosti ? Opšti oblik poziva metode Objekat.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.
  • 51. 08/21/13 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); • }
  • 52. 08/21/13 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.
  • 53. 08/21/13 53 Kod i podaci u klasi Cstr • Metode klase Cstr • Objekti klase Cstr CpyCpy GetGet GetlengtGetlengt hh StrinString1g1 objectobject sDatasData String4String4 objectobject sDatasData String3String3 objectobject sDatasData String2String2 objectobject sDatasData
  • 54. 08/21/13 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); – };
  • 55. 08/21/13 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
  • 56. 08/21/13 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
  • 57. 08/21/13 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
  • 58. 08/21/13 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.
  • 59. 08/21/13 59 Example • main() • { • /*spoljasnji blok*/ • auto int x=1; • { • /*podblok #1 */ • auto int y=2; • printf(“%d%dn”,x,y); • } • { • /*podblok #2*/ • printf(“%d%dn”,x,y);/*linija 12 */ • } • printf(“%d%dn”,x,y);/*linija 14*/ • }
  • 60. 08/21/13 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.
  • 61. 08/21/13 61 Example • main() • { • Void uvecaj(); • uvecaj(); • uvecaj(); • uvecaj(); • } • void uvecaj() • { • static int x=0; • x++; • printf(“%dn”,x); • } • Ispisuje se • 1 • 2 • 3
  • 62. 08/21/13 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
  • 63. 08/21/13 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
  • 64. 08/21/13 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. Public Private Protected
  • 65. 08/21/13 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)
  • 66. 08/21/13 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
  • 67. 08/21/13 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.
  • 68. 08/21/13 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.
  • 69. 08/21/13 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.
  • 70. 08/21/13 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.
  • 71. 08/21/13 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
  • 72. 08/21/13 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.
  • 73. 08/21/13 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.
  • 74. 08/21/13 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;}; • };
  • 75. 08/21/13 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 • };
  • 76. 08/21/13 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
  • 77. 08/21/13 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; • }