Programski jezici Tipovi podataka Tipovi podataka Koncept slabih
Programski jezici Tipovi podataka
Tipovi podataka Koncept slabih tipova podataka n Koncept jakih tipova podataka n Ekvivalentnost tipova n Elementarni tipovi podataka n Izvedeni tipovi podataka n Podtipovi n Diskretni tipovi podataka n Anonimni tipovi n
Tipovi podataka n n n Jedan od najznačajnih pojmova u okviru programskih jezika Sve promenljive u programu imaju atribut tipa Tip određuje skup vrednosti, format predstavljanja u memoriji, skup osnovnih operacija i veze sa drugim tipovima Koncept tipova prisutan od asemblerskih jezika Kod viših programskih jezika tip može biti definisan implicitno (automatski), preko implicitnog opisa tipa ili eksplicitno Dve grupe programskih jezika, na osnovu postavke koncepta tipova – jezici sa slabim i jakim tipovima podataka
Koncept slabih tipova Informacija o tipu koristi se i korektna je samo na mašinskom nivou n Operacija koja se od strane mašine prihvati kao korektna, na nivou izvornog koda može da bude potpuno nekorektna n Primer: n var c : char; c : = 4; (korektno je c: =‘ 4’; )
Koncept slabih tipova n n Koncept slabih tipova podrazumeva određeni automatizam u transformaciji tipova podataka u slučaju kada se elementi različitih tipova nalaze u jednom izrazu čija se vrednost dodeljuje promenljivoj određenog tipa. Primer: var x, y : real; i, j, k : integer; i : = x; k : = x - j;
Koncept slabih tipova Omogućava postizanje određenih efekata naredbama koje imaju sasvim drugu namenu n Dopušta slobodu pri pisanju izraza u naredbama dodeljivanja n Nejasan program sa skrivenim transformacijama n Bez mogućnosti kontrole i korišćenja informacije o tipu pri kompajliranju n
Koncept jakih tipova n Tip podatka određuje Skup vrednosti n Format registrovanja podataka n Skup operacija koje se mogu izvršavati nad podacima n Skup funkcija za uspostavljanje veza sa drugim tipovima podataka – konverziju n Sve definicije tipa moraju da budu javne, eksplicitne. Nisu dozvoljene implicitne definicije tipova. n Objektu se definiše samo jedan tip n
Koncept jakih tipova n n Dozvoljeno je dodeljivanje vrednosti samo odgovarajućeg tipa Dozvoljene su samo operacije obuhvaćene tipom Tip je zatvoren u odnosu na skup operacija koji obuhvata. Ove operacije mogu se primenjivati samo nad operandima istog tipa podataka. Mešoviti izrazi nisu dozvoljeni. Dodeljivanje vrednosti raznorodnih tipova i operacije nad raznorodnim operandima moguće su samo uz javnu upotrebu funkcija za
Koncept jakih tipova x: real; i: integer; b: Boolean; c: char; i : = 'A'; x : = i + 5. 0; c : = 10; i : = i or 7; operacija vrednostima tipa; -- x je tipa real; -- i je celobrojnog tipa; -- b je logičkog tipa; -- c je znakovnog tipa; -- nekorektno, jer je logička upotrebljena nad celobrojnog
Koncept jakih tipova Povećana pouzdanost, dokumentarnost i jasnoća programa n Korektnost programa obezbeđena je na apstraktnom nivou n Ako se koriste transformacije tipova, one su namerne i potrebne n Informacija o tipu se može koristiti u fazi kompajliranja programa i tako postaje faktor pouzdanosti programa n
Ekvivalentnost tipova Bitna kod koncepta jakih tipova podataka n Pri obradi naredbe dodeljivanja oblika x : = izraz kompajler vrši dodeljivanje samo u slučaju ekvivalentnosti tipa promenljive sa leve strane i rezultata izraza sa desne strane n Koriste se pravila za ekvivalentnost tipova n Strukturna ekvivalentnost n Imenovana (eksplicitna) ekvivalentnost n
Strukturna ekvivalentnost n n Leva i desna strana strukturno ekvivalentne – zauzimaju isti broj memorijskih lokacija Dodeljivanje definisano sa: var i : integer; u : real; u : = i; je dozvoljeno jer u krajnjem slučaju obe promenljive pripadaju tipovima podataka definisanim nad istim elementarnim tipom i obuhvataju vrednosti koje su strukturno jednake jer se radi o numeričkim podacima koji zauzimaju četiri bajta u memoriji
Imenovana ekvivalentnost n Leva i desna strana eksplicitno pripadaju istom tipu var i, u : real; u : = i; Veća pouzdanost jezika, koristi se kod novijih jezika n Zahteva korišćenje funkcija za transformisanje tipova n
Sistem tipova podataka Elementarni tipovi (Integer, Float, Char, Boolean) n Izvedeni tipovi n Podtipovi n Strukturni tipovi (File, Record, Array) n Dinamički tipovi n Apstraktni n
Elementarni tipovi podataka Tipovi podataka za rad sa elementarnim numeričkim podacima (celi i realni brojevi) n Tipovi za rad sa znakovnim podacima (pojedinačni znaci ASCII koda ili UNICODE) n Tipovi za rad sa logičkim vrednostima (true i false) n
Celobrojni tipovi Postoje u skoro svim programskim jezicima n Jedan ili više tipova za predstavljanje celih brojeva u različitim opsezima n Ada n INTEGER'FIRST - donja granica opsega n INTEGER'LAST - gornja granica opsega n Pored osnovnog tipa INTEGER postoje i prošireni i skraćeni celobrojni tipovi LONG_INTEGER i SHORT_INTEGER n
Uvedeni celobrojni tipovi Ada
Celobrojni tipovi - operacije
FLOAT tip Predstavljanje podataka iz skupa realnih brojeva u formatu pokretnog zareza (floating point) n Format REAL (Pascal, Fortran) i FLOAT (Ada) n Dozvoljene standardne aritmetičke operacije i operacije poređenja n
FLOAT - Ada n n type MOJ_FLOAT is digit 8 range -1 E 30. . 1 E 30; type MOJ_FLT is digit 6 range -1 E 30. . 1 E 30; MOJ_FLOAT'DIGITS - broj značajnih cifara MOJ_FLOAT'SMALL - najmanji pozitivan broj u opsegu vrednosti MOJ_FLOAT'LARGE - najveći broj u opsegu vrednosti
Logički tip Obično nosi naziv Logical ili Boolean n Obuhvata vrednosti TRUE i FALSE n Logičke operacije not, and, or, xor n Ada – diskretan tip, uređen skup vrednosti n BOOLEAN'FIRST = FALSE n BOOLEAN'SUCC(FALSE) =TRUE n BOOLEAN'LAST = TRUE n BOOLEAN'PRED(TRUE) = FALSE n
Znakovni tip Nosi naziv CHARACTER ili CHAR n Standardni skup ASCII karaktera i određene operacije nad njima n Uređenost skupa znakova u skladu sa ASCII tabelom, relacije poređenja n Ada – diskretni tip n
Elementarni tipovi u Fortranu
Hijerarhija tipova u Fortranu
Elementarni tipovi u C-u
Konverzija tipova Binarni operatori u C-u
Prioritet operatora u C-u n n n Unarni operatori (npr. ++) su uvek većeg prioriteta u odnosu na sve binarne (npr. /) Aritmetičke operacije su većeg prioriteta u odnosu na relacije poređenja Operatori poređenja <= i >= (manje ili jednako i veće ili jednako) su višeg prioriteta u odnosu na jednako i nejednako Poređenja su uvek višeg prioriteta u odnosu na operatore kojima se manipuliše bitovima Operatori za manipulisanje bitovima su višeg prioriteta u odnosu na sve logičke operatore Logičko I (&&) je višeg prioriteta u odnosu na logičko ILI ||
Izvedeni tipovi podataka Koncept koji se standardno koristi kod jezika sa jakim tipovima podataka n Jačanje pozitivnih efekata osnovnog koncepta n Slabljenje ograničenja i negativnih posledica osnovnog koncepta jakih tipova n U okviru postojećeg tipa definiše se novi koji nasleđuje određena svojstva roditeljskog tipa, ali postoji kao potpuno novi tip podataka, nisu dozvoljene nikakve n
Izvedeni tipovi podataka type INDEX is new INTEGER; n type DUZINA is new FLOAT; n type POVRSINA is new FLOAT; n
Izvedeni tipovi podataka program Izvedeni is var God, Ukupno : Integer; i : Integer; begin Ukupno : = 0; for i : = 1 to 10 do begin input(God); Ukupno : = Ukupno + God; end; output (Ukupno) end; Program Izvedeni is type Starost is new Integer; Index is new Integer; var God, Ukupno : Starost; i : Index; begin Ukupno : = 0; for i : = 1 to 10 do begin input(God); Ukupno : = Ukupno + God; end; output (Ukupno) end;
Nasleđivanje atributa Strukturna ekvivalentnost tipova – izvedeni tip nasleđuje sve atribute roditeljskog tipa n Eksplicitna ekvivalentnost tipova – stroža ograničenja koja u pojedinim slučajevima može da poremeti logičko razdvajanje kao osnovni koncept izvedenih tipova n Izvedeni tip ne mora da nasleđuje sve atribute i operacije, neke može i da transformiše n Predefinisanje operatora (overloading) – koncept sve više prisutan u programskim n
Ograničenje opsega vrednosti Čest koncept izvedenih tipova – ograničavanje skupa vrednosti roditeljskog tipa koje obuhvata izvedeni tip n Koristi se uglavnom kod diskretnih tipova gde se skup vrednosti koje se nasleđuju definiše kao diskretni dijapazon n n type INDEX is new INTEGER range 1. . 100; Zaštita od izlaska iz zadatog skupa vrednosti n Povećana pouzdanost programa n
Podtipovi Definisanje podtipova nad kojima je nešto slabije dejstvo zakona jakih tipova podataka n Podtipovi su manje nezavisni od roditeljskog tipa u odnosu na izvedene tipove istog roditeljskog tipa n Mogu direktno da komuniciraju sa roditeljskim tipom i drugim njegovim podtipovima, nezavisni su samo u odnosu na druge “strane” tipove n Ograničenje opsega vrednosti n
Podtipovi
Diskretni tipovi podataka Konačan, diskretan, uređen skup vrednosti u kome je definisana relacija poretka n Upotreba zajedničkih funkcija i atributa u ovoj grupi tipova n U diskretne tipove svrstavaju se svi celobrojni tipovi i svi tipovi sa diskretnim skupom vrednosti (logički, znakovni) n Tipovi nabrajanja (enumerated) n Intervalni tipovi n
Diskretni tipovi podataka Ada type BOJA is (crvena, bela, zelena, plava); n type DANI is (ponedeljak, utorak, sreda, cetvrtak, petak, subota, nedelja); n type MESEC is n (jan, feb, mart, april, maj, juni, juli, avgust, sep, o kt, nov, dec); n type STATUS is (ON, OFF); n
Uređenost skupa vrednosti Redosled navođenja u definiciji tipa određuje i uređenost skupa vrednosti što omogućava poređenje vrednosti i promenljivih istog tipa n Primer: n type BOJA is (crvena, bela, zelena, plava); n crvena < bela; bela < zelena; zelena < plava n
Atributi diskretnih tipova Ada DANI'FIRST - vrednost je ponedeljak; n DANI'LAST - daje vrednost nedelja; n DANI'POS (ponedeljak) - vrednost je 0; n DANI'POS (utorak) - daje vrednost 1; n DANI'VAL(4) - daje vrednost petak; n DANI'VAL(1) - daje vrednost utorak; n DANI'VAL(7) - greška, izvan opsega n
Atributi diskretnih tipova Ada TIP'SUCC(x) Ekvivalentno je sa: n TIP’VAL(TIP’POS(x)+1) n DANI'SUCC(nedelja) - dan posle nedelje; n
Diskretni tipovi - Pascal type BOJE = (crvena, bela, zelena, plava); DANI = (ponedeljak, utorak, sreda, cetvrtak, petak, subota, nedelja); MESEC = (jan, feb, mart, april, maj, juni, juli, avgust, sep, okt, nov, dec); STATUS = (ON, OFF);
Diskretni tipovi - C enum BOJE (crvena, bela, zelena, plava); n enum DANI (ponedeljak, utorak, sreda, cetvrtak, petak, subota, nedelja); n enum MESEC (jan, feb, mart, april, maj, juni, juli, avgust, sep, okt, nov, dec); n enum STATUS (ON, OFF); n
Anonimni tipovi Kod jezika sa jakim tipovima obično postoji mogućnost anonimnih definicija tipova podataka n Slabljenje zakona eksplicitne ekvivalentnosti i omogućavanje strukturne ekvivalentnosti n Definisanje promenljivih bez eksplicitnog navođenja imena tipa podataka n Opšti koncept za sve korisničke tipove u jezicima koji dozvoljavaju uvođenje n
Anonimni tipovi n Umesto: type KLJUC (on, off); I, J : KLJUC; n Koristi se: VAR Index : [1. . 100]; Raz : [-1. . 1];
Pitanja ? ? ?
Pitanja - ponavljanje n n n n n Koje grupe programskih jezika postoje u odnosu na koncept tipova podataka? Šta podrazumeva koncept slabih tipova? Šta podrazumeva koncept jakih tipova? Koji su nedostaci koncepta slabih tipova? Koje su prednosti/nedostaci koncepta jakih tipova? Šta podrazumeva stukturna, a šta imenovana ekvivalentnost tipova? Koji su elementarni tipovi podataka? Šta su diskretni tipovi podataka? Kako se definišu diskretni tipovi u C-u?
- Slides: 45