Šta je c++
 Programski jezik c++ je jezik sa
klasama, ili proširenje popularnog jezika
c.
 C++ se zasniva na uvođenju no...
Osobine jezika C
 Tradicionalni način programiranja je u
osnovi proceduralan, zasnovan na
funkcionalnoj dekompoziciji kor...
Tradicionalna, proceduralna, struktuirana organizacija programa
razdvaja kod I podatke
main
 podacipodaci
 podacipodaci
...
Osobine jezika C++
 Osnovna ideja objektno orjentisanog
programiranja je da sve te podatke (atribute )
izvučemo iz navede...
Osobine jezika C++
 Tako učaurenim podacima i operacijama
definišemo interface prema korisniku tih klasa
a takođe i inter...
Sabiranje dva broja bez
korišćenja klasa
 #include<stdio.h>
 main ()
 {
 int a,b;
 a=2;
 b=4;
 printf(“Suma dva bro...
i sa korišćenjem klasa //Sabiranje dva broja Novi način označavanja komentara
 #include <iosteam.h> // Nova I/O strim bi...
i sa korišćenjem klasa
 Void suma (int a , int b ) // metoda (funkcija ) klase koja
implementirana “in line “ u samoj kla...
i sa korišćenjem klasa
 // Glavni program
 Void main ()
 { paket objekat_zbir; //deklarisanje objekta
 objekat_zbir.su...
Objektno
orijentisano
programiranje
Koncepti objektno orijentisanog
programiranja
Klasifikacija
Apstrakcija
 Proceduralna apstrakcija
 Apstrakcija podatak...
Apstrakcija
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
Učaurenje
Pravougaonik
 Atributi
Dužina
Širina
 Metode
Crtaj ()
Obim ()
Povrsina ()
Pomeri()
Nasleđivanje,
razvrstavanje zajedničkih osobina različitih klasa
Geometrijski obliciGeometrijski oblici
PravougaonikPravou...
Polimorfizam,
različit odgovor na isti metod
GeoOblik
crtaj()
GeoOblik
crtaj()
Elipsa
crtaj()
Elipsa
crtaj()
Pravougaonik
...
Strukturno, naspram,
objektno orijentisanom programiranju
Tendencije strukturnog
programiranja
Proces u središteProces u s...
Strukturni pristup u
programiranju
CrtajPrav(...)
{
}
PomeriPrav(...)
{
}
PromeniVelPrav()
{
}
RotirajPrav(...)
{
}
CrtajP...
Objektno-orijentisani
pristup programiranju
dužinadužina
širinaširina
centcentaarr
dužinadužina
širinaširina
centcentaarr
...
Atributi i metodi
 Sluzbenik
- ImeiPrezime: string
- Maticnibroj:string
- Pol: char
- Datumrodjenja: double
+ Uzmimaticni...
Atributi i metodi
U objektu se pored atributa nalaze odgovarajuće metode kojima se
vrši zadavanje i vraćanje vrednosti atr...
Atributi i metodi
 Objekat platni spisak sadrži metod
izracunajplatu(), koji računa platu datog
službenika.
 Objekat pla...
Klase su strukture kojima su
pridodata svojstva:
 Privatni pristup
Enkapsulacije (sakrivanje, učaurenje)
podataka (atribu...
Ili, Klase su :
 Prototipski mehanizam za stvaranje objekta, omogućavajući
njihovu klasifikaciju po grupama sa istim osob...
Više o klasama
 Deklarisanje klase
 Class imeklase
{ Telo klase u kome su definisani atributi I metode klase
};
Ili
 Cl...
Atributi klase
 Class Ekran
 {
 short visina,sirina;
 Char *kursor, *ekran;
 }
 // kursor pokazuje na tekuću pozicij...
Metode klase
 Class Ekran
 { //definicija atributa
 Public
 Void home () {kursor=ekran}
//Pozicioniranje kursora
 Voi...
Metode klase
 Metode klase se razlikuju od običnih funkcija u
sledećem:
 Iste mogu pristupiti i privatnim podacima
klase...
Definisanje metoda određene klase
 Sintaksa definisanja metode određene klase ima
sledeći izraz
 povratni_tip ime_klase:...
Deklarisanje klase
 Class ime_klase {
 Deklaracije
 };
 Class Cstr {
 Private:
 Char sData [256];
 public:
 char *...
Interface Versus
Implementation
 We draw a sharp distinction between the declaration of
a class and its implementation. T...
Povezanost klase sa deklaracijom I definicijom
pripadajućih metoda
 Class Cstr {
 Private:
 Char sData [256];
 public:...
Interfejs i Realizacija
 Class Cstr
 {
 Private: Privatni podaci, sme se menjati
 Char sData [256];
 public:
 char *...
Raspoređivanje koda u
datoteke
 Deklaracije funkcije treba smestiti u
datoteku zaglavlja. ” cstr.h’’ Svaki modul koji
koj...
 // Cstr.h
 Class Cstr {
 Private:
 Char sData [256];
 public:
 char *get (void);
 int getlength (void);
 void cpy...
Šta su Objekti ?
 Nezavisne programske celine koje sadrže
metode (funkcije) i podatke (elementarne
i struktuirane)
 Razl...
Classes and Objects
 A class is a type. When you make instances of
that type, they are called objects. In fact, the
actio...
Stvaranje objekata
 Objekti se deklarišu (stvaraju objavljuju)
posredstvom klase koja je šablon (tip)
objekta
 Nakon usp...
Pozivanje metode, funkcije članice
 #include ”Cstr.h”
 //Ova datoteka deklariše klasu Cstr. Svaki
modul koji koristi kla...
Punjenje objekta I pristup podacima
 Objekat se može puniti podacima kao što to
činimo sa svakom drugom strukturom
 Punj...
Aktiviranje objekta
 Objekat se aktivira pozivom i izvršenjem
njegovih metoda. Pošto metode pripadaju
objektu iste se mor...
Šta se dešava u stvarnosti ?
Opšti oblik poziva metode
Objekat.metoda(argumenti)
Prevodilac prepoznaje string1.cpy( ) kao
...
 Svaki objekat klase Cstr ima svoju kopiju
argumenta sData
 String1.cpy ( “Fide, sed qui vide”);
 Ovaj poziv funkcije č...
Kod i podaci u klasi Cstr
 Objekti iste klase dele kôd metoda.
 Poziv metode razrešava se tako što se
utvrdi klasa objek...
Ubiranje plodova od privatnih
podataka
 String1.cpy ( “Fide, sed qui vide”);
 Strcpy(string1, “Fide, sed qui vide”);
 K...
Kako menjati deo programa a da
se pri tom...?
 Popraviti, azurirati, izmeniti deo programa, a
da se pri tom ne poremeti n...
Kod i podaci u klasi Cstr
 Metode klase Cstr
 Objekti klase Cstr
CpyCpy
GetGet
GetlengtGetlengt
hh
StrinString1g1
object...
Klasa koja u tački određuje
temperaturu
 Class Ctempoint {
 Private:
 Int x,y,z;
 double temp;
 public:
 void setpoi...
Objekti klase Ctempoint
 Ako definišemo četiri objekta klase
Ctempoint
Ctempoint pointA, pointB, pointC,pointD;
 Svi pri...
Metode i objekti klase CTempoint
 Metode klase CTempoint
Objekti klase CTempoint
setpointsetpoint
GetpointGetpoint
Settem...
Memorijske klase C jezika
 Pored pripadnosti odredjenom tipu
promenjlive imaju i svoju memorijsku klasu.
 Memorijska kla...
Automatske promenljive
 Automatske promenljive se deklarišu rezervisanom
reči auto ispred specifikacije tipa kao u sledeć...
Example
 main()
 {
 /*spoljasnji blok*/
 auto int x=1;
 {
 /*podblok #1 */
 auto int y=2;
 printf(“%d%dn”,x,y);
 ...
Statičke promenljive
 Kao i automatske, statičke promenljive su lokalne u funkciji
odnosno bloku u kome su deklarisane. R...
Example
 main()
 {
 Void uvecaj();
 uvecaj();
 uvecaj();
 uvecaj();
 }
 void uvecaj()
 {
 static int x=0;
 x++;...
Spoljašnje promenljive
 Promenljiva deklarisana van funkcije naziva se
spoljašnja promenljiva. Ona se može deklarisati i ...
Primeri deklarisanja spoljašnjih promenljivih
 int x = 707; /* globalna deklaracija promenljive x */
 main()
 {
 print...
Enkapsulacija, sakrivanje ili učaurenje
podataka C ++
 Klasa omogućava zatvaranje i sakrivanje
podataka, od ostatka sveta...
Public:
Proširuje pristup jednom ili više članova klase, tako da
je sa njima moguće raditi kako unutra tako i van
objekta
...
Private:
 Ograničava pristup članovima. Privatni članovi
objekta su stvarno privatni, niko ne može da im
pristupi van nji...
Primer, jednostavan
 U sledećem primeru članovi a,b i c imaju private pristup ali
su a I b podrazumevano privatni
 Class...
Protected:
 Predstavlja oblast dejstva kada je moguć pristup
svim podacima objekta bazne klase od strane bilo
koje članic...
Primer
 U ovom primeru članovi x, y i z su zaštićeni. Članovi a i b su
podrazumevano privatni.
 Class Aklasa {
 int a, ...
 Podrazumevani status osnovne klase je
private ali,
 još jednom,
 kada se rezervisana reč
 protected
 upotrebi u nazn...
Vrlo važno, ali stvarno, jos jednom prava pristupima članovima
klase- enkapsulacija
 Private - može mu se pristupiti samo...
Primer koriscenja razlicitih prava pristupa
clanovima klase.
 Deklarisati klasu kOtac koja sadrzi sledece
 atribute:
 p...
 Deklarisati klasu iSin, koja nasledjuje klasu kOtac i ima dodatni
atribut
 pDevojka (celobrojna vrednost,tipa private),...
 #include<inostream.h>
 //deklaracija klase kOtac
 Class kOtac
 {
 Private:
 Int pKola;
 Int fUzmiKola () {cout<<”K...
 //deklaracija izvedene klase iSin
 Class iSin:public kOtac
 {
 Int pDevojka;
 Int fizvestiDevojku ()
 {cout<<”Devoj...
 Int main()
 {
 kOtac oVeliki; //kreiranje objekta Veliki klase Otac
 iSin oMali //kreiranje objekta Mali izvedene kla...
 //pozivanje funkcija klase kOtac preko objekta oVeliki
 oVeliki.fGledajTV (); //moze,stampa TV
 oVeliki.fUzmiNovac(); ...
Scope
Koncept područja važenja
 Iz jedne klase se može napraviti više
primeraka objekta. Svaki ovako
konstruisan objekat ima so...
Vrste atributa, članica klase
Iako metod u opštem slučaju predstavlja
ponašanje objekta stanje objekta se
obično predstavl...
Lokalni atributi
 Lokalni atributi su lokalni u određenom metodu.
Public class broj {
Public metod1( ) {
Int brojac;
}
Pu...
Scope (oblast važenja) u klasi broj
 Sama klasa ima sopstveni opseg.
 Svakim primerak klase (objekat ) ima sopstveno
pod...
Kako je ovo moguće ?
 Public class broj {
 Public metod1( ) {
 brojac;
 }
 Public metod2 ( ) {
 brojac ;
 }
 }
 U...
Atributi objekta
 Čest slučaj da isti atribut treba da koriste više metoda u okviru
istog objekta
 Public class broj {
...
Atributi objekta
 Objekat ima jednu kopiju a metodi metod1( ) metod2( ) imaju po
jednu kopiju.
 Da bi ste promenljivoj o...
Atributi klase
 Postoji mogućnost da više objekata zajednički
koriste atribute. Potrebno je da se atribut označi
sa stati...
 Public class Taksista {
 // Zadati ime kompanije
 Private static string imekompanije = “Zuti taksi”;
 // Ime taksiste...
Dinamičko zauzimanje
memorije
 Dinamičko zauzimanje memorije je
tehnika kojom se u vreme izvršenja
programa može utvrditi...
DINAMIČKO DODELJIVANJE
MEMORIJE U C JEZIKU
 Za razliku od statičke dodele memorije gde se
podacima pristupa preko imena p...
malloc
 char *malloc( unssigned n)
 gde n predstavlja broj bajtova koje izdvaja
funkcija.
 Vrednost funkcije je znakovn...
sizeof
 sizeof (izraz) - Vraća memorijski prostor
neophodan za čuvanje izraza
 sizeof (T) - Vraća memorijski prostor
neo...
Statička dodela memorije
 Prilikom definicije niza od n članova u
pokazivaču niz počinje sa adresom u
memoriji prvog elem...
Dinamička dodela memorije
 Kada je potrebno rezervisati prostor za
pokazivač p sa još nedefinisanim sadrzajem
treba napis...
Dinamička dodela memorije
 Rezervisanom prostoru se može pristupiti samo
preko pokazivača p naredbom:
 *p=5;
 na adresi...
 Funkcija free oslobađa prostor u memoriji
koji je prethodno rezervisan preko funkce
malloc, a čija se adresa nalazila u ...
 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
Prednosti operatora new i delete u odnosu na malloc
I calloc
 Za njih nije potrebna datoteka zaglavlja jer su
oni deo pro...
Sintaksa
 Da bi se pomoću operatora new zauzela
memorija potrebno je navesti tip objekta
posle operatora
 pokazivač = ne...
Operator new
 Vradnost koju vraća new se uvek mora dodeliti pokazivaču, jer on
obezbeđuje pristup podacima, Operator new ...
Operator delete
 Da bi se oslobodila memorija dodeljena
operatoru new treba upotrebiti operator
delete iza koga treba nav...
Konstruktori i
destruktori
Život i smrt objekta:
konstruktori
 Funkcije koje su učaurene sa podacima
(atributima) unutar jedne klase nazivaju
se met...
Konstruktor
Objekti mogu imati jednu ili više
specijalnih metoda koje se nazivaju
konstruktorima, i koje se koriste za
in...
Destruktor
Specijalna metoda destruktor koristi
se za brisanje ( uništavanje ) objekata.
Nosi ime svoje klase sa znakom ~...
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 ...
Destructors
 The job of the destructor is to tear down the
object. This idea will make more sense after
we talk about all...
Sintaksa
 Sintaksa davanja imena konstruktoru I
destruktoru:
 za klasu Cstr
Ime konstruktora je Cstr
Ime destruktora je ...
Example…………
 Za našu klasu Cstr
 Class Cstr {
 Private:
 Char sData [256];
 public:
 Cstr(); // Konstruktor
 ~Cstr(...
 Konstruktor u našoj klasi inicijalizuje obe
promenljive članice i
 zauzima memoriju za znakovni niz dužine jedan
bajt
...
 Destruktor oslobađa zauzeti memorijski
blok operatorom delete
 Cstr :: ~ Cstr ()
 {
 Delete [ ] pData;
 }
Function overloading
 Ovaj termin označava da se ime jedne funkcije
može više puta koristiti u različitim kontekstima.
 ...
Overloading constructor
 Cstr ( ); // bez inicijalizacije
 Cstr ( char *s); // Inicijalizuje iz tipa char*
 Cstr ( Cstr...
Konstruktor koji inicijalizuje
prazan znakovni niz
 Cstr :: Cstr ( )
 {
 pData = new char [1];
 *pData = ‘0’;
 nLengt...
Konstruktor koji inicijalizuje
sadržaj pomoću standardnog
znakovnog niza
 Cstr :: Cstr ( char *s)
 {
 pData = new char ...
Poziv konstruktora
 Cstr string1; // Poziv konstruktora Cstr()
 Ovaj konstruktor definiše objekat bez inicijalne vrednos...
Konstruktor za kopiranje
 Cstr ( Cstr &str); // Konstruktor koji
Inicijalizuje iz drugog objekta klase Cstr
 Konstruktor...
Realistic example with money
 class AutomatNovca // Definisanje klase
 { double trezor; .................. // clan klase...
Ilustracija... class AutomatNovca // Definisanje klase
 { double trezor; // clan klase (podatak atribut)
 public : //Ko...
Example N... Bank
class, objects,methods, attributs…
 Class AutomatNovca //Definisanje klase
 { public: //Kontrola prist...
Implementation of methods
 void AutomatNovca::ulaganje(double ulog)
//Operator::ukazuje na //pripadnost metode odredjenoj...
Main program
 main()
 {AutomatNovca MojaBanka Tvoja Banka;
 moja Banka.trezor=0.;//Pocetno stanje novca u banci.Uocite
...
Program description
 Objekti imaju svoje metode koje služe za
najbitnije obrade inicijalizaciju, punjenje,
prikaz... atri...
 double AutomatNovca::podizanje(double iznos)
 { trezor=trezor-iznos; }
 Double tip podatka koji kao rezultat vraća
met...
Nasleđivanje
 Predstavlja mogućnost da se iz
postojeće klase izvede nova klasa. Pri
tome nova klasa može naslediti sve
čl...
Nasleđivanje
 Nasleđivanje je ključni deo objektno
orjentisanog programiranja i omogućava
dve važne prednosti kod program...
Nasleđivanje
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
Prednosti nasleđivanja
Hijarahijska jasnost
Ponovno korišćenje već napisanog
koda
 Zajednički podaci i funkcije se pišu...
Sintaksa nasleđivanja
 Pretpostavimo da je Osnovna_klasa prethodno
deklarisana . Ako se izvedena klasa izvodi iz klase
Os...
Exampleclass Permanent : public Employee // Permanent "inherits"
{ // from the class Employee
public: // additional & over...
Overriding
class GeoOblik {
public:
void Crtaj(void);
. . .
};
class Pravougaonik : public GeoOblik {
public:
void Crtaj(...
Veze između objekata u
hijararhiji
GeoOblik g1;
Pravougaonik p1;
m_Center
PostaviCentar()
UzmiCentar()
Crtaj()
g1
m_Center...
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,y; //Lokacija objekta.
 Lokacija(dou...
 Clas cilinder:public krug
 {public:
 Double h; //Dopunski atribut,visina cilindra
 Cilinder(double xp,double yp,doubl...
 Class Paralelopiped:public pravougaonik
 { public:
 Double visina; //Dopunski atribut,visina parralelopipeda.
 Parale...
 Krug::krug(double xp,double yp,double rp):(xp,yp)
 //poziv konstruktora klase Lokacija za postavljanje koordinata
kruga...
***** Konstruktor osnovne klase
 U prethodnom odeljku smo napisali klasu
krug koja je nasledila članove iz klase
lokacija...
 Evo sintakse
 Klasa :: klasa (argumenti1): Osnovna
klasa(argumenti2) {
 Iskazi }
 U ovoj sintaksi lista argumenata ar...
 Double Cilinder::zapremina()
 {
 Return Krug::povrsina()*h;//uocite poziv(ukljucivanje)metode klase Krug
 //za izracu...
 Double paralelopiped::povrsina()
 {
 Return2.00*pravougaonik::povrsina()
 +2.0*pravougaonik(0,0,a,visina).povrsina()
...
 //glavni program
 Main()
 {
 Lokacija ik(5,2);//deklaracija objekata I eksplicitni poziv konstruktora.
 Krug kr(5,2,...
Izlazni rezultat
 Povrsina lokacije je: 0
 Povrsina kruga je: 153.86
 Povrsina cilindra je: 131.86 a zapremina je: 461....
Virtuelne funkcije
 Izraz virtuelna obično opisuje nešto što nije sasvim realno, ali radi
kao da jeste. U slučaju funkcij...
Virtuelne funkcije, drugi view
 Polimorfizam je svojstvo koje obezbeđuje
izvršavanje verzije funkcije članice
svojstvene ...
 Kada se poziva virtuelna funkcija objekta
izvedene klase, uvek se izvršava verzija
svojstvena toj klasi, bez obzira što ...
Klase i pokazivači
Efekat virtuelne funkcije najčešće se vidi kada se pristupa
objektima preko pokazivača osnovne klase.
...
 Da bi omogućio pokazivačima na baznu klasu da budu
dodeljeni objektima izvedenih klasa, C++ proširuje svoj
polimorfizam ...
 .
 #include <iostream.h>
 class Sisar {
 public:
 Sisar () { cout<<”Sisar konstruktor…n”; }
 ~Sisar () { cout<<”Sis...
 // Glavni program
 {
 Sisar *pPas = new Pas;
 pPas -> Kretanje ();
 pPas -> Govor ();

 return 0;
 }
 Izlaz je s...
 Sisaru je obezbeđen virtuelni metod Govor (). U dizajnu je, na taj
način, signalizirano očekivanje da ona bude bazni tip...
Konstruktori u višestruko
nasleđenim objektima
 Kada se kreira objekat izvedene klase
najpre se poziva konstruktor bazne ...
Kako rade virtuelne funkcije ?
 Za svaku klasu koja poseduje virtuelne funkcije,
formira se tabela pokazivača na verzije ...
Polimorfizam
 Polimorfizam znaci “uzeti mnogo oblika”.U objektno-
orjentisanom programiranju polimorfizam omogucava
da se...
Preklapanje(overloading) funkcija-
polimorfizam
 Napisati dve istoimene funkcije za dodavanje
jednom celom broju drugi br...
Interfejs
 Interfejs je osnovno sredstvo opštenja
između objekata.
 Interfejs treba da opiše kako korisnik
klase komunic...
Realizacija
 Interfejs čine samo javni metodi.
Korisnika ne zanima kako se kvadrat
izračunava, dokle god je rezultat tača...
Kvadrat broja
 Kako formirati
objekat kvadrat
 Kako objektu poslati
vrednost čiji kvadrat
treba da izračuna
 Kako od nj...
Klient
serverska
arhitektura
TROSLOJNA ARHITEKTURA I
KOMPONENTE PROGRAMSKIH
SISTEMA
• Prezentacioni ili sloj
korisničkog interfejsa
pomoću koga korisnik
komunicira sa aplikacijom
•Sloj poslovne logike
koji ...
Troslojna arhitektura projektovanje
Troslojna arhitektura - realizacija
--- - --
-- - - --
COM+
Server
component
(DLLHost +
ActiveX dll)
OUT process
COM+
Libr...
Objektno orjentisano
projektovanje
Tema
Prezentacija UML vizuelnog modeliranja
kroz primer
- analiza i dizajn -
Opis problema
OnLine Shopping – Obrada narudžbina
• Kupovina računara putem Interneta.
• Kupac može da izabere standardnu ...
Identifikacija actora
 Razmatranjem zahteva:
Kada kupac unese narudžbinu u sistem, prodavac šalje
elektronski zahtev serv...
Prepoznavanje slučajeva korišćenja
Kupac koristi online
shopping Web stranicu
da vidi standardne
konfiguracije izabranog
r...
Use Case Diagram
Prikaz standardnih
računarskih konfiguracija
Sastavljanje računarske
konfiguracije
Naručivanje izabrane
k...
Use Case Naručivanje izabrane konfiguracije
Kratak opis
Ovim use case-om se omogućuje Kupcu da izvrši narudžbinu,
uključuj...
Opis postupka
Kupac odlučuje da naruči izabranu konfiguraciju.
Od kupca se traži da unese detalje porudžbine...
Kupac šalj...
Use Case Paketi
Proizvodi Moguće konfiguracije
Narudžbina
Isporuka
Plaćanje
Prikaz standardnih računarskih
konfiguracija
(...
Activities
 Sistem dodeljuje jedinstveni broj porudžbine i broj računa
kupca na porudžbinu i smešta informacije o porudžb...
Activity Dijagram
Prikaz trenutne
konfiguracije
Daj formu za
narudžbinu
Prikaz forme
za narudžbinu
Procesiraj
narudžbinu
S...
 Serviser obrađuje nalog dobijen od prodavca i isporučuje
računar kupcu
Da li je
prodavac klasa
ili atribut
narudžbine tj...
Atributi
clsRačunar
RacunarNaziv : String
RacunarCena : Currency
clsKonfiguracija
KonfiguracijaNaziv : String
Konfiguracij...
Associations
clsRačunar
RacunarNaziv : String
RacunarCena : Currency
clsElementKonfiguracije
ElementaTip
ElementaOpis
clsK...
Generalisations
clsKupac
KupacNaziv : String
KupacAdresa : String
KupacTelefon : String
KupacEmail : String
clsPlaćanje
Pl...
Class Dijagram
clsKupac
KupacNaziv : String
KupacAdresa : String
KupacTelefon : String
KupacEmail : String
clsPlaćanje
Pla...
Klase- imenovanje i dokumentivanje
• Imenovanje treba da jasno asocira čemu klasa služi, a
dokumentovanje mora da obezbedi...
Scenario Design
U UseCase-ovima je tok dogadjaja opisan u tekstu.
Treba obezbediti grafički prikaz scenarija.
Postoje dve ...
Interakcija
: Kupac
:
clsKonfiguracijaGUI
: clsRačunar :
clsElementKonfiguracije
OpenNew( ) DajRačunar( ) DajElemKonfig( )...
Operacije - Metode
clsKonfiguracijaGUI
PrikaziKonfiguraciju()
<<constructor>> OpenNew()
clsRačunar
RacunarNaziv : String
R...
Sequence Dijagram
: Kupac : clsKonfiguracijaGUI : clsRačunar : clsNarudžbina : clsNarudzbenicaGUI : clsKupac
: clsPlaćanje...
Collaboration Dijagram
• Boundary i control objekti
: Kupac
: clsKonfiguracijaGUI
: clsNarudžbina
: clsNarudzbenicaGUI
1: ...
181
• Entiteti i database interface objekti
: clsRačunar
: clsNarudžbina
: clsNarudzbenicaGUI
: clsKupac
: clsPlaćanje
:
D...
Stanja i Prelazi
Statechart dijagrami služe opisu ponašanja unutar objekta.
Neplaćena Čeka
Plaćanje
Plaćena
Prelaz na e-Ba...
clsKonfiguracijaGUI
PrikaziKonfiguraciju()
<<constructor>> OpenNew()
PrihvatiKonfiguraciju()
(from KonfiguracijaGUI)
clsNa...
Class Packages
KonfiguracijaGUI
NarudzbenicaGUI
MgrKonfiguracij
a
MgrNarudzbeni
ca
Kupac
Narudzbenica
Racunar
DBAccess
Use...
Component Design
• Komponente – fizički delovi sistema sa jasnim interface-om.
• Can parallel Use Case Packages
Razlika iz...
Component Dijagram
mgrKonfiguracija
<<ActiveX DLL>> mgrNarudzbenica
<<ActiveX DLL>>
Kupac
<<COM>>
Racunar
<<COM>>
Narudzbe...
Deployment Design
Predstavlja raspored komponenti u enterprise okruženju.
Četiri nivoa kodova:
1. Klijenti (kroz browser)
...
Deployment Dijagram
Browser WEB server
Aplikacioni
server
DataBase server
Zahtev za stranicom
Zahtev za podacima iz baze
Z...
Cplusplus
Cplusplus
Cplusplus
Upcoming SlideShare
Loading in …5
×

Cplusplus

104 views
89 views

Published on

Sam programski jezik je uređen konačan
skup znakova za formulisanje programa.
Njegova definicija data u ISO standardu
glasi: programski jezik je veštački jezik koji
se koristi za predstavljanje programa.
Sam
program predstavlja sistem oznaka za opis
algoritama i struktura podataka pomoću
kojih ljudi komuniciraju sa računarom. Jednostavnije korišćenje mašinskog jezika dobija se uvođenjem simboličkih imena za naredbe i adreseme morijskih lokacija, a to omogućava asemblerski ili simbolički mašinski jezik. Asemblerski jezik je niskog nivoa, zbog toga što je korespodencija između asemblerskog i mašinskog jezika jedan prema jedan. Programer koristi naredbe računara na kome radi, pa stoga program nije prenosiv - ne može
se izvršiti na drugom računaru bez reprogramiranja.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
104
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Implementing Web applications Dynamic client pages Script – program interpreted by the browser Applet - compiled component that executes in the browser’s context Server pages - Web pages with scripts executed by the server Have access to DB server Manage client sessions Place cookies on the browser Build client pages
  • Cplusplus

    1. 1. Š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
    2. 2. 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.
    3. 3. Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke main  podacipodaci  podacipodaci  podacipodaci  podacipodaci
    4. 4. 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
    5. 5. 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.
    6. 6. 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);  }
    7. 7. 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;
    8. 8. 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. } };
    9. 9. 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
    10. 10. Objektno orijentisano programiranje
    11. 11. Koncepti objektno orijentisanog programiranja Klasifikacija Apstrakcija  Proceduralna apstrakcija  Apstrakcija podataka Učaurenje podataka i procedura  Skrivanje podataka Nasleđivanje  Jednostavno i višestruko nasleđivanje Polimorfizam
    12. 12. Apstrakcija Geometrijski obliciGeometrijski oblici PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
    13. 13. Učaurenje Pravougaonik  Atributi Dužina Širina  Metode Crtaj () Obim () Povrsina () Pomeri()
    14. 14. Nasleđivanje, razvrstavanje zajedničkih osobina različitih klasa Geometrijski obliciGeometrijski oblici PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
    15. 15. Polimorfizam, različit odgovor na isti metod GeoOblik crtaj() GeoOblik crtaj() Elipsa crtaj() Elipsa crtaj() Pravougaonik crtaj() Pravougaonik crtaj() Trougao crtaj() Trougao crtaj()
    16. 16. 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
    17. 17. 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
    18. 18. 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
    19. 19. Atributi i metodi  Sluzbenik - ImeiPrezime: string - Maticnibroj:string - Pol: char - Datumrodjenja: double + Uzmimaticnibroj() - Zadajmaticnibroj() + Uzmipol() - zaDajpol() PlatniSpisakPlatniSpisak PlataPlata:: doubledouble +Izracunajplatu+Izracunajplatu()()
    20. 20. 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
    21. 21. 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
    22. 22. 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)
    23. 23. 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,
    24. 24. 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
    25. 25. 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
    26. 26. 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  }
    27. 27. 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.
    28. 28. Definisanje metoda određene klase  Sintaksa definisanja metode određene klase ima sledeći izraz  povratni_tip ime_klase:: ime_metode (parametri)  {  Iskazi  }
    29. 29. 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);  };
    30. 30. 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
    31. 31. 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 );  };
    32. 32. Interfejs i Realizacija  Class Cstr  {  Private: Privatni podaci, sme se menjati  Char sData [256];  public:  char *get (void); Interfejs, ne sme se menjati  int getlength (void);  void cpy (Char*s);  void cat (Char*s);  };  #include <string.h>  Char *Cstr :: get (void) //vrati pokazivač na podatke znakovnog niza  {  Return sData; Realizacija, sme se menjati  }  int Cstr :: getlength (void) //vrati dužinu  {  Return strlen(sdata);  }  Void Cstr :: cpy (Char*s) //kopiraj sadržaj argumenta  (  strcpy (sData, s );
    33. 33. Raspoređivanje koda u datoteke  Deklaracije funkcije treba smestiti u datoteku zaglavlja. ” cstr.h’’ Svaki modul koji koji koristi klasu Cstr mora učitati ovu datoteku  Kod funkcije treba izdvojiti u izvornu .cpp datoteku C++ koja se prevodi i povezuje sa tekućim projektom ili bibliotekom.
    34. 34.  // Cstr.h  Class Cstr {  Private:  Char sData [256];  public:  char *get (void);  int getlength (void);  void cpy (Char*s);  void cat (Char*s);  };  // cstr.cpp  #include ” cstr.h’’  #include <string.h>  Char * Cstr :: get (void) //vrati pokazivač na podatke znakovnog niza  {  Return sData;  }  int Cstr :: getlength (void) //vrati dužinu  {  Return strlen(sdata);  }  Void Cstr :: cpy (Char*s) //kopiraj sadržaj argumenta  (  strcpy (sData, s );  };
    35. 35. Š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.
    36. 36. 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
    37. 37. 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;
    38. 38. 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” !
    39. 39. 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
    40. 40. 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
    41. 41. Š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.
    42. 42.  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);  }
    43. 43. 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.
    44. 44. Ubiranje plodova od privatnih podataka  String1.cpy ( “Fide, sed qui vide”);  Strcpy(string1, “Fide, sed qui vide”);  Koja je razlika između ova dva poziva ?  Koja je prednost u pozivu funkcije članice klase i obicnog poziva neke funkcije
    45. 45. Kako menjati deo programa a da se pri tom...?  Popraviti, azurirati, izmeniti deo programa, a da se pri tom ne poremeti nista u delovima koji su povezani sa njim ?  Objektna orjentisanst pomaže izdašno u tome.  Ne smeju se menjati javni članovi, privatni mogu  Mogu se menjati definicije javnih funkcija, ne smeju se menjati argumenti i povratni tip
    46. 46. 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
    47. 47. 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);  };
    48. 48. 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
    49. 49. 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
    50. 50. 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
    51. 51. 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.
    52. 52. 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*/  }
    53. 53. 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.
    54. 54. Example  main()  {  Void uvecaj();  uvecaj();  uvecaj();  uvecaj();  }  void uvecaj()  {  static int x=0;  x++;  printf(“%dn”,x);  }  Ispisuje se  1  2  3
    55. 55. 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
    56. 56. 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
    57. 57. 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
    58. 58. 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)
    59. 59. 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
    60. 60. 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.
    61. 61. 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.
    62. 62. 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 z;  public:  Void postavi_promenljive (int I, int j, int k);  };  Funkcije u izvedenim klasama mogu da pristupaju svim članovima osim a i b.
    63. 63.  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.
    64. 64. 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
    65. 65. 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.
    66. 66.  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.
    67. 67.  #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;};  };
    68. 68.  //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  };
    69. 69.  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
    70. 70.  //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;  }
    71. 71. Scope
    72. 72. 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.
    73. 73. 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
    74. 74. Lokalni atributi  Lokalni atributi su lokalni u određenom metodu. Public class broj { Public metod1( ) { Int brojac; } Public metod2 () { } }
    75. 75. Scope (oblast važenja) u klasi broj  Sama klasa ima sopstveni opseg.  Svakim primerak klase (objekat ) ima sopstveno područje važenja.  Metodi metod1 i metod2 imaju zasebna područja važenja.  Promenljiva brojač živi unutar metoda1, kada se pozove metod1 stvara se kopija promenljive brojač. Kada se završi metod1 kopija promenljive brojač se briše. Metod2 nije svestan postojanja promenljive brojač
    76. 76. Kako je ovo moguće ?  Public class broj {  Public metod1( ) {  brojac;  }  Public metod2 ( ) {  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.
    77. 77. Atributi objekta  Čest slučaj da isti atribut treba da koriste više metoda u okviru istog objekta  Public class broj {  Int brojac;  Public metod1( ) {  brojac = 1;  }  Public metod2 () {  brojac = 2;  }  } Za ceo objekat postoji samo jedna kopija promenljive brojač, pa obe dodele vrednosti rade nad istom kopijom u memoriji
    78. 78. Atributi objekta  Objekat ima jednu kopiju a metodi metod1( ) metod2( ) imaju po jednu kopiju.  Da bi ste promenljivoj objekta pristupili iz nekog od metoda metod1( ) Public metod1( ) { Int brojac; this.brojac = 1; }  Navodjenjem sluzbene reci this prevodiocu dajemo direktivu da pristupi promenljivoj brojac objekta a ne lokalnoj promenljivoj, koja vazi samo unutar tela metoda
    79. 79. 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 metod1( ) {  }  } Svi objekti klase koriste istu lokaciju memorije za atribut, u osnovi svaka klasa ima jednu kopiju koju zajednički koriste svi objekti klase.
    80. 80.  Public class Taksista {  // Zadati ime kompanije  Private static string imekompanije = “Zuti taksi”;  // Ime taksiste  Private string Ime;  //
    81. 81. 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,
    82. 82. 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.
    83. 83. 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)
    84. 84. sizeof  sizeof (izraz) - Vraća memorijski prostor neophodan za čuvanje izraza  sizeof (T) - Vraća memorijski prostor neophodan za čuvanje vrednosti tipa T
    85. 85. 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.
    86. 86. 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);
    87. 87. Dinamička dodela memorije  Rezervisanom prostoru se može pristupiti samo preko pokazivača p naredbom:  *p=5;  na adresi 1253 dolazi vrednost 5.
    88. 88.  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
    89. 89.  Vrednost koja se nalazi na toj adresi na koju je upućivao pokazivač p ostaje , ali  joj se više ne može pristupiti
    90. 90. Operatori new &  delete
    91. 91. 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.
    92. 92. 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];
    93. 93. 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 *p1, *p2,*p3;  Int broj;  //….  P1 = new int; // p1 pokazuje na pojedinačni ceo broj  P2 = new int [ 500 ] ; // p2 pokazuje na prvi od 500 celih brojeva  broj = 75 ;  P3 = new int [broj] ; // Zauzmi 75 celih brojeva. 
    94. 94. 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 [ ]
    95. 95. Konstruktori i destruktori
    96. 96. Ž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.
    97. 97. 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.
    98. 98. 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
    99. 99. 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.
    100. 100. 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.
    101. 101. Sintaksa  Sintaksa davanja imena konstruktoru I destruktoru:  za klasu Cstr Ime konstruktora je Cstr Ime destruktora je ~Cstr
    102. 102. Example…………  Za našu klasu Cstr  Class Cstr {  Private:  Char sData [256];  public:  Cstr(); // Konstruktor  ~Cstr(); // Destruktor  char *get (void);  int getlength (void);  void cpy (Char*s);  void cat (Char*s);  };
    103. 103.  Konstruktor u našoj klasi inicijalizuje obe promenljive članice i  zauzima memoriju za znakovni niz dužine jedan bajt  Cstr :: Cstr ( )  {  pData = new char [1];  *pData = ‘0’;  nLenght = 0;  }
    104. 104.  Destruktor oslobađa zauzeti memorijski blok operatorom delete  Cstr :: ~ Cstr ()  {  Delete [ ] pData;  }
    105. 105. 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 * );
    106. 106. Overloading constructor  Cstr ( ); // bez inicijalizacije  Cstr ( char *s); // Inicijalizuje iz tipa char*  Cstr ( Cstr &str); // Inicijalizuje iz drugog objekta klase Cstr
    107. 107. Konstruktor koji inicijalizuje prazan znakovni niz  Cstr :: Cstr ( )  {  pData = new char [1];  *pData = ‘0’;  nLength = 0;  }  Ovaj konstruktor inicijalizuje prazan znakovni niz.  Ovaj konstruktor se poziva kada se definiše objekat bez inicjalizacije.
    108. 108. Konstruktor koji inicijalizuje sadržaj pomoću standardnog znakovnog niza  Cstr :: Cstr ( char *s)  {  pData = new char [strlen(s)+1];  strcpy(pData, s);  nLength = strlen(s);  }  Ovaj konstruktor inicijalizuje sadržaj pomoću standardnog znakovnog niza i zauzima memoriju za podatke znakovnog niza
    109. 109. Poziv konstruktora  Cstr string1; // Poziv konstruktora Cstr()  Ovaj konstruktor definiše objekat bez inicijalne vrednosti  Cstr string2 ( “ ... 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
    110. 110. 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 Ime2 ( ime); // Na osnovu objekta ime inicijalizuje objekat ime2
    111. 111. Realistic example with money  class AutomatNovca // Definisanje klase  { double trezor; .................. // clan klase (podatak atribut)  public : //Kontrola pristupa podacima  automatNovca (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)  };
    112. 112. Ilustracija... class AutomatNovca // Definisanje klase  { double trezor; // clan klase (podatak atribut)  public : //Kontrola pristupa podacima  AutomatNovca (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.  ~AutomatNovca(void ) {cout'' destruktor se obavezno koristi kod dinamickih <<''objekatan'';  Void ulaganje (double); // clan klase (metoda)  Double podizanje (double); // clan klase (metoda)  };
    113. 113. Example N... Bank class, objects,methods, attributs…  Class AutomatNovca //Definisanje klase  { public: //Kontrola pristupa podacima  double trezor; //Clan klase(podatak,atribut)  void ulaganje(double); //clan klase(metoda)  double podizanje(double); //clan klase(metoda)  };
    114. 114. Implementation of methods  void AutomatNovca::ulaganje(double ulog) //Operator::ukazuje na //pripadnost metode odredjenoj klasi.  { trezor=trezor+ulog;}  double AutomatNovca::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;  }
    115. 115. Main program  main()  {AutomatNovca MojaBanka 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;  }
    116. 116. Program description  Objekti imaju svoje metode koje služe za najbitnije obrade inicijalizaciju, punjenje, prikaz... atributa.  Klasa AutomatNovca kao model po kome se generišu objekti MojaBanka, Tvoja Banka imaju metode ulaganje i podizanje i atribut trezor  .... 
    117. 117.  double AutomatNovca::podizanje(double iznos)  { trezor=trezor-iznos; }  Double tip podatka koji kao rezultat vraća metoda  AutomatNovca ime klase kojoj metoda pripada  :: scoping operator koji ukazuje na pripadnost metode podizanje klasi AutomatNovca  Podizanje ime metode  ( double iznos ) lista parametara
    118. 118. 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.
    119. 119. 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.
    120. 120. Nasleđivanje Geometrijski obliciGeometrijski oblici PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
    121. 121. 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
    122. 122. 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  };
    123. 123. Exampleclass Permanent : public Employee // Permanent "inherits" { // from the class Employee public: // additional & overridden functions Permanent(void) : m_nMonthlySalary (0) { cout << "Permanent C'tor: No argsn"; } ~Permanent() { cout << "Permanent D'torn"; } private: // additional data members int m_nMonthlySalary; }; class Permanent : public Employee // Permanent "inherits" { // from the class Employee public: // additional & overridden functions Permanent(void) : m_nMonthlySalary (0) { cout << "Permanent C'tor: No argsn"; } ~Permanent() { cout << "Permanent D'torn"; } private: // additional data members int m_nMonthlySalary; };
    124. 124. Overriding class GeoOblik { public: void Crtaj(void); . . . }; class Pravougaonik : public GeoOblik { public: void Crtaj(void); . . . }; void Pravougaonik ::Draw(void) { GeoOblik :: Crtaj(); . . . }
    125. 125. Veze između objekata u hijararhiji GeoOblik g1; Pravougaonik p1; m_Center PostaviCentar() UzmiCentar() Crtaj() g1 m_Center PostaviCentar() UzmiCentar() GeoShape:: Crtaj() Velicina() Crtaj() m_nVisinat m_nSirina p1 Deo koji dodat pravougaoniku Deo nasleđen iz Geometrijskog oblika
    126. 126. Nasleđivanje Šta se nasleđuje?  Podaci  Funkcije članice Šta se ne nasleđuje?  Konstruktori  Destruktori
    127. 127. 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).  };
    128. 128.  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.  };
    129. 129.  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;}
    130. 130.  Krug::krug(double xp,double yp,double rp):(xp,yp)  //poziv konstruktora klase Lokacija za postavljanje koordinata kruga.  //Uočite,poziv konstruktora iz nadredjene klase sa “:”,  //bez navodjenja njegovog imena, i to pre tela(realizacije)konstruktora za izvedenu klasu. *****  {  Radijus=rp;  }  Double krug::povrsina(void)  {  Return3.14*radijus*radijus;  }  Cilinder::cilinder(doublexp,double yp,double rp,double hp) :(xp,yp,rp)  {  h=hp;  }  Double Cilinder::povrsina()  {  Return 6.283*radijus*h;  }
    131. 131. ***** Konstruktor osnovne klase  U prethodnom odeljku smo napisali klasu krug koja je nasledila članove iz klase lokacija i dodala jedan svoj član.  U c+(plusu) objekat se uvek pravi tako što se prvo poziva konstruktor osnovne klase. Da bi se ovo realizovalo potrebo je da se u definiciji funkcije konstruktora izvedene klase naznači odgovarajući konstruktor osnovne klase.
    132. 132.  Evo sintakse  Klasa :: klasa (argumenti1): Osnovna klasa(argumenti2) {  Iskazi }  U ovoj sintaksi lista argumenata argumenti2 može da koristi sve argumente iz liste argumenti1. Ovi argumenti se prosleđuju konstruktoru osnovne klase
    133. 133.  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; }
    134. 134.  Double paralelopiped::povrsina()  {  Return2.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.  }  doubleParalelopiped::zapremina()  {  Return pravougaonik::povrsina()*visina;  }
    135. 135.  //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();  }
    136. 136. 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
    137. 137. Virtuelne funkcije  Izraz virtuelna obično opisuje nešto š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.
    138. 138. Virtuelne funkcije, drugi view  Polimorfizam je svojstvo koje obezbeđuje izvršavanje verzije funkcije članice svojstvene izvedenoj klasi, iako se objektu pristupa kao pripadniku osnovne klase. Funkcije članice osnovne klase koje će u izvedenim klasama imati nove verzije nazivaju se virtuelne funkcije.  To su funkcije čija se definicija odlaže za izvedene klase (deferred functions).
    139. 139.  Kada se poziva virtuelna funkcija objekta izvedene klase, uvek se izvršava verzija svojstvena toj klasi, bez obzira što se tom objektu može pristupiti preko pokazivača ili reference na osnovnu klasu (polimorfizam).  Ovakva funkcija izvedene klase redefiniše (overrides) virtuelnu funkciju osnovne klase
    140. 140. Klase i pokazivači Efekat virtuelne funkcije najčešće se vidi kada se pristupa objektima preko pokazivača osnovne klase.  Pokazivaču na klasu može biti dodeljena adesa “nečega” u istoj ili izvedenoj klasi. Ova dodela dozvoljena je samo u jednom smeru.  CStr *pOsnovne  CIoStr ObjIzvedene  pOsnovne = & ObjIzvedene  Pokazivač osnovne klase može pokazivati na objekat izvedenog tipa jer se u izvedenom tipu moraju nalaziti bar isti članovi kao i u osovnoj klasi
    141. 141.  Da bi omogućio pokazivačima na baznu klasu da budu dodeljeni objektima izvedenih klasa, C++ proširuje svoj polimorfizam idejom virtuelnog metoda. Posmatrajmo sledeću deklaraciju:  Sisar *pSisar = new Pas;  Na ovaj način se kreira nov objekat tipa Pas na steku, a pokazivač se vraća na taj objekat, koji se dodeljuje pokazivaču na Sisar. Ovo poštuje koncept nasleđivanja, jer je pas sisar.  Ovaj pokazivač se, zatim, može koristiti za pozivanje bilo kog Sisar metoda. Virtuelne funkcije omogućavaju da ovi metodi koji vrše override Pas () pozivaju ispravne funkcije. U narednom listingu ilustrovano je kako ovo funkcioniše i šta se dešava sa nevirtuelnim metodima
    142. 142.  .  #include <iostream.h>  class Sisar {  public:  Sisar () { cout<<”Sisar konstruktor…n”; }  ~Sisar () { cout<<”Sisar destructor…n”; }  void Kretanje () const { cout<<”Sisar se pomerio za jedan korakn”; }  virtual void Govor () const { cout<<”Sisar govori!n”;  protected:  int godine;  };  class Pas : public Sisar{  public:  Pas () { cout<<”Pas konstruktor…n”; }  ~Pas () { cout<<”Pas destructor…n”; }  void Lajanje () { cout<<”Pas laje…n”; }  void Govor () const { cout<<”Woof!n”; }  void Kretanje () const { cout<<”Pas je pomerio za 5 koraka…n”;  };
    143. 143.  // Glavni program  {  Sisar *pPas = new Pas;  pPas -> Kretanje ();  pPas -> Govor ();   return 0;  }  Izlaz je sledeći:  Sisar konstruktor...  Pas konstruktor...  Sisar se pomerio za jedan korak  Woof!
    144. 144.  Sisaru je obezbeđen virtuelni metod Govor (). U dizajnu je, na taj način, signalizirano očekivanje da ona bude bazni tip neke druge klase. Izvedena klasa će, verovatno, želeti da izvrši override ove funkcije.  Kreiran je i pokazivač za Sisar (pPas), ali mu je dodeljena adresa novog Pas objekta. Pošto je pas sisar, ovo je legalno dodeljivanje. Pokazivač je, zatim, upotrebljen za pozivanje Kretanje () funkcije. Pošto kompajler ,,zna’’ da pPas može da bude samo sisar, on će se obratiti Sisar objektu da bi pronašao Kretanje () metod.  U drugom delu programa, pokazivač poziva i Govor () metod. Pošto je Govor () virtuelan metod, biće pozvan Govor () metod iz Pas-a, nad kojim je izvršen override. Dokle god je poznata pozivajuća funkcija, ona poseduje Sisar pokazivač i biće pozvan Pas metod.  Ako postoji niz pokazivača na Sisar, od kojih je svaki usmeren na potklasu Sisar-a, možemo ih pozivati redom, tako da će biti pozivane ispravne funkcije.
    145. 145. Konstruktori u višestruko nasleđenim objektima  Kada se kreira objekat izvedene klase najpre se poziva konstruktor bazne klase koja se prva navede i on inicijalizuje navedene podatke članove, zatim se poziva konstruktor sledeće bazne klase i on inicijalizuje članove nasleđene iz te bazne klase, na kraju se poziva konstruktor izvedene klase.
    146. 146. Kako rade virtuelne funkcije ?  Za svaku klasu koja poseduje virtuelne funkcije, formira se tabela pokazivača na verzije virtuelnh funkcija za tu klasu.  Svaki objekat klase koja sadrži virtuelne funkcije, poseduje pokazivač na tabelu virtuelnih funkcija svoje klase. Ovaj pokazivač postavljaju implicitno konstruktori svake klase.  Pri pozivu virtuelne funkcije, do funkcije se pristupa posredno, preko pokazivača na tabelu virtuelnih funkcija unutar objekta i pokazivača iz tabele virtuelnih funkcija
    147. 147. Polimorfizam  Polimorfizam znaci “uzeti mnogo oblika”.U objektno- orjentisanom 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
    148. 148. 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) char*dodaj (char*s1,char*s2) { { return p+q; return strcat(p, q); } } int a,b; char * p1, *p2; a=dodaj (a,b); p1=dodaj(p1,p2);
    149. 149. 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.
    150. 150. 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.
    151. 151. 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
    152. 152. Klient serverska arhitektura
    153. 153. TROSLOJNA ARHITEKTURA I KOMPONENTE PROGRAMSKIH SISTEMA
    154. 154. • Prezentacioni ili sloj korisničkog interfejsa 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 COM+ component
    155. 155. Troslojna arhitektura projektovanje
    156. 156. Troslojna arhitektura - realizacija --- - -- -- - - -- COM+ Server component (DLLHost + ActiveX dll) OUT process COM+ Library component ActiveX dll IN process SQL 2000 ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ Zaposleni Zarade OSP KadroviMgr Radnik T T T --- - -- -- - - -- --- - -- -- - - -- Standard EXE VB or ASP form COMMON component ActiveX dll IN process ConnKadrovi GlobalFunctions PlateRadMgr PlateRadEnt ConnZarade ConnOSP OSPoslovanjaOSP SubjPoslOSP_MGR Manageri Entiteti Klijentska aplikacija kreira serverski objekat, poziva metodu Menadžera, prosleđuje argumente i čeka odgovor od servera Menadžerski 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 GlobalFunctions. Korišćenjem metoda Conn* (ADO konekcija) sastavljeni upit se izvršava nad tabelama i view- ovima baze podataka 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
    157. 157. Objektno orjentisano projektovanje Tema Prezentacija UML vizuelnog modeliranja kroz primer - analiza i dizajn -
    158. 158. Opis problema OnLine 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.
    159. 159. Identifikacija actora  Razmatranjem zahteva: Kada kupac unese narudžbinu u sistem, prodavac šalje elektronski zahtev serviseru sa detaljima naručene konfiguracije. Kupac Prodavac Serviser
    160. 160. 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. Prikaz standardnih računarskih konfiguracija Sastavljanje računarske konfiguracije Naručivanje izabrane konfiguracije Obaveštenje servisu o narudžbini Verifikacija i prihvatanje plaćanja Zahtev za konsultaciju sa prodavcem Promena statusa narudžbine Štampa računa
    161. 161. Use Case Diagram Prikaz standardnih računarskih konfiguracija Sastavljanje računarske konfiguracije Naručivanje izabrane konfiguracije Zahtev za konsultaciju sa prodavcem <<extend>> Štampa računa Obaveštenje servisu o narudžbini Serviser Prodavac Promena statusa narudžbine Kupac Verifikacija i prihvatanje plaćanja
    162. 162. 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).
    163. 163. 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.
    164. 164. Use Case Paketi Proizvodi Moguće konfiguracije Narudžbina Isporuka Plaćanje Prikaz standardnih računarskih konfiguracija (from Proizvodi) Sastavljanje računarske konfiguracije (from Moguće konfiguracije) Zahtev za konsultaciju sa prodavcem (from Narudžbina) Naručivanje izabrane konfiguracije (from Narudžbina) <<extend>> Verifikacija i prihvatanje plaćanja (from Plaćanje) Štampa računa (from Plaćanje) Promena statusa narudžbine (from Isporuka) Obaveštenje servisu o narudžbini (from Isporuka)
    165. 165. Activities  Sistem dodeljuje jedinstveni broj porudžbine i broj računa kupca na porudžbinu i smešta informacije o porudžbini u bazu podataka. Prikaz trenutne konfiguracije Daj formu za narudžbinu Prikaz forme za narudžbinu Procesiraj narudžbinu Snimi narudžbinu e-mail obaveštenje
    166. 166. Activity Dijagram Prikaz trenutne konfiguracije Daj formu za narudžbinu Prikaz forme za narudžbinu Procesiraj narudžbinu Snimi narudžbinu e-mail obaveštenje Timeout Nekompletno Kompletno
    167. 167.  Serviser obrađuje nalog dobijen od prodavca i isporučuje računar kupcu Da li je prodavac klasa ili atribut narudžbine tj. Računa? Da li je potrebna klasa Isporuka? Da li je ona u granicama našeg sistema? Klase clsRačunarclsKupac (from Use Case View) clsKonfiguracija clsElementKonfiguracije clsNarudžbina clsPlaćanje clsRačun
    168. 168. Atributi clsRačunar RacunarNaziv : String RacunarCena : Currency clsKonfiguracija KonfiguracijaNaziv : String KonfiguracijaCena : String clsElementKonfiguracije ElementaTip ElementaOpis clsNarudžbina NarudzbinaBroj : String NarudzbinaDatum : Date NarudzbinaAdresaIsporuke : String NarudzbinaIznos : Currency NarudzbinaStatus : String NarudzbinaProdavac : String clsPlaćanje PlacanjeNacin : String PlacanjeDatum : Date PlacanjeIznos : Currency clsRačun RacunBroj : String RacunDatum : Date RacunIznos : Currency clsKupac KupacNaziv : String KupacAdresa : String KupacTelefon : String KupacEmail : String
    169. 169. Associations clsRačunar RacunarNaziv : String RacunarCena : Currency clsElementKonfiguracije ElementaTip ElementaOpis clsKupac KupacNaziv : String KupacAdresa : String KupacTelefon : String KupacEmail : String clsPlaćanje PlacanjeNacin : String PlacanjeDatum : Date PlacanjeIznos : Currency clsRačun RacunBroj : String RacunDatum : Date RacunIznos : Currency clsNarudžbina NarudzbinaBroj : String NarudzbinaDatum : Date NarudzbinaAdresaIsporuke : String NarudzbinaIznos : Currency NarudzbinaStatus : String NarudzbinaProdavac : String 0..n 1..1 0..n 1..1 1..1 1..1 1..1 1..1 0..1 1..1 0..1 1..1 clsKonfiguracija KonfiguracijaNaziv : String KonfiguracijaCena : String 1..n 0..n 1..n 0..n
    170. 170. Generalisations clsKupac KupacNaziv : String KupacAdresa : String KupacTelefon : String KupacEmail : String clsPlaćanje PlacanjeNacin : String PlacanjeDatum : Date PlacanjeIznos : Currency clsRačun RacunBroj : String RacunDatum : Date RacunIznos : Currency clsElementKonfiguracije ElementaTip ElementaOpis clsKonfiguracija KonfiguracijaNaziv : String KonfiguracijaCena : String clsNarudžbina NarudzbinaBroj : String NarudzbinaDatum : Date NarudzbinaAdresaIsporuke : String NarudzbinaIznos : Currency NarudzbinaStatus : String NarudzbinaProdavac : String 0..n 1..1 0..n 1..1 1..1 1..1 1..1 1..1 0..1 1..1 0..1 1..1 clsRačunar RacunarNaziv : String RacunarCena : Currency 1..n1..n 1..n0..n 1..n0..n clsStandardna Konfiguracija
    171. 171. Class Dijagram clsKupac KupacNaziv : String KupacAdresa : String KupacTelefon : String KupacEmail : String clsPlaćanje PlacanjeNacin : String PlacanjeDatum : Date PlacanjeIznos : Currency clsRačun RacunBroj : String RacunDatum : Date RacunIznos : Currency clsElementKonfiguracije ElementaTip ElementaOpis clsKonfiguracija KonfiguracijaNaziv : String KonfiguracijaCena : String clsNarudžbina NarudzbinaBroj : String NarudzbinaDatum : Date NarudzbinaAdresaIsporuke : String NarudzbinaIznos : Currency NarudzbinaStatus : String NarudzbinaProdavac : String 0..n 1..1 0..n 1..1 1..1 1..1 1..1 1..1 0..1 1..1 0..1 1..1 clsRačunar RacunarNaziv : String RacunarCena : Currency 1..n1..n 1..n0..n 1..n0..n clsStandardnaKonfiguracija StdKonfiguracijaNaziv : String StdKonfiguracijaCena : String
    172. 172. 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???
    173. 173. Scenario Design U UseCase-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.
    174. 174. Interakcija : Kupac : clsKonfiguracijaGUI : clsRačunar : clsElementKonfiguracije OpenNew( ) DajRačunar( ) DajElemKonfig( ) PrikaziKonfiguraciju( )
    175. 175. Operacije - Metode clsKonfiguracijaGUI PrikaziKonfiguraciju() <<constructor>> OpenNew() clsRačunar RacunarNaziv : String RacunarCena : Currency DajRačunar() clsElementKonfiguracije ElementaTip ElementaOpis DajElemKonfig()
    176. 176. Sequence Dijagram : Kupac : clsKonfiguracijaGUI : clsRačunar : clsNarudžbina : clsNarudzbenicaGUI : clsKupac : clsPlaćanje : DbConnection OpenNew( ) DajRačunar( ) PrihvatiKonfiguraciju( ) PripremiZaNarudzbinu( ) PrikaziNarudzbinu( ) SubmitFormNarudzbina( ) SnimiNarudzbinu( ) PoveziRacunar( ) PoveziKorisnika( ) PoveziPlacanje( ) ExeciteQuery( ) ExeciteQuery( ) ExeciteQuery( ) ExeciteQuery( ) SelectQuery( ) PosaljiEmail( )
    177. 177. Collaboration Dijagram • Boundary i control objekti : Kupac : clsKonfiguracijaGUI : clsNarudžbina : clsNarudzbenicaGUI 1: OpenNew( ) 2: PrihvatiKonfiguraciju( ) 3: PripremiZaNarudzbinu( ) 5: SubmitFormNarudzbina( ) 4: PrikaziNarudzbinu( ) 6: SnimiNarudzbinu( )
    178. 178. 181 • Entiteti i database interface objekti : clsRačunar : clsNarudžbina : clsNarudzbenicaGUI : clsKupac : clsPlaćanje : DbConnection 4: PoveziRacunar( ) 1: PrikaziNarudzbinu( ) 2: SnimiNarudzbinu( ) 6: PoveziKorisnika( ) 8: PoveziPlacanje( ) 7: ExeciteQuery( ) 9: ExeciteQuery( ) 3: ExeciteQuery( ) 5: ExeciteQuery( )
    179. 179. Stanja i Prelazi Statechart dijagrami služe opisu ponašanja unutar objekta. Neplaćena Čeka Plaćanje Plaćena Prelaz na e-Bank Form Potvrda PlacanjaOdustanak od placanja
    180. 180. clsKonfiguracijaGUI PrikaziKonfiguraciju() <<constructor>> OpenNew() PrihvatiKonfiguraciju() (from KonfiguracijaGUI) clsNarudzbenicaGUI PrikaziNarudzbinu() SubmitFormNarudzbina() (from NarudzbenicaGUI) clsMgrKonfiguracija (from MgrKonfiguracija) clsMgrNarudzbina (from MgrNarudzbenica) clsKupac KupacNaziv : String KupacAdresa : String KupacTelefon : String KupacEmail : String PoveziKorisnika() (from Kupac) clsRačunar RacunarNaziv : String RacunarCena : Currency DajRačunar() PoveziRacunar() (from Racunar) clsNarudžbina NarudzbinaBroj : String NarudzbinaDatum : Date NarudzbinaAdresaIsporuke : String NarudzbinaIznos : Currency NarudzbinaStatus : String NarudzbinaProdavac : String PripremiZaNarudzbinu() SnimiNarudzbinu() (from Narudzbenica) DbConnection (from DBAccess) Class Packages Boundary klase: • klijent stranice • forme Control klase: • serverske stranice • COM+ komponente
    181. 181. Class Packages KonfiguracijaGUI NarudzbenicaGUI MgrKonfiguracij a MgrNarudzbeni ca Kupac Narudzbenica Racunar DBAccess User Services Business Services Data Services
    182. 182. 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.
    183. 183. Component Dijagram mgrKonfiguracija <<ActiveX DLL>> mgrNarudzbenica <<ActiveX DLL>> Kupac <<COM>> Racunar <<COM>> Narudzbenica <<ActiveX DLL>> Connection frmKonfiguracija <<Application>> frmNarudzbenica <<Application>>
    184. 184. 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
    185. 185. Deployment Dijagram Browser WEB server Aplikacioni server DataBase server Zahtev za stranicom Zahtev za podacima iz baze Zahtev za informacijama po poslovnim pravilima Zahtev za podacima iz baze

    ×