Corso JAVA
Lezione n° 04
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
I Paradigmi di Programmazione
2
Un paradigma di programmazione è un insieme di strumenti concettuali a
cui un linguaggio di programmazione si ispira per la stesura di
programmi e ne definisce/determina il modo in cui il programmatore
concepisce e percepisce il programma.
La storia dei paradigmi di programmazione si presta a essere rappresentata
con un albero genealogico; in molti casi, infatti, un nuovo paradigma
nasce come evoluzione di un altro, aggiungendo nuovi concetti ma
mantenendo anche quelli fondamentali del precedente
Talvolta questo "salto evolutivo" consiste nel rendere obbligatoria e/o
supportare esplicitamente quella che nei paradigmi precedenti si era
affermata come regola di buona programmazione.
Per esempio, la programmazione strutturata ha introdotto strutture di
controllo standard (sequenze, cicli e alternative) e ha vietato l'uso
dell'istruzione di goto, della quale si era dimostrata la non
Istituto Statale di Istruzione Superiore “F. Enriques”
indispensabilità.
Corso di Programmazione in Java – Lezione n° 04
I Paradigmi di Programmazione (2)
In generale possiamo raggruppare i paradigmi in due grandi branche:
1.
Quelli di tipo dichiarativo: per cui i programmi devono essere delle
specifiche eseguibili del problema: ci si preoccupa cioè di cosa risolvere
tralasciando il "come" risolverli. In generale questo approccio comporta
una certa inefficienza.
2.
Quelli di tipo procedurale: per cui i programmi vengono considerati alla
stregua degli algoritmi; ci si preoccupa quindi direttamente del come
risolvere il problema trascurando le specifiche del problema .
I principali paradigmi di tipo dichiarativo sono quelli funzionale e
quello logico, basati rispettivamente sul concetto di espressione e di
predicato, come vedremo tra breve.
I principali paradigmi procedurali sono quello imperativo e ad oggetti.
3
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
I Paradigmi di Programmazione (3)
Tra tutti i paradigmi di programmazione di tipo procedurale quelli più diffusi
sono due:
1. La programmazione imperativa: è quella classica in cui rientrano i
linguaggi macchina dei comuni microprocessori e i linguaggi ad al alto
livello più vecchi e diffusi come FORTRAN, COBOL, BASIC,
PASCAL, C.
2. La programmazione ad oggetti: è un'evoluzione di quella imperativa, ne
fanno parte linguaggi come Java, C++, C#, Perl, Delphi.
Entrambi i tipi di programmazione sono infatti basati sul concetto di “stato”
e sulla possibilità di modificarlo attraverso l'esecuzione di “comandi”.
Le differenze riguardano soprattutto la “distribuzione” e le modalità per
l'accesso dello stato complessivo .
4
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
La Programmazione Imperativa
Nelle lezioni precedenti abbiamo studiato il frammento imperativo di Java,
cioè i costrutti che Java fornisce per scrivere programmi secondo il
paradigma imperativo.
Nella programmazione imperativa, l'enfasi viene posta nella progettazione e
nella scrittura dell'algoritmo con il quale, a partire dai dati in ingresso, si
producono i risultati.
Una computazione si svolge come una sequenza di cambiamenti di stato.
Lo stato viene modificato da comandi semplici (assegnamento, invocazione
di metodo), che possono essere combinati usando istruzioni condizionali
o iterative.
Quindi l'enfasi è posta sulle strutture di controllo: i dati (elementari o
strutturati, come gli array) sono manipolati in modo passivo.
5
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
La Programmazione Orientata agli
Oggetti
Nella programmazione orientata ad oggetti ci si concentra quindi sulla
progettazione di un modello del dominio di applicazione.
Un oggetto è una rappresentazione di un oggetto del mondo reale, o di un
concetto.
Nella fase di progettazione si individuano gli oggetti rilevanti, e per ogni
oggetto si identifica la sua struttura e le sue funzionalità. Gli oggetti
possono interagire, ad esempio quando un oggetto attiva una funzionalità
di un altro oggetto. L'effetto che ne consegue può essere la creazione di
altri oggetti, la attivazione di altre funzionalità dello stesso oggetto o di
altri oggetti.
Gli oggetti sono raggruppati in classi: ogni classe rappresenta un insieme di
oggetti simili per struttura e funzionalità. La relazione di sottoinsieme
viene modellata con la relazione di ereditarietà tra le classi.
6
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Classi e Oggetti nella vita reale:
Un esempio pratico.
Concentriamoci per qualche istante su alcuni concetti tralasciando l’aspetto tecnico del paradigma
object oriented e proviamo per un istante a pensare ad un libro. Quando pensiamo ad un libro
pensiamo subito ad un insieme di oggetti aventi caratteristiche comuni: ogni libro contiene
delle pagine, ogni pagina contiene del testo, ecc
Altra cosa che ci viene subito in mente riguarda le azioni che tipicamente compiamo quando
utilizziamo un libro: voltare pagina, leggere il testo, guardare le figure etc.
E’ interessante notare che utilizziamo il termine “libro” per generalizzare un concetto relativo a
qualcosa che contiene pagine da sfogliare, da leggere, ecc.. ossia ci riferiamo ad un insieme di
oggetti con attributi comuni, ma comunque composto da entità aventi ognuna caratteristiche
proprie che rendono ognuna differente rispetto all’altra.
Possiamo quindi affermare che un libro è un oggetto che contiene pagine e contenuti da guardare e
viceversa ogni oggetto contenente pagine e contenuti da guardare può essere classificato come
un libro.
Abbiamo quindi definito una categoria di oggetti che chiameremo classe e che, nel nostro caso,
fornisce la descrizione generale del concetto di libro. Ogni nuovo libro con caratteristiche
proprie apparterrà comunque a questa classe base.
7
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Le Classi e Gli Oggetti
Ritornando verso un aspetto più attinente alla programmazione…nelle lezioni
precedenti abbiamo visto i tipi di dato primitivi che il linguaggio Java mette a
disposizione (int, long, char, ecc…); sebbene sia possibile scrivere programmi
interessanti usando questi tipi primitivi, spesso i programmi hanno bisogno di
manipolare tipi di dato più complessi che rappresentano più fedelmente le entità
del mondo reale.
Conti bancari, anagrafiche di dipendenti, ecc… sono alcuni esempi di questo genere
di dati.
Per questi motivi un linguaggio a oggetti utilizza il concetto di classe per definire
nuovi tipi di dato, ad esempio gli oggetti libri visti prima.
Una classe quindi definisce un insieme di oggetti, descrivendone:
 la struttura (caratteristiche) che gli oggetti devono avere,
 le operazioni che possono operare su di essi.
8
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Le Classi e gli Oggetti (2)
La dichiarazione di classe introduce un nuovo tipo di dato (la classe stessa), le cui
istanze saranno i suoi oggetti.
Es. Classe Auto (con attributi: colore, n° porte) (e metodi: accelera, frena, gira dx/sx.)
Classe Auto
L’istanza di una Classe è un
oggetto di cui posso
modificare le caratteristiche,
In questo esempio potrebbe essere il colore, il
numero di porte, ecc..
9
Istituto Statale di Istruzione Superiore “F. Enriques”
Oggetti di
tipo Auto
(3 Istanze)
Corso di Programmazione in Java – Lezione n° 04
Le Classi e gli Oggetti (3)
Esaminiamo adesso come si realizza praticamente ed effettivamente un oggetto.
Come abbiamo detto una classe è il modello di un oggetto, ne definisce il tipo e dice
cosa contiene e come si deve comportare l'oggetto in risposta alle richieste
dall'esterno di effettuare un’azione (le chiamate dei metodi).
Nella programmazione imperativa (quella che abbiamo visto fino ad ora) i dati
sempre sono esposti al pubblico chiunque può accedere ai dati che i nostri
programmi utilizzano e modificarli a suo piacimento…
Nella programmazione ad oggetti le strutture dati sono invece un dettaglio che non
deve essere reso noto ma protetto dall'esterno, per evitare che qualcuno possa
manipolarlo in maniera scorretta.
Le informazioni contenute in un oggetto sono racchiuse al suo interno, nelle sue
strutture dati che rappresentano appunto l'informazione riservata "incapsulata".
10
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Le Classi e gli Oggetti (4)
L’insieme delle strutture dati di un oggetto ne definiscono lo stato, ovvero le sue caratteristiche
in uno specifico istante temporale; capite quindi che un programma per funzionare deve
essere in grado di modificare lo stato (ovvero le strutture dati) di un oggetto.
Il fatto che la programmazione ad oggetti cerchi di proteggere i dati da una manipolazione
scorretta non significa che neghi all'algoritmo di agire sulle strutture dati, pretende però
che si dica una volta per tutte quali sono gli algoritmi e su quali strutture dati agiscono.
Notare che neppure gli algoritmi sono pubblici: anche essi rappresentano un dettaglio
implementativo che viene nascosto all'esterno, ovvero per quanto possibile all’esterno
dell’oggetto non deve interessare come funziona al suo interno, ma fornire solo le
informazioni necessarie per il suo utilizzo.
L'utilizzatore di un oggetto ne potrà solamente invocare i metodi; ciò garantisce che soltanto i
metodi di un oggetto possano accedere alle strutture dati che definiscono lo stato
dell’oggetto garantendo quindi che l'oggetto modifichi il suo stato interno in modo
controllato e prevedibile.
11
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Come si crea una classe?
In generale la sintassi per creare (dichiarare) una classe è la seguente:
<modificatori d’accesso> class Nome_della_Classe
{
<costruttori>
<modificatori d’accesso> <variabili statiche>
<modificatori d’accesso> <metodi statici>
<modificatori d’accesso> <variabili d'istanza>
<modificatori d’accesso> <metodi d'istanza>
}
Se si usa la classe
come contenitore
Se si usa la classe
come prototipo
Nelle prossime diapositive verranno spiegati i significati dei campi < >.
12
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
I Modificatori di accesso
I modificatori si applicano a: classi, metodi e strutture dati; ne precedono la
dichiarazione specificandone chi può accedervi.
public: Tutti possono accedere.
protected: Possono accedere la classi dello stesso package e tutte le sottoclassi
nessun modificatore: Possono accedere tutte le classi dello stesso package
(incluse le sottoclassi, ma solo se stanno nello stesso package)
private: Si può accedere solo all'interno della classe
Di solito, si usano solo public e private.
Es. Vorrei che un attributo rimanesse ignoto all’esterno della classe. In tal caso
farò precedere la definizione di tale variabile dalla parola private.
Avevamo già visto un modificatore, vi ricordate?
public static void main () { Il nostro Programma };
13
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Il costruttore di una classe
Il costruttore serve per definire e creare nuovi oggetti.
Nella programmazione a oggetti, si chiamano costruttori le funzioni che vengono
invocate per inizializzare un oggetto. I costruttori in un certo senso sono metodi,
ma sono dei metodi speciali, infatti non necessitano di un oggetto per essere
utilizzati (a differenza dei metodi veri e propri) e come risultato della loro
invocazione non alterano lo stato di un oggetto ma ne creano uno.
I costruttori si dichiarano all'interno di una classe rispettando le seguenti regole:
 il nome del costruttore deve coincidere con quello della classe;
 il tipo del costruttore non deve essere specificato. (Attenzione, questo non
significa che il tipo del costruttore è void: concettualmente, il costruttore
restituisce sempre l'oggetto appena creato.)
 il modificatore static non può essere usato per un costruttore.
N.B.: E’ obbligatorio almeno un costruttore. (Ciò significa che ce ne può essere
anche più di uno).
14
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Variabili Statiche e D’istanza
Abbiamo detto che le strutture dati di una classe rappresentano le caratteristiche di un
insieme di oggetti, e i metodi le “azioni” che tali oggetti possono svolgere per
modificare tali dati.
All’interno della classe si possono definire due tipi di variabili: le variabili statiche e
quelle d’istanza.
Le variabili d’istanza, vengono “replicate” ogni volta che si istanzia un oggetto, pertanto
ogni oggetto ha la propria copia di tali variabili e può modificarle a loro piacimento.
Le variabili statiche sono dette anche della classe, perché non vengono replicate, il loro
valore è memorizzato una sola volta e tutti gli oggetti istanziati fanno riferimento al
valore di quella variabile. Ogni modifica ad essa vale per tutti gli oggetti istanziati da
quella classe. Queste variabili sono precedute dalla parola static.
Le variabili statiche hanno anche una ulteriore proprietà: possono essere utilizzate anche
senza un istanza; Per accedere al loro valore può bastare il nome della classe ed il
nome della variabile, visto che ne è disponibile un’unica copia.
15
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
I Metodi
Nota: Nonostante la similitudine con le
variabili, per adesso tralasciamo la differenza
tra metodi d’istanza e metodi statici, che
riprenderemo nelle lezioni successive
Una istruzione rappresenta il mattone per creare le funzionalità di un oggetto.
Nasce spontaneo chiedersi: come vengono organizzate le istruzioni all’interno di oggetti?
I metodi sono gruppi di istruzioni riuniti a fornire una singola funzionalità, e vengono descritti con
la seguente forma:
Tipo_Restituito Nome _Metodo(Tipo_Parametro Nome_Parametro, … )
{
Istruzioni;
}
Tipo_Restituito e Tipo_Parametro rappresentano ogni tipo di dato (primitivo o oggetto).
Nome _Metodo e Nome_Parametro sono identificatori alfanumerici ed iniziano con una lettera.
Se il metodo non ritorna valori, dovrà essere utilizzata la chiave speciale void al posto di
Tipo_Restituito.
Riprendendo l’esempio del libro un paio di metodi possono essere:
void Gira_Pagina() { istruzioni da eseguire per girare la pagina di un libro;} oppure
int Conta_Pagine() { istruzioni da eseguire per contare le pagine di un libro};
16
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Riepilogo.
Quindi in definitiva:
 Una classe definisce un nuovo tipo (il nome della classe).
 Gli oggetti istanziati dalla classe hanno come tipo la classe stessa.
 Ogni classe ha almeno un costruttore.
 Le variabili e i metodi d’istanza appartengono agli oggetti (istanze della
classe).
 Le variabili e i metodi statici appartengono alla classe.
 Per ogni variabile e metodo, nonché classe è possibile (ma non
obbligatorio) utilizzare un modificatore d’accesso (public, private,
protected).
17
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Esempio di classe e metodi
public class ContoCorrente {
private float saldo;
Variabile d’istanza (non c’è static)
public ContoCorrente( ) { saldo = 0; }
Costruttore
public void Deposito(float importo_deposito) { saldo = saldo + importo_deposito; }
public boolean Prelievo_Consentito(float importo_prelievo) {
float Nuovo_saldo;
Nuovo_saldo = saldo – importo_prelievo;
Metodi
if (Nuovo_saldo >= 0) return(true);
else return(false);
}
public void Prelievo (float importo) { if (Prelievo_Consentito(importo)) saldo = saldo – importo; }
public float Dimmi_Saldo() { return saldo; }
}
18
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 04
Esercizio per casa
Per la prossima volta pensate a come potrebbe essere descritto tramite una
classe l’oggetto Studente:
Pensate quindi alle caratteristiche che ogni oggetto Studente possiede, se ci
possono essere eventuali variabili statiche che si possono inserire nella
classe, e quali metodi può effettuare uno studente.
Vi si richiede solo la dichiarazione di queste cose, ovvero:
tipo Nome_Variabile;
modificatore Nome_metodo ( tipo nome parametro){
Scritto a parole quello che dovrebbe fare il metodo;
}
19
Istituto Statale di Istruzione Superiore “F. Enriques”
Scarica

Lezione n° 04