51
07/05/22 Programski jezici 1 Moduli kao sredstvo Moduli kao sredstvo apstrakcije apstrakcije

PJ12-ModuliApstrakcija

Embed Size (px)

DESCRIPTION

Iz Wikipedije, slobodne enciklopedijeTaiji dijagram, simbol taoizmaTaoizam je naziv za filozofska i religijska učenja koja se temelje na metafizičkom tumačenju kineskog znaka Tao. Taoisti Tao tumače kao princip kontinuiteta u vječno mijenjajućem Univerzumu. Taoizam je ostavio neizbrisiv trag na razne oblasti kineske kulture, a poslije se proširio i po drugim oblastima istočne Azije.Jedan od utemeljitelja taoizma je i Lao Tse, koji je živio u 6. vijeku pne. Lao Ce je poučavao da ljudi treba da žive u harmoniji sa prirodom. On je naglašavao važnost jednostavnog života i održanje ravnoteže sa prirodom, pri čemu se nije slagao sa Konfučijevim uvjerenjem da su u jednom društvu najvažniji snažna porodica i država. On nije vjerovao u zakone i poučavao je da je najbolji način života ne preduzimati nikakve snažne, protivprirodne akcije. Temeljno djelo taoizma je Tao Te Chinga, koja se često prevodi kao Knjiga Puta i Vrline.Središnji pojam taoizma je Tao (ili Dao). Tao je nepromjenjiv, prije je svih stvari. Od njega potiču nebo i zemlja, kao dva pola. Muški princip Jang (duh, dobro, ljubav, svjetlo) i ženski princip Jin (tvar, zlo, mržnja, tmina), koji zajedno održavaju sklad svijeta u neprestanom mijenjanju. Taoisti Tao tumače kao princip kontinuiteta u vječno mijenjajućem univerzumu.Taoizam kao religija se pojavljuje dosta kasnije, u 2. vijeku ne. Taoizam je jedna od velikih religioznih tradicija nastalih u Kini. Za razliku od velikih zapadnjačkih religija, taoizam nema jednog Boga ni proroka osnivača. Jedno od glavnih vjerovanja taoizma je da svaka osoba treba da slijedi sopstveni Tao ili Put. Univerzalan, a ipak veoma lične prirode, taoizam je imao značajnog utjecaja na duhovni život mnogih kultura, kako u Aziji, tako i širom svijeta.Važno je međutim napomenuti da taoizam nije jasno izdiferencirana religija, baš kao ni konfucijanstvo i kineski budizam, već svi zajedno čine jednu cjelinu - kinesku narodnu religiju koja se je godinama razvijala i prihvaćala razna učenja. Podjela Kineza na taoiste, budiste i konfičijaniste je jedna velika zabluda na Zapadu, a u stvari su ovo samo tradicije koje zajedno čine jednu cjelinu. Istina je da se Kinezi izjašnjavaju kao pripadnici jedne od ovih religija, ali to je samo zato što time žele istaknuti da su više privrženi tom vjerovanju nego ostalima. Mnogi deklarirani taoisti ili konfucijanci idu često u budističke hramove i obrnuto.

Citation preview

Page 1: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 1

Moduli kao sredstvo apstrakcijeModuli kao sredstvo apstrakcije

Page 2: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 2

DekompozicijaDekompozicija

Kompleksna aktivnost se razlaže na niz jednostavnih koraka koji se dalje redukuju na niz elementarnih akcija (atoma) relevantnih za domen istraživanja.

Svaki korak u dekompoziciji zahteva opis niza elemenata sa puno detalja.

Page 3: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 3

ApstrakcijaApstrakcija

Konceptualno pojednostavljenje složenog sistema pri čemu se namerno ignorišu detalji a ističu globalna svojstva

Na primer, koncept građevine ignoriše činjenicu da li su se za gradnju koristile cigle,crepovi, malter i sl.

Na sličan način složene aktivnosti predstavljaju se kao elementarne tako što se imenuju i to se privremeno ignorišu detalji koje tako imenovani koncept obuhvata.

Page 4: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 4

Apstakcija u programskim Apstakcija u programskim jezicimajezicima

Jaki tipovi podataka - prvi korak ka apstrakciji

Moduli kao sredstvo apstrakcije Apstrakni tipovi podataka Objekti i klase objekata Softverske komponente i Web servisi

Page 5: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 5

Pregled tehnika programiranjaPregled tehnika programiranja Nestrukturno - proceduralno programiranje

Glavni program direktno operiše sa globalnim podacima.

Dugi i nepregledni programi

Copy paste- Kod se višestruko koristi kopiranjem delova

Page 6: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 6

Pregled tehnika programiranjaPregled tehnika programiranja

Proceduralno programiranje

Program se može posmatrati kao sekvenca poziva potprograma (procedura).

Strukture podataka se modeliraju odvojeno od koda procedura koje ih obrađuju.

Višestruko korišćenje koda postiže se preko biblioteka procedura i funkcija.

Page 7: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 7

Pregled tehnika programiranjaPregled tehnika programiranja

Modularno programiranje

Procedure sa zajedničkom funkcionalnošću su integrisane u jedan modul

Svaki modul može da ima svoje sopstvene podatke. Višestruko korišćenje struktura podataka i procedura

Page 8: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 8

Pregled tehnika programiranjaPregled tehnika programiranja

Object Oriented Programming

Strukture podataka i procedure integrisane u klase Program može da se posmatra kao mreža objekata koji su u interakciji pri čemu

svaki objekat svoje stanje. Apstracija, inkapsulacija, nasleđivanje i polimorfizam Ponovno korišćenje objekata

Page 9: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 9

Pregled tehnika programiranjaPregled tehnika programiranja

Komponentno programiranje (Component Development)

Aplikacija se gradi od pšrekompiliranih softverskih blokova, slično konceptu integrisanih kola u elektronici

Akcenat je na modeliranju interfejsa Komponente se mogu višestruko koristiti (Binary reuse of functionality) Nezavisnost od programskog jezika i platforme na kojoj se aplikacija koristi.

Page 10: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 10

Moduli - AdaModuli - Ada

package IME_PAKETA is --Opisi podataka i funkcija paketa

end IME_PAKETA;

package body IME_PAKETA is--Opisi podataka;--Imperativni deo paketa;

end IME_PAKETA;

Vidljivi deo

Skriveni deo

Page 11: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 11

Moduli - PascalModuli - Pascal

Page 12: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 12

Lokalno povezani podaci i operacije (1)Lokalno povezani podaci i operacije (1)

package PRIMER is--Definicija tipova podataka;type T is --itd.--Opisi podataka;V:T;--Globalne promenljive;--Opisi procedura i funkcija;procedure PROC (X:in T;Y:out T);function F(X:in T)return T;end PRIMER;

Page 13: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 13

Lokalno povezani podaci i operacije (2)Lokalno povezani podaci i operacije (2)

package body PRIMER isprocedure PROC (X:in T;Y:out T)is--Detalji same procedure;end PROC;function F (X:in T)return T is--Detalji same funkcije;end F;end PRIMER;

Page 14: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 14

Apstraktni tipovi podatakaApstraktni tipovi podataka

package MAGACIN isMAX:constant INTEGER :=100;subtype INDEX is INTEGER range 1..MAX;subtype POKAZIVAC is INTEGER range 0..MAX;type STEK(DIM:INDEX)is record

MEM:array (1..DIM)of INTEGER;POK:POKAZIVAC :=0;--Magacin je prazan;

end record ;procedure PUSH(S:in out STEK;PODAT:in

INTEGER);procedure POP (S:in out STEK);function VRH (S:STAK)return INTEGER;function PRAZAN(S:STEK)return BOOLEAN;function PUN (S:STEK)return BOOLEAN;

end MAGACIN;

Page 15: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 15

(2)(2)package body MAGACIN isend MAGACIN;--Glavni program:declareuse MAGACIN;MOJ_STEK:STEK(DIM =>40);--Magacin sa 40 elemenata;VRED,PRIV:INTEGER;begin

--Generisanje nove vrednosti;PUSH(MOJ_STEK,VRED);if not PRAZAN(MOJ_STEK)then

POM :=VRH(MOJ_STEK);POP(MOJ_STEK);

end if ;--....end ;

Page 16: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 16

ZatvaranjeZatvaranje

package ZASTICENI_MAGACIN isMAX:constant INTEGER :=40;type STEK(DIM:INTEGER range 1..MAX)is private

;procedure PUSH(S:in out STEK;I:INTEGER);--Ostalo je sve isto kao u prethodnom

primeru;private type STEK(DIM:INTEGER range 1..MAX)is

recordMEM:array (1..DIM)of INTEGER;POK:INTEGER range 0..MAX :=0;

end record ;end ZASTICENI_MAGACIN;

Page 17: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 17

Predefinisanje operatora u funkciji Predefinisanje operatora u funkciji apstrakcijeapstrakcije

package KOMPLEKSNI istype COMPLEX is private ;function "+"(X,Y:COMPLEX)return COMPLEX;function "-"(X,Y:COMPLEX)return COMPLEX;function "*"(X,Y:COMPLEX)return COMPLEX;function "/"(X,Y:COMPLEX)return COMPLEX;function "*"(X:COMPLEX,Y:INTEGER)return COMPLEX;function PAR_COMPLEX(X,Y:FLOAT)return COMPLEX;privatetype COMPLEX isrecordRE,IM:FLOAT :=0.0;end ;end KOMPLEKSNI;

Page 18: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 18

Predefinisanje operatora (2)Predefinisanje operatora (2)package body KOMPLEKSNI isfunction PAR_COMPLEX(X,Y:FLOAT)return COMPLEX is

beginreturn COMPLEX'(X,Y);end PAR_COMPLEX;

function "+"(X,Y:COMPLEX)return COMPLEX isbeginreturn COMPLEX'(X.Re +Y.Re,X.Im +Y.Im);end "+";

function "-"(X,Y:COMPLEX)return COMPLEX isbeginreturn COMPLEX'(X.Re -Y.Re,X.Im -Y.Im);end "-";

Page 19: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 19

function "*"(X,Y:COMPLEX)return COMPLEX isbeginreturn COMPLEX'(X.Re*Y.Re -X.Im*Y.Im,X.Re*Y.Im

+X.Im*Y.Re);end "*";

function "/"(X,Y:COMPLEX)return COMPLEX isD:FLOAT :=Y.Re **2 +Y.Im **2;beginreturn COMPLEX'((X.Re *Y.Re +X.Im *Y.Im)/D,X.Re *Y.Re -X.Im *Y.Im)/D);end "/";

function "*"(X:COMPLEX,Y:INTEGER)return COMPLEX isbeginreturn COMPLEX'(X.Re *FLOAT(Y),X.Im *FLOAT(Y));end "*";

end KOMPLEKSNI;

Page 20: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 20

Glavni programGlavni programprocedure GLAVNI isdeclareuse KOMPLEKSNI; --Navodenje modula koji se koristi;A,B,C,D:FLOAT;X1,X2:COMPLEX;--Tip COMPLEX se direktno koristi;begin

READ (A,B,C,D);X1 :=PAR_COMPLEX (A,B);X2 :=PAR_COMPLEX (C,D);X1 :=X1 +X2; --Sabiranje kompleksnih brojeva;C :=C +D; --Sabiranje realnih brojeva;

end ;

Page 21: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 21

Objektno orijentisani jeziciObjektno orijentisani jezici

Page 22: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 22

Osnovni konceptiOsnovni koncepti

- Klasa Definiše strukturu objekata (podatke) i njihovu funkcionalnost

(ponašanje). Klasa može da se posmatra kao šablon objekata, (template) kojim se opisuje model po kome ae se kreirati novi objekat. Klase se ponekad nazivaju fabrikama objekata (Cox 1986)

- Objekat Primerci (istace) klasa. pojedninaeni,. Svi objekti jedne klase imaju strukturu definisanu klasom i nad njima se

mogu izvršavati samo operacije definisane klasom kojoj pripadaju.

- Poruka Objekat odgovara na poruku time što se izvršava odgovarajući metod. Kažemo da na objekte delujemo porukama, pri čemu svaka poruka

pretstavlja poziv metoda (funkcije ili procedure) definisanog u klasi kojoj objekat pripada.

Page 23: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 23

Objektno orijentisano programiranjeObjektno orijentisano programiranje

krug center: x @ y radius:r;

Page 24: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 24

Interakcija između objekataInterakcija između objekata

A “Stand up”Komande B

“ “ (yes/no)

A “Look up in !”

B Koande sa argumentima

A “Where were you born?”

B “I was born in “

Pitanja

A B “Did you see on ?”Pitanja sa

argumentima

Page 25: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 25

Apstrakcija - Apstrakcija - zatvaranjezatvaranje

programer, kreator klase Korisnik klase

Interface (Methods and

messages)

Milena Stankovic
Class is a structure for encapsulation in OOPL. Programmer, class creator, defines class as encapsulation of deta stractures and methods and only an Interface (Methods and messages) is viseble and accesibe by the class user. Those methods and messiges are tools for manipulation with objects.
Page 26: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 26

public class Light {

protected boolean isOn;

public void TurnOff() {/*...*/} public void TurnOn() {/*...*/} }

PropertiesMethods Class

Primer

Kreiranje objekta:

Light kitchenLight = new Light();kitchenLight.TurnOn();

Page 27: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 27

NasleđivanjeNasleđivanje Nasleđuju se sva svojstva postojeće klase i njima se dodaju

nova.

Uspostavlja se “is-like-a” relacija

Class Derived extends Base {

}

Page 28: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 28

NasleđivanjeNasleđivanje

Nasleđivanje omogućava da se definišu nove klase na osnovu postojećih.

Nova klasa se definiše kao specijalizacija ili proširenje neke klase koja već postoji.

Nova klasa inicijalno ima sva svojstva klase koju nasleđuje.

Novoj klasi mogu da budu pridodata nova svojstva.

Kada jedna klasa, u OO terminologiji podklasa (“subclass”, “child class”, “derived class”), nasleđuje neku klasu , u OO terminologiji superklasa (“superclass”, “parent class”, “base class”), onda podklasa nasleđuje sva svojstva superklase.

Page 29: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 29

NasleđivanjeNasleđivanje

Podklasi mogu biti pridodata nova svojstva (podaci, metodi, poruke), a neka svojstva (prvenstveno metodi) mogu biti izmenjena sa ciljem da se nova klasa prilagodi specifičnimpotrebama.

Sva dodata svojstva i izmene odnose se na poklasu (subclass) dok originalna klasa (superclass) ostaje nepromenjena.

Svojstva koja nisu definisana u podklasi automatski se preuzimaju iz njene superklase.

Page 30: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 30

Šta se može menjatiŠta se može menjati

Nove poruke, time se proširuje interfejs nove klase. Za svaku novu poruku treba da bude definisan odgovarajući metod.

Novi podaci instanci, time se prođiruje struktura objekata. Posmatrano sa strane apstrakcije objekti podklasa su specijalizovani (detaljnije opisani) od objekata superklasa. Subklase ne samo da imaju veću funkcionalnost već imaju i više svojstava..

Postojeći metodi mogu biti predefinisani, na taj način se modifikuje ponačanje objekta. U ovom slučaju govorimo o predefinisanju (overriding) metoda.

Page 31: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 31

Semantika nasleSemantika nasleđđivanjaivanja

Uspostavlja se Is-A relacija

Person

namefirstnameage

getName( )getId( )

Student

studIdgetCourses ( )getId( )

Employee

salary

getSalary ( )

Page 32: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 32

IS A IS A relacijarelacija

Nasleđivanjem se definiše IS A relacija između originalne klase i nove, izvedene klase.

Kako objekti podklase mogu da prime sve poruke kao i objekti superklase oni se mogu koristiti svuda gde se mogu koristiti i objekti superklase.

Svaki objekat jedne klase je i (is an) objekat njene superklase.

Page 33: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 33

Kompozicija Kompozicija

Kompozicija

MyNewClass

Instance ofexisting class

Instance ofexisting classInstance of

existing class

class Car {Engine eng = new Engine(100);Wheel[] wheels = new Wheel[4];Horn horn = new Horn();...}

Page 34: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 34

Kompozicija ili nasleđivanje

Engine

Car

Wheel[]Window []

Door []

Car

Wheel[]Window []

Door [] Engine

Car is an engine? Car has engine

Pogrešno

Ispravno

Nasleđivanje je određeno u fazi kompiliranja, dok kod kompozicije objekat može da se kreira zakasnelo u fazi izvršavalja.

Page 35: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 35

Hierarhija klasaHierarhija klasa

Object C1 C1a

C1b

C2 C2a

C2bPrimer hierarhije klasa

Kada se nasleđivanje primeni višestruko dobija se struktura tipa stabla koja se obično naziva hierarhija klasa.

Page 36: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 36

PolimorfizamPolimorfizam

Polimorfizam se često navodi kao najače svojstvo OO jezika.

Termin označava “više formi” - "many forms", i u kontekstu objektnih jezika ukazuje na mogućnost da se metodi više objekata pozivaju preko istog interfejsa.

Sposobnost da raziličiti objekti odgovore ne iste poruke (na sebi svojstven način).

Koristi se isti interfejs za ratličite objekte.

Page 37: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 37

PolimorfizamPolimorfizam

Zakasnelo povezivanje.

Page 38: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 38

Još jedan primer Još jedan primer polimorfizmapolimorfizma

Shape c = new Circle();Shape t = new Triangle();Shape s = new Square();// ...c.draw();t.draw();s.draw();

Page 39: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 39

Apstraktne klase i interfejsiApstraktne klase i interfejsi

Osnovne klase koje služe kao osnova za generisanje novih klasa.

Shapeprintresize

Lineprintresize

Circleprintresize

BoldLineprint

Page 40: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 40

- ima krila, leti

ApstrakcijaApstrakcija

Mentalni proces izdvajanja nekih karakteristika isvojstava i isključivanja preostalih koja nisu relevantna

Apstrakcija je uvek sa nekim ciljem, namenom Istre stvari moguće je apstrakovati na više različitih

načina Svaka apstrakcija je nepotpuna slika realnosti Ne želimo potpunost, već samo adekvatno

modeliranje!

Page 41: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 41

TTipovipovii apstrakcije apstrakcije Klasifikacija — grupa sličnih instanci objekta

DBMSsoftware

Sybase. . .Access Oracle

Ističu se zajednička svojstva i ignorišu posebna

Microsoftsoftware

Word PowerPoint . . .

RelacijaIS_MEMBER_OF

RelacijaIS_MEMBER_OF

Page 42: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 42

TTipovi apstrakcijeipovi apstrakcije agregacija — grupa različitih skupova objekata

avion

Motori. . .Krila Točkovi

RelacijaIS_PART_OF

ignorišu se razlike između delova - Koncentrišemo se na činjenicu da oni čine celinu

Page 43: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 43

TTipovi apstrakcijeipovi apstrakcije generalizacija — grupa sličnih skupova objekata

student

poslediplomci. . .redovni vanredni

IS_Arelationship

Uočimo razliku između klasifikacije i generalizacije– klasifikacija – primenjuje se na individualne instance

objekata– generalizacija – na skup objekata (klase)

superclass/supertype

subclass/subtype

Page 44: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 44

TTipovi apstrakcijeipovi apstrakcije

student

Redovni student

Jovan. . .Saša Tijana

. . .Ime Broj indekasa

generalizageneralizacijacija

agregaagregacijacija

klasifikacijaklasifikacija

Page 45: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 45

OO jezici OO jezici ALGOL Objective-C

Smalltalk

Pascal

C

C++

Eiffel

SIMULA

LISP Flavors Loops CLOS

Object Pascal

Actor

Java

Delphi

Page 46: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 46

SmalltalkSmalltalk

Smalltalk-80 verzija iz 1980. Program se sastoji od poruka čija sintaksa odgovara uprošćenom

engleskom jeziku Na objekte se deluje porukama koje prestavljaju pozive metoda. Dinamička implementacija, kasno povezivanje.

krug := Circle new;krug center: x @ y radius:r;vert := Line new; vert start: x @ (y-r);vert end: x @ (y+r);hori := Line new; hori start: (x-r) @ y;hori end: (x+r) @ y;ckrug display; vert display; hori display;

Page 47: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 47

C++C++

1980 Bjarne Stroustrup je projektovao skup jezika koji su bili nazvani "C With Classes" – što je poslužilo kao osnova za definisanje jezika C++.

Proširenje programskog jezika C Statička implementacija. Klase su ujedno i tipovi podataka

krug = new Circle(x,y,r)vert = new Line(x, x-r, x, y+r)hori = new Line(x-r, y, x+r, y)krug -> display()vert -> display()hori -> display()

Page 48: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 48

Object PascalObject Pascal - Delphi - Delphi• 1986 Apple realizuje Object Pascal za Mac.

• 1995 pojavljuje se Delphi- popularna verzija razvojnog okruženja (RAD tool) zasnovanog na Object Pascalu.

New(krug); krug.ICircle(x,,y,,r);New(vert); vert.ILine(x,x-r,x,y+r);New(hori); hori.ICircle(x-r,y,x+r,y);krug.display; vert.display, hory.display

Page 49: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 49

JavaJava• May 1995.

• Popularan je jer je jednostavniji od C++.

• Ima primenu u razvoju Internet aplikacija

Page 50: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 50

OO programiranjeOO programiranjeProgrammer Integrated Development Enviroment

Class Library (Class Hierarchy)

Page 51: PJ12-ModuliApstrakcija

04/28/23 Programski jezici 51

Svojstva dobrog OO programaSvojstva dobrog OO programa

Reusability - Višestruko korišćenje Extensibility - Laka proširljivost Flexibility - Lako prilagođavanje Simplicity - Jednostavnost