Programmazione a oggetti

Slides:



Advertisements
Presentazioni simili
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Advertisements

LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Derivazione tra classi
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Programmazione in Java (8)
Ereditarietà e Polimorfismo
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella.
Programmazione in Java Parte II Lezione 5 Dott. Marco Faella.
Programmazione orientata agli Oggetti. Classi Le classi sono uno strumento per costruire strutture dati che contengano non solo dati ma anche il codice.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Tecnologia OO.
Java World Introduzione.
ODMG.
Maurizio Cozzetto, Francesco Sarasini
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning
Java: concetti e costrutti base
Introduzione al linguaggio C
Esercizi.
Trasmettitori e ricevitori
IL CONCETTO DI ALGORITMO
Editing digitale della partitura Creazione di plugin
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Strutture classi e oggetti
Dati MIDI in Java Lezione 19
Programmazione a oggetti
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Programmazione ad Oggetti per la Fisica
Le basi della programmazione a oggetti
Corso Java Introduzione.
Gli oggetti: concetti avanzati
Corso Java Esercitazione.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a. a
OBJECT ORIENTED DATABASE
Corso Java Cicli e Array.
Package Pacchetti e ereditarietà 29/12/2018 package.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Programmazione e Laboratorio di Programmazione
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Il passaggio dei parametri Metodi statici Il riferimento this
TDE
Ricorsione 16/01/2019 package.
APPUNTI SUL LINGUAGGIO C
Process synchronization
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
OOP - Object Oriented Programming
Corso Java Lezione 1 5/12/2019.
Java Introduzione.
Programmazione e Laboratorio di Programmazione
UML Diagramma statico di una classe
Array e Stringhe Linguaggio C.
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
Programmazione e Laboratorio di Programmazione
Ese 1 (del 31 Marzo 2004).
Modello matematico per la risoluzione dei problemi
Vincoli di Integrità Non tutte le combinazioni possibili di valori dei domini su cui è definita una relazione sono accettabili. Alcuni attributi possono.
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Programmazione a oggetti Lezione 18 Programmazione a oggetti Programmazione MIDI (Prof. Luca A. Ludovico)

Introduzione 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 Utilizzare le enumerazioni (classi specializzate che permettono di definire e usare insiemi di costanti) Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Ereditarietà Ereditarietà: permette di derivare nuove classi a partire da quelle già definite realizzando una gerarchia di classi. Una classe derivata (sottoclasse o classe figlia) mantiene i metodi e gli attributi delle classi da cui deriva (classi base, superclassi o classi padre); inoltre, può definire i propri metodi o attributi, e ridefinire il codice di alcuni dei metodi ereditati tramite un meccanismo chiamato overriding Una sottoclasse è più specializzata rispetto alla sua superclasse; analogamente, una superclasse è più generica rispetto a una sottoclasse JAVA (come C++) supporta solo l’ereditarietà singola: un figlio può avere un solo padre → la gerarchia tra classi forma un albero Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Esempio di ereditarietà Si consideri il rapporto gerarchico tra la superclasse Animale e la sottoclasse Felino: l’attributo genere sarà comune a tutti gli animali, il cui genere sarà sempre maschile o femminile, al limite indefinito; Il metodo calcolaEta, che combina l’attributo data_nascita con la data corrente per restituire il numero di anni dell’esemplare, sarà definito nella superclasse, e rimarrà valido per tutte le sottoclassi che ereditano (l’età si calcola allo stesso modo per tutti gli esseri viventi) un felino avrà però dei descrittori più specifici rispetto a un generico animale (si pensi al colore del pelo, attributo che non avrebbe senso per un generico animale, che potrebbe essere squamato, piumato, ecc.) Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Dichiarazione di sottoclassi class MiaClasse { … } La dichiarazione precedente è minimale, in quanto racchiude solo componenti strettamente richiesti. Si può ad esempio stabilire una relazione gerarchica tra classe padre e classe figlia tramite la sintassi: class MiaClasse extends MiaSuperClasse Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

La gerarchia di classi in Java Tutte le classi ereditano dalla superclasse Object: è la classe più generale di tutte, e definisce comportamenti comuni a tutte le classi. Le classi inferiori nella gerarchia mettono a disposizione comportamenti più specifici e possono sovrascrivere e/o nascondere i metodi delle classi più generali Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

La gerarchia di classi in JAVA La superclasse Object contiene metodi generali, disponibili a tutte le classi che ereditano (quindi a tutte le classi), tra cui: Object clone() crea e restituisce una copia dell’oggetto corrente boolean equals(Object obj) indica se un altro oggetto è uguale a questo String toString() restituisce una rappresentazione a stringa di testo dell’oggetto Esempio: invocare il metodo toString() su una classe definita dall’utente che non ne contiene una propria versione Esempio: ridefinire il metodo toString() in una classe definita dall’utente Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Assegnamento tra oggetti L’operatore di assegnamento funziona tra oggetti della stessa classe Poichè una superclasse è più generica di una sottoclasse: è sempre possibile assegnare un oggetto di una sottoclasse a un oggetto di una superclasse. non è possibile (e genera errore a compile-time) assegnare un oggetto di una superclasse a un oggetto di una sottoclasse Esempio MusicSymbol a = new MusicSymbol (); MusicSymbol b = new MusicSymbol (); a = b; // ok MusicNote n = new MusicNote(); // MusicNote eredita da MusicSymbol a = n; // ok n = a; // no!!! Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Cast delle variabili Tramite il cast si può specificare al compilatore che un oggetto di classe A è della classe B più specifica Object o = "str"; String str = (String)o; Possibili errori: effettuare il cast di oggetti che appartengono a rami diversi della gerarchia String o = "str"; Integer i = (Integer)o; // Errore a compile-time allo stesso ramo ma cmq non sono “castabili”, il che solleva a run-time un’eccezione ClassCastException Number o = new Integer(5); Double n = (Double)o; // Solleva ClassCastException Uso tipico: passare da un tipo più generale a uno più specifico. Ad esempio Integer eredita da Number (tutti gli interi sono numeri ma non viceversa: ad esempio Double, Float, Byte, Long) Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

I modificatori d’accesso protected e (default) Protected può essere attribuito solo ai metodi e alle variabili interne alla classe e non può essere applicato alla classe stessa I metodi e le variabili dichiarate come protected sono visibili da classi dichiarate nello stesso package e da sottoclassi e classi derivate dichiarate ovunque Se non viene specificato nulla, il compilatore considera un modificatore d’accesso detto di default. Un membro di una classe (metodo o attributo) per default sarà accessibile solo dalle classi appartenenti al package dove è definito Una classe appartenente ad un package definita senza il modificatore public sarà visibile solo dalle classi appartenenti allo stesso package Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Specchietto riassuntivo I modificatori di accesso sono 3: private, protected e public In assenza di questi tre, un elemento di programma viene considerato package-local o friend (si dice che assume la visibilità di default) Le visibilità possibili sono: Modificatore Stessa classe Stesso package Sottoclasse Ovunque Public sì Protected no (default) Private Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Polimorfismo e override Una classe che eredita può richiedere la riscrittura e la specializzazione di metodi ereditati. Nella programmazione ad oggetti l’override è l'operazione di riscrittura di un metodo ereditato Il metodo che effettua override deve avere lo stesso nome, stesso numero e tipo di parametri, e stesso tipo restituito rispetto a quello originario può anche restituire un sottotipo del tipo restituito (covariant return type) Polimorfismo (dal greco "avere molte forme"): un’interfaccia, molte implementazioni. I metodi che vengono ridefiniti in una sottoclasse sono detti polimorfi, in quanto lo stesso metodo si comporta diversamente a seconda del tipo di oggetto su cui è invocato Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Polimorfismo dei metodi: overload e override Dal punto di vista implementativo il polimorfismo per i metodi si ottiene utilizzando l'overload e l'override dei metodi stessi. Ogni metodo è identificato dal nome, ma è univocamente determinato anche dalla lista dei parametri. Ciò permette di avere all'interno di una classe più metodi che hanno lo stesso nome, ma con parametri diversi L'overload si basa sulla scrittura di più metodi identificati dallo stesso nome che però hanno, in ingresso, parametri di tipo e in numero diverso Con il termine override si intende una vera e propria riscrittura di un certo metodo di una classe che si eredita. Dunque, necessariamente, l'override implica ereditarietà Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Il modificatore final Final significa letteralmente «finale» o «non mutabile» Tale modificatore, al pari di public e private, può essere preposto a un metodo, a un attributo o ad una classe: preposto a una variabile la rende una costante per l'istanza della classe preposto a un metodo, implica che in un contesto di ereditarietà su di esso non potrà essere eseguito l'override da parte della classe che eredita una classe definita final non può essere ereditata. Questo semanticamente significa che la classe non necessita di specializzazioni o estensioni Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti

Il modificatore static Applicabile a metodi e attributi di una classe Dichiarare un metodo static lo rende di fatto comune a tutte le istanze della classe. La chiamata del metodo avviene senza istanziare la classe: Anziché [nomeOggetto].[nomeMetodo]() si usa [nomeClasse].[nomeMetodo]() Dichiarare un attributo static lo rende comune a tutte le istanze della classe Un attributo public static è di fatto una variabile globale Programmazione MIDI (Prof. Luca A. Ludovico) 18d. Programmazione a oggetti