Programmazione a oggetti

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
Classi ed Oggetti in JAVA
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
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.
Fondamenti di Informatica
Calcolatori Elettronici III
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
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.
Argomenti della lezione
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Componenti fondamentali di un programma Java
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
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.
Java come linguaggio di programmazione
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
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 nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Rappresentazione delle durate Lezione 7 Programmazione per la Musica | Prof. Luca A. Ludovico.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezione 3.
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
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.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
La Programmazione ad Oggetti
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
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.
Programmazione a oggetti
Transcript della presentazione:

Programmazione a oggetti Lezione 9 Programmazione a oggetti Programmazione per la Musica | Prof. Luca A. Ludovico

Scaletta Obiettivi: Definire classi contenenti variabili, metodi e costruttori Istanziare oggetti di tali classi Usare l’operatore “.” per accedere a variabili e metodi delle classi Apprendere l’uso dei modificatori d’accesso public e private Creare gerarchie classi con ereditarietà Apprendere l’uso dei modificatori protected, final e static Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Programmazione orientata agli oggetti (OOP) Paradigma di programmazione nato negli anni ’80 che permette di definire oggetti software in grado di interagire gli uni con gli altri attraverso lo scambio di messaggi Non è l’unico paradigma: programmazione procedurale (Fortran, COBOL) programmazione strutturata (Pascal, Ada, C) programmazione funzionale (Lisp, Haskell) … Java non è l’unico esempio di linguaggio object-oriented: lo sono anche Smalltalk, Eiffel, C++, C#, Python, Ruby, ecc. Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Programmazione orientata agli oggetti (OOP) Principali vantaggi: supporto naturale alla modellazione software degli oggetti del mondo reale o del modello astratto da riprodurre più facile gestione e manutenzione di progetti di grandi dimensioni modularità e riuso di codice Principali proprietà: Incapsulamento Ereditarietà Polimorfismo Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Classi ed oggetti La differenza tra classe e oggetto è la stessa differenza che c’è tra tipo di dato e dato. La classe è la descrizione astratta di un tipo di dato: specifica cioè i metodi e gli attributi che quel tipo di dato possiede L’oggetto è una istanza della classe: quando si istanzia una variabile definendola di una certa classe, si crea un oggetto di quella classe rappresentato dal nome della variabile istanziata Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Esempio La classe Melody permetterà di descrivere astrattamente una qualsiasi melodia, ad esempio prevedendo al proprio interno un array di note pitches e una stringa title (attributi) le funzioni contaNote, calcolaMaxPitch, trasponi e stampa (metodi) Definita la classe, posso istanziare 2 oggetti di tale classe chiamati miaMelodia e jingleBells, ciascuno dei quali avrà uno stato differente (sequenza di note e autore differenti) e su cui si potranno invocare i metodi previsti Nell’esempio riportato si prescinde dalla sintassi per definire le classi e per istanziare oggetti (vedi slide successive) Dopo aver descritto la sintassi, si veda l’esempio Melody.java Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Dichiarazione di classi Dichiarazione minimale class MiaClasse { // dichiarazione di attributi, metodi e costruttori } Il corpo della classe contiene (o dovrebbe contenere) tutto il codice che serve per il ciclo di vita degli oggetti di tale classe. Il programmatore può costruire le classi richieste dal proprio codice. Nome della classe, maiuscolo per convenzione Corpo della classe, racchiuso tra graffe Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Dichiarazione di classi class MiaClasse { // dichiarazione di variabili, metodi e costruttori } Attributi: campi (variabili o costanti) che definiscono lo stato dell’oggetto Metodi: funzioni che implementano i comportamenti ammissibili dell’oggetto o che ne riflettono lo stato Attributi e metodi sono entrambi membri di una classe Costruttori: metodi speciali richiamati quando si istanzia un oggetto della classe per inizializzarne lo stato Ad esempio per allocare spazio in memoria e per assegnare valori di default alle variabili Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Esempio public class Note { public int pitch; private int octave; public Note() { pitch = 0; octave = 0; } public int getOctave() { return octave; Si trascurino al momento le parole riservate public e private attributi costruttore metodo Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Definizione di classi Quando si progetta una classe, si decide quali metodi e quali attributi essa contiene: queste entità saranno poi richiamabili dall’esterno della classe da parte del programmatore (con le debite limitazioni). Tale modo di operare trasforma attributi e metodi di una classe nella sua interfaccia verso l’esterno: si può pensare all’oggetto come ad una scatola nera di cui si vede solamente l’interfaccia. L’interfaccia nasconde all’esterno l’implementazione interna. Dall’esterno è noto «cosa fa» un metodo, ma non «come lo fa». I dati interni si possono dunque occultare e rendere accessibili attraverso metodi. Allo scopo si utilizzano i modificatori d’accesso. Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Modificatori Java I modificatori sono le parole chiave capaci di cambiare il significato di un componente di un’applicazione Java Si possono anteporre alla dichiarazione di un componente di un’applicazione Java anche più modificatori alla volta, senza tener conto dell’ordine in cui vengono anteposti I modificatori di accesso sono una categoria di modificatori che regolano essenzialmente la visibilità e l’accesso ad un componente Java Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Modificatori di accesso I membri di una classe si possono definire: public: visibilità totale dall’interno e dall’esterno della classe (attributi accessibili in lettura e scrittura e metodi invocabili da chiunque); private: visibilità ristretta alla classe proprietaria (attributi accessibili e metodi invocabili solo dall’interno della classe) altri modificatori d’accesso verranno introdotti più avanti Quando si progetta una classe è necessario individuare ciò che dovrà essere visibile all’esterno e cosa invece è necessario solo al corretto funzionamento interno: nel secondo caso è pericoloso permettere che altre classi possano modificare variabili o utilizzare funzioni pensate per lavorare sullo stato interno della classe stessa Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Modificatori di accesso e incapsulamento I modificatori di accesso permettono di implementare la proprietà dell’incapsulamento, che ha due principali finalità. Nascondere l’implementazione interna: dall’esterno della classe è noto cosa fa un metodo pubblico, cioè se ne conosce l’interfaccia (funzionalità svolta, parametri in ingresso e tipo restituito), ma non è noto come lo fa Consentire un accesso protetto e «ragionato» dall’esterno: ad esempio è possibile proteggere da scrittura un attributo definendolo private e implementando un metodo pubblico che ne restituisce il valore. Sarà possibile modificare tale valore solo dall’interno della classe; ad esempio è possibile consentire di accedere in scrittura a un attributo non in modo diretto (public), ma definendolo private e creando un metodo public che effettua un controllo sui valori e gestisce eventuali situazioni di errore Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

public [Nome_Classe]([parametri]) { // corpo del metodo } Costruttori Quando un oggetto viene istanziato, cioè quando il compilatore trova la parola riservata new, invoca automaticamente un metodo particolare dell’oggetto: il costruttore Tale metodo è definito secondo alcune regole ben precise: è un membro public della classe ha lo stesso nome della classe non restituisce alcun valore (è un metodo void) public [Nome_Classe]([parametri]) { // corpo del metodo } E’ possibile definire più costruttori (overload del costruttore), che devono distinguersi per numero e tipo di parametri passati. Quando ha senso passare parametri a un costruttore? Ad esempio per inizializzare gli attributi con valori passati all’atto della costruzione dell’oggetto Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Il costruttore di default Nel caso non venga esplicitamente fornito dal programmatore, il compilatore utilizza un costruttore di default. Il costruttore infatti deve esistere comunque in una classe, a prescindere dalla esplicita volontà del progettista Nota miaNota = new Nota(); // richiama il costruttore di default Il costruttore di default non ha alcun parametro di costruzione: eventuali variabili nell’oggetto non inizializzate rimangono tali fino ad una necessaria inizializzazione esplicita successiva Attenzione: se viene esplicitamente definito anche un solo costruttore, allora il costruttore di default non viene costruito Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Istanziare gli oggetti Una volta definita una classe, un oggetto di tale classe si istanzia usando il nome della classe come se fosse un tipo di variabile e richiamandone il costruttore [Nome_Classe] [Nome_Istanza] = new [Nome_Classe](); Nell’esempio di prima, richiamando il costruttore di default: Melody jingleBells = new Melody(); Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

[Nome_Oggetto].[Nome_Membro] L’operatore . Una volta dichiarati i membri di una classe, è possibile accedere ad essi utilizzando il carattere “.” [Nome_Oggetto].[Nome_Membro] Nel caso di tentativo di accesso a un membro inesistente, il compilatore restituisce errore Risulteranno visibili all’esterno solo i membri dichiarati public. Nel caso di tentativo di accesso a un membro private dall’esterno della classe, il compilatore restituisce errore Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Esempi L’istruzione Java System.out.println("Hello World"); chiama il metodo println dell’oggetto System.out, che è fornito nella libreria standard del Java (JDK). Questo metodo stampa a video la stringa che riceve in ingresso. Tale metodo però è proprio dell’oggetto System.out e se proviamo a richiamarlo su un oggetto diverso che non lo contempla, il compilatore restituisce errore: MyNoteClass miaNota = new MyNoteClass(); miaNota.println("Hello World!!!"); // chiamata non valida La classe MyNoteClass di cui miaNota è un’istanza infatti non prevede un metodo pubblico println(). Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Parametro implicito this Dall’interno di un metodo è possibile accedere implicitamente alle variabili e metodi della classe di cui fa parte la funzione stessa Nel caso (sempre evitabile con opportune convenzioni di naming) che una variabile locale nasconda una variabile globale della classe, è necessario poter distinguere In ogni funzione, oltre ai parametri passati in ingresso, esiste sempre una variabile che fa riferimento alla classe stessa: è il parametro implicito this Utilizzando tale parametro e la notazione puntata è possibile disambiguare una variabile locale con lo stesso nome di una globale Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Hello World con la programmazione a oggetti public class Messaggio { private String toPrint; public Messaggio(String print) toPrint = print; } public void print() System.out.println(toPrint); public static void main(String args[]) Messaggio ciaoMondo = new Messaggio("Hello World!"); ciaoMondo.print(); Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

Le classi user-defined La definizione di nuove classi in Java corrisponde alla creazione di un nuovo tipo strutturato di dati Rispetto ai tipi primitivi quali int o char, una classe contiene n attributi e potenzialmente m metodi E’ possibile istanziare oggetti di una seconda classe inclusa nello stesso codice sorgente Si osservi che dal main si ha accesso a tutti i membri della prima classe (in quanto il main è interno alla classe stessa), ma solo ai membri public della seconda classe Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

ESEMPIo Fractions.java Il codice contiene l’implementazione di una classe definita dall’utente per rappresentare i numeri razionali come frazione tra un numeratore e un denominatore intero. Esso contiene: diversi costruttori per inizializzare le strutture dati; metodi ad hoc per effettuare le quattro operazioni aritmetiche elementari sulle frazioni un metodo per semplificare le frazioni, basato sul calcolo del massimo comun divisore un metodo per la rappresentazione in formato stringa delle frazioni. Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti

ESERCIZIo Si riveda il codice relativo alla classe Fractions allo scopo di rappresentare i valori ritmici delle note. In particolare: si aggiungano due enumerazioni che contengono le definizioni testuali delle durate (es.: INTERO, META, QUARTO, OTTAVO,… e SEMIBREVE, SEMIMINIMA, MINIMA, CROMA,…); si implementino dei costruttori che prendono in ingresso un valore di una delle enumerazioni per compilare opportunamente numeratore e denominatore; si rivedano i costruttori che permettono di passare il valore del denominatore, passando l’esponente cui elevare la base 2 anziché il valore esplicito (ad esempio, per il denominatore di ½ si deve passare 1 in luogo di 2, per ¼ si deve passare 2 in luogo di 4, ecc.). Si faccia in modo che il denominatore sia compreso tra 1 e 8, quindi il valore minimo supportato sia il duecentocinquantaseiesimo. Programmazione per la Musica - Prof. Luca A. Ludovico 9. Programmazione a oggetti