Upload
dejan-marinkovic
View
184
Download
2
Embed Size (px)
DESCRIPTION
Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva. Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja
Citation preview
Osnovi Objektno orijentisanog
programiranja
04/12/23 2
Od c ka c++ i c#
prvi Iskorak od • tradicionalnog, • proceduralnog,
• struktuiranog programiranjaka
• objektno orjentisanom programiranju
04/12/23 3
Osobine jezika C
• Tradicionalni način programiranja je u osnovi proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i programskog zahteva.
• Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG PROGRAMIRANJA, već su razbacani po programu.
04/12/23 4
Tradicionalna, proceduralna, struktuirana organizacija programa razdvaja kod I podatke
main
podacipodaci
podacipodaci
podacipodaci
podacipodaci
04/12/23 5
Osobine jezika C++
• Osnovna ideja objektno orjentisanog programiranja je da sve te podatke (atribute ) izvučemo iz navedenih struktura i grupišemo po klasama zajedno sa relevantnim operacijama (funkcijama). Klase zatim struktuiramo hijerarhijski, formirajući hijerarhijsko stablo klasa, vodeći računa da atributi i operacije koji su zajednički za sve klase budu na višim hijerarhijama, kako bi ih niže hijerarhije mogle koristiti preko mehanizma nasleđivanja
04/12/23 6
Osobine jezika C++
• Tako učaurenim podacima i operacijama definišemo interface prema korisniku tih klasa a takođe i interface između pojedinih klasa u hijerarhiji klasa, sakrivajući kao implementacione detalje sve ono što nije bitno za njihovo korišćenje. Na taj načiin stvaramo softverske komponente ( softverske čipove ) koje možemo nasleđivati novim klasama i na taj način iste ugrađujemo u nove softverske proizvode.
04/12/23 7
Šta je c++
• Programski jezik c++ je jezik sa klasama, ili proširenje popularnog jezika c.
• C++ se zasniva na uvođenju nove korisničke strukture podataka tipa CLASS koja omogućava objedinjavanje podataka (atributa) i operacija (metoda ) nad njima u jednu celinu (paket) pomoću koje deklarišemo objekte.
• Korišćenje takvih objekata u programiranju naziva se OBJEKTNO ORJENTISANO PROGRAMIRANJE
04/12/23 8
Sabiranje dva broja bez korišćenja klasa
– #include<stdio.h>– main ()– {– int a,b;– a=2;– b=4;– printf(“Suma dva broja je %6d\n",a+b);
• }
04/12/23 9
i sa korišćenjem klasa• //Sabiranje dva broja Novi način označavanja komentara
• #include <iosteam.h> // Nova I/O strim biblioteka.
• Class paket // Novi korisnicki izvedeni tip podataka– // Klasa je novi tip za sve objekte koji se grade u njemu– // Klasa je ucaureni paket podataka i operacija koje operisu nad – // podacima.
• {int ImeAtributa; // podatak, atribut klase– // Podrazumeva se da je private sto znaci da se istom moze pristupiti – // preko metoda ove klase
• Public;
04/12/23 10
i sa korišćenjem klasa
• Void suma (int a , int b ) // metoda (funkcija ) klase koja implementirana “in line “ u samoj klasi. Metoda je public sto znaci da se ista moze pozvati bilo gde u programu.
– { int ImeAtributa = a+b; // Punjenje objekta
• Cout << “suma dva broja je :” << ImeAtributa; – // Novi nacin prikaza cout je objekat ugradjene klase klase
iosteam za ekranski prikaz po difoltu, //”<<“ je poziv odgovarajuce operator funkcije za prosledjivane izlaznih podataka na ekran.
}};
04/12/23 11
i sa korišćenjem klasa
• // Glavni program• Void main ()
• { paket objekat_zbir; //deklarisanje objekta
• objekat_zbir.suma(10,20); // Komunikacija sa objektom ostvaruje se posredstvom njegovih metoda
04/12/23 12
Osnovni koncept OOP klasifikacija
(classification)
apstrakcija
(abstraction)
učaurenje
(encapsulation)
nasleđivanje
(inheritance)
polimorfizam
(polymorphism)
04/12/23 13
Klasifikacija
Koren reci klasifikacija je klasa.
Kada obrazujete klasu, vi sistematski uredujete informacije u smislenu celinu. Reč je o klasifikaciji a to svi rade, ne samo programeri
klasifikacija je duboko ukorenjena u nas nacin razmisljanja i komuniciranja, tako da je logicno pokusati da se programi pisu klasifikovanjem razlicitih koncepata svojstvenih nekom problemu i njegovom resenju i zatim modelirati te klase u programskom jeziku
04/12/23 14
Moderni objektno orijentisani programski jezici omogucavaju da se definisu klase, koje kombinuju
ponasanja (metode) i
atribute (podatke).
04/12/23 15
Klase su strukture kojima su pridodata svojstva:
• Privatni pristup Enkapsulacije (sakrivanje, učaurenje) podataka
(atributa) i operacija nad njima
• Metode
Operacije nad atributima klase
• Nasleđivanje
Osobina da klase sa nižih hijerarhijskih nivoa mogu naslediti atribute i metode klasa sa viših hijerarhijskh nivoa)
04/12/23 16
Pokusaj definisanja klasa
Prototipski mehanizam za stvaranje objekta, omogućavajući njihovu klasifikaciju po grupama sa istim osobinama
Model za sve objekte koji se grade,
Agregacija podataka (atributa) obično različitog tipa i operacija, realizovanim funkcijama, nazvanim metodama koje obrađuju te atribute
Kolekcija više objekata koji imaju istu strukturu
Korisnički izveden tip podataka,
04/12/23 17
Apstrakcija
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
04/12/23 18
Apstrakcija
Apstraktni tipovi podataka omogućavaju da napravite klase koje sadrže privatna polja, privatne podatke iprivatne metode koji izvršavaju privatna izračunavanja.
Ta polja i metode ne možete da apstrahujete van klase. Međutim, da bi klasa imala praktičnu vrednost, ona mora da obezbedi neku vrstu „interfejsa“ za komunikaciju. Taj interfejs je skup javnih metoda koje aplikacije mogu da pozivaju. Ti metodi definišu
funkcionalnost ovih aplikacija.
04/12/23 19
Javni metodi mogu da koriste druge privatne metode i da pristupaju privatnim podacima da bi obavili svoj posao ali korisnika to ne zanima dok metodi rade ono što su obećali.
Pošto su mehanizmi koje javni metod koristi privatni, ili sakriveni, programer koji implementira klasu ima potpunu siobodu da obavi izračunavanja i da pristupa podacima kako god mu se čini pogodno.
Štaviše, neka kasnija verzija klase može potpuno da promeni te unutrašnje detalje (može, na primer, da upotrebi neki super novi algoritam koji je 100 puta brži od prvobitnog) ali, dok god javni „interfejs" ostaje isti (nudi se isti skup javnih metoda), sve postojeće aplikacije koje koriste ovu klasu i dalje funkcionišu.
04/12/23 20
Sta je enkapsuliranje?
Enkapsuliranje ima dve znacajne uloge:
Da kombinuje metode i podatke u klasu; drugim recima, da podrzi klasifikaciju.
Da kontrolise dostupnost metoda i podataka; drugim recima, da kontrolise koriscenje klase.
Klasa je programska konstrukcija koja obezbeduje sintaksu i semantiku koje podrzavaju te dve osnovne uloge.
04/12/23 21
Enkapsuliranje, u slici
Pravougaonik
– AtributiDužina
Širina
– MetodeCrtaj ()
Obim ()
Povrsina ()
Pomeri()
04/12/23 22
Enkapsuliranje u reci
klasa po imenu Krug koja sadrzi jedan metod (za izracunavanje povrsine kruga) i jedan podatak (poluprecnik kruga):
• class Krug• {• double Povrsina()• {• return 3.141592 * poluprecnik * poluprefinik;• }• double poluprecnik;• }
04/12/23 23
Kontrolisanje dostupnosti
Drugi kljucni aspekt enkapsuliranja: dostupnost. Za metod ili polje kaze se da je privatno ako je dostupno
samo unutarklase.
Da biste deklarisali da je metod ili polje privatno, napisacetekljucnu rec private ispred njegove deklaracije.
Za metod ili polje kaze se da je javno ako je dostupno i van i unutarklase
Da biste deklarisali da je metod ili polje javno, napisacete kljucnu rec public ispred njegove deklaracije
04/12/23 24
Ponovo klasa Krug. Ovog puta se Povrsina deklarise kao javni metod, a poluprecnik se deklarise kao privatno polje:
class Krug{public double Povrsina(){return 3.141592 * poluprecinik * poluprecinik;}private double poluprecnik; }
04/12/23 25
Objekti su…
Nezavisne programske celine koje sadrže metode (funkcije) i podatke
Različita pojavljivanja iste klase
Promenljive koje se kreiraju iz struktura tipa klase
Individualna realizacija klasa
04/12/23 26
Nasleđivanje,razvrstavanje zajedničkih osobina različitih klasa
Geometrijski obliciGeometrijski oblici
PravougaonikPravougaonik ElipsaElipsa TrougaoTrougao
04/12/23 27
Polimorfizam, različit odgovor na isti metod
GeoOblikcrtaj()
GeoOblikcrtaj()
Elipsacrtaj()
Elipsacrtaj()
Pravougaonikcrtaj()
Pravougaonikcrtaj()
Trougaocrtaj()
Trougaocrtaj()
04/12/23 28
Strukturno, naspram,objektno orijentisanom programiranju
Tendencije strukturnog programiranja
Proces u središteProces u središte
Algoritamskipristup
Algoritamskipristup
Objektno-orijentisane tendencije
Objekat u središteObjekat u središte
Baziran na porukama
Baziran na porukama
Monolitnost Monolitnost Modularnost Modularnost
Upotreba jedanputUpotreba jedanputPonovno korišćenjePonovno korišćenje
Podaci javniPodaci javniPodaci skriveniPodaci skriveni
1111
2222
3333
4444
5555
04/12/23 29
Strukturni pristup u programiranju
CrtajPrav(...){}PomeriPrav(...){}PromeniVelPrav(){}RotirajPrav(...){}
CrtajPrav(...){}PomeriPrav(...){}PromeniVelPrav(){}RotirajPrav(...){}
Funkcije
prav1dužinaširinacentar
prav2dužinaširinacentar
prav3dužinaširinacentar
prav1dužinaširinacentar
prav2dužinaširinacentar
prav3dužinaširinacentar
Podatak
04/12/23 30
Objektno-orijentisani pristup programiranju
dužinadužinaširinaširinacentcentaarr
dužinadužinaširinaširinacentcentaarr
Crtaj
Pomeri
Promeni vel.
Rotiraj
prav1 prav2
dužinadužinaširinaširinacentcentaarr
dužinadužinaširinaširinacentcentaarr
Crtaj
Pomeri
Promeni vel.
Rotiraj
04/12/23 31
Atributi i metodi
• Sluzbenik
- ImeiPrezime: string - Maticnibroj:string- Pol: char- Datumrodjenja: double
+ Uzmimaticnibroj()- Zadajmaticnibroj()+ Uzmipol()- zaDajpol()
PlatniSpisakPlatniSpisak
PlataPlata:: double double
+Izracunajplatu+Izracunajplatu()()
04/12/23 32
Atributi i metodi
U objektu se pored atributa nalaze odgovarajuće metode kojima se vrši zadavanje i vraćanje vrednosti atributa.
• ImeiPrezime• Maticnibroj• zadajmaticnibroj()• Uzmimaticnibroj()
Da bi se efikasno koristili metodi potrebno je znati:• Ime metode• Koji se parametri prosleđuju metodu• Povratni tip metoda
04/12/23 33
Atributi i metodi
• Objekat platni spisak sadrži metod izracunajplatu(), koji računa platu datog službenika.
• Objekat platniSpisak mora imati matični broj datog službenika. Da bi došao do te informacije objekat platniSpisak mora poslati poruku objektu Sluzbenik (metodu Uzmimaticnibroj().
• Objekat Sluzbenik prepoznaje poruku i vraća traženu informaciju
04/12/23 34
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,