RTTI Run-time type identification

Documenti analoghi
Java: loading dinamico e reflection

La Riflessione in Java

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010

JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:

Esempio su strutture dati dinamiche: ArrayList

Esempi in Java di program.ne O-O

Corso di Progettazione del Software

Introduzione. Java RTTI RTTI. Il run-time type identification è quella parte di Java che si occupa di controllare i tipi a runtime

Un approccio possibile sarebbe creare un oggetto con un metodo adeguato per scandire collezioni o stampare i dati dell oggetto:

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Programmazione Orientata agli Oggetti in Linguaggio Java

Esonero del corso di Programmazione a Oggetti

Eccezioni. Programmazione in rete e laboratorio Eccezioni. Classi eccezioni

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Corso di Reti di Calcolatori T

Programmazione ad Oggetti

singoli campi la classe Constructor permette di creare nuovi oggetti.

Corso sul linguaggio Java

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Eccezioni e Thread (cenni)

Prova d Esame Compito A

Multithread e multitasking

Prova d Esame Compito A

GESTIONE DEGLI ERRORI

Laboratorio di Programmazione 1 [Java]

GESTIONE DEGLI ERRORI

Note ed esercizi aggiuntivi

La Serializzazione in Java. L24_Serialization 1

Note ed esercizi aggiuntivi

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Java Virtual Machine (JVM)

Esempio su strutture dati dinamiche: ArrayList

Reflection. Reflection. Linguaggi. - lezione 24 - Corso M-Z - Laurea in Ingegneria Informatica A.A Alessandro Longheu

Polimorfismo parametrico vs polimorfismo per inclusione

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Introduzione Programmazione Java

Esercitazione n 4. Capacità di analisi e di estensione di progetti esistenti Il concetto di filtro Linguaggio Java:

Prova d Esame Compito A

Lezione 5 Namespace e JavaDoc

Uguaglianza e copia di oggetti

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Ereditarietà. Linguaggi di Programmazione: Paradigmi di Programmazione. Ereditarietà. Sottoclassi. Ereditarietà. Controllo statico dei tipi

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Note ed esercizi aggiuntivi

Compute engine generici in RMI

10. Invocazione di Metodi Remoti

Organizzazione della lezione. Modelli di programmazione: RPC e RMI Trasparenza: un dibattito Un esempio di implementazione di invocazione remota

Laurea in Informatica. "Programmazione Distribuita" - Prof. Scarano. A.A Università di Salerno 1. Organizzazione della lezione

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Eccezioni predefinite

Esempio su strutture dati dinamiche: ArrayList

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Esempio su strutture dati dinamiche: ArrayList

Organizzazione della lezione. Invocazione remota di metodi fai-da-te. Lezione 12 Introduzione a Remote Method Invocation

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Determinazione del tipo

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

Overloading - Overriding

Programmazione. Cognome... Nome... Matricola... Compitino del 26 gennaio 2009

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Laboratorio di reti I

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Laboratorio di Programmazione 1 [Java]

Eccezioni. Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi.

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Programmazione. preparazione allo scritto. Informatica / Comunicazione Digitale 19 gennaio 2016

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

Corso sul linguaggio Java

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

LETTURA DI DATI DA INPUT. Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream

{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}

Laboratorio di Programmazione 1 [Java]

Eccezioni Precisazioni e approfondimenti

Modello procedurale versus modello O-O

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

L ereditarieta` Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni)

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

domenica 9 giugno 13 Serializzazione

Algoritmi di Ricerca. Esempi di programmi Java

I Metodi. Fondamenti di Informatica A-K

Lezione 2 Primi programmi

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

LPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio

Programmazione I - corso B a.a prof. Viviana Bono

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

Programmazione a oggetti

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Transcript:

RTTI Run-time type identification Come determinare il tipo di un oggetto durante l'esecuzione RTTI 1 Ereditarietà Forma Linea Rettangolo Cerchio interface Forma { class Linea implements Forma { void ; void { Forma f = new Linea(); f.; RTTI 2 1

Si vuole eseguire una operazione op particolare sui cerchi Forma f; (Cerchio)f.op() Se f non è un cerchio, viene sollevata una eccezione a run-time Forma f; if (f instanceof Cerchio) (Cerchio)f.op() Non abusare. Altrimenti si ricade nello stile tradizionale di programmazione. RTTI 3 La classe Class (metaclassi) La notazione instanceof è statica. Deve essere specificato il nome del tipo (Cerchio, Triangolo, ecc.) In Java esiste la classe Class. Per ogni classe C usata in un programma, c'è un unico oggetto a run-time di tipo Class che rappresenta quella classe. L'oggetto di tipo Class che rappresenta la classe C viene creato dall'interprete, a partire dal file C.class, nel momento in cui la classe C è usata. Se il file C.class non c'è, l'interprete lancia un'eccezione. RTTI 4 2

Classi e istanze classe Conta c 5 cont1 numcontatori 2 cont2 c 8 Conta cont1, cont2; cont1 = new Conta(); cont2 = new Conta(); RTTI 5 class Dato1 { static {System.out.println("carica Dato1"); class Dato2 { static {System.out.println("carica Dato2"); public class Carica { public static void main(string[] args) { System.out.println("inizia main"); Dato1 d1 = new Dato1(); System.out.println("continua"); Dato2 d2 = new Dato2(); Eseguendo il main, in output si ottiene inizia main carica Dato1 continua carica Dato2 RTTI 6 3

Object ha il metodo getclass che restituisce la classe dell'oggetto Forma f; Class c = f.getclass(); System.out.println(c.getName()); getname restituisce il nome della classe come stringa Versione dinamica di instanceof: Class c; c.isinstance(f) RTTI 7 Altri metodi di Class Class c = Class.forName("Cerchio"); Class c = Cerchio.class; due modi per ottenere l'oggetto associato alla classe Cerchio c.getsuperclass(); restituisce la sopraclasse c.newinstance(); crea un nuovo oggetto della classe c (di tipo Object) RTTI 8 4

public class Leggi { public static void main(string[] args) { try{ ObjectInputStream in = new ObjectInputStream( new FileInputStream("serial.txt")); Object obj = in.readobject(); Class c = obj.getclass(); System.out.println(c.getName()); catch (IOException e) { System.out.println("eccezione IO"); catch(classnotfoundexception e) { System.out.println("classe non trovata"); L'interprete, dopo aver letto l'oggetto, cerca il file.class della classe dell'oggetto e lo carica. Se non lo trova lancia una ClassNotFoundException. RTTI 9 RIFLESSIONE: per ottenere a run-time informazioni su campi, metodi, costruttori, Il package java.lang.reflect contiene le classi Field, Method, Constructor. La classe Class contiene metodi come: getfields, getmethods, getconstructors La classe Method contiene i metodi: getparametertypes, invoke RTTI 10 5

static void showmethods(object o) { Class c = o.getclass(); Method[] themethods = c.getmethods(); for (int i = 0; i < themethods.length; i++) { String methodstring = themethods[i].getname(); System.out.println("Name: " + methodstring); String returnstring = themethods[i].getreturntype().getname(); System.out.println(" Return Type: " + returnstring); Class[] parametertypes = themethods[i].getparametertypes(); System.out.print(" Parameter Types:"); for (int k = 0; k < parametertypes.length; k ++) { String parameterstring = parametertypes[k].getname(); System.out.print(" " + parameterstring); System.out.println(); RTTI 11 public String append(string firstword, String secondword) { String result = null; Class c = String.class; Class[] parametertypes = new Class[] {String.class; Method concatmethod; Object[] arguments = new Object[] {secondword; try { concatmethod = c.getmethod("concat", parametertypes); result = (String) concatmethod.invoke (firstword, arguments); catch (NoSuchMethodException e) { System.out.println(e); catch (IllegalAccessException e) { System.out.println(e); catch (InvocationTargetException e) { System.out.println(e); return result; RTTI 12 6