Programmazione orientata agli oggetti. Ivan Lanese
|
|
|
- Claudio Renzi
- 8 anni fa
- Просмотров:
Транскрипт
1 Programmazione orientata agli oggetti Ivan Lanese
2 Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori
3 Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows XP: 40 milioni LoC Google Chrome: 4,5 milioni LoC Scrivere grosse applicazioni è complesso Programmatori diversi scrivono parti diverse della stessa applicazione Un programmatore non può conoscere tutto il codice Importante definire i confini tra diverse parti del codice La programmazione orientata agli oggetti semplifica questo compito
4 Programmazione orientata agli oggetti È un paradigma di programmazione Diverso da quello imperativo visto fin ora Consente di scrivere le stesse applicazioni, ma in modo diverso Molto usato in pratica (C++, Java, C#, Python, ) Pensato per grosse applicazioni, ma utile anche per applicazioni piccole Nato col Simula67 Occorre ragionare in modo diverso L entità base non sono variabili e funzioni, ma gli oggetti Un oggetto contiene dei dati e le funzioni che usano questi dati Un oggetto pila contiene sia i dati della pila che le funzioni top, push, pop e empty Il codice risulta organizzato meglio e più facile da riusare
5 Incapsulamento Un oggetto contiene una parte pubblica e una parte privata La parte pubblica è visibile da chi usa l oggetto La parte privata no Si dice che la parte privata è incapsulata Se un programmatore modifica la parte privata lasciando inalterata quella pubblica gli altri programmatori non se ne accorgono Qualunque sia il programma che scrivono Gli altri programmatori possono ignorare completamente la parte privata Pensate al televisore e al telecomando Se sapete usare il telecomando (parte pubblica), potete usare il televisore senza sapere come è fatto dentro (parte privata)
6 Classi Sono tipi di dato definiti dal programmatore Definiscono sia i valori (campi) che il comportamento (metodi) del dato Un dato il cui tipo è una classe si chiama oggetto Estendono le strutture Consentendo di definire il comportamento del dato Consentendo di nascondere l'implementazione (incapsulamento) L incapsulamento consente di modificare l'implementazione di un tipo di dato (classe) senza dover modificare i programmi che lo usano Per una classe coda posso passare da implementazione con array a implementazione con puntatori
7 Classe rettangolo: progettazione Una classe rappresenta un tipo di entità Esempio, le entità rettangolo Per definirla bisogna decidere Quali sono le informazioni importanti (campi) Quali sono le operazioni su di esso (metodi) Da queste scelte dipende cosa sarà possibile fare con gli oggetti di quel tipo Viceversa, queste scelte dipendono da cosa si vorrà fare con oggetti rettangolo Per la classe rettangolo possiamo scegliere, ad esempio Campi: l (lunghezza), h (altezza) Metodi: perimetro, area Avremmo anche potuto aggiungere Campi: x, y, colore, bordo, orientazione, Metodi: disegna, interseca, sposta,
8 Classe rettangolo: definizione Per definire le classi dobbiamo imparare la loro sintassi I campi si definiscono come nelle strutture (tipo e nome) I metodi (member functions) si definiscono come normali funzioni class rettangolo{ public: int l, h; int perimetro() { return (2*(l+h));} int area() {return (l*h);} }; All interno dei metodi di una classe posso accedere ai campi e agli altri metodi semplicemente col loro nome In questo esempio tutti gli elementi del rettangolo sono public, quindi non si ha incapsulamento: a breve daremo definizioni più raffinate
9 Classe rettangolo: uso Definisco oggetti rettangolo usando il nome della classe come tipo rettangolo r1,r2; Accedo ai campi come a elementi di strutture r1.h = 10; if (r1.l > r1.h) Accedo ai metodi in modo simile cout << r1.perimetro(); if (r2.area() > 5)
10 Esercizio Definire una classe cerchio (ispirandosi alla classe rettangolo) Scrivere un programma che crea un cerchio e ne stampa l area
11 Esercizio (cont) Nel definire la classe cerchio avete dovuto scegliere se memorizzare in un campo il raggio o il diametro Modificare la classe cerchio precedentemente definita cambiando questa scelta (usare il diametro al posto del raggio o viceversa) Il programma precedente funziona anche con la nuova classe cerchio? O dovete cambiare anche altre parti del programma?
12 Incapsulamento Nell esercizio precedente un cambio alla struttura interna del cerchio richiede un cambio del programma che usa il cerchio Questo non va bene Rende il programma difficile da modificare Non posso far sviluppare la classe e il codice che lo usa a persone diverse proprio le cose che la programmazione orientata agli oggetti deve consentire Dipende dal fatto che non abbiamo separato parte pubblica e parte privata L incapsulamento consente ad una classe di nascondere l implementazione (o una sua parte)
13 Public e protected I campi e i metodi di un oggetto possono essere Public: visibili dall esterno Protected: non visibili dall esterno, ma incapsulati dentro class rettangolo{ protected: int l, h; public: void crea(int lun, int alt) {l=lun; h=alt;} int perimetro() { return (2*(l+h));} int area() {return (l*h);} }; Il metodo crea ora è necessario perchè da fuori non vedo più l e h r1.l = 5; ora dà errore
14 Cosa mettere public e cosa mettere protected Dall esterno posso usare solo campi e metodi public Tutto quello che serve all esterno deve essere public Posso modificare campi e metodi protected senza dover modificare i programmi che usano la classe Vorrei avere meno campi e metodi public possibile (information hiding) Ho un trade of Solitamente devono essere protected tutte le informazioni legate all implementazione Tutti i campi I metodi ausiliari In questo caso si parla anche di abstract data type
15 Usare l incapsulamento Modificare la classe cerchio precedente scegliendo il raggio come campo e usando l incapsulamento Cambiare la classe usando il diametro al posto del raggio Nota: questo richiede di cambiare anche i metodi Il programma precedente funziona anche con la nuova classe cerchio? O dovete cambiare anche altre parti del programma?
16 Costruttori Quando si crea un oggetto è necessario inizializzare i suoi campi Se i campi sono public (deprecated!) si può fare dal programma principale Come fare con i campi protected? Notare che solitamente tutti i campi sono protected Occorre un metodo public che li inizializzi In pratica (quasi) ogni oggetto ha bisogno di un metodo che lo inizializzi In C++ questo metodo si chiama costruttore e segue regole particolari
17 Costruttori (cont) Il costruttore ha lo stesso nome della classe Il costruttore non ha nessun tipo di ritorno (neanche void) rettangolo(int lun, int alt) {l=lun; h=alt;} Posso invocare il costruttore in due modi: rettangolo r1=rettangolo(5,6); //normale rettangolo r1(5,6); //abbreviato Da notare che NON posso scrivere r1.rettangolo(5,6); Il costruttore deve essere invocato al momento della dichiarazione dell oggetto
18 Classi: esercizi Definire una classe persona con un opportuno costruttore e metodi presentati e compianno Definire una classe frazione con un opportuno costruttore e metodi stampa, moltiplica e inverso Il metodo moltiplica prende come parametri due frazioni e mette il risultato nella frazione su cui è invocato Il metodo inverso inverte la frazione su cui è invocato Nota: all interno di un metodo di una classe posso usare i campi protected di altri oggetti della stessa classe (ad esempio ricevuti come parametri)
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
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
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),
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
14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
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
Laboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
Programmazione Orientata agli Oggetti
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
Introduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito
Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
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
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
Implementazione Java di un ADT
Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Dati aggregati. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture
Object-Oriented Programming
Object-Oriented Programming Una metodologia di programmazione che consente di modellare la realtà in modo più naturale e vicino all uomo Concetti fondamentali Oggetto Incapsulazione Messaggio Classe Ereditarietà
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
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
Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari
Astrazione Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 10 mag, 2016 Sommario 1 Astrazione dati Incapsulamento Esempio / ADT pila
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
Esempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
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.
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
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
Proprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
Allocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
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
Esercitazione n 2. Obiettivi
Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti
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
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
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/
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
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
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
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
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Paradigma O.O. Oggetti e Classi Ereditarietà Paradigma Object-Oriented Il paradigma O.O. si ispira all ambiente che ci circonda,
Linguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
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
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,
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Polimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++
Informatica 3 Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Lezione 7 -
Introduzione all OOP!
Introduzione all OOP! Introdurre l evoluzione dei linguaggi di programmazione e la loro classificazione Introdurre l OOP (astrazione, incapsulamento, ereditarietà) Dal C a Java un primo esempio 1 LINGUAGGI
Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,
