26
1 Rappresentazione delle informazioni Rappresentazione delle informazioni • L’informatica si occupa di rappresentare ed elaborare informazioni diverse: numeri caratteri audio immagini video Rappresentazione dei caratteri I caratteri: ASCII standard •I simboli o caratteri appartenenti ad un alfabeto vengono codificati (cioè “rappresentati”) mediante sequenze di bit: una diversa sequenza per ciascun diverso carattere. • Uno dei codici più noti e usati è il codice ASCII (American Standard Code for Information Interchange), usa una sequenza di 7 bit per ciascun carattere: • ci sono 128 (=2 7 ) sequenze diverse, utilizzate anche per lettere, segni di punteggiatura, cifre decimali, ecc.

Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

1

Rappresentazione delle informazioni

Rappresentazione delle informazioni

• L’informatica si occupa di rappresentare ed elaborare

informazioni diverse:

• numeri

• caratteri

• audio

• immagini

• video

Rappresentazione dei caratteri

I caratteri: ASCII standard

• I simboli o caratteri appartenenti ad unalfabeto vengono codificati (cioè“rappresentati”) mediante sequenze di bit: unadiversa sequenza per ciascun diverso carattere.

• Uno dei codici più noti e usati è il codiceASCII (American Standard Code forInformation Interchange), usa una sequenza di7 bit per ciascun carattere:• ci sono 128 (=27) sequenze diverse, utilizzate

anche per lettere, segni di punteggiatura, cifredecimali, ecc.

Page 2: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

2

I caratteri: ASCII esteso

• Dato che l’unità elementare di informazionenei calcolatori è il byte (= 8 bit), si è passati adusare, quasi sempre, il codice ASCII esteso,che usa una sequenza di 8 bit per ciascuncarattere degli alfabeti occidentali:

• ci sono 256 (=28) sequenze diverse, utilizzateanche per vocali accentate e altre lettere speciali(es. ß tedesca, ç francese)

• le sequenze con la prima cifra uguale a zerocoincidono con il codice ASCII.

(Appendice G)

I caratteri: ASCII esteso

• La codifica è: posizione n°°°°

il primo carattere 00000000 0

il secondo 00000001 1

…… ….

l’ultimo 11111111 255

• La sequenza di simboli Ciao viene codificata inASCII nel modo seguente:

C i a o

01000011 01101001 01100001 01101111

n° 67 105 97 111

Le lettere sono rappresentabili in 7 bit.

I caratteri: ASCII esteso

• I primi 32 caratteri del codice ASCII (con codice da0 a 31) sono caratteri di controllo:• 9 tabulatore ’\t’

• 10 nuova riga ’\n’

• 13 invio ’\r’

• I caratteri da 32 a 127 sono caratteri stampabili:• 32 spazio ’ ’

• da 48 a 57 caratteri numerici, le cifre decimali ’0’, ’1’…

• da 65 a 90, da 97 a 122 caratteri alfabetici (maiuscoli eminuscoli)

• da 33 a 47, da 58 a 64, da 91 a 96, da 123 a 127 caratteri diinterpunzione e simboli speciali.

I caratteri: Unicode

• Per rappresentare i segni grafici utilizzati datutti gli alfabeti del mondo servono molti piùsimboli diversi

• codifica Unicode http://www.unicode.org

• usa una sequenza di 16 bit per ciascunsegno grafico:

• ci sono 65536 (= 216) sequenze diverse

• le sequenze con le prime otto cifre uguali a zerocoincidono con il codice ASCII esteso.

Page 3: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

3

I caratteri (codice Unicode)Rappresentazione delle

informazioni• Il linguaggio Java utilizza Unicode come

insieme di simboli; in ogni linguaggio diprogrammazione i simboli servono percostruire le unità lessicali.

• Ogni informazione che vogliamorappresentare è caratterizzata da un valore e daun suo tipo (tipo di dato). Non semprepossiamo o vogliamo rappresentaredirettamente il valore, ma vogliamo poterciriferire ad esso tramite un nome.

Astrazione

Astrazione

• L’evoluzione dei linguaggi di programmazione(basso ad alto livello) ha portatoall’introduzione del concetto di variabile: lalocazione di memoria viene “nascosta”all’utente, che vi accede tramite il nome dellavariabile.

• Le operazioni che si possono fare sullavariabile dipendono dal suo tipo: l’utente nonsa come avviene realmente la somma tra duenumeri interi (reali) o il loro confronto.

• Si ha una astrazione sul dato e sul suo tipo.

Page 4: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

4

Astrazione

• L’evoluzione successiva dei linguaggipermetterà all’utente di inventare dei nuovitipi di dati, dei nuovi concetti.

• Tipo di Dato Astratto

1. è un insieme di elementi chiamato dominio

2. ha un nome

3. possiede delle funzioni che operano suldominio

4. possono esserci costanti che locaratterizzano.

Variabile e Tipi base

Variabile e Tipi base

• Nei corsi di matematica quando scriviamo

x ∈∈∈∈ ℝℝℝℝ

e diciamo “ x è una variabile reale” intendiamodire che x è un nome che indica un elementogenerico dell’insieme ℝℝℝℝ dei numeri reali.

• Nei corsi di informatica con “x è una variabilereale” intendiamo dire che x è un nome cheindica una posizione di memoria che conterràun elemento generico di R (con R⊂ℝ⊂ℝ⊂ℝ⊂ℝ).

Variabile e Tipi base

• ℝℝℝℝ insieme dei numeri reali (infinito econtinuo).

• R insieme dei numeri reali rappresentabilinel calcolatore (finito e discreto).

• La posizione di memoria è caratterizzata daltipo, che è l’insieme da cui la variabile puòestrarre i suoi valori

3 reale è diverso da 3 intero

Page 5: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

5

Variabile e Tipi base

• Ogni linguaggio ha dei tipi base perrappresentare informazione numerica e nonnumerica (caratteri, valori logici).

• Anche il linguaggio Java possiede dei tipibase che non sono tipi di dato astratto, dalmomento che sono predefiniti: non sonoconcetti nuovi, ma sono concetti fondamentalisui quali i concetti nuovi si baseranno.

Variabile e Tipi base

• Tipi base o primitivi (par. 2.1, 2.5)

• numeri interi byte, short, int, long

• numeri reali float, double

• caratteri char

• logici boolean

• Definizione di una variabile

• Sintassi:

nometipo nomevariabile;

nometipo nomevar1, nomevar2;

Variabile e Tipi base

• Esempi.

int n, numeroanni;

int dimensione;

double area, saldo;

boolean errore;

char lettera;

Variabile e Tipi base

• Le operazioni che possiamo fare su unavariabile sono:

• accesso : individuare la posizione di memoriaed estrarre il valore (lettura)

• assegnamento : individuare la posizione dimemoria e introdurre il valore (scrittura)

Page 6: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

6

Variabile e Tipi base

• Nelle istruzioni di un programma, si ha:

• accesso: quando la variabile compare in unaistruzione e se ne utilizza il valore

• assegnamento: quando il valore le vieneattribuito:

• lettura del valore in una acquisizione di datidall’esterno

• in una istruzione di assegnazione (par. 2.2)

Assegnazione

Assegnazione

• Sintassi: (par. 2.2)

nomevariabile = espressione;

• Esempi.

//con riferimento alle dichiarazioni precedenti

n = 3+5;

area = 25.67;

saldo = 20000;

lettera = 'x';

lettera = x ; //Errore

Assegnazione

• Quando una variabile viene definita le vieneassociata un’area di memoria del tipoattribuito con la definizione:

int a;

double b;

a b

• Non si possono ridefinire le variabili.

Page 7: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

7

Assegnazione

• Quando si esegue l’assegnazione, il valoreviene inserito nell’area corrispondente

a=3;

b=3;

a b

• Le due aree di memoria sono di tipo diverso ela sequenza di bit contenuta è diversa, anchecon uguale numero di bit.

3 3

Assegnazione

• Il simbolo per l’istruzione di assegnazione è=

• NON lo si deve confondere con un simbolomatematico di uguaglianza o di confronto.

• Il suo significato è:• il valore dell’espressione a destra del

simbolo = viene inserito nella locazionecorrispondente alla variabile che sta asinistra.

• Nel Pascal, il simbolo è := proprio per distinguerlodal simbolo di uguaglianza

Assegnazione

• Definizione e assegnazione in un’unicaistruzione: si può eseguire una assegnazioneanche in fase di definizione:

int k=25;

• La definizione di una variabile può essere fattain un qualunque punto del programma madeve essere sempre prima del suo uso.

Assegnazione

• Osserviamo queste due assegnazioni eosserviamo che la variabile a è a destra o asinistra del simbolo di assegnazione: ciòimplica un diverso significato per l’utilizzo dia:

a=5; //assegnamento su a (scrittura)

//a è a sinistra

k=a; //accesso per a (lettura)

//a è a destra

Page 8: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

8

Assegnazione

• Osserviamo queste assegnazioni:a = 5; //assegnamento

a = a + 1; /*accesso eassegnamento*/

• Quanto vale a?

a = a + 1;

• In alcuni linguaggi di pseudocodifica, il simbolo perl’assegnazione è ←

5 6

Assegnazione

• Nei primi linguaggi le variabili avevano per iltipo una definizione di default. In Java unavariabile può essere usata solo se è stataprecedentemente definita, ossia se è statadichiarata con il suo tipo.

• Esempio.

int c=7;

c1=c; //Errore: c1 non è definita

Il compilatore segnala:

cannot find symbol

Assegnazione

• Diversamente da altri linguaggi, in Java unavariabile definita in un metodo può essereusata (accesso) solo se è stataprecedentemente inizializzata, ossia se ha unvalore.

• Esempio.

int c2;

a=c2; //Errore: c2 non ha valore

Il compilatore segnala:

variable c2 might not have been initialized

Assegnazione

• Nell’assegnazione si deve rispettare il tipo didato.

• Esempio.

int m;

double y = 23.75;

m = y; //Errore: m è intero

Il compilatore segnala:

possible loss of precision

Page 9: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

9

Tipi base

Tipo Intero

• Si rappresenta un intervallo limitato, quindifinito, dei numeri interi (par. 4.1)

• Dominio: Z ⊂⊂⊂⊂ ℤℤℤℤ

• Il nome del dominio varia a seconda delnumero di bit destinati alla rappresentazione: sihanno nomi diversi e anche insiemi diversi

bit byte

byte 8 1

short 16 2

int 32 4

long 64 8

Tipo Intero

• Il tipo di rappresentazione su n bit è

• il primo è il bit del segno, i successivi n-1 sonoper il numero.

• Dal momento che ogni bit assume due valori(0,1), avendo a disposizione n-1 bit si possonorappresentare 2n-1 valori diversi.

1 n-1

Tipo Intero

• Per il segno del numero si assume:

0 per il positivo 1 per il negativo

• Il numero 0, che non ha segno, viene scrittocon il bit del segno 0 ed è rappresentato da unasequenza di bit tutti nulli.

• In tale modo, lo zero occupa un postonell’intervallo dei numeri positivi.

Page 10: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

10

Tipo Intero

• Si vuole rappresentare la struttura algebricadell’insieme ℤℤℤℤ dei numeri interi:

(ℤℤℤℤ , +)

ℤℤℤℤ insieme + operazione

• esiste un elemento neutro, lo zero

• ogni numero ha un inverso, chiamato opposto

• L’insieme Z è dato dall’intervallo

[-2n-1, 2n-1-1]

Tipo Intero

• I vari domini per gli interi sono:

(Cap.4 Tabella 1)

• byte n=8 [-27, 27-1] = [-128, 127]

• short n=16 [-215, 215-1] = [-32768, 32767]

• int n=32 [-231, 231-1]

• long n=64 [-263, 263-1]

Tipo Intero

• Le costanti che caratterizzano il dominio sono gli estremi dell’intervallo: -2n-1 e 2n-1-1.

• In Java esistono dei nomi che rappresentanoquesti estremi dell’intervallo, e sono legati alnome del tipo:

• Byte.MIN_VALUE Byte.MAX_VALUE

• Short.MIN_VALUE Short. MAX_VALUE

• Integer.MIN_VALUE Integer. MAX_VALUE

• Long.MIN_VALUE Long. MAX_VALUE

Tipo Intero

• Le operazioni che possiamo fare sono:

+ somma

−−−− sottrazione

∗∗∗∗ prodotto

/ divisione (troncata)

% resto della divisione

• Operatori di confronto:

< > <= >= == !=

Page 11: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

11

Tipo Intero

• La divisione tra interi è troncata.

• Esempi.

32 /64 e 1 /2 in aritmetica sono frazioniequivalenti

32 / 64 è 0 nell’aritmetica del calcolatore, perchéil risultato deve essere intero

Se si vuole ottenere il valore corretto, si devonousare costanti reali, indicate dal punto decimale :

32. /64 ⇒⇒⇒⇒ 0.5

Tipo Intero

• Analogamente con le variabili:

int a,b;

a/b è troncata

double c,d;

c/d è reale, con glieventuali decimali

• Si può volere una divisione troncata e averequoziente e resto:

7 /4 ⇒⇒⇒⇒ 1 7 %4 ⇒⇒⇒⇒ 3

Tipo Reale

Tipo reale

• Si rappresenta un intervallo limitato e finitodei numeri reali

• Dominio: R ⊂⊂⊂⊂ ℝℝℝℝ

• Il nome del dominio varia a seconda delnumero di bit destinati alla rappresentazione:si hanno nomi diversi e anche insiemi diversi

bit byte

float 32 4 semplice precisione

double 64 8 doppia precisione

Page 12: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

12

Tipo reale

• I numeri reali vengono chiamati numeri invirgola mobile, floating point.

• Secondo la notazione anglosassone laseparazione tra parte intera e parte decimale èil punto (nella notazione italiana è la virgola).

• Quando si moltiplica o si divide un numero perla base 10, la posizione del punto si sposta:

224.35 = 0.22435∗103 = 2243.5 ∗10-1

virgola fissa

Tipo reale

• La notazione scientifica viene scritta in Javautilizzando la lettera E (esponente), cherappresenta il prodotto per la base 10, seguitada un numero intero

0.22435∗103 0.22435E3

2243.5 ∗10-1 2243.5E-1

• Per la parte intera non si usa la separazionecon il punto (in alto) per gruppi di cifre:

non 12 ˙̇̇̇354 ma 12354

Tipo reale

• I numeri reali sono rappresentati in modulo esegno: significa che un numero a e il suoopposto –a hanno di diverso solo il bit delsegno.

• Il primo bit è il bit del segno ed è:

0 per i positivi 1 per i negativi

• I rimanenti bit rappresentano la mantissa el’esponente:

3.25 = 0.325 ∗∗∗∗ 10 1

0.325 mantissa

1 esponente riferito alla base 10

Tipo Reale

• Il tipo di rappresentazione per i float è con

n = 32 bit

1 8 23

• il primo è il bit del segno, i successivi 8 sonoper l’esponente, i successivi 23 per lamantissa.

• Per i double, n = 64, la ripartizione è:

1(segno) 11(esponente) 52(mantissa)

Page 13: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

13

Tipo Reale

• Si vuole rappresentare la struttura algebricadell’insieme ℝℝℝℝ dei numeri reali:

(ℝℝℝℝ, +, ∗)

ℝℝℝℝ insieme + ∗ operazioni

• esiste un elemento neutro per la somma, lo zero 0

• l’ inverso di a per la somma, opposto -a

• esiste un elemento neutro per il prodotto, l’uno 1

• l’ inverso di a≠≠≠≠0 per il prodotto, reciproco 1/a

Tipo Reale

• Oltre agli estremi dell’intervallo dirappresentazione (il massimo reale e il suoopposto), dobbiamo conoscere quale è il piùpiccolo reale positivo: il più piccolo realedistinguibile dallo 0.

• Avendo a disposizione un numero finito di cifre inumeri reali minori del minimo positivo, sonorappresentati dallo 0.

• Le cifre decimali a disposizione:

• float: 6 cifre semplice precisione

• double: 15 cifre doppia precisione

Tipo Reale

• Le costanti che caratterizzano il dominio sono il minimo positivo e il massimo reale.

• Anche per i reali le costanti significative sono rappresentate da dei nomi:

• Float.MIN_VALUE Float.MAX_VALUE

• Double.MIN_VALUE Double.MAX_VALUE

Tipo Reale

• I numeri reali della macchina rappresentanoesattamente se stessi e rappresentano inmaniera approssimata un intervallo di numerireali.

• I numeri reali della macchina hanno tutti unnumero finito di cifre decimali (6, 15),pertanto tutti i numeri con un numeromaggiore di cifre non possono essererappresentati esattamente.

Page 14: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

14

Tipo Reale

• Esempio.

x = 0.123456

y = 0.123457 x, y ∈ R

Se abbiamo a disposizione 6 cifre decimali, x ey sono rappresentati esattamente, mentre

αααα = 0.123456 12345872

ββββ = 0.123457 24672178

saranno approssimati con x e yrispettivamente.

Tipo Reale

• I numeri reali sono approssimati perarrotondamento.

• Se la cifra che si trascura è 0 1 2 3 4 allora ilnumero viene approssimato al “realemacchina” più piccolo (per difetto); se la cifraè 5 6 7 8 9 il numero è approssimato al “realemacchina” più grande (per eccesso):

αααα’ = 0.123456 82345872

è approssimato da y.

Tipo Reale

• I numeri reali della macchina non sonodistribuiti in maniera uniforme sulla rettareale: sono più fitti verso il minimo reale e piùradi verso il massimo reale.

• Esempio.

a = 0.00123456 140212

b = 123456 140212.

a = 0.123456 140212 ∗ 10-2

b = 0.123456 140212 ∗ 1012

Tipo Reale

• I numeri a e b vengono approssimati con

a1 = 0.123456 * 10-2

b1 = 0.123456 * 1012

• La settima cifra di a e b (1) che si trascuraha una grandezza diversa:

10-9 in a e 105 in b.

• Il rappresentante a1 è “vicino” ad a mentre ilrappresentante b1 è “lontano” da b.

Page 15: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

15

Tipo Reale

• I numeri reali della macchina sono pertanto deirappresentanti di intervalli, perchéapprossimano (per eccesso e per difetto)infiniti numeri reali (che “non ci stanno”):

• y è il rappresentante di

αααα’ αααα’ < y : eccesso

ββββ ββββ > y : difetto

• E se ci servissero tutte le cifre di αααα’ e di ββββ ?

Tipo Reale

• Nell’esempio visto abbiamo utilizzato 6 cifredecimali e quindi la semplice precisione; seabbiamo bisogno di più cifre utilizziamo ladoppia precisione: definiamo le variabili con iltipo double, con il quale si rappresentano 15decimali.

• In Java useremo sempre il tipo double per i realie il tipo int per gli interi.

Tipo Reale

• L’insieme dei numeri del tipo double contienel’insieme dei numeri di tipo float:

• I double

• rappresentano un insieme più grande:

• maxfloat~1038 maxdouble ~ 10308

• i rappresentanti sono più fitti

• tra due rappresentanti x e y (float) ci sono “molti,ma in quantità finita”, numeri esatti(rappresentanti) in doppia precisione

Tipo Reale

• Le operazioni che possiamo fare sono:

∗∗∗∗ prodotto

/ divisione

+ somma

−−−− sottrazione

• Operatori di confronto:

< > <= >= == !=

Page 16: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

16

Operatori e precedenza

• Il simbolo della divisione è / (par. 4.4)

no, invece (a+b) / 2

• Priorità degli operatori aritmetici:

(Appendice E)

• come nell’algebra, moltiplicazione e divisionehanno più alta priorità rispetto alla addizione esottrazione: nell’esempio precedente le parentesisono obbligatorie.

2

ba +

Operatori e precedenza

• Le due scritture producono diversi risultati:

1. (a+b) / 2 2. a+b / 2

1. prima si effettua la somma (a+b) e poi la divisione

2. prima si effettua la divisione b/2 e poi la somma

• A parità di priorità le operazioni vengonoeffettuate da sinistra verso destra:

3. a∗∗∗∗b/c = (a∗∗∗∗b)/c

Interi o reali?

• Perché ci sono due tipi di numeri: interi e ireali?

• I reali sono necessari per rappresentare valoricon i decimali: lira (intero), euro (reale).

• Se vogliamo avere una divisione non troncatadobbiamo usare i numeri reali.

• Gli interi sono “più efficienti”: occupano menospazio di memoria, le operazioni tra interi sonopiù veloci, e non producono errori diarrotondamento (maxint ha 10 cifre).

Tipo Carattere

Page 17: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

17

Tipo Carattere

• Il nome del tipo è

char 2 byte 16 bit

• L’insieme dei caratteri è UNICODE

• Esempi.

char s = '0';

char x = 'a';

• Operatori di confronto:

< > <= >= == !=

Tipo Logico

Tipo Logico

• Il nome del tipo è

boolean 1 bit

• L’insieme è BBBB = {false, true}

false 0 true 1

• Operatori logici

&& (and) || (or) ! (not)

Esercizio

• Problema. Calcolare la somma dei reciprocidei primi 10 numeri naturali.

• Soluzione.

• Dobbiamo calcolare la somma

1 + 1 /2 + 1/3 + ….. + 1/10

• Ricopiando questa somma in una istruzione,otterremo un risultato corretto?

Attenzione: 1 /2 = 0 mentre 1. /2 = 0.5

Page 18: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

18

Tipo di Dato Astratto

Tipo di Dato Astratto

• I tipi base non sono TDA: sono tipi predefintiche l’utente può usare ma non modificare enon può aggiungerne altri.

• Un TDA deve poter rappresentare un nuovoconcetto e si basa su concetti già esistenti.

• Nei linguaggi orientati agli oggetti si possonodefinire e realizzare dei nuovi concetti.

Insiemi numerici

• L’invenzione dei numeri risale a molti secolifa:

• Naturali ℕℕℕℕ = {1, 2, 3,…}

• Interi ℤℤℤℤ = {…., -3, -2, -1, 0, 1, 2, 3 ….}

• Razionali ℚℚℚℚ ={ a/b | a,b interi e b ≠ 0}

• Irrazionali es. π , e ,

• Reali ℝℝℝℝ visualizzati sulla retta

• Complessi ℂℂℂℂ visualizzati sul pianox2 +1 = 0 ha soluzione?

• Java non possiede il tipo di dato complex.

Tipo di Dato Astratto

• Vogliamo definire un nuovo concetto:Numero Complesso.

• Definizione.

• Indichiamo con ℂℂℂℂ l’insieme dei numericomplessi: ℂℂℂℂ = {(a,b) | a, b ∈ ℝ }

• Si vuole rappresentare la struttura algebricadell’insieme ℂℂℂℂ dei numeri complessi:

(ℂℂℂℂ , +, ∗)

ℂℂℂℂ insieme + ∗ operazioni

Page 19: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

19

Tipo di Dato Astratto

• Un numero complesso è definito come coppiadi reali (i numeri reali sono un concetto giàesistente):

z = (a, b)

• La forma algebrica di z ∈ ℂℂℂℂ è

z = a + i b

a parte reale

b parte immaginaria

i = (0, 1) unità immaginaria

Tipo di Dato Astratto

• Per costruire il nuovo concetto dobbiamodescrivere:

• la sua forma: quali sono i dati (campi)

• le sue proprietà: quali operazioni possiamofare (metodi)

• Il nuovo concetto viene descritto all’interno diuna classe:

class NuovoConcetto {

<descrizione della sua forma>

<descrizione delle sue proprietà>

} //fine classe

Tipo di Dato Astratto

• Per il TDA NumeroComplesso avremo:

class NumeroComplesso{//forma o campi

double parteRe;double parteIm;

//proprietà o metodi

/* somma, prodotto, sottrazione,divisione, ….*/

}//fine classe NumeroComplesso

Tipo di Dato Astratto• La classe NumeroComplesso dovrà sviluppare

gli algoritmi (metodi) che rappresentano leoperazioni con le quali si possono usare oggettidi tipo NumeroComplesso: somma, prodotto, …

• Ogni oggetto di tipo NumeroComplesso saràuna realizzazione del nuovo concetto e potràessere utilizzato tramite i suoi metodi.

• Un utente della nostra classe NumeroComplessopotrà utilizzare il metodo somma senzaconoscere i dettagli descritti nella classe, cosìcome noi eseguiamo la somma di due numeriinteri senza sapere come ciò avviene realmente.

Page 20: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

20

Oggetti, classi, metodi

Oggetti, classi, metodi

• Un oggetto è un’entità che si può usare

invocando (chiamando) i metodi della sua

classe. (par. 2.3)

• Un metodo è una sequenza di istruzioni che

può accedere ai dati dell’oggetto.

• I metodi della classe esprimono la funzionalità

dell’oggetto e la loro realizzazione è nascosta

all’utente.

Oggetti, classi, metodi

• Il concetto NuovoConcetto che si va adescrivere nella classe è solo un “prototipo”:ossia non è funzionante.

• Per sapere se il nostro concetto è realizzatocorrettamente è necessario provarlo.

• Si dovrà pertanto costruire un programma,con un metodo main, che costruisce l’oggetto everifica la correttezza dei suoi metodi.

Oggetti, classi, metodi

• Pertanto per ogni TDA costruiremo una“classe di collaudo”

class ProvaNuovoConcetto{//classe di prova

//per la classe NuovoConcetto

//metodo main{

/* istruzioni per creare e utilizzare

un oggetto di tipo NuovoConcetto */

}//fine main

}//fine classe ProvaNuovoConcetto

Page 21: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

21

Tipo di dati String

Tipo di dati String

• Una stringa è una sequenza di caratteri.

• Diversamente dai numeri, in Java le stringhesono oggetti. (par. 4.6)

• Una costante (letterale) stringa si scriveracchiusa tra virgolette:

"benvenuto"

e le virgolette non fanno parte della stringa.

• Letterale o costante letterale: sequenza di simboli cherappresenta un valore di un certo tipo di dato.

Tipo di dati String

• Analogamente agli altri tipi di dato definiamouna stringa e le assegniamo un valore.

• Il tipo di dato è rappresentato dalla classeString:

String nome; //definizione

nome = "Maria"; //assegnazione

• Le stringhe hanno una sintassi diversa dagli altri oggetti.

Tipo di dati String

• String è il nome di una classe: inizia con lamaiuscola.

• Una variabile di tipo String può quindi essereutilizzata richiamando i metodi della suaclasse.

• La lunghezza di una stringa è il numero dicaratteri presenti in essa (senza contare levirgolette).

• Ogni carattere ha una sua posizione, o indice,all’interno della stringa.

Page 22: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

22

Tipo di dati String

• La posizione dei caratteri nelle stringhe vienenumerata a partire da 0 (deriva da C e C++).

• La posizione dell’ultimo carattere di unastringa corrisponde alla lunghezza della stringameno 1.• la lettera o di Filippo è in posizione 6 = 7-1

0 1 2 3 4 5 6

F|i|l|i|p|p|o

Tipo di dati String

• Per sapere di quanti caratteri è composta unastringa, utilizziamo il metodo length.

(par. 2.3)

• Come si invoca un metodo (che agisce suoggetti)?

nomeoggetto.nomemetodo(parametri);

String saluto = "Ciao";

nome = "Filippo";

Tipo di dati String

• Il metodo length non ha parametri erestituisce un valore di tipo int. Pertantomemorizziamo questo valore in una variabiledi tipo int:

int n1 = saluto.length(); //n1=4

int n2 = nome.length(); //n2=7

//visualizziamo i valori di n1 e n2

System.out.println("n1= " + n1 +

" n2= " + n2);

Tipo di dati String

• Concatenazione tra stringhe.

• Le stringhe si possono concatenare utilizzando l’operatore +

String s1 = "Ciao";

String s2 = "mondo";

String s3 = s1 + s2;

• Il valore memorizzato in s3 è "Ciaomondo"

• Se si voglio gli spazi, questi devono essereinseriti esplicitamente:

String s4 = s1 + " " + s2

Page 23: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

23

Tipo di dati String

• Se una delle espressioni a destra o sinistradell’operatore + è una stringa, l’altraespressione viene convertita a stringa e si ha laconcatenazione.

• Questa concatenazione è utile nelle stampe:

System.out.print("area = ");

System.out.println(25.6);

System.out.println("area = " + 25.6);

Tipo di dati String

• Una stringa di lunghezza zero, che noncontiene caratteri, si chiama stringa vuota e siindica con due caratteri virgolette consecutivi,senza spazi interposti:

String vuota = "";

• Poiché il metodo length restituisce un valorenumerico, tale valore di ritorno può esserepassato come parametro al metodo println:

System.out.println(vuota.length());

//stampa 0

Tipo di dati String

• Vogliamo estrarre una sottostringa da unastringa data, utilizziamo il metodo substring:

oggettostringa.substring(n1, n2);

• il primo parametro di substring è la posizionedel primo carattere che si vuole estrarre;

• il secondo parametro è la posizione successivaall’ultimo carattere che si vuole estrarre (ilprimo che non si vuole).

Tipo di dati String

• Esempio.

• Il metodo restituisce una nuova stringa.

• La differenza tra i due parametri di substringcorrisponde alla lunghezza della sottostringaestratta:• la lunghezza di subs1 è 4 = 4-0

String saluto1 = "Ciao mondo!";

String subs1 = saluto1.substring(0,4);

// subs1 contiene "Ciao"

Page 24: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

24

Tipo di dati String

String subs2 = saluto1.substring(5,6);

// subs2 contiene "m" di lunghezza 1

• Attenzione: "m" è una stringa non un carattere.

• Il metodo substring può essere anche invocatocon un solo parametro che indica il primo daestrarre; si estraggono i rimanenti fino alla fine:

String subs3 = saluto1.substring(7);

// subs3 contiene "ndo!"

Tipo di dati String

• Metodo replace: ha due parametri di tipostringa e restituisce una stringa dove è statosostituito il primo con il secondo.

• Metodi toUpperCase e toLowerCase:convertono tutto in maiuscolo e in minuscolorispettivamente.

String nome1 = "Maria";String nome2 = nome1.replace("i","t");//nome2 è "Marta"

Tipo di dati String

• I metodi visti non modificano la stringa con laquale si invoca il metodo, ma restituisconouna nuova stringa (parametro di ritorno).

• Nessun metodo della classe String modifical’oggetto con cui viene invocato.

• Per tale motivo si dice che gli oggetti di tipoString sono oggetti immutabili.

Tipo di dati String

• Se si fornisce un parametro errato a substring,il programma viene compilato correttamente, maviene generato un errore in esecuzione.

• Esempio.public class Errore{

public static void main

(String[] arg){

String nome = """"Filippo"""";

String nome1 =

nome.substring(5,10);

System.out.println(nome1);}

}

Page 25: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

25

Tipo di dati String

• Questo errore non viene segnalato dalcompilatore, ma si ha un errore durantel’esecuzione del programma, che siinterrompe segnalando:

StringIndexOutOfBoundsException

• Si tratta di un errore logico, di cui però ci siaccorge dato che l’esecuzione viene interrotta.

Sequenze di “escape”

• Come possiamo stampare una stringa che contienedelle virgolette?

• Il compilatore identifica le seconde virgolettecome la fine della prima stringa "Ciao, ", ma poinon capisce il significato della parola Mondo.

• Si deve inserire una barra rovesciata \ (backslash)prima delle virgolette all’interno della stringa

System.out.println("Ciao, "Mondo"!"); //ERRATO

Ciao, "Mondo"!

System.out.println ("Ciao, \"Mondo\"!");

Sequenze di “escape”

• Il carattere backslash all’interno di una stringa nonrappresenta se stesso, ma si usa per codificare altricaratteri: sequenza di escape (di uscita).

• Per inserire veramente un carattere backslash in unastringa, si usa la sequenza di escape \\

• Per scrivere parole italiane con lettere accentate senzaavere a disposizione una tastiera italiana, si inserisce\u seguito dalla codifica Unicode del carattere.

• Esempio. Stampare la parola Perché

System.out.println("Perch\u00E9");

Esercizio

• Dato un gruppo di tre parole, utilizzando imetodi visiti, costruirne l’acronimo.

• Esempio.

• Date le parole random access memory,costruire l’acronimo RAM.

• Soluzione.

• Dobbiamo estrarre da ogni parola la sottostringainiziale di lunghezza 1, concatenarle tra loro etrasformarle poi in maiuscolo.

Page 26: Rappresentazione delle informazioni numerilaurap/didattica/Inform... · Rappresentazione delle informazioni • Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni

26

Esercizio

public class Acronimo{//costruzione acronimo

public static void main(String[] arg){

String parola1 = "random";String parola2 = "access";

String parola3 = "memory";

// estrai le iniziali

String tmp = parola1.substring(0, 1)

+ parola2.substring(0, 1)

+ parola3.substring(0, 1);

// converti in maiuscolo

String acro = tmp.toUpperCase();

System.out.println("L'acronimo e' " + acro);

}//fine main

}//fine main