ta je c Programski jezik c je jezik

  • Slides: 166
Download presentation

Šta je c++ § Programski jezik c++ je jezik sa klasama, ili proširenje popularnog

Š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

Osobine jezika C § Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj

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.

Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke main § podaci

Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke main § podaci

Osobine jezika C++ § Osnovna ideja objektno orjentisanog programiranja je da sve te podatke

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

Osobine jezika C++ § Tako učaurenim podacima i operacijama definišemo interface prema korisniku tih

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.

Sabiranje dva broja bez korišćenja klasa § #include<stdio. h> § main () §{ §

Sabiranje dva broja bez korišćenja klasa § #include<stdio. h> § main () §{ § int a, b; § a=2; § b=4; § printf(“Suma dva broja je %6 dn", a+b); §}

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

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 Ime. Atributa; // podatak, atribut klase § // Podrazumeva se da je private sto znaci da se istom moze pristupiti § // preko metoda ove klase § Public;

i sa korišćenjem klasa § Void suma (int a , int b ) //

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 Ime. Atributa = a+b; // Punjenje objekta § Cout << “suma dva broja je : ” << Ime. Atributa; § // Novi nacin prikaza cout je objekat ugradjene klase iosteam za ekranski prikaz po difoltu, //”<<“ je poziv odgovarajuce operator funkcije za prosledjivane izlaznih podataka na ekran. } };

i sa korišćenjem klasa § // Glavni program § Void main () § {

i sa korišćenjem klasa § // Glavni program § Void main () § { paket objekat_zbir; objekta //deklarisanje § objekat_zbir. suma(10, 20); // Komunikacija sa objektom ostvaruje se posredstvom njegovih metoda

Objektno orijentisano programiranje

Objektno orijentisano programiranje

Koncepti objektno orijentisanog programiranja § Apstrakcija § Proceduralna apstrakcija § Apstrakcija podataka § Učaurenje

Koncepti objektno orijentisanog programiranja § Apstrakcija § Proceduralna apstrakcija § Apstrakcija podataka § Učaurenje podataka i procedura § Skrivanje podataka § Nasleđivanje § Jednostavno i višestruko nasleđivanje § Polimorfizam

Apstrakcija Geometrijski oblici Pravougaonik Elipsa Trougao

Apstrakcija Geometrijski oblici Pravougaonik Elipsa Trougao

Učaurenje Pravougaonik § Atributi Dužina Širina § Metode Crtaj () Obim () Povrsina ()

Učaurenje Pravougaonik § Atributi Dužina Širina § Metode Crtaj () Obim () Povrsina () Pomeri()

Nasleđivanje, razvrstavanje zajedničkih osobina različitih klasa Geometrijski oblici Pravougaonik Elipsa Trougao

Nasleđivanje, razvrstavanje zajedničkih osobina različitih klasa Geometrijski oblici Pravougaonik Elipsa Trougao

Polimorfizam, različit odgovor na isti metod Geo. Oblik crtaj() Pravougaonik crtaj() Elipsa crtaj() Trougao

Polimorfizam, različit odgovor na isti metod Geo. Oblik crtaj() Pravougaonik crtaj() Elipsa crtaj() Trougao crtaj()

Strukturno, naspram, objektno orijentisanom programiranju Objektno-orijentisane tendencije Tendencije strukturnog programiranja 1 Objekat u središte

Strukturno, naspram, objektno orijentisanom programiranju Objektno-orijentisane tendencije Tendencije strukturnog programiranja 1 Objekat u središte Proces u središte 2 Podaci skriveni Podaci javni 3 Modularnost Monolitnost 4 Ponovno korišćenje Upotreba jedanput 5 Baziran na porukama Algoritamski pristup

Strukturni pristup u programiranju Funkcije Podatak Crtaj. Prav(. . . ) { } Pomeri.

Strukturni pristup u programiranju Funkcije Podatak Crtaj. Prav(. . . ) { } Pomeri. Prav(. . . ) { } Promeni. Vel. Prav() { } Rotiraj. Prav(. . . ) { } prav 1 dužina širina centar prav 2 dužina širina centar prav 3 dužina širina centar

Objektno-orijentisani pristup programiranju prav 1 Crtaj Pomeri Promeni vel. Rotiraj prav 2 Crtaj dužina

Objektno-orijentisani pristup programiranju prav 1 Crtaj Pomeri Promeni vel. Rotiraj prav 2 Crtaj dužina širina centar Pomeri Promeni vel. Rotiraj dužina širina centar

Atributi i metodi § Sluzbenik - Imei. Prezime: string - Maticnibroj: string - Pol:

Atributi i metodi § Sluzbenik - Imei. Prezime: string - Maticnibroj: string - Pol: char - Datumrodjenja: double + Uzmimaticnibroj() - Zadajmaticnibroj() + Uzmipol() - za. Dajpol() Platni. Spisak Plata: double +Izracunajplatu()

Atributi i metodi U objektu se pored atributa nalaze odgovarajuće metode kojima se vrši

Atributi i metodi U objektu se pored atributa nalaze odgovarajuće metode kojima se vrši zadavanje i vraćanje vrednosti atributa. § § Imei. Prezime Maticnibroj zadajmaticnibroj() Uzmimaticnibroj() Da bi se efikasno koristili metodi potrebno je znati: § § § Ime metode Koji se parametri prosleđuju metodu Povratni tip metoda

Atributi i metodi § Objekat platni spisak sadrži metod izracunajplatu(), koji računa platu datog

Atributi i metodi § Objekat platni spisak sadrži metod izracunajplatu(), koji računa platu datog službenika. § Objekat platni. Spisak mora imatični broj datog službenika. Da bi došao do te informacije objekat platni. Spisak mora poslati poruku objektu Sluzbenik (metodu Uzmimaticnibroj(). § Objekat Sluzbenik prepoznaje poruku i vraća traženu informaciju

Klase su strukture kojima su pridodata svojstva: § Privatni pristup Enkapsulacije (sakrivanje, učaurenje) podataka

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)

Ili, Klase su : Ø Prototipski mehanizam za stvaranje objekta, omogućavajući njihovu klasifikaciju po

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,

Više o klasama § Deklarisanje klase § Class imeklase { Telo klase u kome

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 } objekat 1, objekat 2; Č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

Atributi klase § § § Class Ekran { short visina, sirina; Char *kursor, *ekran;

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

§ § Metode klase Class Ekran { //definicija atributa Public Void home () {kursor=ekran}

§ § Metode klase Class Ekran { //definicija atributa Public Void home () {kursor=ekran} kursora //Pozicioniranje § Void move(int, int); // Pomera kursor na apsolutnu poziciju § Char get (int, int); // vraća zadatu poziciju kursora §}

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

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.

Definisanje metoda određene klase § Sintaksa definisanja metode određene klase ima sledeći izraz §

Definisanje metoda određene klase § Sintaksa definisanja metode određene klase ima sledeći izraz § povratni_tip ime_klase: : ime_metode (parametri) § { § Iskazi § }

Deklarisanje klase § Class ime_klase { § Deklaracije § }; § Class Cstr {

Deklarisanje klase § Class ime_klase { § Deklaracije § }; § Class Cstr { § Private: § Char s. Data [256]; § public: § char *get (void); § int getlength (void); § void cpy (Char*s); § void cat (Char*s); § };

Interface Versus Implementation § We draw a sharp distinction between the declaration of a

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

Povezanost klase sa deklaracijom I definicijom pripadajućih metoda § § § Class Cstr {

Povezanost klase sa deklaracijom I definicijom pripadajućih metoda § § § Class Cstr { Private: § Char s. Data [256]; public: § char *get (void); § int getlength (void); § void cpy (Char*s); § void cat (Char*s); }; #include <string. h> § Char * Cstr : : get (void) § { § Return s. Data; § } § int Cstr : : getlength (void) § { § Return strlen(sdata); § } § Void Cstr : : cpy (Char*s) § ( § strcpy (s. Data, s ); }; //vrati pokazivač na podatke znakovnog niza //vrati dužinu //kopiraj sadržaj argumenta

Šta su Objekti ? Ø Nezavisne programske celine koje sadrže metode (funkcije) i podatke

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

Classes and Objects § A class is a type. When you make instances of

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

Stvaranje objekata § Objekti se deklarišu (stvaraju objavljuju) posredstvom klase koja je šablon (tip)

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 string 1, string 2, string 3;

Pozivanje metode, funkcije članice § #include ”Cstr. h” § //Ova datoteka deklariše klasu Cstr.

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 string 1, string 2, string 3; § String 1. cpy ( “Fide, sed qui vide”); § // Kopiraj znakovni niz u objekat string 1. Ovaj poziv funkcije članice je komanda objektu string 1: “ Kopiraj u sebe dati znakovni niz” !

Punjenje objekta I pristup podacima § Objekat se može puniti podacima kao što to

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

Aktiviranje objekta § Objekat se aktivira pozivom i izvršenjem njegovih metoda. Pošto metode pripadaju

Aktiviranje objekta § Objekat se aktivira pozivom i izvršenjem njegovih metoda. Pošto metode pripadaju objektu iste se moraju aktivirati slanjem poruke (message) objektu. § Moja. Banka. podizanje(cek) § // Ime objekta. poruka

Šta se dešava u stvarnosti ? Opšti oblik poziva metode Objekat. metoda(argumenti) Prevodilac prepoznaje

Šta se dešava u stvarnosti ? Opšti oblik poziva metode Objekat. metoda(argumenti) Prevodilac prepoznaje string 1. cpy( ) kao poziv metode. On zna da je string 1 objekat klase Cstr. Stoga se, poziv metode string 1. cpy( ) razrešava kao poziv metode Cstr: : cpy i kontrola se prosleđuje metodi Cstr: : cpy.

§ Svaki objekat klase Cstr ima svoju kopiju argumenta s. Data § String 1.

§ Svaki objekat klase Cstr ima svoju kopiju argumenta s. Data § String 1. cpy ( “Fide, sed qui vide”); § Ovaj poziv funkcije članice je komanda objektu string 1: “ Kopiraj u sebe dati znakovni niz” ! § Iskaz poziva funkciju članicu Cstr: : cpy( ) preko objekta string 1 § Void Cstr: : cpy(char *s){ § Strcpy(SData, s); § }

Kod i podaci u klasi Cstr § Objekti iste klase dele kôd metoda. §

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.

Kod i podaci u klasi Cstr § Metode klase Cstr Cpy Getlength String 1

Kod i podaci u klasi Cstr § Metode klase Cstr Cpy Getlength String 1 String 2 String 3 String 4 object s. Data § Objekti klase Cstr

Klasa koja u tački određuje temperaturu § Class Ctempoint { § Private: § Int

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

Objekti klase Ctempoint § Ako definišemo četiri objekta klase Ctempoint. A, point. B, point.

Objekti klase Ctempoint § Ako definišemo četiri objekta klase Ctempoint. A, point. B, point. C, point. D; § Svi primerci ove klase dele kod metode klase Ctempoint. Ipak svaka klasa ima svoju kopiju četiri podatka člana x, z, y, temp

Metode i objekti klase CTempoint setpoint Getpoint Settemp gettemp § Metode klase CTempoint. A

Metode i objekti klase CTempoint setpoint Getpoint Settemp gettemp § Metode klase CTempoint. A point. B point. C point. D object x x y z y z temp § Objekti klase CTempoint

Memorijske klase C jezika § Pored pripadnosti odredjenom tipu promenjlive imaju i svoju memorijsku

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

Automatske promenljive § Automatske promenljive se deklarišu rezervisanom reči auto ispred specifikacije tipa kao

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.

§ § § § Example main() { /*spoljasnji blok*/ auto int x=1; { /*podblok

§ § § § 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*/ }

Statičke promenljive § Kao i automatske, statičke promenljive su lokalne u funkciji odnosno bloku

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.

Example § § § § § main() { Void uvecaj(); } void uvecaj() {

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

Spoljašnje promenljive § Promenljiva deklarisana van funkcije naziva se spoljašnja promenljiva. Ona se može

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

Primeri deklarisanja spoljašnjih promenljivih § § § § int x = 707; /* globalna

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

Enkapsulacija, sakrivanje ili učaurenje podataka C ++ § Klasa omogućava zatvaranje i sakrivanje podataka,

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

Public: Proširuje pristup jednom ili više članova klase, tako da je sa njima moguće

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)

Private: § Ograničava pristup članovima. Privatni članovi objekta su stvarno privatni, niko ne može

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

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

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.

Protected: § Predstavlja oblast dejstva kada je moguć pristup svim podacima objekta bazne klase

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.

Primer § U ovom primeru članovi x, y i z su zaštićeni. Članovi a

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.

Vrlo važno, ali stvarno § Podrazumevani status osnovne klase je private ali, još jednom,

Vrlo važno, ali stvarno § Podrazumevani status osnovne klase je private ali, još jednom, § 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.

Scope

Scope

Koncept područja važenja § Iz jedne klase se može napraviti više primeraka objekta. Svaki

Koncept područja važenja § Iz jedne klase se može napraviti više primeraka objekta. Svaki ovako konstruisan objekat ima sopstveni identitet i stanje i dodeljuje mu se zasebna memorijska oblast. § Neke metode i atribute mogu koristiti svi objekti formirani iz iste klase, na taj način deleći memoriju dodeljenu za atribute i metode date klase.

Vrste atributa, članica klase Iako metod u opštem slučaju predstavlja ponašanje objekta stanje objekta

Vrste atributa, članica klase Iako metod u opštem slučaju predstavlja ponašanje objekta stanje objekta se obično predstavlja pomoću atributa. Konstruktor je odličan primer metoda koji zajednički koriste svi primerci objekata dobijenih iz klase. Postoje tri vrste atributa: § Lokalni atributi § Atributi objekta § Atributi klase

Lokalni atributi § Lokalni atributi su lokalni u određenom metodu. § Public class broj

Lokalni atributi § Lokalni atributi su lokalni u određenom metodu. § Public class broj { § Public metod 1( ) { § Int brojac; § } § Public metod 2 () { § }

Scope (oblast važenja) u klasi broj § Sama klasa ima sopstveni opseg. § Svakim

Scope (oblast važenja) u klasi broj § Sama klasa ima sopstveni opseg. § Svakim primerak klase (objekat ) ima sopstveno područje važenja. § Metodi metod 1 i metod 2 imaju zasebna područja važenja. § Promenljiva brojač živi unutar metoda 1, kada se pozove metod 1 stvara se kopija promenljive brojač. Kada se završi metod 1 kopija promenljive brojač se briše. § Metod 2 nije svestan postojanja promenljive brojač

Kako je ovo moguće ? § Public class broj { § Int brojac; §

Kako je ovo moguće ? § Public class broj { § Int brojac; § Public metod 1( ) { § brojac; § } § Public metod 2 ( ) { § brojac ; § } § U ovoj klasi postoje dve kopije celobrojne promenljive brojač. Prevodilac ih prepoznaje po tome kojem metodu pripadaju, mada imaju isto ime. Svaki od ova dva metoda ima sopstveno područje važenja.

Atributi objekta § Čest slučaj da isti atribut treba da koriste više metoda u

Atributi objekta § Čest slučaj da isti atribut treba da koriste više metoda u okviru istog objekta § Public class broj { § Int brojac; § Public metod 1( ) { § brojac = 1; § } § Public metod 2 () { § brojac = 2; § } § Za ceo objekat postoji samo jedna kopija promenljive brojač, pa obe dodele vrednosti rade nad istom kopijom u memoriji

Atributi klase § Postoji mogućnost da više objekata zajednički koriste atribute. Potrebno je da

Atributi klase § Postoji mogućnost da više objekata zajednički koriste atribute. Potrebno je da se atribut označi sa static § Public class broj { § static Int brojac; § Public metod 1( ) { § } Svi objekti klase koriste istu lokaciju memorije za atribut, u osnovi svaka klasa ima jednu kopiju koju zajednički koriste svi objekti klase.

§ § § Public class Taksista { // Zadati ime kompanije Private static string

§ § § Public class Taksista { // Zadati ime kompanije Private static string imekompanije = “Zuti taksi”; // Ime taksiste Private string Ime; //

Dinamičko zauzimanje memorije § Dinamičko zauzimanje memorije je tehnika kojom se u vreme izvršenja

Dinamičko zauzimanje memorije § Dinamičko zauzimanje memorije je tehnika kojom se u vreme izvršenja programa može utvrditi koliko je memorije potrebno za datu aktivnost. § Za razliku od funkcija malloc i calloc koje se koriste u c-u, u c++-u se koriste operatori new i delete,

DINAMIČKO DODELJIVANJE MEMORIJE U C JEZIKU § Za razliku od statičke dodele memorije gde

DINAMIČKO DODELJIVANJE MEMORIJE U C JEZIKU § Za razliku od statičke dodele memorije gde se podacima pristupa preko imena promenljivih, dinamički pristup podacima vrši se uglavnom preko pokazivača. Sama dodela memorije obavlja se uz pomoć bibliotečnih funkcija koje se nalaze u <stdlib. h> kao što su: § malloc(n) - funkcija dodeljuje memoriju od n bajtova; § calloc(x, n) - dodeljuje memorijski prostor za x komponenti niza od n bajtova. § free(p) - oslobađa prostor.

malloc § char *malloc( unssigned n) § gde n predstavlja broj bajtova koje izdvaja

malloc § char *malloc( unssigned n) § gde n predstavlja broj bajtova koje izdvaja funkcija. § Vrednost funkcije je znakovni pokazivač na prvi bajt izdvojene oblasti. § Sledeći operatori funkcijom malloc izdvajaju 200 bajta § int *pint § pint = (int*) malloc(200)

sizeof § sizeof (izraz) - Vraća memorijski prostor neophodan za čuvanje izraza § sizeof

sizeof § sizeof (izraz) - Vraća memorijski prostor neophodan za čuvanje izraza § sizeof (T) - Vraća memorijski prostor neophodan za čuvanje vrednosti tipa T

Statička dodela memorije § Prilikom definicije niza od n članova u pokazivaču niz počinje

Statička dodela memorije § Prilikom definicije niza od n članova u pokazivaču niz počinje sa adresom u memoriji prvog elementa niza. § int *niz; § niz=calloc(n, sizeof(int)); § Na ovaj način dodeljivanja memorijskog prostora unapred je definisan broj članova niza n, tj veličina memorije na početku izvršenja program. Ovako se rezerviše n puta 2 (4) bajta jer je sizeof(int) 2 ili 4 u zavisnosti od računara.

Dinamička dodela memorije § Kada je potrebno rezervisati prostor za pokazivač p sa još

Dinamička dodela memorije § Kada je potrebno rezervisati prostor za pokazivač p sa još nedefinisanim sadrzajem treba napisati sledeće: p=(int*)malloc(sizeof(int);

Dinamička dodela memorije § Rezervisanom prostoru se može pristupiti samo preko pokazivača p naredbom:

Dinamička dodela memorije § Rezervisanom prostoru se može pristupiti samo preko pokazivača p naredbom: § *p=5; § na adresi 1253 dolazi vrednost 5.

§ Funkcija free oslobađa prostor u memoriji koji je prethodno rezervisan preko funkce malloc,

§ Funkcija free oslobađa prostor u memoriji koji je prethodno rezervisan preko funkce malloc, a čija se adresa nalazila u pokazivaču p. § free(p) § Vrednost koja se nalazi na toj adresi na koju je upućivao pokazivač p ostaje , ali § joj se više ne može pristupiti

§ Vrednost koja se nalazi na toj adresi na koju je upućivao pokazivač p

§ Vrednost koja se nalazi na toj adresi na koju je upućivao pokazivač p ostaje , ali § joj se više ne može pristupiti

§Operatori §new & § delete

§Operatori §new & § delete

Prednosti operatora new i delete u odnosu na malloc I calloc § Za njih

Prednosti operatora new i delete u odnosu na malloc I calloc § Za njih nije potrebna datoteka zaglavlja jer su oni deo programskog jezika § Ovi operatori prepoznaju tipove, povratna vrednost operatora new, za razliku od povratne vrednosti operatora malloc ne mora biti konvertovana u drugi tip. § Za objekte oni imaju specijalne funkcije konstruktore i destruktore, koje služe za inicijalizaciju i oslobađanje memorije.

Sintaksa § Da bi se pomoću operatora new zauzela memorija potrebno je navesti tip

Sintaksa § Da bi se pomoću operatora new zauzela memorija potrebno je navesti tip objekta posle operatora § pokazivač = new tip; § pokazivač = new tip [n]; ili § Može se koristiti i niz objekata § samo za objekte § pokazivač = new tip [argumenti];

Operator new § Vradnost koju vraća new se uvek mora dodeliti pokazivaču, jer on

Operator new § Vradnost koju vraća new se uvek mora dodeliti pokazivaču, jer on obezbeđuje pristup podacima, Operator new se obično koristi za pravljenje niza. § Int *p 1, *p 2, *p 3; § Int broj; § //…. § P 1 = new int; // p 1 pokazuje na pojedinačni ceo broj § P 2 = new int [ 500 ] ; // p 2 pokazuje na prvi od 500 celih brojeva § broj = 75 ; § P 3 = new int [broj] ; // Zauzmi 75 celih brojeva. §

Operator delete § Da bi se oslobodila memorija dodeljena operatoru new treba upotrebiti operator

Operator delete § Da bi se oslobodila memorija dodeljena operatoru new treba upotrebiti operator delete iza koga treba navesti ime pokazivača § Delete pokazivač // ako je jedan objekat napravljen sa new § delelete [ ] pokazivač ; // ako je niz napravljen sa new [ ]

§Konstruktori i §destruktori

§Konstruktori i §destruktori

Život i smrt objekta: konstruktori § Funkcije koje su učaurene sa podacima (atributima) unutar

Život i smrt objekta: konstruktori § Funkcije koje su učaurene sa podacima (atributima) unutar jedne klase nazivaju se metode. Iste su obično public, ali mogu biti i private i protected. Dve specijalne metode koje služe za inicijalizaciju i uništavanje objekata su: § konstruktor i destruktor.

Konstruktor § Objekti mogu imati jednu ili više specijalnih metoda koje se nazivaju konstruktorima,

Konstruktor § Objekti mogu imati jednu ili više specijalnih metoda koje se nazivaju konstruktorima, i koje se koriste za inicijalizaciju objekata prilikom njihovog deklarisanja kao pojavljivanja neke klase. Ime konstruktora nosi ime svoje klase.

Destruktor § Specijalna metoda destruktor koristi se za brisanje ( uništavanje ) objekata. Nosi

Destruktor § Specijalna metoda destruktor koristi se za brisanje ( uništavanje ) objekata. Nosi ime svoje klase sa znakom ~ ispred imena. § Destruktor se automatski poziva uvek kada objekat napusta svoj opseg scope vazenja

Constructors § It is not uncommon for a class to require a bit of

Constructors § It is not uncommon for a class to require a bit of setting up before it can be used. In fact, an object of that class might not be considered valid if it hasn't been set up properly. C++ provides a special method to set up and initialize each object, called a constructor.

Destructors § The job of the destructor is to tear down the object. This

Destructors § The job of the destructor is to tear down the object. This idea will make more sense after we talk about allocating memory or other resources. For now, the destructor won't do much, but as a matter of form, if I create a constructor, I always create a destructor.

Sintaksa § Sintaksa davanja imena konstruktoru I destruktoru: § za klasu Cstr Ime konstruktora

Sintaksa § Sintaksa davanja imena konstruktoru I destruktoru: § za klasu Cstr Ime konstruktora je Cstr Ime destruktora je ~Cstr

Example………… § Za našu klasu Cstr § Class Cstr { § Private: § Char

Example………… § Za našu klasu Cstr § Class Cstr { § Private: § Char s. Data [256]; § public: § Cstr(); // Konstruktor § ~Cstr(); // Destruktor § char *get (void); § int getlength (void); § void cpy (Char*s); § void cat (Char*s); § };

§ Konstruktor u našoj klasi inicijalizuje obe promenljive članice i § zauzima memoriju za

§ Konstruktor u našoj klasi inicijalizuje obe promenljive članice i § zauzima memoriju za znakovni niz dužine jedan bajt § Cstr : : Cstr ( ) § { § § } p. Data = new char [1]; *p. Data = ‘’; n. Lenght = 0;

§ Destruktor oslobađa zauzeti memorijski blok operatorom delete § Cstr : : ~ Cstr

§ Destruktor oslobađa zauzeti memorijski blok operatorom delete § Cstr : : ~ Cstr () §{ § Delete [ ] p. Data; §}

Function overloading § Ovaj termin označava da se ime jedne funkcije može više puta

Function overloading § Ovaj termin označava da se ime jedne funkcije može više puta koristiti u različitim kontekstima. § Razlika među funkcijama sa istim imenom će se ostvariti na osnovu razlika u listi argumenata. Tip argumenta ili broj argumenata, ili oba u preklopljenim funkcijama mora se razlikovati. § Startuj( int ); § Startuj( char * );

Overloading constructor § Cstr ( ); // bez inicijalizacije § Cstr ( char *s);

Overloading constructor § Cstr ( ); // bez inicijalizacije § Cstr ( char *s); // Inicijalizuje iz tipa char* § Cstr ( Cstr &str); // Inicijalizuje iz drugog objekta klase Cstr

Konstruktor koji inicijalizuje prazan znakovni niz § Cstr : : Cstr ( ) §

Konstruktor koji inicijalizuje prazan znakovni niz § Cstr : : Cstr ( ) § { § § § p. Data = new char [1]; *p. Data = ‘’; n. Length = 0; § } § Ovaj konstruktor inicijalizuje prazan znakovni niz. § Ovaj konstruktor se poziva kada se definiše objekat bez inicjalizacije.

Konstruktor koji inicijalizuje sadržaj pomoću standardnog znakovnog niza § Cstr : : Cstr (

Konstruktor koji inicijalizuje sadržaj pomoću standardnog znakovnog niza § Cstr : : Cstr ( char *s) § { § § § p. Data = new char [strlen(s)+1]; strcpy(p. Data, s); n. Length = strlen(s); § } § Ovaj konstruktor inicijalizuje sadržaj pomoću standardnog znakovnog niza i zauzima memoriju za podatke znakovnog niza

Poziv konstruktora § Cstr string 1; // Poziv konstruktora Cstr() § Ovaj konstruktor definiše

Poziv konstruktora § Cstr string 1; // Poziv konstruktora Cstr() § Ovaj konstruktor definiše objekat bez inicijalne vrednosti § Cstr string 2 ( “. . . Paradigma kako se palanačka filozofija ne samo saobražava sa globalnim trendovima već i snishodljivo odnosi prema stavovima koji idu na štetu sopstvenog naroda. Da, teško je se odupreti imperijalnoj mašineriji i globalnoj medijskoj priči o zlim Srbima koji zaslužuju da im se oduzme deo zemlje. . . ”); § // poziv konsttruktora Cstr (char *) § Ovaj konstruktor inicijalizuje objekat iz tipa char

Konstruktor za kopiranje § Cstr ( Cstr &str); // Konstruktor koji Inicijalizuje iz drugog

Konstruktor za kopiranje § Cstr ( Cstr &str); // Konstruktor koji Inicijalizuje iz drugog objekta klase Cstr § Konstruktor za kopiranje se poziva kada se upotrebi jedan objekat za inicijalizaciju drugog objekta iste klase. § Cstr Ime (“sabah”); // Objekat ime se definiše i inicijalizuje iz znakovnog niza § Cstr Ime 2 ( ime); // Na osnovu objekta ime inicijalizuje objekat ime 2

Realistic example with money § class Automat. Novca // Definisanje klase § { double

Realistic example with money § class Automat. Novca // Definisanje klase § { double trezor; . . . . // clan klase (podatak atribut) § public : //Kontrola pristupa podacima § automat. Novca (double p) {trezor=p; } // Kada se neka metoda implementira u okviru same klase za istu se kaze da je inline Ista se tada ponasa kao makro. § Void ulaganje (double); // clan klase (metoda) § Double podizanje (double); // clan klase (metoda) § };

Ilustracija. . . § class Automat. Novca // Definisanje klase § { double trezor;

Ilustracija. . . § class Automat. Novca // Definisanje klase § { double trezor; // clan klase (podatak atribut) § public : § § § //Kontrola pristupa podacima Automat. Novca (double p) {trezor=p; } // Kada se neka metoda implementira u okviru same klase za istu se kaze da je inline Ista se tada ponasa kao makro. § ~Automat. Novca(void ) {cout'' destruktor se obavezno koristi kod dinamickih <<''objekatan''; § Void ulaganje (double); // clan klase (metoda) § Double podizanje (double); // clan klase (metoda) § };

Example N. . . Bank class, objects, methods, attributs… § Class Automat. Novca //Definisanje

Example N. . . Bank class, objects, methods, attributs… § Class Automat. Novca //Definisanje klase § { public: //Kontrola pristupa podacima § double trezor; //Clan klase(podatak, atribut) § void ulaganje(double); //clan klase(metoda) § double podizanje(double); //clan klase(metoda) § };

Implementation of methods § void Automat. Novca: : ulaganje(double ulog) //Operator: : ukazuje na

Implementation of methods § void Automat. Novca: : ulaganje(double ulog) //Operator: : ukazuje na //pripadnost metode odredjenoj klasi. § § § § § { trezor=trezor+ulog; } double Automat. Novca: : podizanje(double iznos) { trezor=trezor-iznos; if(trezor<0. 0) {cout<<”racun je u minusu!sledi kazna od 100 din!n“; trezor=trezor-100. } return trezor; }

Main program § § § § main() {Automat. Novca Moja. Banka Tvoja Banka; moja

Main program § § § § main() {Automat. Novca Moja. Banka Tvoja Banka; moja Banka. trezor=0. ; //Pocetno stanje novca u banci. Uocite nacin pristupa clanu klase. Double uplatnica =20. 00; Moja banka. ulaganje(uplatnica); //poziv metode. Cout<<”stanje trezora: ’<<moja banka. trezor<<”n”; Double cek=15. 00; Double stanje=moja banka. podizanje(cek); Cuut<<”Novo stanje trezora, nakon podizanja: ”<<cek<<”dinara je” <<stanje<<endl; stanje=Moja banka. podizanje(10. ); //podizanje bez pokrica. Cout<<“stanje u trezoru, nakon pokusaja podizanja bez pokrica: “ <<stanje<<endl; return 0; }

Program description § Objekti imaju svoje metode koje služe za najbitnije obrade inicijalizaciju, punjenje,

Program description § Objekti imaju svoje metode koje služe za najbitnije obrade inicijalizaciju, punjenje, prikaz. . . atributa. § Klasa Automat. Novca kao model po kome se generišu objekti Moja. Banka, Tvoja Banka imaju metode ulaganje i podizanje i atribut trezor §. . §

§ § § § double Automat. Novca: : podizanje(double iznos) { trezor=trezor-iznos; } Double

§ § § § double Automat. Novca: : podizanje(double iznos) { trezor=trezor-iznos; } Double tip podatka koji kao rezultat vraća metoda Automat. Novca ime klase kojoj metoda pripada : : scoping operator koji ukazuje na pripadnost metode podizanje klasi Automat. Novca Podizanje ime metode ( double iznos ) lista parametara

Nasleđivanje § Predstavlja mogućnost da se iz postojeće klase izvede nova klasa. Pri tome

Nasleđivanje § Predstavlja mogućnost da se iz postojeće klase izvede nova klasa. Pri tome nova klasa može naslediti sve članove postojeće klase u zavisnosti od definisanih načina pristupa. § Postojeća klasa se naziva osnovna klasa dok se klasa naslednik naziva izvedena klasa.

Nasleđivanje § Nasleđivanje je ključni deo objektno orjentisanog programiranja i omogućava dve važne prednosti

Nasleđivanje § Nasleđivanje je ključni deo objektno orjentisanog programiranja i omogućava dve važne prednosti kod programiranja: § Visok stepen ponovnog korišćenja istog koda – reuseability § Polimorfizam, korišćenje istog naziva za funkcije koje rade slične stvari.

Nasleđivanje Geometrijski oblici Pravougaonik Elipsa Trougao

Nasleđivanje Geometrijski oblici Pravougaonik Elipsa Trougao

Prednosti nasleđivanja § Hijarahijska jasnost § Ponovno korišćenje već napisanog koda § Zajednički podaci

Prednosti nasleđivanja § Hijarahijska jasnost § Ponovno korišćenje već napisanog koda § Zajednički podaci i funkcije se pišu samo jedan put § Sposobnost proširenja osnovnih klasa § Dodavanje članica podataka i funkcija § Menjanje ponašanja metodom prepisivanje (overriding) osnovne klase

Sintaksa nasleđivanja § Pretpostavimo da je Osnovna_klasa prethodno deklarisana. Ako se izvedena klasa izvodi

Sintaksa nasleđivanja § Pretpostavimo da je Osnovna_klasa prethodno deklarisana. Ako se izvedena klasa izvodi iz klase Osnovna_klasa, rezultat je da Izvedena_klasa automatski ima sve članove definisane u klasi Osnovna_klasa kao i dodatne koje sama deklariše § Class Izvedena_klasa : public Osnovna_klasa { § Deklaracije § };

Example class Permanent : public Employee // Permanent "inherits" { // from the class

Example class Permanent : public Employee // Permanent "inherits" { // from the class Employee public: // additional & overridden functions Permanent(void) : m_n. Monthly. Salary (0) { cout << "Permanent C'tor: No argsn"; } ~Permanent() { cout << "Permanent D'torn"; } private: // additional data members int m_n. Monthly. Salary; };

Overriding class Geo. Oblik { public: § void Crtaj(void); . . . }; class

Overriding class Geo. Oblik { public: § void Crtaj(void); . . . }; class Pravougaonik : public Geo. Oblik { public: void Crtaj(void); . . . }; void Pravougaonik : : Draw(void) { Geo. Oblik : : Crtaj(); . . . }

Veze između objekata u hijararhiji Geo. Oblik g 1; Pravougaonik p 1; p 1

Veze između objekata u hijararhiji Geo. Oblik g 1; Pravougaonik p 1; p 1 Velicina() Crtaj() m_n. Visinat m_n. Sirina Deo koji dodat pravougaoniku g 1 Postavi. Centar() Uzmi. Centar() Crtaj() m_Center Postavi. Centar() Uzmi. Centar() Geo. Shape: : Crtaj() m_Center Deo nasleđen iz Geometrijskog oblika

Nasleđivanje § Šta se nasleđuje? § Podaci § Funkcije članice § Šta se ne

Nasleđivanje § Šta se nasleđuje? § Podaci § Funkcije članice § Šta se ne nasleđuje? § Konstruktori § Destruktori

Primer za nasleđivanje § § § § #include<iostream. h> Class Lokacija {public: Double x,

Primer za nasleđivanje § § § § #include<iostream. h> Class Lokacija {public: Double x, y; //Lokacija objekta. Lokacija(double xp, double yp); //Konstruktor za inicijalizaciju Lokacija. Virtual double povrsina(void); //Virtuelna metoda za izracunavanje povrsine }; Class krug: public Lokacija {public: Double radijus; //Dopunski atribut, poluprecnik kruga. Krug(double xp, double yp, double rp ); //konstruktor kruga. Double povrsina(void); //Polimorfizam (preklopljena metoda). };

§ § § § Clas cilinder: public krug {public: Double h; //Dopunski atribut, visina

§ § § § Clas cilinder: public krug {public: Double h; //Dopunski atribut, visina cilindra Cilinder(double xp, double yp, double rp, double hp); //konstruktor cilindra. Double povrsina(void); //preklapa istoimenu metodu klase Lokacija. Double zapremina(void); //Dopunska metoda za izracunavanje zapremine. }; Class Pravougaonik: public Lokacija {public: Double a, b; //Dopunske promenjive, strane pravougaonika. Pravougaonik(double xp, double yp, double ap, double bp); //konstruktor pravougaonika. Double povrsina(void); //Preklapa istoimenu metodu klase Lokacije. };

§ § § § Class Paralelopiped: public pravougaonik { public: Double visina; //Dopunski atribut,

§ § § § Class Paralelopiped: public pravougaonik { public: Double visina; //Dopunski atribut, visina parralelopipeda. Paralelopiped(double xp, douuble yp, double ap, double bp, double v); Double povrsina(void); //Preklapa istoimenu metodu klase Lokacija. Double zapremina(void); //za izracunavanje zapremine paralelopipeda. }; //implementacija metoda Lokacija: : Lokacija(double xp, double yp) { X=xp; Y=yp; { double Lokacija: : povrsina() {return 0; }

§ Krug: : krug(double xp, double yp, double rp): (xp, yp) § //poziv konstruktora

§ Krug: : krug(double xp, double yp, double rp): (xp, yp) § //poziv konstruktora klase Lokacija za postavljanje koordinata kruga. § //Uocite, poziv konstruktora iz nadredjene klase se sa “: ”, § //bez navodjenja njegovog imena, I to pre tela(realizacije)konstruktora za izvedenu klasu. § { § Radijus=rp; § } § Double krug: : povrsina(void) § { § Return 3. 14*radijus; § } § Cilinder: : cilinder(doublexp, double yp, double rp, double hp) § : (xp, yp, rp) § { § h=hp; § } § Double Cilinder: : povrsina() § { § Return 6. 283*radijus*h; § }

§ Double Cilinder: : zapremina() § { § Return Krug: : povrsina()*h; //uocite poziv(ukljucivanje)metode

§ Double Cilinder: : zapremina() § { § Return Krug: : povrsina()*h; //uocite poziv(ukljucivanje)metode klase Krug § //za izracunavanje povrsine kruga(zajednicki kod). § } § Pravougaonik(double xp, double yp, double ap, double bp) xp, yp) § //poziv konstruktora klase Lokacija da postavi koordinatni pocetak. § { § a=ap; § b=bp; § } § Double Pravougaonik: : povrsina(void) § { § Returna*b; § } § Paralelopiped: : Paralelopiped(doublexp, double yp, double ap, double bp, double v) § : (xp, yp, ap, bp)//Ovaj konstruktor poziva nadredjeni da obavi vecinu posla. § { § Visina=v; § }

§ § § Double paralelopiped: : povrsina() { Return 2. 00*pravougaonik: : povrsina() +2.

§ § § Double paralelopiped: : povrsina() { Return 2. 00*pravougaonik: : povrsina() +2. 0*pravougaonik(0, 0, a, visina). povrsina() +2. 0*pravougaonik(0, 0, b, visina). povrsina(); //u poslednja dva reda stvorili smo privremene objekte cija se povrsina izracunava. } double. Paralelopiped: : zapremina() { Return pravougaonik: : povrsina()*visina; }

§ § § § § //glavni program Main() { Lokacija ik(5, 2); //deklaracija objekata

§ § § § § //glavni program Main() { Lokacija ik(5, 2); //deklaracija objekata I eksplicitni poziv konstruktora. Krug kr(5, 2, 7); Cilinder cl(5, 2, 7, 3); Pravougaonik pr(5, 2, 10, 5); Paralelopiped par(5, 2, 10, 5, 3); Cout<<“povrsina lokacije je: ”<<lk. povrsina(); Cout<<“npovrsina kruga je: ”<<kr. povrsina(); § Cout<<“povrsina cilindra je : ”<<cl. povrsina()<<“a zapremina: ”<<cl. zapremina(); § Cout<<“npovrsina pravougaonika je : ”<<pr. povrsina(); § Cout<<“npovrsina paralelopipeda je : ”<<par. povrsina(); § <<“a zapremina : ”<<par. povrsina(); § }

Izlazni rezultat § § § Povrsina lokacije je: 0 Povrsina kruga je: 153. 86

Izlazni rezultat § § § Povrsina lokacije je: 0 Povrsina kruga je: 153. 86 Povrsina cilindra je: 131. 86 a zapremina je: 461. 58 Povrsina pravougaonika je: 50 Povrsina paralelopipeda je: 153. 86 a zapremina je|: 150

Virtuelne funkcije § Izraz virtuelna obično opisuje nešto nije sasvim realno, ali radi kao

Virtuelne funkcije § Izraz virtuelna obično opisuje nešto nije sasvim realno, ali radi kao da jeste. U slučaju funkcija, termin virtuelna opisuje poziv funkcije koji može biti preveden u proizvoljan broj različitih adresa funkcije. § Virtual tip ime (argumenti); Kada se jednom upotrebi rezervisana reč virtual u deklaraciji funkcije, ovaj termin se ne mora ponavljati u: § Njenoj definiciji, § Deklaracijama izvedenih klasa, § Redefinicijama funkcija u izvedenim klasama. Efekat virtuelne funkcije najčešće se vidi kada se pristupa objektima preko pokazivača osnovne klase.

Polimorfizam § Polimorfizam znaci “uzeti mnogo oblika”. U objektnoorjentisanom programiranju polimorfizam omogucava da se

Polimorfizam § Polimorfizam znaci “uzeti mnogo oblika”. U objektnoorjentisanom programiranju polimorfizam omogucava da se slicni objekti, sa razlicitim karakteristikama, ponasaju isto pod razlicitom komandom (sa istim nazivom funkcije), za koju tada kazemo da je polimorfna, odnosno da uzima vise oblika. Postoje dva nacina da se ostvari I implementira polimorfizam u C++: § 1)Preklopljenom funkcijama(overloading) – preko statickog povezivanja programa § 2)Koriscenjem virtuelnih metoda-preko dinamickog povezivanja

Preklapanje(overloading) funkcija-polimorfizam § Napisati dve istoimene funkcije za dodavanje jednom celom broju drugi broj,

Preklapanje(overloading) funkcija-polimorfizam § Napisati dve istoimene funkcije za dodavanje jednom celom broju drugi broj, a zatim dodavanje jednom stringu drugi string. int dodaj(int p, int q) { return p+q; } int a, b; a=dodaj (a, b); char*dodaj (char*s 1, char*s 2) { return strcat(p, q); } char * p 1, *p 2; p 1=dodaj(p 1, p 2);

Interfejs § Interfejs je osnovno sredstvo opštenja između objekata. § Interfejs treba da opiše

Interfejs § Interfejs je osnovno sredstvo opštenja između objekata. § Interfejs treba da opiše kako korisnik klase komunicira sa klasom. Ovi metodi koji čine deo interfejsa su označeni kao javni (public). § U osnovi interfejsi ne sadrže atribute, već samo metode. Ako korisnik treba da pristupi nekom atributu onda treba napraviti metod koji vraća taj atribut.

Realizacija § Interfejs čine samo javni metodi. Korisnika ne zanima kako se kvadrat izračunava,

Realizacija § Interfejs čine samo javni metodi. Korisnika ne zanima kako se kvadrat izračunava, dokle god je rezultat tačan. § Zbog toga, način izračunavanja, može se izmeniti a da to ni na koji način ne poremeti korisnikov kod.

Kvadrat broja § Kako formirati objekat kvadrat § Kako objektu poslati vrednost čiji kvadrat

Kvadrat broja § Kako formirati objekat kvadrat § Kako objektu poslati vrednost čiji kvadrat treba da izračuna § Kako od njega dobiti konačan rezultat § class kvadrat § § § Atributi Int Kvadrat Metode + Uzmi_kvadrat : int + zadaj_kvadrat : int - Izračunaj_kvadrat : int

Klient serverska arhitektura

Klient serverska arhitektura

TROSLOJNA ARHITEKTURA I KOMPONENTE PROGRAMSKIH SISTEMA

TROSLOJNA ARHITEKTURA I KOMPONENTE PROGRAMSKIH SISTEMA

Troslojna arhitektura • Prezentacioni ili sloj korisničkog interfejsa COM+ component pomoću koga korisnik komunicira

Troslojna arhitektura • Prezentacioni ili sloj korisničkog interfejsa COM+ component pomoću koga korisnik komunicira sa aplikacijom • Sloj poslovne logike koji sadrži pravila kako korisnik pristupa i manipuliše podacima kroz sloj za pristup podacima. Ovaj sloj može sadržati i druge podslojeve • Sloj za pristup podacima koji omogućuje poslovnim pravilima programski pristup smeštenim podacima

Troslojna arhitektura projektovanje

Troslojna arhitektura projektovanje

Troslojna arhitektura - realizacija --- - - -- Standard EXE --- - - --

Troslojna arhitektura - realizacija --- - - -- Standard EXE --- - - -- VB or ASP form Kadrovi. Mgr Plate. Rad. Mgr Subj. Posl. OSP_MGRMenadžerski COM+ Server component (DLLHost + Active. X dll) OUT process T Library component Active. X dll IN process T T Manageri Radnik COM+ Plate. Rad. Ent OSPoslovanja. OSP Entiteti Conn. Kadrovi Conn. Zarade Conn. OSP COMMON component Active. X dll IN process Zaposleni SQL 2000 Zarade Klijentska aplikacija kreira serverski objekat, poziva metodu Menadžera, prosleđuje argumente i čeka odgovor od servera OSP --------- --------- --------- sloj prihvata argumente i razrešava da li treba da pozove nekog drugog menadžera ili se obraća svojoj Entitetskoj klasi. Ako proziva drugog menadžera ponaša se kao i klijent aplikacija, a inače uvlači Entitet u svoj proces i predaje mu argumente. Entitetski sloj prihvata argumente i sastavlja upit (SELECT, INSERT, UPDATE, DELETE) koristeći metode iz Global. Functions. Korišćenjem metoda Conn* (ADO konekcija) sastavljeni upit se izvršava nad tabelama i view-ovima baze podataka Global. Functions Baze se sastoje od tabela, view-ova i st. proc. Pomoću distribuiranih view-ova moguće je pristupiti i tabelama iz “susednih” baza podataka

Objektno orjentisano projektovanje Tema Prezentacija UML vizuelnog modeliranja kroz primer - analiza i dizajn

Objektno orjentisano projektovanje Tema Prezentacija UML vizuelnog modeliranja kroz primer - analiza i dizajn -

Opis problema On. Line Shopping – Obrada narudžbina • Kupovina računara putem Interneta. •

Opis problema On. Line Shopping – Obrada narudžbina • Kupovina računara putem Interneta. • Kupac može da izabere standardnu konfiguraciju ili može da sastavi željenu konfiguraciju online. • Da bi obavio narudžbinu, kupac mora da popuni informacije o isporuci i plaćanju. • Kupac u svako doba može da proveri status porudžbine. • Naručena konfiguracija se isporučuje kupcu sa računom.

Identifikacija actora § Razmatranjem zahteva: Kada kupac unese narudžbinu u sistem, prodavac šalje elektronski

Identifikacija actora § Razmatranjem zahteva: Kada kupac unese narudžbinu u sistem, prodavac šalje elektronski zahtev serviseru sa detaljima naručene konfiguracije.

Prepoznavanje slučajeva korišćenja Kupac koristi online shopping Web stranicu da vidi standardne konfiguracije izabranog

Prepoznavanje slučajeva korišćenja Kupac koristi online shopping Web stranicu da vidi standardne konfiguracije izabranog računara Kupac bira da vidi detalje konfiguracije, sa mogućnošću da kupi konfiguraciju kakav je ili da sastavi izmenjenu konfiguraciju.

Use Case Diagram

Use Case Diagram

Use Case Naručivanje izabrane konfiguracije Kratak opis Ovim use case-om se omogućuje Kupcu da

Use Case Naručivanje izabrane konfiguracije Kratak opis Ovim use case-om se omogućuje Kupcu da izvrši narudžbinu, uključujući podatke vezane za isporuku, račun i detalje plaćanja. Actor Kupac Uslovi Stranica prikazuje detalje izabrane računarske konfiguracije uključujući i cenu. Posledice Ako je slučaj korišćenja uspešan, narudžbina se evidentira u sistemu (bazi podataka).

Opis postupka Kupac odlučuje da naruči izabranu konfiguraciju. Od kupca se traži da unese

Opis postupka Kupac odlučuje da naruči izabranu konfiguraciju. Od kupca se traži da unese detalje porudžbine. . . Kupac šalje narudžbinu proizvođaču. Sistem dodeljuje jedinstveni identifikator (broj) porudžbine, i kupčev broj računa pridružuje narudžbini, i potom sve informacije o porudžbini smešta u bazu podataka. Sistem šalje e-mail kupcu sa brojem porudžbine i identifikacionim brojem kupca. Varijacije Kupac šalje porudžbinu pre popunjavanja svih obaveznih informacija. Sistem prikazuje poruku o grešci i zahteva nedostajuće informacije. Kupac resetuje formu za naručivanje.

Use Case Paketi

Use Case Paketi

Activitie s § Sistem dodeljuje jedinstveni broj porudžbine i broj računa kupca na porudžbinu

Activitie s § Sistem dodeljuje jedinstveni broj porudžbine i broj računa kupca na porudžbinu i smešta informacije o porudžbini u bazu podataka.

Activity Dijagram

Activity Dijagram

Klase § Serviser obrađuje nalog dobijen od prodavca i isporučuje računar kupcu Da li

Klase § Serviser obrađuje nalog dobijen od prodavca i isporučuje računar kupcu Da li je potrebna klasa Isporuka? Da li je ona u granicama našeg sistema? Da li je prodavac klasa ili atribut narudžbine tj. Računa?

Atributi

Atributi

Associations

Associations

Generalisations

Generalisations

Class Dijagram

Class Dijagram

Klase- imenovanje i dokumentivanje • Imenovanje treba da jasno asocira čemu klasa služi, a

Klase- imenovanje i dokumentivanje • Imenovanje treba da jasno asocira čemu klasa služi, a dokumentovanje mora da obezbedi opis toga a ne strukturu klase. • Teškoće u ovome ukazuju na loš izbor klase • lako imenovanje i opis - dobra klasa • lako ime ali opis liči na još neku klasu - kombinacija klasa • lako imenovanje ali "roman" za opis namene - potrebno podeliti klasu • teško se i imenuje i opisuje - razmisliti još jednom da li je to klasa? ? ?

Scenario Design U Use. Case-ovima je tok dogadjaja opisan u tekstu. Treba obezbediti grafički

Scenario Design U Use. Case-ovima je tok dogadjaja opisan u tekstu. Treba obezbediti grafički prikaz scenarija. Postoje dve vrste dijagrama interakcije • Sequence dijagrami • Collaboration dijagrami Sequence dijagrami prikazuju interakciju uredjenu u vremenskim sekvencama.

Interakcija

Interakcija

Operacije - Metode

Operacije - Metode

Sequence Dijagram

Sequence Dijagram

Collaboration Dijagram • Boundary i control objekti

Collaboration Dijagram • Boundary i control objekti

 • Entiteti i database interface objekti 159

• Entiteti i database interface objekti 159

Stanja i Prelazi Statechart dijagrami služe opisu ponašanja unutar objekta.

Stanja i Prelazi Statechart dijagrami služe opisu ponašanja unutar objekta.

Class Packages Boundary klase: • klijent stranice • forme Control klase: • serverske stranice

Class Packages Boundary klase: • klijent stranice • forme Control klase: • serverske stranice • COM+ komponente

Class Packages User Services Business Services Data Services

Class Packages User Services Business Services Data Services

Component Design • • Komponente – fizički delovi sistema sa jasnim interface-om. Can parallel

Component Design • • Komponente – fizički delovi sistema sa jasnim interface-om. Can parallel Use Case Packages * Razlika između paketa i komponenti ? • Pakete ne moramo praviti u slučaju jednostavnih sistema. • Komponente se moraju praviti i za male sisteme.

Component Dijagram

Component Dijagram

Deployment Design Predstavlja raspored komponenti u enterprise okruženju. Četiri nivoa kodova: 1. Klijenti (kroz

Deployment Design Predstavlja raspored komponenti u enterprise okruženju. Četiri nivoa kodova: 1. Klijenti (kroz browser) • Statičke i dinamičke stranice • Stranice sa skriptovima i apletima koji se izvršavaju u browseru 2. Web server • Generiše i isporučuje stranice i kod koji će se izvršavati na klijent • Omogućuje pristup aplikativnom ili datebase serveru • Može da izvršava serverske skriptove 3. Database server • Omogućuje smeštaj podataka • Omogućuje višekorisnički pristup 4. Aplikacioni server • Upravlja aplikativnom (poslovnom) logikom • Neophodan u slučaju distribuiranih objekata

Deployment Dijagram

Deployment Dijagram