Elementarni tipovi podataka

Download Report

Transcript Elementarni tipovi podataka

Programski jezici
Tipovi podataka
Tipovi podataka








Koncept slabih tipova podataka
Koncept jakih tipova podataka
Ekvivalentnost tipova
Elementarni tipovi podataka
Izvedeni tipovi podataka
Podtipovi
Diskretni tipovi podataka
Anonimni tipovi
Tipovi podataka






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
Operacija koja se od strane mašine prihvati kao
korektna, na nivou izvornog koda može da bude
potpuno nekorektna
Primer:
var
c : char;
c := 4; (korektno je c:=‘4’;)
Koncept slabih tipova


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
Dopušta slobodu pri pisanju izraza u naredbama
dodeljivanja
Nejasan program sa skrivenim transformacijama
Bez mogućnosti kontrole i korišćenja
informacije o tipu pri kompajliranju
Koncept jakih tipova

Tip podatka određuje
Skup vrednosti
 Format registrovanja podataka
 Skup operacija koje se mogu izvršavati nad podacima
 Skup funkcija za uspostavljanje veza sa drugim
tipovima podataka – konverziju



Sve definicije tipa moraju da budu javne,
eksplicitne. Nisu dozvoljene implicitne definicije
tipova.
Objektu se definiše samo jedan tip
Koncept jakih tipova




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 transformaciju tipa.
Koncept jakih tipova
x: real;
i: integer;
b: Boolean;
c: char;
i := 'A';
x := i + 5.0;
c := 10;
i := i or 7;
-- x je tipa real;
-- i je celobrojnog tipa;
-- b je logičkog tipa;
-- c je znakovnog tipa;
-- nekorektno;
-- nekorektno
-- nekorektno
-- nekorektno, jer je logička operacija
upotrebljena nad vrednostima
celobrojnog tipa;
Koncept jakih tipova




Povećana pouzdanost, dokumentarnost i jasnoća
programa
Korektnost programa obezbeđena je na
apstraktnom nivou
Ako se koriste transformacije tipova, one su
namerne i potrebne
Informacija o tipu se može koristiti u fazi
kompajliranja programa i tako postaje faktor
pouzdanosti programa
Ekvivalentnost tipova



Bitna kod koncepta jakih tipova podataka
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
Koriste se pravila za ekvivalentnost tipova
Strukturna ekvivalentnost
 Imenovana (eksplicitna) ekvivalentnost

Strukturna ekvivalentnost


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

Leva i desna strana eksplicitno pripadaju istom
tipu
var
i,u : real;
u := i;


Veća pouzdanost jezika, koristi se kod novijih
jezika
Zahteva korišćenje funkcija za transformisanje
tipova
Sistem tipova podataka






Elementarni tipovi (Integer, Float, Char,
Boolean)
Izvedeni tipovi
Podtipovi
Strukturni tipovi (File, Record, Array)
Dinamički tipovi
Apstraktni
Elementarni tipovi podataka



Tipovi podataka za rad sa elementarnim
numeričkim podacima (celi i realni brojevi)
Tipovi za rad sa znakovnim podacima
(pojedinačni znaci ASCII koda ili UNICODE)
Tipovi za rad sa logičkim vrednostima (true i
false)
Celobrojni tipovi



Postoje u skoro svim programskim jezicima
Jedan ili više tipova za predstavljanje celih
brojeva u različitim opsezima
Ada
INTEGER'FIRST - donja granica opsega
 INTEGER'LAST - gornja granica opsega
 Pored osnovnog tipa INTEGER postoje i prošireni i
skraćeni celobrojni tipovi LONG_INTEGER i
SHORT_INTEGER

Uvedeni celobrojni tipovi - Ada
Celobrojni tipovi - operacije
FLOAT tip



Predstavljanje podataka iz skupa realnih brojeva
u formatu pokretnog zareza (floating point)
Format REAL (Pascal, Fortran) i FLOAT (Ada)
Dozvoljene standardne aritmetičke operacije i
operacije poređenja
FLOAT - Ada




type MOJ_FLOAT is digit 8 range -1E 30 .. 1 E 30;
type MOJ_FLT is digit 6 range -1E 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
Obuhvata vrednosti TRUE i FALSE
Logičke operacije not, and, or, xor
Ada – diskretan tip, uređen skup vrednosti
BOOLEAN'FIRST = FALSE
 BOOLEAN'SUCC(FALSE) =TRUE
 BOOLEAN'LAST = TRUE
 BOOLEAN'PRED(TRUE) = FALSE

Znakovni tip




Nosi naziv CHARACTER ili CHAR
Standardni skup ASCII karaktera i određene
operacije nad njima
Uređenost skupa znakova u skladu sa ASCII
tabelom, relacije poređenja
Ada – diskretni tip
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






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
Jačanje pozitivnih efekata osnovnog koncepta
Slabljenje ograničenja i negativnih posledica
osnovnog koncepta jakih tipova
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 direktne veze
Izvedeni tipovi podataka



type INDEX is new INTEGER;
type DUZINA is new FLOAT;
type POVRSINA is new FLOAT;
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
Eksplicitna ekvivalentnost tipova – stroža
ograničenja koja u pojedinim slučajevima može da
poremeti logičko razdvajanje kao osnovni koncept
izvedenih tipova
Izvedeni tip ne mora da nasleđuje sve atribute i
operacije, neke može i da transformiše
Predefinisanje operatora (overloading) – koncept
sve više prisutan u programskim jezicima (Ada,
C++)
Ograničenje opsega vrednosti


Čest koncept izvedenih tipova – ograničavanje
skupa vrednosti roditeljskog tipa koje obuhvata
izvedeni tip
Koristi se uglavnom kod diskretnih tipova gde
se skup vrednosti koje se nasleđuju definiše kao
diskretni dijapazon



type INDEX is new INTEGER range 1 .. 100;
Zaštita od izlaska iz zadatog skupa vrednosti
Povećana pouzdanost programa
Podtipovi




Definisanje podtipova nad kojima je nešto
slabije dejstvo zakona jakih tipova podataka
Podtipovi su manje nezavisni od roditeljskog
tipa u odnosu na izvedene tipove istog
roditeljskog tipa
Mogu direktno da komuniciraju sa roditeljskim
tipom i drugim njegovim podtipovima, nezavisni
su samo u odnosu na druge “strane” tipove
Ograničenje opsega vrednosti

subtype MINT is INTEGER range -100 .. 100;
Podtipovi
Diskretni tipovi podataka





Konačan, diskretan, uređen skup vrednosti u
kome je definisana relacija poretka
Upotreba zajedničkih funkcija i atributa u ovoj
grupi tipova
U diskretne tipove svrstavaju se svi celobrojni
tipovi i svi tipovi sa diskretnim skupom
vrednosti (logički, znakovni)
Tipovi nabrajanja (enumerated)
Intervalni tipovi
Diskretni tipovi podataka - Ada





type BOJA is (crvena, bela, zelena, plava);
type DANI is (ponedeljak,utorak,sreda,cetvrtak,
petak, subota,nedelja);
type MESEC is
(jan,feb,mart,april,maj,juni,juli,avgust,sep,okt,
nov,dec);
type STATUS is (ON,OFF);
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
Primer:
type BOJA is (crvena, bela, zelena, plava);
 crvena < bela; bela < zelena; zelena < plava

Atributi diskretnih tipova - Ada







DANI'FIRST - vrednost je ponedeljak;
DANI'LAST - daje vrednost nedelja;
DANI'POS (ponedeljak) - vrednost je 0;
DANI'POS (utorak)
- daje vrednost 1;
DANI'VAL(4) - daje vrednost petak;
DANI'VAL(1) - daje vrednost utorak;
DANI'VAL(7) - greška, izvan opsega vrednosti;
Atributi diskretnih tipova - Ada



TIP'SUCC(x) Ekvivalentno je sa:
TIP’VAL(TIP’POS(x)+1)
DANI'SUCC(nedelja) - dan posle nedelje;
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);
enum DANI (ponedeljak,utorak,sreda,cetvrtak,
petak,subota,nedelja);
enum MESEC (jan,feb,mart,april,maj,juni,juli,
avgust,sep,okt,nov,dec);
enum STATUS (ON,OFF);
Anonimni tipovi




Kod jezika sa jakim tipovima obično postoji
mogućnost anonimnih definicija tipova podataka
Slabljenje zakona eksplicitne ekvivalentnosti i
omogućavanje strukturne ekvivalentnosti
Definisanje promenljivih bez eksplicitnog
navođenja imena tipa podataka
Opšti koncept za sve korisničke tipove u
jezicima koji dozvoljavaju uvođenje korisničkih
tipova podataka
Anonimni tipovi

Umesto:
type KLJUC (on, off);
I,J : KLJUC;

Koristi se:
VAR
Index : [1 .. 100];
Raz : [-1 .. 1];
Pitanja
???
Pitanja - ponavljanje









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?