Introduzione alla programmazione Object Oriented. Luca Lista

Похожие документы
OOP in Python L O R E N Z O D I S I L V E S T R O

La programmazione ad oggetti: chiamate di metodi. Overloading. This

Programmazione Orientata agli Oggetti

La classe java.lang.object

Analisi e progettazione ad oggetti

Indice. Prefazione. 3 Oggetti e Java 53

Ereditarietà e Polimorfismo

Riassunto. La programmazione OO. Oggi. Esempio

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Proprietà delle Classi e degli Oggetti in Java

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

Ingegneria del Software

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

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Modelli e Metodi per la Simulazione (MMS)

Linguaggi di programmazione e astrazione

Elena Baralis 2007 Politecnico di Torino 1

Prefazione. Capitolo 1 Sistemi di elaborazione 1

Progetto sito web Gigli Elisa

Processi decisionali e modelli di simulazione

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

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Ingegneria del Software 4. Introduzione a UML. Dipartimento di Informatica Università di Pisa A.A. 2014/15

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Programmazione di INFORMATICA e Laboratorio

Laboratorio di Progettazione di Sistemi Software Design Patterns

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Introduzione alla OOP Object Oriented Programming

Corso Programmazione Java Standard

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Rappresentazione con i diagrammi di flusso (Flow - chart)

I DSS e la gestione dei dati e della conoscenza. Prof. Luca Gnan

Introduzione. Java. Esempio. Esempio

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

LABORATORIO di Reti di Calcolatori

Il linguaggio di programmazione Python

Programmazione ad oggetti

SOMMARIO DESIGN PATTERN

Gerarchia di Generalizzazione. Esempio. Rappresentazione grafica. Cap. 4 - Modello E/R avanzato: Gerarchie di Generalizzazione/ specializzazione

Laboratorio di programmazione

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

I Tipi di Dato Astratto

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

SOMMARIO. Introduzione

Come ragiona il computer. Problemi e algoritmi

Istruzioni Condizionali

Modelli di interazione tra processi

Lezione 16. Il Software di base

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla programmazione. Walter Didimo

Modulo 16. Introduzione ai Design Patterns. Tutte le case assolvono alla medesima funzione: offrire uno spazio abitativo

DBMS. Affidabilità. Privatezza dei dati. Efficienza. Efficacia. Un DBMS deve garantire:

Транскрипт:

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: Un oggetto è un entità che si si possa immaginare dotata di di determinate caratteristiche e funzionalità. Ilconfinamento di informazioni e funzionalità in oggetti permette livelli maggiori di astrazione e semplifica la gestione di sistemi complessi.

Gli oggetti come modello naturale Gli oggetti nel software possono rappresentare entità del mondo reale Il primo uso di linguaggi a oggetti è stato fatto per effettuare simulazioni Interazioni tra tra diversi componenti = scambio di di messaggi

Simulazione: un Videogioco Attributi

Oggetti e Classi di Oggetti Orco Classi Istanze (Oggetti) Cavaliere

Interfaccia Incapsulamento Definizione dei messaggi (metodi) possibili Unico punto di accesso per l utente all oggetto Implementazione Realizzazione dell azione corrispondente a un messaggio Nascosta all utente Dichiarazione di variabili private (attributi) che definiscono lo stato dell oggetto

Rappresentazione di un oggetto Rappresentazione di un oggetto Messaggio Metodo Messaggio Metodo Attributo Messaggio Metodo Attributo Attributo

Soldato

Esempio: i soldati Esempio: i soldati Tutti i soldati devono capire il messaggio attacca. Il messaggio ha conseguenze diverse a seconda del tipo di soldato: un arciere scaglia una freccia un fante colpisce di spada un cavaliere lancia una lancia Il giocatore/computer deve gestire una lista di soldati e poter chiedere ad ogni soldato di attaccare indipendentemente dal tipo ma basandosi solo sulla posizione.

// esempio di codice rigido! void attacca(soldato tipo) { if ( tipo == arciere ) scaglialafreccia(); else if ( tipo == fante ) colpiscidispada(); else if ( tipo == cavaliere ) lancialalancia(); } Che succede se devo aggiungere nuovi tipo di soldato?

// esempio di codice flessibile Soldato s; //... s.attacca(); //... Se devo aggiungere nuovi tipo di soldato il codice non cambia!

Classi astratte e polimorfismo Diversi tipi di oggetti hanno comportamenti comuni che possono essere considerati in astratto: disegna, sposta, ingrandisci,etc.

Vantaggi del polimorfismo I messaggi comuni (sposta, ingrandisci, ) sono definiti in maniera astratta in nella classe di base forma Le sottoclassi li ereditano e li implementano in Forma modo specifico Client Il programma client ignora i dettagli di implementazione e gestisce in modo omogeneo tutti i sottotipi di forma Rettangolo lato_x lato_y sposta(x, y) ingrandisci(sx, sy) ereditarietà Cerchio raggio centro_x centro_y Poligono lato numero_lati centro_x centro_y Testo testo posizione_x posizione_y font dimensione_font

Perché programmare a oggetti? Programmare a oggetti non velocizza l esecuzione dei programmi non ottimizza l uso della memoria... E allora perché programmare a oggetti? Programmare a oggetti facilita la progettazione, lo sviluppo e il mantenimento di sistemi software molto complessi!

Vantaggi dei programmi a oggetti La programmazione ad oggetti consente di: Ridurre la dipendenza del codice di alto livello dalla rappresentazione dei dati l accesso ai dati è mediato da un interfaccia Riutilizzare del codice di alto livello definendo opportune classi astratte Sviluppare moduli indipendenti l uno dall altro I clienti che dipendono da interfacce che non dipendono dalla loro implementazione Le dipendenze da classi astratte sono più leggere

Difetti del software non mantenibile Rigidità Non può essere cambiato con facilità Non può essere stimato l impatto di una modifica Fragilità Una modifica singola causa una cascata di modifiche successive I bachi sorgono in aree concettualmente separate dalle aree dove sono avvenute le modifiche Non riusabilità Esistono molte interdipendenze, quindi non è possibile estrarre parti che potrebbero essere comuni

Open/Closed principle Un buon codice deve essere: Aperto a estensioni Le richieste di funzionalità del software sono in continua evoluzione Chiuso a modifiche Modificare un codice funzionante può introdurre bachi La programmazione a oggetti, con il meccanismo delle classi astratte, permette di applicare questo principio

C++ e Object Orientation Object Orientation implementata in C++ attraverso il concetto di classe: ¾ Attributi Le variabili di una classe definiscono lo stato dell oggetto ¾ Metodi Le funzioni definite in una classe implementano la risposta ai messaggi

Rappresentazione di un oggetto in C++ Messaggio Funzione Variabile Funzione Messaggio Variabile Variabile Funzione Messaggio

Controllo dei tipi Controllare i tipi significa verificare che ad un oggetto vengano inviati solo messaggi che è in grado di comprendere: controllo del nome del metodo controllo della lista degli argomenti In C++ il controllo è fatto dal compilatore (strong typing) In altri linguaggi (ad esempio SmallTalk) è fatto a run-time (weak typing)

Assegnazione della funzione ad un messaggio I metodi di una classe costituiscono l interfaccia della classe (cioè i messaggi che l oggetto può interpretare) La funzione è assegnata al messaggio in fase di codifica (early binding) Può essere necessario assegnare la funzione al messaggio a run-time (late binding) Ð Polimorfismo

Typing & Binding Typing Definizione dei messaggi e degli argomenti Strong Weak Consistenza dei tipi verificata dal compilatore Consistenza dei tipi verificata a run-time Binding Assegnazione di un metodo ad un messaggio Early Late In fase di programmazione INFLESSIBILE A run-time POLIMORFISMO

Ereditarietà Polimorfismo con tipi controllati dal compilatore (Strong typing & late binding). Come? In C++ viene implementato tramite il concetto di ereditarietà (inheritance) Classe astratta: definisce i messaggi Classe concreta: assegna i metodi ai messaggi La classe concreta eredita da quella astratta