Evoluzione linguaggi di programmazione - DIMES Unical · linguaggi di programmazione (1/3)...

10
Evoluzione dei Linguaggi di programmazione 1 Evoluzione linguaggi di programmazione Evoluzione dei Linguaggi di programmazione 2 Introduzione Al giorno d'oggi esistono centinaia di linguaggi diprogrammazione diversi (Ada, Algol60, Pascal,Prolog, Smalltalk, C++, Java,..), anchese quelli veramente diffusi sono al più una diecina. I linguaggi non banali sono, dal punto divista della computazione , equivalenti , ossia un programma scritto in un certo linguaggio può sempre essere codificato in un altro linguaggio. Allora perchè esiste tale variopinta molteplicità di linguaggi? Il fatto è che ogni linguaggio risulta più o meno adatto a seconda del tipo di applicazione. Evoluzione dei Linguaggi di programmazione 3 Linguaggi Naturali e Linguaggi Formali Innanzitutto chiariamo la differenza fra i linguaggi naturali, che usiamo normalmente per comunicare tra noi esseri umani, ed i linguaggi formali. •Linguaggi Naturali : nati spontaneamente hanno un enorme potere espressivo, ma sono ambigui •Linguaggi Formali : creati a tavolino, non ambigui. Linguaggi Artificiali sono un sottoinsieme dei linguaggi formali e fanno riferimento a grammatiche non contestuali, cioè a grammatiche che indipendentemente dal contesto permettono di decidere se una frase è corretta o no. Evoluzione dei Linguaggi di programmazione 4 Una prima Classificazione dei linguaggi di programmazione (1/3) •Linguaggi macchina : Ogni processore ha un suo linguaggio in cui ogni stringa di bit corrisponde ad una operazione elementare. •I linguaggio macchina è molto vicino alla logica del processore, ma molto lontano dal modo di ragionare dell'uomo. •Agli albori dell'informatica questo era l'unico modo di programmare un computer Evoluzione dei Linguaggi di programmazione 5 Una prima Classificazione dei linguaggi di programmazione (2/3) Linguaggi a basso Livello : (linguaggi assemblativi) Linguaggi vicini alla logica del processore, producono algoritmi che devono essere tradotti per poter essere eseguiti dal processore. Sviluppati tra il1945 ed il 1950, hanno come capofila il linguaggio Assembler . • codice mnemonico associato ad ogni istruzione macchina, •l'indirizzamento simbolico •possibilità di definire delle macroistruzioni Evoluzione dei Linguaggi di programmazione 6 Una prima Classificazione dei linguaggi di programmazione (3/3) •Linguaggi ad alto Livello Si allontanano dalla logica del processore e sono orienatti non alla macchina ma alla soluzione di problemi. I suoi obiettivi sono: •la semplicità •l'efficienza •leggibilità •l'indipendenza dalla macchina

Transcript of Evoluzione linguaggi di programmazione - DIMES Unical · linguaggi di programmazione (1/3)...

11

Evoluzione dei Linguaggi di programmazione 1

Evoluzione linguaggi di programmazione

Evoluzione dei Linguaggi di programmazione 2

Introduzione

• Al giorno d'oggi esistono centinaia di linguaggi diprogrammazione diversi (Ada, Algol60, Pascal,Prolog, Smalltalk, C++, Java,..),anchese quelli veramente diffusi sono al più una diecina.

• I linguaggi non banali sono, dal punto di vista della computazione , equivalenti, ossia un programma scritto in un certo linguaggio può sempre essere codificato in un altro linguaggio.

• Allora perchè esiste tale variopinta molteplicità di linguaggi? Ilfatto è che ogni linguaggio risulta più o meno adatto a seconda del tipo di applicazione.

Evoluzione dei Linguaggi di programmazione 3

Linguaggi Naturali e Linguaggi Formali

Innanzitutto chiariamo la differenza fra i linguaggi naturali ,che usiamo normalmente per comunicare tra noi esseri umani,ed i linguaggi formali.•Linguaggi Naturali : nati spontaneamente hanno un enorme potere espressivo, ma sono ambigui•Linguaggi Formali: creati a tavolino, non ambigui.

Linguaggi Artificiali sono un sottoinsieme dei linguaggi formali e fanno riferimento a grammatiche non contestuali , cioè agrammatiche che indipendentemente dal contesto permettono di decidere se una frase è corretta o no.

Evoluzione dei Linguaggi di programmazione 4

Una prima Classificazione dei linguaggi di programmazione (1/3)

•Linguaggi macchina: Ogni processore ha un suo linguaggio in cui ogni stringa di bit corrisponde ad una operazione elementare.

•I linguaggio macchina è molto vicino alla logica del processore, ma molto lontano dal modo di ragionare dell'uomo. •Agli albori dell'informatica questo era l'unico modo di programmare un computer

Evoluzione dei Linguaggi di programmazione 5

Una prima Classificazione dei linguaggi di programmazione (2/3)

Linguaggi a basso Livello: (linguaggi assemblativi) Linguaggi vicini alla logica del processore, producono algoritmi che devono essere tradotti per poter essere eseguiti dal processore.Sviluppati tra il1945 ed il 1950, hanno come capofila il

linguaggio Assembler.• codice mnemonico associato ad ogni istruzione macchina, •l'indirizzamento simbolico•possibilità di definire delle macroistruzioni

Evoluzione dei Linguaggi di programmazione 6

Una prima Classificazione dei linguaggi di programmazione (3/3)

•Linguaggi ad alto Livello Si allontanano dalla logica del processore e sono orienatti non alla macchina ma alla soluzione di problemi.

I suoi obiettivi sono:•la semplicità•l'efficienza•leggibilità•l'indipendenza dalla macchina

22

Evoluzione dei Linguaggi di programmazione 7

Classificazione dei linguaggi ad alto livello (1/2)

•Linguaggi Imperativi. Caratterizzati dalla filosofia che un programma è la specifica di un insieme di istruzioni che specificano operazioni (comandi) da seguire allo scopo di ottenere la soluzione ad un dato problema.•Linguaggi Funzionali caratterizzati dall'assunto che un programma è la specifica di una funzione che, sulla base di un insieme di dati di ingresso, calcola il risultato secondo una legge specificabile in modo matematico.

Evoluzione dei Linguaggi di programmazione 8

Classificazione dei linguaggi ad alto livello

•Linguaggi Dichiarativi (o Logici), caratterizzati dalla filosofia che un programma è la specifica di una relazione complessa che esiste fra i dati.

•Linguaggi ad Oggetti (OO), caratterizzati dalla filosofia che un programma è la specifica di un insieme di classi di oggetti, ognuna definita in termini di struttura e operazioni, che comunicano fra loro.

Evoluzione dei Linguaggi di programmazione 9

Linguaggi Imperativi

I linguaggi imperativi adottano uno stile prescrittivo, ossia è prescritto l'insieme delle istruzioni che il processore deve compiere nonchè l'ordine in cui queste devono essere compiute.In particolare essi prendono il nome dal fatto di avere come componente essenziale l'istruzione, cioè l'indicazione di una azione da eseguire.

Evoluzione dei Linguaggi di programmazione 10

Linguaggi Imperativi

In sintesi un programma imperativo può essere schematizzato come :

PROGRAMMA = ALGORITMO + DATI

• parte dichiarativa in cui si dichiarano tutte le variabili del programma ed il loro tipo (DATI) •parte di istruzioni che descrivono l'algoritmo risolutivo (ALGORITMO).

Evoluzione dei Linguaggi di programmazione 11

Alcuni linguaggi Imperativi

Tra i linguaggi imperativi ricordiamo: •Fortran (Formula Translation). Sviluppato tra il 1953 ed il 1957 daJohn Backus per applicazioni di tipo matematico/scientifico e tecnico. Un programma Fortran è costituito da

•un programma principale;•da un certo numero di sottoprogrammi, detti subroutine , che possono essere invocati dal programma principale o da altresubroutine;

•Cobol linguaggio orientato ad attività commerciali sviluppato intorno al 1960. Sia il Fortran che il Cobol sono linguaggi ``statici", ossia le richieste di memoria di un programma Fortran o Cobol vengono definite prima che l'esecuzione del programma inizi; pertanto tali linguaggi non permettono la ricorsione.

Evoluzione dei Linguaggi di programmazione 12

Alcuni linguaggi Imperativi

•Algol60(Algorithmic Language). Nato verso la fine degli anni '50 da una intensa e rara cooperazione internazionale con l’obiettivo di definire un linguaggio chiaramente strutturato valido per scopi generali ed indipendente dalla macchina. Definisce:

•concetto campo di visibilità di una variabile, •concetto di funzione e procedura,•il costrutto IF ...THEN ...ELSE

Usati poi in molti linguaggi (detti della famiglia Algol) primo fra tutti il Pascal.•BASIC fece la sua comparsa nel 1964. Nel suo obiettivo principale: la semplicità esso ha raggiunto senz'altro il successo diventando in pochi anni uno dei più usati al mondo.

33

Evoluzione dei Linguaggi di programmazione 13

Alcuni linguaggi Imperativi

•Pascal creato da N. Wirth, professore dell'università di Zurigo, con l'obiettivo di andare incontro alle esigenze di apprendimento dei neo-programmatori.

Non a caso, ancora oggi, il Pascal viene usato come linguaggio di apprendimento nelle scuole.

Evoluzione dei Linguaggi di programmazione 14

Cartteristiche del Pascal

•è un linguaggio strutturato e semplice, permette un uso disciplinato dei puntatori, ossia dati che memorizzano l'indirizzo di altri dati, e in generale scoraggia le scorciatoie evitando in tal modo che il programmatore commetta errori.•la varietà di tipi di dati standard disponibili e possibilità per l'utente definire nuovi tipi.•permette di gestire matrici, insiemi e record •come l'algol utilizza il concetto di campo di visibilità.•fa un uso disciplinato dei puntatori e scoraggia•le scorciatoie evitando in tal modo che il programmatore commetta errori.

Evoluzione dei Linguaggi di programmazione 15

C

C fa la sua comparsa pochi anni dopo. Esso si distingue dai suoi predecessori per la versatilità nella rappresentazione dei dati.

La sua forza risiede nel fatto che pur essendo un linguaggio di alto livello dà la possibilità di fare cose di solito permesse dai linguaggi di basso livello.

Per questo motivi si dice che il C è il linguaggio di più basso livello tra i linguaggi di alto livello.

Evoluzione dei Linguaggi di programmazione 16

Nuovi Paradigmi di Programmazione

La necessità di sviluppare programmi più concisi, più semplici da scrivere e più vicini alla logica del problema e che potessero essere utili nel campo dell'Intelligenza Artificiale porta alla definizione dei:

•Linguaggi Funzionali•Linguaggi Logici (o Dichiarativi)

Evoluzione dei Linguaggi di programmazione 17

Nuovi Paradigmi di Programmazione

Le caratteristiche comuni di questi linguaggi sono:

• la non manipolazione dei numeri, ma di simboli;

• una programmazione incrementale che consente di realizzare velocemente prototipi ed

• il fatto che si tratta di linguaggi ad altissimo livello utilizzabili anche da non-programmatori.

Evoluzione dei Linguaggi di programmazione 18

Linguaggi Funzionali

I linguaggi funzionali sono basati sull'uso estensivo e sistematico della funzione intesa in senso matematico.

Una funzione è una regola di corrispondenza che associa ad ogni elemento del suo dominio un unico elemento del suo codominio.Una definizione di funzione specifica Dominio,Codominio, e regola di associazione. es: incr(x) ::= x+1;La valutazione di una funzione consiste nell'applicazione della regola di associazione all'elemento del dominio per produrre un risultato (valore del Codominio).

44

Evoluzione dei Linguaggi di programmazione 19

Linguaggi Funzionali

Pertanto in un linguaggio funzionale è:

PROGRAMMA = FUNZIONEESECUZIONE DI UN PROGRAMMA = VALUTAZIONE DI UNA

FUNZIONE

I linguaggi funzionali:• Utilizzano la ricorsione• la struttura dati più importante è la LISTA •sono interpretati•le variabili sono variabili matematiche pertanto denotano un valore non modificabile, non esiste infatti l'operazione di assegnazione (linguaggio funzionale puro).

Evoluzione dei Linguaggi di programmazione 20

Linguaggi Funzionali

Tra i linguaggi funzionali il più noto è il LISP (Li st Processing) nato nel 1959 ad opera di J. McCarthy per risolvere problemi, tipici dell'AI, che coinvolgono manipolazioni simboliche e ricorsione.E' un linguaggio

•conciso, •è il più usato nel campo dell'AI, •ha rappresentato il punto di partenza per numerosi altri linguaggi.

Evoluzione dei Linguaggi di programmazione 21

Linguaggi Dichiarativi (o Logici)

I linguaggi Logici specificano COSA si desidera come risultato e non come ottenerlo, ossia si definisce il problema da risolvere e non come ottenere la soluzione, ciò viene lasciato all'esecutore (interprete) del linguaggio.

Evoluzione dei Linguaggi di programmazione 22

Linguaggi Dichiarativi (o Logici)

Il programma può essere considerato come la dimostrazione della verità di una asserzione.

Un programma Dichiarativo è :PROGRAMMA = CONOSCENZA + CONTROLLO

•CONOSCENZA : un insieme di fatti e regole •(CONTROLLO) : un insieme di regole

Evoluzione dei Linguaggi di programmazione 23

Linguaggi Dichiarativi (o Logici)

In un Programma Logico non è necessario specificare un flusso diesecuzione, ma dato un obiettivo (GOAL) il sistema individua i fatti e le regole rilevanti per dimostrare la veridicità del goal.In tale ricerca assumono importanza concetti quali:

• il Backtracking.• la ricorsione.

I linguaggi logici risultano particolarmente adatti a risolvere problemi che coinvolgono entità e relazioni, sono inoltre particolarmente leggibili e tra essi l'esemplare più noto è il PROLOG (Programmming in Logic).

•sviluppato nel '72 all'Università di Marsiglia, è basato sulla logica dei predicati del primo ordine ed è adatto ad una grande varietà di applicazioni.

Evoluzione dei Linguaggi di programmazione 24

Linguaggi ad Oggetti (OO)

La vera rivoluzione si è avuta nel 1983 quando Bjarne Stroustrup inventò il C++ (o come era stato chiamato inizialmente "C con classi") che introduceva, sfruttando come base il C, la programmazione Orientata agli Oggetti (OO - Object Oriented) usando una nuova struttura, la classe.

55

Evoluzione dei Linguaggi di programmazione 25

Linguaggi ad Oggetti (OO)

Le astrazioni principali di un linguaggio OO sono:•Classificazione dati (oggetti) organizzati in classi con proprietà comuni•Incapsulamento: Oggetto = dato + Operazioni•Information Hiding: Ogni oggetto ha una interfaccia (pubblica) e una implementazione (privata)•Polimorfismo:

•Molteplici definizioni delle stesse funzioni (overloading)•Funzioni e classi parametriche rispetto a tipi di dato

•Ereditarietà : Definizione di nuove classi a partire da classi definite in precedenza.

Evoluzione dei Linguaggi di programmazione 26

Caratteristiche dei linguaggi di programmazione ad oggetti

Evoluzione dei Linguaggi di programmazione 27

Oggetto

Oggetto

• Identità: espressa da un nome

• Stato: include le proprietà dette attributi che descrivono gli oggetti

• Comportamento: rappresentato da funzioni dette metodi che utilizzano o cambiano il valore degli attributi

Evoluzione dei Linguaggi di programmazione 28

Il concetto di oggetto

• Un centro di servizi con una parte visibile (Interfaccia) ed unaparte nascosta

Evoluzione dei Linguaggi di programmazione 29

IncapsulamentoProtegge l’oggetto nascondendo:- lo stato dei dati- l’implementazione delle sue funzioni (comportamenti)

Evoluzione dei Linguaggi di programmazione 30

Incapsulamento

I dati e le funzioni sono racchiusi negli oggetti.

Ciascun oggetto ha:

• un OID che lo identifica univocamente,

• un insieme di proprietà ed

• un insieme di metodi che regolano il suo comportamento.

Le proprietà di un oggetto sono gli attributi o variabilidell'oggetto,

Lo stato di un oggetto è l'insieme dei valori assunti dalle sue propietà in un determinato istante.

66

Partiamo da una lista

O1 O2 O3 O4 O5

Operazioni di modifica dello stato :ins, ad inizio lista;

canc, permette di rimuovere un elemento ad inizio lista;append che aggiunge in coda gli elementi di una seconda lista. svuota e mod che modifica la parte informativa del'elemento riferito dall’iteratore

………….

Operazioni di consultazione dello stato :vuota, piena,

ElemTesta ElemFineUltimoValoreConsultato………

Evoluzione dei Linguaggi di programmazione 32

Architettura di un sistema ad Oggetti

Un insieme di Oggetti che interagiscono insieme senza conoscere nulla delle rispettive implementazioni concrete.

Evoluzione dei Linguaggi di programmazione 34

Classe

L'incapsulamento viene supportato tramite il costrutto classe che contiene i dati e le funzioni applicabili sugli oggetti appartenenti alla classe.

Pertanto l'incapsulamento consente di aggiungere al linguaggio nuovi tipi di dato, definiti non solo in termini di struttura del loro dominio, ma anche in termini di operazioni che possono essere effettuate su istanze di quel tipo.

Evoluzione dei Linguaggi di programmazione 35

Classe ed Istanze

Classe: descrizione dei comportamenti (operazioni) e delle informazioni (dati) appartenenti ad un oggetto

Istanza: Oggetto reale ottenuto dalla classe tramite dichiarazione (variabile)

Evoluzione dei Linguaggi di programmazione 36

Astrazione

Risultato di un’astrazione è un elenco di cosa fare e non come farlo

Complessità

dettaglio

Evoluzione dei Linguaggi di programmazione 37

Non bisogna avere un tipo oggetto per ciascuna entità da rappresentare

Meno tipi oggetto saranno individuati, meno confuso sarà lo scenario.

Puntare sull’astrazione

77

Evoluzione dei Linguaggi di programmazione 38

Information Hiding

•E' strutturalmente legata all'incapsulamento.

•Essa si basa sull'idea che l'utilizzazione di un oggetto prescinde dalla rappresentazione dei dati.

•Ossia per utilizzare un oggetto è sufficiente conoscere la sua interfaccia verso l'esterno, ossia le operazioni applicabili sull'oggetto, mentre non è necessario conoscere la loro implementazione.

•L'Information Hiding si realizza attraverso due livelli di accesso ai campi di una classe pubblico (Public) , privato (private) .I campi pubblici sono accessibili ai programmi esterni, mentre quelli privati sono utilizzabili solo dalle funzioni appartenenti alla classe. Evoluzione dei Linguaggi di programmazione 39

• Un modulo consiste di un interfaccia e di una implementazione

• Chi usa il modulo conosce solo l’interfaccia– L’implementazione e` nascosta

Modularitàciascun modulo non sa cosa accade attorno a lui

Evoluzione dei Linguaggi di programmazione 40

Polimorfismo

Polimorfismo = Capacità di assumere diverse forme.

Dal greco "pluralita` di forme"

Nei linguaggi OO esistono diverse forme di Polimorfismo:

•Overloading (sovrapposizione) ossia più definizioni per uno stesso nome di funzione; (naturalmente funzioni con lo stesso nome devono avere una ``segnature" (numero e tipo di parametri formali) diversi; solo in tal modo il compilatore riesce a decidere quale funzione invocare).

•Funzioni e classi parametriche rispetto ad uno o più tipi(realizzate in C++ tramite i template);

Evoluzione dei Linguaggi di programmazione 41

Polimorfismo (1/2)

• Permette di utilizzare lo stesso nome per identificare operazioni simili che differiscono per la realizzazione

– Una sola interfaccia per molte azioni (metodi)Ad esempio, metodi ins e canc per liste di int, float, char (overloading)

Il compito di selezionare l'azione specifica da applicare viene delegato al compilatore

Evoluzione dei Linguaggi di programmazione 43

Ereditarietà

• Permette di definire un oggetto a partire da oggetti già essitenti

• Essa è uno dei meccanismi più potenti della programmazione ad oggetti e consente :– il riutilizzo del codice– Di specializzare la classe derivata con nuove proprietà e nuovi

metodi

La classe derivata si chiama sottoclasseLa classe da cui si deriva si chiama superclasse

Evoluzione dei Linguaggi di programmazione 44

Astrazione ed ereditarietà

88

Evoluzione dei Linguaggi di programmazione 45

public class ListaCimplements Lista

LISTApublic interface Lista

extends Collezione

LISTA_C LISTA_DC

Concatenata DoppiamConcatenata

Coda Doppia Codapublic interface Codaextends Collezione

Evoluzione dei Linguaggi di programmazione 47

Ereditarietà Semplice in Java

• In Java, ogni classe che non deriva da nessun’altra deriva implicitamente dalla superclasse universale universale del linguaggio, che si chiama Object

• Esiste pertanto un unico albero di derivazione semplice la cui radice è la Classe Object– Non si può definire una classe che non eredita da nessuna classe

(ogni classe esclusa Object ha una superclasse)

• Object ha alcuni metodi (String toString(),boolean equals(Object obj) ), che sono ereditati da tutte le classi

Evoluzione dei Linguaggi di programmazione 48

• Sintassi Ereditarietàclass NomeSottoclasse extends NomeSuperclasse{costruttorinuovi metodinuove variabili}• La classe NomeSottoclasse eredita da NomeSuperclasse e definisce le sue

variabili i suoi costruttori ed i suoi metodi• Se non è indicata alcuna superclasse si assume Object di default

Evoluzione dei Linguaggi di programmazione 49

Caratteristiche degli oggetti delle classi derivate

• Ogni oggetto di una classe derivata può essere usato dove è richiesto un oggetto della classe base

• Un oggetto della classe derivata eredita proprietà e metodi dell’oggetto della classe base

• Non si può usare un oggetto della classe base dove è richiesto un oggetto della classe derivata

Evoluzione dei Linguaggi di programmazione 50

Metodi della classe derivata PolimorfismoPer quanto riguarda i metodi della classe derivate, questi possono essere:

•Nella sottoclasse viene definito un metodo che non esisteva nella classe base

•Nella sottoclasse viene ridefinito un metodo che esisteva nella classe base (in tal caso si dice che il metodo è sovrascritto)

•La possibilità di sovrascrivere un metodo è una delle caratteristiche più potenti dei linguaggi di programmazione ad oggetti

•Per sovrascrivere un metodo bisogna definire nella classe derivata

•Un metodo con la stessa segnatura del metodo della classe base

Evoluzione dei Linguaggi di programmazione 51

esempio

Class Impiegato{ String Nome ;String Cognome;

Double Stipendio;Impiegato (String n, String c, double s) {Nome =n; Cognome = c; stipendio =s};Void AumentaStipendio(double x) {Stipendio = Stipendio +x;}

}

Class Dirigente extends Impiegato{int livello;Impiegato (String n, String c, double s) {Nome =n; Cognome = c; stipendio =s}Void AumentaStipendio(double x) {Stipendio = Stipendio +2x;}}

99

Evoluzione dei Linguaggi di programmazione 52

Binding Dinamico

Quando su un oggetto viene invocato un metodo– Il metodo corrispondenet viene cercato fra quelli definiti nella parte più

esterna dell’oggetto– Se non lo si trova allora si prosegue la ricerca verso l’alto, ossia nella n

Superclasse dalla quale è derivato

• Tutto ciò significa che– Nel caso di overriding prevalgono I metodi appartenenti all’oggetto

derivato

• Si può comunque sempre invocare il metodo sovrascritto ossia il metodo della classe base utilizzando la seguente sintassi:

Super. nomeMetodo(parametri)

Evoluzione dei Linguaggi di programmazione 53

Utilizzo della variabile super

Class Impiegato{ String Nome ;String Cognome;Double Stipendio;Impiegato (String n, String c, double s) {Nome =n; Cognome = c; stipendio =s};Void AumentaStipendio(double x) { Stipendio = Stipendio +x;}

}

Class Dirigente extends Impiegato{int livello ;Impiegato (String n, String c, double s) {Nome =n; Cognome = c; stipendio =s}Void AumentaStipendio(double x) { Stipendio = Stipendio +2x;}Void RaddoppiaStipendio(double x) {super. AumentaStipendio(x)}}

Evoluzione dei Linguaggi di programmazione 54

Ereditarietà dei costruttori

• Siccome ogni oggetto contiene una propria istanza della propria superclasse, quest’ultima deve essere inizializzta

• Il compilatore java inserisce automaticamente una chiamata al costruttore di default del superoggetto– Tale chiamata viene inserita come prima istruzione del nuovo costruttore– L’esecuzione dei costruttori procede dalla radice verso il basso nella

gerarchia di ereditarietà– Ciò garantisce che quando il costruttore di una classe viene ese guito la

superclasse sia già stata completamente inizializzata– Se il costruttore ha parametri sono necessarie delle chiamate esplicite

Evoluzione dei Linguaggi di programmazione 55

Astrazione delle classi

Salendo nella gerarchia di ereditarietà si trovano classi sempre più generiche• Metodo astratto:; metodo di cui non viene specificata l’implementazione• Classe astratta : classe avente almeno un metodo astratto• Classi e metodi astratti sono identificati dal qualificatore abstract

Esempio:abstract Class Forma{abstract void stampa()}

Evoluzione dei Linguaggi di programmazione 56

Astrazione delle classi

• Una classe astratta è una classe non completamente definita essa pertanto non può essere istanziata

• Per ottenere una classe concreata da una classe astratta bisogna specificare tutte le implementazioni mancanti

Esempio:Class Quadrato extends Forma{int lato;Quadrato(int n) {lato = n}public void stampa() {// istruzioni pèer la stampa }}

Evoluzione dei Linguaggi di programmazione 57

Interfacce

• Una interfaccia è una classe completamente astratta , cioè del tutto priva di implementazione

– Tutti I metodi sono astratti– Non vi sono attributi (è possibile definire solo attributi final)

• Una interfaccia ha tutti I vantaggi delle classi astratte• Presenta più flessibilita rispetto al meccanismo dell’ereditarietà• Una interfaccia può essere ereditata da un’altra interfaccia non

da una classe• Una interfaccia può ereditare da più interfacce

1010

Evoluzione dei Linguaggi di programmazione 58

Interfacce

Esempio:Interface Persona{…}

Class Studente implements Persona{…}

• In Java una classe può ereditare da una sola classe , ma da più interfacce pertanto c’è differenza rispetto al C++ che consente ereditarietà multipla ossia una classe può ereditare da più classi (DDD)

Evoluzione dei Linguaggi di programmazione 59

FINE