PRIMA ESERCITAZIONE IN JAVA

Documenti analoghi
OGGETTI COMPOSTI OGGETTI COMPOSTI - COSTRUZIONE

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

IL TEMA DELLA RIUSABILITÀ

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

e il loro uso: esistente e cambiare quel che va cambiato specializzare (per ereditarietà) la classe Counter public class EsempioNuovo {

e il loro uso: Oggetti composti IL TEMA DELLA RIUSABILITÀ APPROCCI PER IL RIUTILIZZO:

Ereditarietà. Esercizio Specifica

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

public class Counter2 extends Counter { public void dec() { val--; }

Esempio 2: Subtyping

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

ESERCIZIO 1 (STRINGHE)

Object Oriented Software Design

Esempio: Costruttori ed ereditarietà

Gerarchia di classi Java 1

Java Gli array. Array

RETI DI CALCOLATORI Linguaggio Java: Ereditarietà

Java Gli array. Array

RIUSABILITÀ L OBIETTIVO

IL CONCETTO DI CLASSE

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Fondamenti di informatica T-1 (A K) Esercitazione 9: array

Fondamenti di Informatica T-1

Polimorfismo. Subtyping-polimorfismo

Gerarchia di classi Java 1

Programmazione orientata agli oggetti Ereditarietà

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Esercitazione n 2. Obiettivi

Proprietà delle Classi e degli Oggetti in Java

Ereditarietà e Polimorfismo

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Oggetti Composti (1) Oggetti Composti (2)

STRINGHE IN JAVA. se occorre un contenitore esiste StringBuffer

Proprietà delle Classi e degli Oggetti in Java

Classi ed Oggetti. Fondamenti di Informatica A-K

Java. Ereditarieta RIUSO DEL CODICE

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Java secondo contatto. Nel tunnel una luce

Ereditarietà. Una classe, detta superclasse, può essere specializzata definendo una sottoclasse che ne contenga casi particolari.

Informatica Ereditarietà Java. Ereditarietà

Java Le stringhe. Stringhe

Prova d Esame Compito A

ES.1 - Soluzione (Stringhe.java)

Java Le stringhe. Stringhe

Programmazione orientata agli oggetti Subtyping e polimorfismo

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

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Programmazione a oggetti

Esercitazione n 2. Obiettivi

Introduzione all OOP!

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

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Esercizi della lezione 5 di Java

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Esercitazione n 2. Obiettivi

Prova d Esame Compito A

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

unità di compilazione

CLASSI ASTRATTE - ESERCIZIO

Java: Definire Classi e Creare Oggetti

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

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

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

Passare argomenti al programma

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

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

14 - Metodi e Costruttori

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

I Metodi. Fondamenti di Informatica A-K

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Prova d Esame Compito A

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0

Programmazione orientata agli oggetti Classi, package e file system. Package

Programmazione orientata agli oggetti Classi, package e file system. Package

Fondamenti di Informatica T-1. Classi & Oggetti

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

Transcript:

PRIMA ESERCITAZIONE IN JAVA

Java: esercizio sulle stringhe 1. Si leggano N stringhe da riga di comando 2. Per ogni stringa si sostituiscano tutte le occorrenze di old_char con new_char (variabili inizializzate nel codice) Utilizzare la classe StringBuffer (e relativi metodi) Stampare l ID dell istanza ad ogni modifica dell oggetto Utilizzare la classe String (e relativi metodi) Stampare l ID dell istanza ad ogni modifica della stringa Domande: Come si stampa l ID di un istanza? Quali sono i metodi necessari per sostituire un carattere in un istanza della classe: StringBuffer String

ESERCITAZIONE OGGETTI COMPOSTI

Oggetti Composti Gli oggetti composti consentono: di aggregare componenti complessi a partire da componenti più semplici già disponibili di mantenere l unità del componente, assicurarne la protezione e l incapsulamento Possiamo anche usarli per specializzare componenti già esistenti aggiungere loro nuovi dati o metodi Ad esempio, un contatore con decremento

Progettazione Incrementale Spesso si incontrano problemi che richiedono componenti simili ad altri già disponibili, ma non identici Altre volte, l evoluzione dei requisiti comporta una corrispondente modifica dei componenti: necessità di nuovi dati e/o nuovi comportamenti necessità di modificare il comportamento di metodi già presenti

Possibili Approcci ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato BAD! creare un oggetto composto GOOD (e usare delega) che incapsuli il componente esistente... gli inoltri le operazioni già previste e crei, sopra di esso, le nuove operazioni richieste (eventualmente definendo nuovi dati) sempre che ciò sia possibile! specializzare (per ereditarietà) la classe Counter (lo vedrete ) :D VERY GOOD

Step 1 Creare una classe Counter come segue. Implementare i diversi metodi. public class Counter { private int val; public Counter() {... } public Counter(int v) {... } public void reset() {... } public void inc() {... } public int getvalue() {... } public String tostring() {... } }

Step 2 Dalla classe Counter al contatore avanti/indietro (con decremento) Concettualmente, ogni oggetto CounterDec ingloba un oggetto Counter al suo interno Ogni operazione richiesta a CounterDec viene delegata all oggetto Counter interno oggetto CounterDec oggetto Counter operazioni di CounterDec Delega

Step 2 la classe public class CounterDec { private Counter c; public CounterDec() { c = new Counter(); } public CounterDec(int v){ c = new Counter(v); } public void reset() { c.reset(); } public void inc() { c.inc(); } public int getvalue() { return c.getvalue(); } public void dec() {... } }

Il main Creare una classe CounterMain contenente il metodo main. Nel metodo main definire un oggetto cd istanza di CounterDec, ne azzera il valore (reset), lo incrementa due volte, lo stampa a video, lo decrementa e ne ri-stampa il valore a video

Conclusioni Poiché i campi privati non sono accessibili, bisogna riscrivere anche tutti i metodi che concettualmente rimangono uguali, procedendo per delega (delegation) Non è detto che le operazioni già disponibili consentano di ottenere qualsiasi nuova funzionalità si renda necessaria (potrebbe essere necessario accedere ai dati privati) Occorre poter riusare le classi esistenti in modo più flessibile Ereditarietà.

ESERCITAZIONE EREDITARIETÀ

Progettazione Incrementale Spesso si incontrano problemi che richiedono componenti simili ad altri già disponibili, ma non identici Altre volte, l evoluzione dei requisiti compor-ta una corrispondente modifica dei componenti: necessità di nuovi dati e/o nuovi comportamenti necessità di modificare il comportamento di metodi già presenti

Possibili Approcci Come abbiamo visto nella lezione precedente, esistono diversi approcci. Il migliore è: specializzare (per ereditarietà) la classe di partenza

Step 1 Riprendiamo o riscriviamo la classe Counter già implementata public class Counter { private int val; public Counter() {... } public Counter(int v) {... } public void reset() {... } public void inc() {... } public int getvalue() {... } public String tostring() {... } }

Step 2 Dalla classe Counter al contatore avanti/indietro (con decremento) Concettualmente, ogni oggetto CounterDec estende un oggetto Counter

Step 2 la classe public class CounterDec extends Counter{ public CounterDec() { super(); } public CounterDec(int v){ super(v); } } public void dec() {... }

Il main Creare una classe CounterMain contenente il metodo main. Nel metodo main definire un oggetto cd istanza di CounterDec, ne azzera il valore (reset), lo incrementa due volte, lo stampa a video, lo decrementa e ne ristampa il valore a video

Conclusioni Se nella super classe i campi sono privati, nella sotto classe questi non sono accessibili se non tramite getter/setter pubblici, come fare per poter accedere direttamente a tutti i parametri? Dichiarare i parametri accessibili alle sotto classi come protected. ATTENZIONE: quando utilizzate l'ereditarietà dovreste SEMPRE ESTENDERE le funzionalità della super classe (la key word di java infatti è extends).