Programmazione Orientata agli Oggetti

Размер: px
Начинать показ со страницы:

Download "Programmazione Orientata agli Oggetti"

Транскрипт

1 Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato in funzione di tipi già esistenti si specifica soltanto le parti in cui la nuova classe differisce da quelle note (programmazione per differenze) consente di riciclare tutto il codice presente nelle librerie /02 1

2 Esempio Supponiamo di aver creato una classe per rappresentare i vettori class vettore<t>; È possibile derivare dalla classe precedente una nuova classe che gestisce i vettori ordinati. Non dobbiamo modificare la rappresentazione interna Non dobbiamo modificare tutti i metodi anzi li utilizziamo quasi tutti Dobbiamo modificare solo alcuni metodi/operatori tipo: push_back(); operator[]; 2 Ereditarietà Il meccanismo dell ereditarietà permette di definire una classe in termini di una classe definita in precedenza la nuova classe eredita la rappresentazione in memoria e l interfaccia della sua classe base il programmatore non deve riscrivere tutto il codice che è in comune tra la classe base e la nuova classe il programmatore può modificare l implementazione di alcuni dei metodi ereditati, può aggiungere attributi L ereditarietà consente di implementare relazioni di specializzazione (isa) tra tipi di dato /02 2

3 Relazioni di Specializzazione Consideriamo la classe Video definita nelle precedenti lezioni class Video stringa di char di dimensione altezza*larghezza class Window è un tipo particolare di Video dimensioni variabili posizione relativa rispetto al video class Menu è un tipo particolare di Window visualizzazione a comparsa selezione tramite mouse 4 Esempio: Sistema Informativo Zoo Estinzione Erbivoro AnimaleZoo Uccello Orso Pesce Felino Panda OrsoBianco Grizzly Yoghi /02 3

4 Derivazione di Classi Il meccanismo della derivazione di classi implementa l operazione di ereditarietà della programmazione ad oggetti La classe derivata può utilizzare tutti i dati ed i metodi non privati della classe base come propri elementi non c è bisogno di riscrivere i metodi ereditati dalla classe base, a meno che non debbano essere modificati Il livello di accesso di un membro della classe può essere privato, pubblico e protetto I membri protetti non sono visibili dall esterno della classe ma sono ereditabili 6 Polimorfismo Il polimorfismo consente di programmare senza tener conto dei dettagli relativi all implementazione di una gerarchia di classi L utente opera sull interfaccia pubblica della classe base Un oggetto di qualunque classe della gerarchia contiene l interfaccia della classe base L implementazione dei metodi può essere differente Quando il programma invoca un metodo della classe base attraverso un oggetto Viene eseguita l implementazione del metodo contenuta nella classe a cui appartiene l oggetto /02 4

5 Esempio di polimorfismo stampa(animalezoo *pa) { pa disegna(); } 8 Progettazione di un sistema per la gestione di poligoni Vogliamo implementare una gerarchia di classi per la gestione di poligoni Bisogna decidere Quali sono gli attributi della classe base e quali aggiungere nelle classi derivate Quali metodi ridefinire nelle classi derivare, quali in quella base /02 5

6 La gerarchia di classi figura poligono cerchio quadrato rombo rettangolo 10 Sistema per la gestione di poligoni 1 Ci saranno attributi per Numero lati, lati Numero vertici, vertici Colore bordo, colore sfondo // Non li utilizzeremo Non ci preoccuperemo di verificare se una serie di lati rappresenta un poligono /02 6

7 Sistema per la gestione di poligoni 2 Ci saranno dei metodi per Calcolare l area del poligono Calcolare il perimetro del poligono Metodi di accesso // Non li implementeremo Leggi/Setta numero lati Leggi/Setta valore per ogni lato Stampa del poligono // Non verrà implementato 12 Interfaccia Pubblica di Poligono class Poligono { public: Poligono(); Poligono(int N, const vector<double>&); // Crea un poligono con N lati con // grandezze memorizzate nel vettore Poligono(const vector<punti>&); double area(); double perimentro(); void setta_sfondo(colore); // Non implementato void setta_bordo(colore) // Non implementato void disegna(); // Non implementato }; /02 7

8 Rappresentazione Poligono class Poligono { protected: int _NumLati; vector<double> _Lati; color _Sfondo; // color potrebbe essere un enum color _Bordo; }; 14 Uso della classe Poligono #include Poligono.h" int main() { } vector<double> quadrato(4,0); quadrato[0]=quadrato[1]=quadrato[2]=quadrato[3]=4; Poligono p(4,quadrato); cout << p.area() << endl; cout << p.perimetro() << endl; /02 8

9 Proprietà della classe Poligono Il metodo per il calcolo del perimetro è uguale per ciascun tipo di poligono Il metodo per il calcolo dell area è diverso per ciascun tipo di poligono Il programma deve ignorare queste differenze e operare su un unico metodo 16 Classe Poligono La classe Poligono identifica il concetto astratto di poligono Ogni figura geometrica ha una funzione per il calcolo dell area Ogni figura geometrica, di qualunque tipo, può essere convertita in un oggetto poligono /02 9

10 Classe Poligono Se il metodo disegna() è polimorfico è possibile scrivere un programma del genere (disegna() è definito come funzione virtuale di Poligono) void stampa(const Poligono* pq) { pq->disegna(); } int main() { Quadrato q; Rettangolo rt; Rombo rm; stampa(&q); stampa(&rt); stampa(&rm); } 18 Progettazione di una Gerarchia di Classi Il paradigma dell object oriented è basato sui concetti di fornitore e utente Il fornitore progetta ed implementa la classe base Altri fornitori progettano ed implementano classi derivate L utente usa l interfaccia pubblica della gerarchia L utente dovrebbe essere messo in condizione di ignorare la struttura della gerarchia Deve conoscere solo l interfaccia pubblica della classe base Gli altri sviluppatori dovrebbero essere messi in grado di poter sviluppare classi derivate trasparenti all utente /02 10

11 Progettazione di una Gerarchia di Classi Nel progettare una classe si deve rispondere ai seguenti quesiti Quali operazioni deve fornire l interfaccia pubblica dell intera gerarchia? Quali di queste operazioni hanno implementazioni diverse per ciascuna classe derivata? Quali membri dato sono comuni a tutta la gerarchia? Quali membri dato devono essere visibili per poter costruire classi derivate? /02 11

La programmazione ad oggetti (OOP)

La programmazione ad oggetti (OOP) Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente

Подробнее

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Подробнее

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

INFORMATICA OOP Relazioni tra classi Roberta Gerboni 2015 - Roberta Gerboni Relazione di associazione E possibile legare varie classi presenti in un progetto con una relazione di associazione. Una associazione individua una connessione logica tra classi

Подробнее

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami

Подробнее

ereditarietà e polimorfismo

ereditarietà e polimorfismo ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze

Подробнее

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Подробнее

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

Подробнее

Programmazione orientata agli oggetti. Ivan Lanese

Programmazione orientata agli oggetti. Ivan Lanese Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows

Подробнее

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Подробнее

Programmazione orientata agli oggetti Classi astratte e interfacce

Programmazione orientata agli oggetti Classi astratte e interfacce Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma

Подробнее

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Подробнее

Esercitazione n 3. Obiettivi

Esercitazione n 3. Obiettivi Esercitazione n 3 Obiettivi Capacità di analisi e di estensione di progetti esistenti Linguaggio Java: Ereditarietà delle classi Utilizzo di costruttori e metodi di superclasse Visibilità: public, private,

Подробнее

Introduzione alla programmazione Object Oriented. Luca Lista

Introduzione alla programmazione Object Oriented. Luca Lista Introduzione alla programmazione Object Oriented Luca Lista Concetti base del software OO Classi e oggetti Incapsulamento Relazione di ereditarietà Polimorfismo Cos è un Oggetto? Definizione da vocabolario:

Подробнее

Il paradigma OO e le Classi

Il paradigma OO e le Classi Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui

Подробнее

18 - Classi parzialmente definite: Classi Astratte e Interfacce

18 - Classi parzialmente definite: Classi Astratte e Interfacce 18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Подробнее

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Подробнее

Ereditarietà e Polimorfismo

Ereditarietà e Polimorfismo Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le

Подробнее

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1 Incapsulamento Paradigmi della PO Ereditarietà Polimorfismo Software per TLC - AA 2008/2009 1 Incapsulamento Una classe contiene dati e metodi Filosofia Ai dati si accede solo attraverso i metodi I metodi

Подробнее

Programmazione ad Oggetti

Programmazione ad Oggetti Programmazione ad Oggetti Analisi e Progettazione OO Origini Le metodologie ad oggetti nascono negli anni 70 ma si affermano solo negli anni 80 grazie alla nascita dei linguaggi di programmazione ad oggetti

Подробнее

Il linguaggio C++ Ugo de Liguoro

Il linguaggio C++ Ugo de Liguoro Il linguaggio C++ Ugo de Liguoro Caratteristiche Il C++ è class based; interpreta le classi come tipi; il subtyping coincide con la (chiusura transitiva della) relazione di sottoclasse; è basato sul C

Подробнее

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1. OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro [email protected] Programmazione,

Подробнее

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Подробнее

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009 UML Il linguaggio UML e ArgoUML 30/09/2009 Ingegneria dei sistemi software 2009/2010 [email protected] UML Unified Modeling Language una famiglia di notazioni grafiche standardizzate* orientata

Подробнее

CLASSI ASTRATTE - ESERCIZIO

CLASSI ASTRATTE - ESERCIZIO CLASSI ASTRATTE - ESERCIZIO Definire una tassonomia di forme geometriche non esiste la generica forma geometrica! esistono triangoli, quadrilateri, pentagoni,... Forme può ben essere una classe astratta

Подробнее

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Подробнее

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Подробнее

Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre Corrado Santoro

Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre Corrado Santoro Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre 2010 Corrado Santoro Concetto di Oggetto Proposto del 1966 nell'ambito dell'ai per rappresentare l' universo del discorso (ambiente di riferimento

Подробнее

INTRODUZIONE ALLA PROGRAMMAZIONE

INTRODUZIONE ALLA PROGRAMMAZIONE INTRODUZIONE ALLA PROGRAMMAZIONE Prof. Enrico Terrone A. S: 2008/09 Definizioni Programmare significa risolvere problemi col computer, cioè far risolvere problemi al computer attraverso un insieme di informazioni

Подробнее

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Подробнее

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA

Подробнее

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Подробнее