Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
La programmazione ad oggetti
Il paradigma a oggetti La programmazione ad oggetti
2
Il progetto del software
Obiettivo della progettazione: produrre software con le caratteristiche di qualità che sono state definite nella fase di analisi e specifica dei requisiti. Caratteristiche fondamentali per garantire la qualità del software e ridurre i costi e i tempi di produzione: Affidabilità Modificabilità: un programma utile deve poter essere modificato Comprensibilità: facilità di interpretazione del codice Riusabilità: poter riutilizzare un’applicazione o una sua parte comporta dei vantaggi nella riduzione dei tempi e costi di sviluppo e consente di utilizzare una parte di software già testato Il paradigma ad oggetti
3
Programmazione orientata agli oggetti
Basata sul concetto di astrazione dei dati. Si focalizza l’attenzione su categorie concettuali dei dati del dominio applicativo. Costruire il programma in termini di “entità”, rappresentate da una struttura dati interna nascosta operazioni che possono agire sui dati Vantaggi: Agevola la modularità Favorisce il controllo sull’integrità dei dati (solo certe funzioni possono agire sui dati) Favorisce la creazione di componenti autonomi e testati Il paradigma ad oggetti
4
Concetti fondamentali
Oggetto: insieme di dati e di metodi per operare sui dati. I dati vengono detti anche attributi Classe: è uno “stampo”, un modello per la creazione di oggetti. A partire da una classe si possono creare più oggetti. Ogni oggetto è detto istanza della classe. Messaggio: consente agli oggetti di comunicare tra loro Eredità: fornisce un meccanismo potente per l’organizzazione e la strutturazione del software. La classe erede incorpora alcuni attributi e alcuni metodi della classe genitore Il paradigma ad oggetti
5
Un oggetto è una coppia (stato,funzioni)
Cosa sono gli oggetti Versione informatica degli oggetti "reali“ o “astratti” Dotati di una loro propria "individualità" Capaci di interagire per scambio di messaggi Caratterizzati da proprietà dati: ne descrivono lo “stato” funzioni: ne descrivono il “comportamento” Un messaggio modifica lo stato e attiva comportamenti Un oggetto è una coppia (stato,funzioni) Il paradigma ad oggetti
6
Oggetto automobile Funzioni Dati: - Avviati - Targa - Fermati - Colore
- Accelera - Velocità - … - Livello benzina - ... Il paradigma ad oggetti
7
Il concetto di Classe Una classe può essere vista come “stampo” per la creazione di oggetti. Esempio: classe bicicletta oggetto la mia bicicletta I valori di alcuni attributi possono essere comuni a tutti gli oggetti della classe (variabili di classe) I valori di altri attributi dipendono invece dalla particolare istanza (variabili di istanza) Discorso analogo vale per i metodi. Il paradigma ad oggetti
8
I linguaggi ad oggetti Forniscono come astrazione base la possibilità di definire classi, di mettere in relazione classi tramite l’ereditarietà, di istanziare oggetti a partire da una classe. Linguaggi a Oggetti “puri”: la classe e gli oggetti sono le uniche astrazioni del linguaggio (Smalltalk, Java) Linguaggi a Oggetti “non puri”: aggiungono l’astrazione di classe e oggetto ai costrutti tradizionali della programmazione (C++, Object Pascal, ..) Il paradigma ad oggetti
9
Classi: esempio Classe bicicletta Attributi di classe Numero di ruote
Numero di pedali Attributi di istanza Colore Numero di rapporti Tipo Velocità corrente Metodi di istanza (modificano lo stato della particolare bicicletta) Cambiare rapporto Accelerare Frenare Il paradigma ad oggetti
10
Messaggi Definizione: Mezzo di comunicazione tra oggetti
Quando un oggetto A vuole che un oggetto B esegua uno dei suoi metodi, gli invia un messaggio Componenti di un messaggio: L’oggetto a cui il messaggio è indirizzato Il nome del metodo da eseguire Eventuali parametri di cui il metodo necessita per essere eseguito messaggio A B Il paradigma ad oggetti
11
Messaggi: esempio Oggetto A: ciclista Oggetto B: bicicletta
A invia a B il seguente messaggio m: m = bicicletta.cambiaRapporto (r ) ciclista m bicicletta Il paradigma ad oggetti
12
Java E’ un linguaggio ad oggetti puro: tranne i tipi di dati primitivi di base (int, float, double,...), tutto il resto in una applicazione sono oggetti appartenenti a classi. Un programma è un insieme di classi: non esistono funzioni definite a livello esterno. Anche il metodo main() è definito dentro una classe. Viene fornito con una notevole gerarchia di classi standard già pronte Architettura indipendente dalla piattaforma. Il paradigma ad oggetti
13
public static void main(String args[])
Programmi in Java Un programma è definito da un insieme di classi e, durante l’esecuzione, dagli oggetti che a partire da tali classi verranno istanziati. Le classi sono entità statiche, definite prima della esecuzione. Non esiste nulla che non sia definito all’interno di qualche classe. Gli oggetti sono entità dinamiche che assumono esistenza a partire da classe durante l’esecuzione di un programma. All’interno di una classe ci può essere solo una funzione pubblica di nome main() con la seguente interfaccia: public static void main(String args[]) Il paradigma ad oggetti
14
“Tipo di dati astratti” (ADT)
Classi una classe ha un nome, e contiene due tipi di membri: campi e metodi campi metodo “Tipo di dati astratti” (ADT) Il paradigma ad oggetti
15
Oggetti Un oggetto è una istanza (“esemplare”) di una classe, che viene creato (“instanziato”) dinamicamente (durante l’esecuzione del programma) valori DJ197QA variabili a BQ895SZ Automobile b DB117ZW c Due esemplari della stessa classe sono distinguibili soltanto per il loro stato (il valore dei loro campi), mentre il comportamento è sempre identico Il paradigma ad oggetti
16
Una classe java: Automobile
class Automobile { String targa; int velocità; Color colore; ... public void Avviati () { } public void Fermati () { Nome di classe campi metodi Il paradigma ad oggetti
17
Oggetti esempio Java class Automobile { ... }
Automobile a, b, c; // vengono solo definiti tre riferimenti a oggetti a = new Automobile(); b = new Automobile(); // l’oggetto viene creato e inizializzato c = new Automobile(); a.Avviati(); // viene richiesta una operazione all’oggetto Il paradigma ad oggetti
18
Incapsulamento Alcuni attributi (dati e metodi) sono pubblici (public) (cioè visibili "all'esterno") Altri attributi sono privati (private) dell'oggetto, e quindi “nascosti” all’esterno (“information hiding”) Il programmatore può modificare le parti private senza effetti per gli utilizzatori dell'oggetto Propagazione delle modifiche assai contenuta Il paradigma ad oggetti
19
Esempio: Automobile Parti "visibili" (interfaccia pubblica): accesso a "ciò che l'auto può fare" volante, freno (ev. a mano) blocchetto di accensione, oppure manovella pedale dell'acceleratore, acceleratore automatico cambio manuale, oppure cambio automatico Parti "nascoste" (implementazione): "come l'auto fa ciò che si può fare" meccanica dello sterzo e dell'alimentazione elettromeccanica dell'avviamento sistema di alimentazione e accensione Il paradigma ad oggetti
20
I’incapsulamento: approcci
Approccio "puro" lo stato è privato, e lo si può modificare solo attraverso quei metodi che sono stati dichiarati pubblici . Esempio: Fermati() Approccio di Java anche le componenti dello stato possono essere dichiarate pubbliche e modificate dall'esterno Esempio: velocita=0 Si consiglia comunque di implementare per quanto possibile l’approccio puro Il paradigma ad oggetti
21
Interazioni tra oggetti
Gli oggetti possono comunicare e interagire mediante scambio di messaggi attraverso le loro interfacce pubbliche (stato o funzioni) Per mezzo di un messaggio un oggetto può chiedere un'informazione a un altro oggetto, causarne un cambiamento di stato, oppure delegargli un'attività Un messaggio in arrivo viene trattato dal metodo omonimo del ricettore, il quale "si attiva" per rispondere, per cambiare di stato, oppure per intraprendere un'attività Il paradigma ad oggetti
22
Esempio: una automobile
Il sistema antiskid durante una frenata invia periodicamente un messaggio alle ruote per "leggere" la loro velocità di rotazione Il galleggiante nel serbatoio del carburante invia messaggi all'indicatore di livello sul cruscotto per "scrivervi" un nuovo stato Il volante tornando alla posizione di riposo invia un messaggio al comando meccanico dell'indicatore di direzione per delegargli il compito di interrompere l'eventuale segnale lampeggiante ("togliere la freccia") Il paradigma ad oggetti
23
Oggetti composti Un oggetto può essere costituito da altri oggetti
automobile ruota carrozzeria motore Il paradigma ad oggetti
24
Ereditarietà È il meccanismo che consente di derivare una sottoclasse da una classe data Una sottoclasse si ottiene per aggiunta, per occultamento o per ridefinizione di uno o più membri rispetto alla classe di partenza (che diventa una superclasse della nuova classe) Esempio: StartTassametro EndTassametro Licenza automobile taxi Il paradigma ad oggetti
25
Classe Taxi class Taxi extends Automobile { // eredita le proprietà di Automobile int licenza; // è un nuovo campo public void StartTassametro() { // è un nuovo metodo ... } public void EndTassametro () { // è un nuovo metodo Il paradigma ad oggetti
26
Esempi Implementazione di un'interfaccia grafica
classe "finestra": attributo privato "sfondo" e metodo "cambia-sfondo" sottoclasse "finestra-nera": attributo privato "sfondo" ridefinito con il valore costante "nero", metodo "cambia-sfondo" occultato Libreria di algebra lineare: classe "matrice": metodo "determinante" generico sottoclasse "matrice-diagonale": metodo "determinante" che moltiplica tra di loro gli elementi sulla diagonale Dichiarazione dei redditi classe "contribuente": quadri del modello 740 base classe "autonomi": aggiunta del membro "quadro-E" Il paradigma ad oggetti
27
La gerarchia delle classi
Specializzazione Generalizzazione instanziazione Il paradigma ad oggetti
28
Esempio Object Veicolo Il paradigma ad oggetti VeicoloSenza Motore
Veicolo A Motore Motocicletta Automobile Taxi Il paradigma ad oggetti
29
Aggiungere sottoclassi
Object Veicolo VeicoloSenza Motore Veicolo A Motore Motocicletta Automobile Altro Taxi Il paradigma ad oggetti
30
Ridefinizione dei metodi
Veicolo A Motore Noleggia Motocicletta Automobile Aereo Noleggia ereditano il metodo utilizza la versione locale Il paradigma ad oggetti
31
Polimorfismo Una funzione si dice polimorfa se è capace di operare su oggetti di tipo diverso specializzando il suo comportamento in base al tipo dell’oggetto su cui opera. Tutto ciò che è definito per una classe, vale anche per le sue sottoclassi. Se una proprietà viene ridefinita, quando la uso viene selezionata sempre la versione corretta Esempio: Quando uso un metodo di un oggetto generico, non so: a quali livelli è definito quale tra i metodi omonimi nella gerarchia verrà usato Il paradigma ad oggetti
32
Polimorfismo Polimorfismo orizzontale:
Studente s = new Studente(“Rossi”); s.print(); Point p = new Point(3, 5); p.print(); Polimorfismo verticale: Persona p = new Studente(“Rossi”); p.print(); // stampa nome e matricola (legame dinamico) Il paradigma ad oggetti
33
Visibilità dei nomi Il messaggio inviato all’oggetto
nome gerarchia di classi Il messaggio inviato all’oggetto risale nella gerarchia fino a trovare una definizione b.nome oggetto b oggetto a Il paradigma ad oggetti
34
Ereditarietà multipla
Meccanismo che consente di derivare sottoclassi da due o più classi Il problema degli omonimi Java non implementa ereditarietà multipla Taxi Automobile Mezzo Pubblico Il paradigma ad oggetti
35
Riuso del software Classi specifiche sviluppo interno
Classi specializzate dal fornitore di classi Classi generali col linguaggio Linguaggio Il paradigma ad oggetti
36
La classe Object: metodi
Il paradigma ad oggetti
37
Polimorfismo public class TestToString {
static public void main(String[] args) { Object o = new Object(); System.out.println(o); MyObject m = new MyObject(); System.out.println(m); MyObjectExt e = new MyObjectExt(); System.out.println(e); } class MyObject extends Object { } class MyObjectExt extends MyObject { public String toString() { return "Oggetto MyObjectExt"; Oggetto MyObjectExt Il paradigma ad oggetti
38
Polimorfismo public class TestToString {
static public void main(String[] args) { Object o = new Object(); System.out.println(o); o = new MyObject(); o = new MyObjectExt(); } class MyObject extends Object { } class MyObjectExt extends MyObject { public String toString() { return "Oggetto MyObjectExt"; Oggetto MyObjectExt Il paradigma ad oggetti
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.