La programmazione ad oggetti

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Programmazione ad oggetti
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Programmazione object oriented in C++
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Principi di Programmazione Object-Oriented
Principi di Programmazione Object-Oriented
Fondamenti di Informatica
2 luglio 2006URM2 – ING- OOP0304 OL G. Cantone e A. Lomartire 1 Programmazione Orientata agli Oggetti Processi, task e thread Java (ed esempi) Università
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Introduzione al linguaggio Java
Overriding.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
CAPITOLO 3 ELEMENTI DI PROGRAMMAZIONE OBJECT-ORIENTED.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Progettazione di una base di dati
Java base IV: Java e la programmazione O.O.
CLASSI ED EREDITARIETÀ Come si è visto, è cruciale che la gerarchia rispecchi la realtà del mondo ma a volte ciò contraddice principi di efficienza Esempio:
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
Introduzione alla programmazione Object Oriented
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
OOP Object Oriented Programming Programmazione Orientata agli Oggetti
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Incapsulamento e information hiding
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Gestione dei thread in Java
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
La Programmazione ad Oggetti
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Attività 1 Introduzione alla OOP
Primi principi della OOP
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
28/12/2001package 1 Package Pacchetti e interfacce.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

La programmazione ad oggetti Il paradigma a oggetti La programmazione ad oggetti

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

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

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

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

Oggetto automobile Funzioni Dati: - Avviati - Targa - Fermati - Colore - Accelera - Velocità - … - Livello benzina - ... Il paradigma ad oggetti

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

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

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

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

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

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

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

“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

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

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

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

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

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

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

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

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

Oggetti composti Un oggetto può essere costituito da altri oggetti automobile ruota carrozzeria motore Il paradigma ad oggetti

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

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

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

La gerarchia delle classi Specializzazione Generalizzazione instanziazione Il paradigma ad oggetti

Esempio Object Veicolo Il paradigma ad oggetti VeicoloSenza Motore Veicolo A Motore Motocicletta Automobile Taxi Il paradigma ad oggetti

Aggiungere sottoclassi Object Veicolo VeicoloSenza Motore Veicolo A Motore Motocicletta Automobile Altro Taxi Il paradigma ad oggetti

Ridefinizione dei metodi Veicolo A Motore Noleggia Motocicletta Automobile Aereo Noleggia ereditano il metodo utilizza la versione locale Il paradigma ad oggetti

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

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

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

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

Riuso del software Classi specifiche sviluppo interno Classi specializzate dal fornitore di classi Classi generali col linguaggio Linguaggio Il paradigma ad oggetti

La classe Object: metodi Il paradigma ad oggetti

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"; java.lang.Object@720eeb MyObject@310d42 Oggetto MyObjectExt Il paradigma ad oggetti

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"; java.lang.Object@720eeb MyObject@310d42 Oggetto MyObjectExt Il paradigma ad oggetti