44
Concepte fundamentale ale limbajelor de programare Tipuri de date Curs 07 conf. dr. ing. Ciprian-Bogdan Chirila

Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Concepte

fundamentale ale

limbajelor de

programareTipuri de date

Curs 07

conf. dr. ing. Ciprian-Bogdan Chirila

Page 2: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Cuprins

tipuri predefinite

tipuri definite de programator

tipuri scalare

tipuri de date structurate

produs cartezian

proiectie finita

secventa

recurenta

reuniuni variabile

multimi

tipul pointer

compatibilitati de tip

Page 3: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri de date

un set de obiecte si

un set de operatii pentru a

crea

distruge

modifica

tipuri predefinte

un anumit set de obiecte specificat la definirea limbajului

constructie unitara a obiectelor in limbajele de

programare avansate

structuri

operatii

Page 4: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri predefinite

este baza sistemului de tipuri intr-un limbaj

reflecta functionarea sistemului la nivel hardware

valorile si operatiile sunt in relatiie cu datele de nivel scazut

si cu operatiile executate de masina

Page 5: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri predefinite

tipuri de baza numerice

int in Algol 68

integer in Pascal

real in Algol 68 and Pascal

float in Ada

short int, long int, double

operatii matematice

+,-,*,/

pentru valori intregi si reale

operatori polimorfici – prin supraincarcare

Page 6: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri predefinite

tip enumerare booleana cu valorile

true

false

bool in Algol 68

boolean in Pascal, Java, Ada

char in Algol 68, Java, Pascal

character in Ada

ASCII

EBCDIC

Extended Binary Coded Decimal Interchange Code

Page 7: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri definite de

programatori

cea mai puternica caracteristica a unui sistem de tipuri

este sa poti crea tipuri noi

cu nume

type tab=array[1..10] of integer;

anonime

var t:array[1..10] of integer;

Page 8: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri scalare

obiectele de tip scalar sunt simple constante ce nu mai

pot fi descompuse

intregii, valorile reale, caracterele, valorile booleene sunt

de tip scalar

programatorul poate sa isi defineasca propriile tipuri

scalare

Page 9: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipul enumerare

utilizatorul specifica intr-o lista valorile tipului

type days=(Sunday, Monday, Tuesday, Wednesday,

Thursday, Friday, Saturday);

a inceput in limbajul Pascal

este prezent in majoritatea limbajelor de programare

Page 10: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Alte tipuri scalare

sunt importante din punct de vedere al portabilitatii

in Ada

type eps is digits 10;

un numar in virgula flotanta cu un numar de minimum 10 cifre

zecimale semnificative

precizia va fi mentinuta/asigurata indiferent de platforma

Page 11: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Subdomenii

In Pascal

type working_day=Monday..Friday;

small_caps=’a’..’z’;

index=0..90;

In Ada

type eps_1 is new eps range -1.0 .. 1.0;

Page 12: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipuri de date structurate

limbajele de programare ofera mecanisme pentru

descrierea si manipularea structurilor de date ce contin

scalari

alte structuri

mecanismul de structurare

permit crearea de structuri pornind de la componente

mecanismul de selectie

permite accesul la o componenta a structurii

Page 13: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Produsul Cartezian

obiecte structurate

compuse din numar fix de componente

componentele au tipuri diferite

tipul obiectului structurat este produsul Cartezian al

multimilor tipurilor corespunzatoare componentelor

daca tipurile componentelor sunt reprezentate de

multimile C1, C2, C3,…, Cn

fiecare element al structurii va fi

T=C1 x C2 x … x Cn

Page 14: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Produsul cartezian

e numit si

articol

structuta

In Pascal and Ada - record

In Algol 68 and C – structura

se descrie tipul fiecarei componente

a selecta o componenta inseamna a specifica obiectul si

numele campului selectat

Page 15: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Exemplu de produs

cartezian

Ada

type complex is

record

re,im:real;

end record;

-----------------------------

c:complex;

-----------------------------

c.re:=1;

c.im:=0;

-----------------------------

c:=(1,0);

Page 16: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Proiectia finita

este o functie definita pe TI cu valori in multimea TE

TI – tip index

TE – tip element

var a:array[1..100] of char;

este o proiectie a multimii {1,2,3,…,100} pe multimea

caracterelor

componentele tabloului numite elemente sunt selectate

prin mecanismul de indexare

la adresa de inceput a tabloului reprezentate de nume se

aduna un index pentru a selecta un anumit element

Page 17: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Proiectia finita

a[k]

selecteaza elementul cu indexul k din tabloul a

poate fi vazut ca o aplicare a functiei a cu argumentul k

rezultand valoarea elementului

In Algol, Ada

selectia poate fi facuta pe un subinterval nu doar pe un

singur element

a[10..19]=(0,1,2,3,4,5,6,7,8,9);

Page 18: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Momentul cheie de legare a

multimii de indecsi

legarea la momentul compilarii

se scrie codul ce stabileste multimea index

nu poate fi modificat in timpul executiei

este cazul limbajelor Fortran, C, Pascal

legarea la momentul rularii

in momentul creerii obiectului tablou

dimensiunea poate fi necunoscuta la compilare

poate depinde de alte variabile de program

este cazul limbajelor Algol 60, Basic sau Ada

in limbajele cu alocare dinamica a memoriei cum ar fi C-ul

pointerii sunt folositi pentru accesul tablourilor dinamice

Page 19: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Momentul cheie de legare a

multimii de indecsi

Flexibil la rulare

multimea indecsilor poate fi modificata

dimensiunea tabloului poate fi modificata

este cazul limbajelor Snobol4 si Algol68

Page 20: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Secventa

este o structura formata dintr-un numar aleator de

componente de acelasi tip

o componenta poate fi adaugata oricand

nelimitata virtual

in limbajele de programare

siruri de caractere

fisiere secventiale

Page 21: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Secventa

pentru sirurile de caractere

In PL/I, Ada, Basic, Pascal

cand se declara un sir de caractere lungimea sa maxima

trebuie sa fie cunoscuta

Operatiii

independente de limbajul de programare

Catenarea

selectia primului caracter

selectia ultimului caracter

selectia unui subsir

etc.

Page 22: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Recursivitatea

un tip T este recursiv daca unul din componentele sale

este de tip T

exemple tipice sunt

Listele

Arborii

obiectele pot avea forme si marimi arbitrare

Page 23: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Recursivitetea

in pseudocod

type node=record

info : info_type;

left, right : node;

end;

Page 24: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Recursivitatea

in practica

se utilizeaza pointerii

un obiect recursiv de tipul T trebuie sa aiba o referinta la alt

obiect de tip T

nu obiectul in sine

C, Pascal, Ada, Algol 68

in Lisp listele si arborii nu an nevoie de pointeri

type node=record

info : info_type;

left, right : ^node;

end;

Page 25: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Reuniuni variabile

permit specificarea de structuri ce pot avea mai multe

alternative

multimea tuturor structurilor posibile reprezinta reuniunea

multimilor alternative

Page 26: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Reuniuni variabile

In C

union {

float radius;

float rectangle_sides[2];

float triangle_sides[3];

} shape;

Page 27: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Reuniuni variabile

la un moment dat o variabila de tip shape poate avea

doar

float radius sau

two float array sau

three float array

intr-un articol toate campurile coexista

intr-o reuniune va fi doar un camp din multimea de

campuri alternative

Page 28: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Reuniuni variabile

uniuni mai evoluate sunt in limbajele Pascal si Ada

uniunea este parta a unui articol cu variante

type figure=(circle, triangle, rectangle);

shape=record

length, area : real;

case shape : figure of

circle : (radius : real);

rectangle : (rectangle_sides:array[1..2] of real);

triangle : (triangle_sides:array[1..3] of real);

end

Page 29: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Reuniuni variabile

sunt periculoase

trebuie utilizata doar varianta corecta

toata responsabilitatea este lasata pe umerii

programatorului

in cazul limbajului C

nu sunt posibile varificari la compilare

nu sunt posibile verificari la rulare

cazurile limbajelor Ada and Pascal vor fi detaliate mai

tarziu

Page 30: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Multimi

T este tipul de baza

variabilele de tip set(T) pot avea ca valoare orice

submultime generata de valorile lui T inclusiv multimea

vida

operatii

reuniune

intersectie

diferenta

teste de incluziune

teste de apartenenta

Page 31: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Multimi

Pascal

are un tip multime

cand un astfel de mecanism nu exista

poate fi implementat de programator prin

tablouri de valori Booleene

tablouri de biti

liste

arbori

Page 32: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Tipul pointer

un pointer este o referinta la un obiect

este mijlocul uzual de a implemeta structuri de date

recursive

in C este singurul mod de a transmite parametrii prin

adresa

Page 33: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Problemele cu pointerii

violari de compatibilitati de tip

pseudonime

referinte false

Page 34: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Violari de compatibilitati de

tip

in PL/I o variabila pointer poate referi orice obiect

la compilare este imposibil de stiut tipul obiectului si de a

face verificarile de tip corespunzatoare

verificarea de tip la rulare este posibila dar este scumpa

in Pascal si Ada pointerii au asignat tipurile de obiecte pe

care ii poate referi

in C avem pointeri generici void*

Page 35: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Pseudonime

un acelasi obiect este referit prin mai multe nume

prezenta loc in cod afecteaza lizibilitatea

var a,b:^t;

a:=new(t);

b:=a;

a si b sunt pseudonime

Page 36: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Referintele false

sunt acelea care refera un obiect ce nu mai este in viata

este o eroare de acces

var a,b:^t;

a:=new(t);

b:=a;

dispose(a);

b este o referinta false chiar daca a este atribuit cu

valoarea nil

Page 37: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Referintele false

in C

int *p;

void f()

{

int x;

p=&x;

}

f();

Page 38: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Compatibilitati de tipuri

T1 si T2 sunt compatibile daca:

o valoare de tipul T1 poate fi asignata la o variabila de

tipul T2

si viceversa

un parametru de tip T1 corespunde la un parametru

actual de tip T2

si viceversa

Page 39: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Exemplu

type

t=array[1..100] of integer;

t1=array[1..100] of integer;

t2=t1;

var

a,b:array[1..100] of integer;

c:t;

d:t;

e,f:t1;

g:t2;

Page 40: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Compatibilitati teoretice de

tipuri

echivalenta de nume

echivalenta structurala

Page 41: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Echivalenta de nume

cand doua variabile

sunt declarate impreuna sau

utilizeaza acelasi nume pentru tip

in exemplu

a si b sunt compatibile

c si d sunt compatibile

e si f sunt compatibile

a sau b cu c sau d nu sunt compatibile

Page 42: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Echivalenta structurala

doua variabile au tipuri compatibile daca au aceeasi

structura

verificarea de tipuri presupune inlocuirea numelui tipului

cu definita acestuia

este un proces recursiv

se termine cand toate tipurile definite de utilizator sunt

inlocuite

doua tipuri sunt compatibile daca au aceeasi descriere

in exemplul nostru

a, b, c, d, e, f, g sunt toate compatibile

Page 43: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Comparatii

echivalenta structurala

simpla la implementare

echivalenta de nume

presupune operatii complexe pentru a determina

compatibilitatea de tip

permite redefinirea abstractiunilor

type

price=integer;

students_no=integer;

cost:price;

effective:student_no;

Page 44: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp07.pdf · Violari de compatibilitati de tip in PL/I o variabila pointer

Comparatii

Variabilele cost si effective

sunt echivalente structural

atribuirea de valori de la cost la effective sau invers reprezintao eroare semantica

echivalenta structurala

Algol 68

C - structurile si uniunile

sunt tipuri diferite desi au structuri identice

echivalenta de nume

Ada

Pascal

echivalenta de tip nu este specificata,

depinde de implementare