Introduzione alla programmazione Object Oriented

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Introduzione al C++ e alla programmazione ad oggetti Corso Specialistico CNTC Bologna, febbraio 2001 Andrea Dell’Acqua e Claudio Grandi.
Scomposizione funzionale
Unified Modeling Language
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Programmazione object oriented in C++
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
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
Programmazione orientata agli oggetti OOP Object Oriented Programming
©Carlo Tasso 1999 Object Oriented Programming Slide 1 OO Analysis Vs. OO Design OOA – Object Oriented Analysis. –Specifica COSA, IN QUALE CONTESTO il sistema.
Distributed Object Computing
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
eliana minicozzi linguaggi1a.a lezione2
Overriding.
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 4 1 Sulla realizzazione dellereditarietà 4 Ereditarietà: statica / dinamica 4 Binding: statico.
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Programmazione Corso di laurea in Informatica
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
CAPITOLO 3 ELEMENTI DI PROGRAMMAZIONE OBJECT-ORIENTED.
nome: sequenza di caratteri usata per denotare un oggetto
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Subtype Polymorphism. Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch.
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Java base IV: Java e la programmazione O.O.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
Introduzione alla modellazione di sistemi interattivi
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Analisi (Analista) Progettazione (Progettista) Sviluppo o Traduzione (Sviluppatore) Documentazione.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
1Ingegneria Del Software L-A Progetto realizzato da: Luca Iannario, Enrico Baioni, Sara Sabioni. A.A. 2008/2009.
I nomi in Java F. Bombi 18 novembre novembre 2003.
1 cin>>c8 s.r.l A.A Generalità Uno dei concetti largamente adottati negli ultimi anni dai professionisti del software in fase di sviluppo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
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
Diagramma delle Classi
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.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
OBJECT ORIENTED DATABASE introduzione. OGGETTO Ha due componenti:  stato: valore di alcune variabili (variabili di istanza)  comportamento: insieme.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Fondamenti di Informatica 2 Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
La Programmazione ad Oggetti
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
La programmazione ad oggetti
UML Unified Modelling Language Linguaggio per la modellazione unificato.
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:

Introduzione alla programmazione Object Oriented Luca Lista

Concetti base del software “OO” Classi e oggetti Incapsulamento Relazione di ereditarietà Polimorfismo Nella schermata del video-gioco ci sono uno decina di arcieri: ognuno di questi e’ un oggetto della classe Arciere. La classe definisce il comportamento: cioè che cosa gli oggetti di questa classe possono fare (l’interfaccia) e come (l’implementazione). I vari oggetti differiscono per il loro stato: I vari arcieri sono differenti e ognuno ha la sua posizione, il numero di frecce, quanto è e’ ferito etc. Queste informazioni sono incapsulate nell’oggetto come e incapsulata l’implementazione di ogni servizio. L’utente parla con l’oggetto attraverso un’interfaccia che si spera stabile: come internamente lo stato dell’oggetto è rappresentato e come ogni servizio sia implementato è nascosto e può essere quindi modificato senza dover modificare anche il codice dell’utente. Nel video-gioco vediamo anche che i vari personaggi hanno una interfaccia comune, muovono, attaccano etc, ma ognuno svolge quest'attività a modo suo. Questo comportamento è detto polimorfico ed è implemenrato attraverso la relazione di ereditarietà: Arciere, Falange, Catapulta ereditano tutti da una classe di base comune Personaggio che dichiara l’interfaccia comune, che viene poi specializzata in modo diverso dalle varie classi figlie.

Cos’è un Oggetto? Definizione da vocabolario: Il confinamento di informazioni e funzionalità in oggetti permette livelli maggiori di astrazione e semplifica la gestione di sistemi complessi. “Un oggetto è un’entità che si possa immaginare dotata di determinate caratteristiche e funzionalità”.

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 diversi componenti scambio di messaggi =

Simulazione: un Videogioco Attributi

Oggetti e Classi di Oggetti Istanze (Oggetti) Orco Cavaliere

Interfaccia Implementazione 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 Messaggio Metodo Attributo Attributo Attributo

Soldato

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.

Che succede se devo aggiungere nuovi tipo di soldato? // 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 modo specifico Il programma client ignora i dettagli di implementazione e gestisce in modo omogeneo tutti i sottotipi di forma ereditarietà

Perché 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

In C++ il controllo è fatto dal compilatore (strong typing) 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 Consistenza dei tipi verificata dal compilatore Weak Consistenza dei tipi verificata a run-time Binding Assegnazione di un metodo ad un messaggio Early In fase di programmazione INFLESSIBILE Late A run-time POLIMORFISMO

La classe concreta eredita da quella astratta 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