Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Introduzione alla Programmazione ad Oggetti
2
Qual è il problema? Abbiamo visto che lo sviluppo e la gestione di software complesso richiede: Un più alto livello di astrazione Una maggiore protezione dei dati Un facile riutilizzo del codice già scritto ATTENZIONE: qualsiasi software si può scrivere con qualsiasi linguaggio che abbia la potenza computazionale del linguaggio while Ma quanto tempo richiede? Ma quanti rischi di introdurre errori? Ma quanto è difficile la manutenzione?
3
Qual è la soluzione? La soluzione può essere un linguaggio di programmazione che metta a disposizione nativamente costrutti per Un più alto livello di astrazione Una maggiore protezione dei dati Un facile riutilizzo del codice già scritto Attraverso La definizione di entità che uniscono dati e codice
4
Esempio Un contatore definito tramite un costrutto ADTdef Contatore {
/* attributi (non accessibili) */ int val; /* operazioni ammesse */ void setVal(int newVal) {val = newVal;} void inc() {val++;} int getVal() {return val;} }
5
Esempio Uso: main() { Contatore cont; /* istanzio un oggetto Contatore*/ Contatore cont2; /* ne istanzio un altro */ cont.setVal(0); cont2.setVal(1); cont.inc(); /* invoco delle operazioni sul contatore */ /* o, più precisamente, richiedo al contatore cont di eseguire dei servizi */ cont2.inc() /* posso invocare le stesse operazioni sull'altro contatore: non modificano il primo contatore */ if(cont.getVal() > MAX) {...}
6
Esempio Non è possibile chiedere operazioni non ammesse cont++;
Il compilatore dà errore: cont non è un intero cont.val=cont*345; cont.val++; Errate entrambe: il dato val è accessibile solo tramite le operazioni di cont
7
Protezione dei dati – esempio
Vediamo un esempio: l’attributo età della classe Persona ADTdef Persona { /* attributi (non accessibili) */ ... int età; /* deve essere >= 0 */ /* operazioni ammesse */ void setEtà(int nuovaEtà) {if (nuovaEtà >=0) età = nuovaEtà; else ERRORE; }
8
Protezione dei dati – esempio (2)
Uso della classe Persona Persona p; p.setEtà(21); Corretto, la variabile età di p adesso vale 21 p.setEtà(-2); Sbagliato, il metodo setEtà controlla il nuovo valore, non permette la modifica e segnala errore La variabile età di p vale sempre 21
9
Protezione dei dati - vantaggi
Il controllo è incluso nell’entità Viene codificato una volte per tutte Altrimenti, si dovrebbe fare il controllo ogni volta che si modifica il valore della variabile La protezione dei dati impone di accedere alle variabili solo attraverso l’uso dei metodi Il controllo sulle modifiche può essere cambiato in futuro senza dover cambiare il resto del software
10
Oggetti Nel nostro esempio, cont e cont2 sono “oggetti” del linguaggio, cioè entità che racchiudono (“incapsulano”) dati e codice Oggetto Entità software che modella un oggetto reale Composto da uno stato e una interfaccia Entità che unisce dati e le operazioni su di essi Astrazione di dato (istanza di un tipo di dato astratto)
11
Stato Contiene le informazioni sullo stato dell’oggetto
Nascosto all’esterno È composto da un insieme di variabili (chiamate attributi o campi) Lo stato può essere composto a sua volta da oggetti (si parla di composizione di oggetti)
12
Interfaccia È costituita dalle operazioni (metodi) che possono essere invocati dall’esterno I metodi servono per agire sullo stato Solo tramite i metodi si agisce (o si dovrebbe agire) sullo stato
13
Schema logico di un oggetto
interfaccia stato
14
Classi Oggetti diversi possono avere la stessa struttura
Una classe descrive la struttura comune a più oggetti In termini di attributi e operazioni I valori dei singoli oggetti possono essere diversi Tipo di dato astratto Sorta di “stampino” per creare oggetti Il processo di classificazione è intrinseco nei processi cognitivi umani
15
Classi e oggetti Le classi sono definite staticamente dal programmatore Gli oggetti sono creati dinamicamente durante l’esecuzione del programma Gli oggetti possono essere considerati come dei “server” che mettono a disposizione dei servizi Modello client-server Ogni operazione invocabile dall’esterno è un servizio che l’oggetto mette a disposizione
16
Modello client-server
Il modello client-server presuppone l’esistenza di due ruoli: Client Richiede il servizio Conosce il server Server Mette a disposizione il servizio Non conosce a priori il client Spostamento del fuoco: NON chiamare una funzione che agisca su un’entità, MA chiedere all’entità di svolgere un servizio
17
Punto di vista Procedurale Ad Oggetti operazione (oggetto, parametri)
Esempio inserisci(Lista, Elemento) oggetto.operazione (parametri) Esempio Lista.inserisci(Elemento)
18
Esempi e vantaggi Esempio:
dato un vettore, NON invocare una procedura di ordinamento, MA chiedere al vettore di ordinarsi dato un file, non invocare una funzione che scriva dati sul file, ma chiedere al file stesso di svolgere il servizio relativo alla scrittura di file su di esso I client non conoscono l’organizzazione interna dei centri di servizio, e non possono accedere direttamente a essa non interessa l'algoritmo (come sono fatte le cose) ma interessa che le cose vengano fatte i clienti sono indipendenti da come sono fatti i server: facilita la manutenzione
19
Filosofia oo Applicazione = insieme di oggetti che interagiscono
Interazione tra oggetti tramite scambio di messaggi (invocazione di metodi) Rapporto client-server (dinamico) tra oggetti Semantica per riferimento In alcuni linguaggi, si ha il concetto di ambiente
20
Cosa c’è di nuovo? Attenzione: Nuovo livello di astrazione
quello che viene eseguito è sempre codice in linguaggio macchina! Nuovo livello di astrazione Più vicino al mondo da modellare Nuovi costrutti linguistici Danno nuove possibilità al programmatore
21
Astrazione e classificazione
Il mondo da implementare in SW è modellato ad oggetti Oggetto = entità indivisibile di strutturazione L’oggetto ha una identità precisa e permanente Dal mondo reale (complesso) vanno selezionati quegli aspetti che ci interessano semplificazione
22
Classe Classificazione Classe Oggetto
insiemi di oggetti possono condividere gli stessi comportamenti Classe entità descrittiva che raggruppa tutte le definizioni (dello stato e delle operazioni) che caratterizzano un insieme di oggetti Oggetto istanza di una classe
23
Classe - oggetto Forte dipendenza tra l’oggetto e la classe di cui è istanza la relazione classe-istanza perdura per tutto il tempo di vita della istanza l’istanza ritrova nella classe il codice da eseguire a fronte di una richiesta
24
Classe - oggetto (2) Variabili di istanza Variabili di classe
ogni istanza ne possiede una copia l’esistenza è legata all’esistenza dell’istanza Variabili di classe sono condivise da tutte le istanze della classe esistono indipendentemente dall’esistenza di istanze Metodi di classe e di istanza
25
Esempio Gestione di corsi di laurea
26
Individuare le entità Progettiamo un programma che gestisca i corsi di laurea Come primo passo dobbiamo individuare quali sono le entità del mondo reale che vogliamo modellare nel software come classi Corsi di Laurea (CdL) Studenti Esami Ma anche Contatori Date …
27
Definire attributi e operazioni
Classe CdL attributi: nome, esami, studenti iscritti, contatore globale degli esami superati metodi: aggiungere uno studente, recuperare uno studente, sapere quanti esami sono stati superati Classe Studente attributi: nome, cognome, matricola, data iscrizione, anno iscrizione, elenco esami superati, numero totali esami superati metodi: aggiornare esami superati e numero esami, e anno di iscrizione, sapere se lo studente ha superato un certo esame NON DI DEVONO POTER FARE: diminuire anno iscrizione o numero esami superati, cambiare nome/cognome. Classe Esame attributi: nome corso, promosso/bocciato, data superamento, voto metodi: per dare un voto positivo e leggere il nome dell’esame e il voto preso NON SI DEVONO POTER FARE: modifica voto, modifica da promosso a bocciato. Classe Contatore: come in precedenza
28
Creare oggetti A tempo di esecuzione vanno creati gli oggetti che rappresentano le entità del mondo reale Un oggetto CdL per ogni corso di laurea Un oggetto Studente per ogni nuovo studente che si iscrive, che diventerà un attributo dell’oggetto CdL di cui fa parte Un oggetto Esame per ogni esame superato, che diventerà un attributo dell’oggetto Studente che rappresenta lo studente reale che ha superato l’esame
29
Conta esami Informatica
A runtime Analisi 26 Stud. 453 Fisica 28 Informatica Conta esami 453 Conta esami Informatica main Analisi 21 Stud. 454 Fisica Conta esami 454 Fisica 24 Matematica
30
Note sull’esempio Gli oggetti vengono creati quando servono, non si ha semplicemente una dichiarazione iniziale di tutti gli oggetti (come succede per le variabili in programmi C) Gli oggetti devono in qualche modo “conoscersi” l’un l’altro per poter interagire, richiedendosi servizi l’un l’altro Tale conoscenza si ha attraverso “riferimenti” tra oggetti, che rappresentano in qualche modo degli “indirizzi” Un oggetto che crea un altro oggetto, necessariamente conosce il suo indirizzo Un oggetto che non ha creato un altro oggetto ma ha bisogno di chiedergli servizi deve in qualche modo venire a conoscenza del suo indirizzo Può essere comunicato dal creatore ad altri oggetti tramite una sorta di “passaparola” Gli oggetti sono entità indipendenti e non inclusi l’uno nell’altro
31
Caratteristiche della OOP
32
Caratteristiche Incapsulamento Ereditarietà Polimorfismo Introspezione
33
Incapsulamento Due aspetti
Ogni oggetto “incapsula” dati e codice Ogni oggetto protegge i suoi dati verso l’esterno Solo l’oggetto può manipolare i dati che contiene Dall’esterno uso dell’interfaccia Stato = insieme di variabili valori primitivi riferimenti ad altri oggetti
34
Ereditarietà Una classe può derivare da un’altra classe, estendendola e specializzandola La classe figlia eredita le variabili e le operazioni dalla classe padre La classe figlia aggiunge le proprie variabili e le proprie operazioni a quelle del padre Gerarchia delle classi Classe radice
35
Ereditarietà (2) Un modo per riutilizzare il codice
implementazione Ma anche un modo per definire una relazione tra le classi e tra i tipi che rappresentano progetto
36
Polimorfismo Alla stessa richiesta di operazione possono corrispondere comportamenti diversi a seconda dell’oggetto che esegue l’operazione del contesto di esecuzione del tipo di parametri passati
37
Introspezione Capacità di un oggetto di “guardarsi dentro”
Meta-classi, classi che descrivono: classi metodi variabili
38
Introspezione (2) Possibilità di: determinare la classe di un oggetto
avere informazioni su campi, metodi, modificatori, costruttori e superclassi di una classe creare una istanza di una classe il cui nome sia conosciuto solo a runtime ottenere e modificare il valore di un campo il cui nome sia conosciuto solo a runtime invocare un metodo campo il cui nome sia conosciuto solo a runtime ...
39
I linguaggi OO - estensioni
C C++ C ObjectiveC Pascal Turbo Pascal ad oggetti Lisp Xlisp Limiti Non OOP pura Trucchi per usare OO Programmazione ibrida
40
Linguaggi OO puri Smalltalk Forté Eiffel Java C#
41
Vantaggi della OOP Facilitazione di costruzione cooperativa di software: diverse persone sviluppano diverse classi ogni programmatore può semplicemente verificare il comportamento delle sue classi istanziandone oggetti e verificandone il comportamento in risposta a richieste di servizio unico accordo necessario per integrare il tutto in un unico sistema finale: definire le interfacce (quali metodi e quali parametri) delle classi
42
Vantaggi della OOP (2) Facilitazione della gestione e manutenzione
Se vi sono errori sui dati in un oggetto, è facile scoprire dove si trova l'errore, perché (siccome i dati non sono visibili all'esterno dell'oggetto) esso non potrà essere che all'interno dell'oggetto che gestisce quei dati le modifiche a una classe non rendono necessario modificare il resto del programma (le altre classi) a meno che non venga modificata l'interfaccia
43
Vantaggi della OOP (3) Supporto a progettazione e sviluppo incrementali si possono definire nuove classi sfruttando il codice di classi già esistenti (p.e., una classe studente a partire da una classe persona) Possibilità di rapida prototipazione non importa che una classe sia completamente definita per poter iniziare a "testare" il funzionamento degli oggetti di quella classe.
44
Costi della OOP Necessità della mentalità OO
Infrastruttura costosa per applicazioni semplici Non banale la definizione delle classi Attenzione a finta OOP una sola classe troppe classi COBOL ad oggetti (!!!)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.