Definizione di classi con array di oggetti



Похожие документы
public int gety() { return y;

Esercizi della lezione 5 di Java

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Programmazione ad Oggetti: JAVA. Esercitazione

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Algoritmi di Ricerca. Esempi di programmi Java

Parola chiave extends

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Realizzazione di una classe con un associazione

Modulo 4: Ereditarietà, interfacce e clonazione

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Concetto di Funzione e Procedura METODI in Java

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

10 - Programmare con gli Array

Funzioni in C. Violetta Lonati

Inizializzazione, Assegnamento e Distruzione di Classi

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Gestione dei File in C

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a I scritto Febbraio 11 Febbraio 2011

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Allocazione dinamica della memoria - riepilogo

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist

Java: Compilatore e Interprete

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Programmazione 1 A.A. 2015/2016

Esempi di esercizi d esame

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

Gestione delle Eccezioni

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

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

3. La sintassi di Java

Main System Monitor Keyboard

Programmazione a Oggetti Lezione 10. Ereditarieta

Appello di Informatica B

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Le variabili. Olga Scotti

La selezione binaria

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Record in C: il costruttore struct.

Algoritmi di ordinamento

La struttura dati ad albero binario

Esercitazioni aggiuntive Martedì Laboratorio L-12


Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Un esercizio d esame. Flavio De Paoli

Prova d Esame Compito B

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di programmazione

Introduzione a Classi e Oggetti

UML Diagrammi delle classi. UML Diagramma classi 1

Esercitazione n 4. Obiettivi

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

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

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

RICERCA DI UN ELEMENTO

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Struttura di un programma Java

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Java Virtual Machine

esercizi Esercizi / problemi

Traccia di soluzione dell esercizio del 25/1/2005

Introduzione al linguaggio C Gli array

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

GESTIONE DEI PROCESSI

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

I puntatori e l allocazione dinamica di memoria

Definizione di nuovi tipi in C

Corso di Programmazione ad Oggetti

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Prova d Esame Compito A

Esercizio: la classe CashRegister

Sottoprogrammi: astrazione procedurale

costruttori e distruttori

Транскрипт:

Definizione di classi con array di oggetti 1. (Esame scritto del 18/9/2002, Esercizio 6.) La banca dati di un agenzia assicurativa per auto è caratterizzata da un insieme di polizze di assicurazioni per auto. Usando le classi PolizzaBase e PolizzaIncendioFurto definite negli esercizi precedenti, scrivere una semplice classe AgenziaAssicurativa, dove ciascun oggetto della classe è caratterizzato dal nome dell agenzia e da un elenco di polizze auto (il cui numero massimo deve essere impostato dal costruttore della classe), che abbia i seguenti metodi: (a) un metodo che aggiunge una polizza; (b) un metodo che restituisce la somma dei premi annui di tutte le polizze dell agenzia; (c) un metodo che restituisce l elenco dei valori assicurati RC di tutte le polizze dell agenzia. public class AgenziaAssicurativa { private String nome; private PolizzaBase[] elenco; private int cont; public AgenziaAssicurativa (String s, int max) { nome = s; elenco = new PolizzaBase[max]; public void addpolizza (PolizzaBase p) { if (cont < elenco.length) { elenco[cont] = p; cont++; public int sommapremi() { int somma = 0; somma += elenco[i].premio(); return somma; public int[] elencovalorirc() { int[] a = new int[cont]; a[i] = elenco[i].getvalorerc(); return a;

2. Aggiungere alla classe AgenziaAssicurativa i seguenti metodi: un metodo che restituisce l elenco di tutte le targhe dei veicoli assicurati presso una data agenzia assicurativa; un metodo che cancella una polizza da una agenzia assicurativa; un metodo che scambia due polizze tra due agenzie assicurative. public String[] elencotarghe() { String[] a = new String[cont]; a[i] = elenco[i].getveicolo(); return a; public void deletepolizza (PolizzaBase p) { int i = 0; while (i<cont) { if (p.getveicolo().equals(elenco[i].getveicolo())) { for (int j=i; j<cont-1; j++) elenco[j] = elenco[j+1]; cont--; return; else i++; public void scambiapolizze (AgenziaAssicurativa a, PolizzaBase p, PolizzaBase q) { int pos1 = this.posizione(p); int pos2 = a.posizione(q); if (pos1!= -1 && pos2!= -1) { PolizzaBase temp = this.elenco[pos1]; this.elenco[pos1] = a.elenco[pos2]; a.elenco[pos2] = temp; public int posizione (PolizzaBase p) { for (int i=0; i<cont; i++) { if (p.getveicolo().equals(elenco[i].getveicolo())) return i; return -1;

3. Scrivere inoltre un breve programma di prova che illustri l uso delle classi PolizzaBase, PolizzaIncendioFurto e AgenziaAssicurativa e dei loro metodi. public class AATest { public static void main (String[] args) { AgenziaAssicurativa a = new AgenziaAssicurativa("AA",10); PolizzaBase p = new PolizzaBase("AB122AN",10000); PolizzaBase q = new PolizzaBase("AS546CV",20000); PolizzaIncendioFurto r = new PolizzaIncendioFurto("",10000,5000); a.addpolizza(p); a.addpolizza(q); a.addpolizza(r); int[] v = a.elencovalorirc(); System.out.println("Valori RC:"); for (int i=0; i<v.length; i++) System.out.println(v[i]); System.out.println("Somma premi: " + a.sommapremi()); AgenziaAssicurativa b = new AgenziaAssicurativa("AB", 5); PolizzaIncendioFurto s = new PolizzaIncendioFurto("",5000,2000); b.addpolizza(s); String[] ta = a.elencotarghe(); String[] tb = b.elencotarghe(); System.out.println("Veicoli assicurati dall agenzia "+ b.getnome()); for (int i=0; i<tb.length; i++) System.out.println(tb[i]); a.scambiapolizze(b,q,s); System.out.println("Eseguito uno scambio di polizze, si ha:"); ta = a.elencotarghe(); tb = b.elencotarghe(); System.out.println("Veicoli assicurati dall agenzia "+ b.getnome()); for (int i=0; i<tb.length; i++) System.out.println(tb[i]); a.deletepolizza(p); System.out.println("Cancellata una polizza, si ha:"); ta = a.elencotarghe();

Il risultato di tale programma di prova è la seguente stampa: Valori RC: 10000 20000 10000 Somma premi: 450 AB122AN AS546CV Veicoli assicurati dall agenzia AB Eseguito uno scambio di polizze, si ha: AB122AN Veicoli assicurati dall agenzia AB AS546CV Cancellata una polizza, si ha: Assegnamenti tra riferimenti a oggetti di superclasse/sottoclasse, metodi sovrascritti e late binding 1. Con riferimento alle classi StudUniv (superclasse) e StudUnivFC (sottoclasse) definite precedentemente, si considerino i seguenti oggetti: StudUniv s1 = new StudUniv("Andrea", "Rossi", 134678); StudUnivFC s2 = new StudUnivFC("Elena", "Bianchi",111789,3); Il metodo info, presente nella superclasse, è sovrascritto nella sottoclasse e applicabile su entrambi gli oggetti s1 ed s2: System.out.println(s1.info()); System.out.println(s2.info()); dando luogo alla stampa delle seguenti stringhe: Rossi Andrea (matr. 134678) Se s2 (riferimento di sottoclasse) è assegnato ad s1 (riferimento di superclasse) e poi si cerca di applicare su s1 un metodo definito nella sottoclasse:

s1 = s2; String t = s1.leggiannofc(); s1.aggannofc(); si ha errore in fase di compilazione, in quanto tali metodi non appartengono alla classe a cui appartiene s1. Se invece si applica su s1 un metodo presente nella superclasse che è sovrascritto nella sottoclasse, come info, per il meccanismo del late binding, viene eseguito il metodo sovrascritto nella sottoclasse, ovvero la classe a cui appartiene l oggetto riferito da s1: System.out.println(s1.info()); Viene infatti stampato: Supponiamo di perdere il riferimento s2 all oggetto della sottoclasse e di voler assegnare s1 ad un riferimento di sottoclasse: s2 = null; StudUnivFC s3 = s1; Si ha errore in fase di compilazione in quanto i tipi di s1 e di s3 non sono compatibili. Tuttavia, il riferimento di superclasse s1 riferisce un oggetto della sottoclasse, quindi può essere assegnato al riferimento di sottoclasse s3 tramite l uso del cast forzando il tipo di s1: StudUnivFC s3 = (StudUnivFC) s1; Per evitare errori nel caso in cui s1 non riferisca effettivamente un oggetto della sottoclasse, è consigliabile usare instanceof per controllare che s1 riferisca un oggetto della classe StudUnivFC, come segue: StudUnivFC s3; if (s1 instanceof StudUnivFC) s3 = (StudUnivFC) s1; else s3 = null; System.out.println(s3.info()); Nuovamente viene stampata la stringa: