Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
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
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
Corso di Informatica (Programmazione)
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.
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Approfondimento delle classi
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Astrazione procedurale ed eccezioni
1 Un esempio con iteratore: le liste ordinate di interi.
Introduzione a Javascript
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
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.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
Esercitazione Object, Vettori, Liste. Ereditarieta’ Abbiamo visto come tramite l’ereditarieta’ e’ possibile estendere classi esistenti -arricchendo lo.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
LIP: 9 Maggio Esercizi Riprendiamo un esercizio proposto Definire un tipo di dato Persona che definisce oggetti che rappresentano le informazioni.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
LIP: 8 Marzo 2005 Vettori. Abbiamo visto L’uso di Vector come alternativa all’uso di arrays Rivediamo l’esercizio dell’altra volta.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Esercizio 3. Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare i commenti.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione. Problema Vogliamo definire in modo gerachico un tipo di dato che definisce Tabelle multi-dimensionali con un numero di righe variabili.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
Alcune Classi Standard Object, Vettori. Ereditarieta’ Abbiamo visto come tramite l’ereditarieta’ e’ possibile estendere classi esistenti -arricchendo.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Liste Concatenate 28 Marzo Avviso Martedi’ 4 Aprile: Verifica di LIP Per iscriversi (obbligatorio) inviare un e- mail entro venerdi’ 31 Marzo a.
1 Un esempio con iteratore: le liste ordinate di interi.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Fondamenti di informatica T-A Esercitazione 5 : Stringhe ed array AA 2012/2013 Tutor : Domenico Di Carlo.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Stringhe in Java. Definire una stringa. Definire una stringa in Java Il modo più semplice e diretto per creare un oggetto di tipo String è assegnare alla.
Transcript della presentazione:

Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays

Mutability Lo stato di un oggetto immutabile non cambia mai Ex: BankAccount e’ modificabile Array e’ mutabile String e’ immutabile

String Una stringa e’ una sequenza di caratteri (anche vuota) In Java sono oggetti della classe String una volta creati il loro contenuto non può essere modificato non avremo a disposizione metodi per modificare tale oggetto ma solo per leggerlo o per leggerne alcune sue parti

String Per creare un oggetto di tipo String non abbiamo bisogno di invocare il metodo new. Si possono dichiarare variabili di classe String e assegnare loro stringhe arbitrarie. La variabile s contiene il valore, ovvero il riferimento all’oggetto che contiene la sequenza di caratteri String s=“ Hello World!”; s="" ; // stringa vuota

Principali operazioni La classe String definisce vari metodi d'istanza utili (riferiamo ai manuali) Lunghezza di una stringa: String hello = "Hello, World!"; int lung = hello.length();

Concatenazione String nome = "Mario"; String cognome = "Rossi"; System.out.println(nome + cognome); //stampa MarioRossi

Confronto Attenzione: come per tutti gli oggetti e’ possibile usare gli operatori == e != per confrontare stringhe E’ poco utile perche’ confronta il riferimento non il loro contenuto Vorremmo invece sapere se 1. Sono uguali? Cioè, sono la stessa sequenza di caratteri? 2. Quale delle due stringhe viene prima in ordine lessicografico?

Equals s1.equals(s2) restituisce un valore di tipo boolean: -true se s1 e s2 sono uguali come sequenze di caratteri -false altrimenti String s1 = "Ciao"; String s2 = "Ciao"; boolean b = s1.equals(s2); \\ b vale true boolean c = (s1 == s2); \\ c vale false

CompareTo s1.compareTo(s2) restituisce un valore di tipo int: * un valore minore di 0 se s1 precede s2 lessicograficamente, * un valore maggiore di 0 se s2 precede s1, * il valore 0 se sono uguali. b = "cargo".compareTo("cathode") < 0; \\ b vale true

Arrays Oggetti mutabili Gli array sono sequenze di variabili indirizzabili con indici interi: sono composti da elementi omogenei (tutti dello stesso tipo) ogni elemento è identificato all'interno dell'array da un numero d'ordine detto indice dell'elemento il numero di elementi dell'array è detto lunghezza (o dimensione) dell'array

Creazione [] = new [ ]; * è il tipo degli elementi * è la variabile di tipo array * è la dimensione (fissa)

Esempio int[] list = new int[5]; // array di interi di dimensione 5 Bankaccount[] list = new Bankaccount[5]; // array di oggetti BankAccount di dimensione 5

Accesso agli elementi Per riferire i singoli elementi di un array si usano le parentesi quadre: [ ] La dimensione di un array si determina usando:.length

In alternativa L’array puo’ anche essere inizializzato indicando i valori esplicitamente char[] vocali = {'a', 'e', 'i', 'o', 'u'};

In alternativa L’array puo’ anche essere inizializzato indicando i valori esplicitamente char[] vocali = {'a', 'e', 'i', 'o', 'u'};

public class ProcArrays{ //OVERVIEW: la classe fornisce procedure utili per // manipolare arrays di interi public static int cerca(int [] a,int x){ \\EFFECTS: restituisce il numero di occorrenze di x in a int occ=0; for (int i = 0; i< a.length ; i++) {if (a[i]==x) {occ=occ+1;} } return occ; } public static boolean incr(int [] a){ \\EFFECTS:restituisce true se a e’ ordinato in modo crescente int prev; for (int i = 1; i< a.length ; i++) {prev=a[i-1]; if (prev> a[i]) { return false;} } return true;} }

Esercizio Implementare il seguente metodo statico public static boolean multiples(int [] a, int x){ \\MODIFIES:a \\EFFECTS: modifica a, moltiplicando ogni valore per x } Passaggio dei parametri: l’array con cui viene chiamato il metodo viene modificato, perche’ il riferimento e’ condiviso

Specifica: commenti informali E’ utile descrivere i metodi statici tramite commenti informali che descrivono il loro comportamento (vedremo che questa sara’ la specifica, ed avra’ un ruolo fondamentale) (1) precondizione (REQUIRES): vincoli sugli input (2) postcondizione (EFFECTS): cosa fa (3) eventuali modifiche (MODIFIES): tutto quello che puo’ essere modificato

public static int [] append(int [] a, int [] b){ \\REQUIRES: a,b diversi da null \\EFFECTS: restituisce un array che e’ la concatenazione di a e b, ESEMPIO: a=[3,2,6], b[9]====> ab=[3,2,6,9]} Se MODIFIES non e’ presente: non devono essere modificati gli argomenti (attenzione al passaggio dei parametri!) REQUIRES: garantisce che non siano null

Esercizi public static int cercaord(int [] a,int x){ \\REQUIRES: a non e’ null ed e’ ordinato in ordine crescente \\EFFECTS: restituisce il numero di occorrenze di x in a (eventualmente 0)} REQUIRES (pre-condizione) impone vincoli sull’input Possono essere implementati nello stesso modo (il metodo che funziona per quelli non ordinati funziona anche per quelli ordinati (non vice-versa) Ma sfruttando l’ordinamento si ottiene una soluzione piu’ efficiente (va sfruttata la precondizione)

public static boolean subset(int [] a,int [] b){ \\REQUIRES\\REQUIRES: a e b diversi da null \\EFFECTS:restituisce true se a e’ un sottoinsieme di b \\false altrimenti} Esempio: a=[4,3] b=[3,1,4,3] SI a=[4,3] b=[3,8,1] NO tutti gli elementi di a compaiono in b

Oggetti Servono per definire nuovi tipi di dato collezioni di dati + relative operazioni Daremo la specifica di un semplice tipo di dato astratto (descrizione dello stato e delle operazioni) La specifica descrive la classe: intestazione dei metodi d’istanza e dei costruttori con i relativi commenti, e la descrizione degli oggetti astratti

public class Libro{ //OVERVIEW: un Libro memorizza il titolo (String), //l’autore (String), numero di copie (int) public Libro(String t,String a,int n){ //REQUIRES: n >0, t,a diversi da null //EFFECTS: crea un nuovo Libro con titolo t, //autore a, e numero di copie n } public void somma(int num) { //REQUIRES: num>0 //MODIFIES:this //EFFECTS: aggiorna il numero delle copie sommando //num } public String autore(){ //EFFECTS: restituisce l’autore di this} public String titolo(){ //EFFECTS: restituisce il titolo di this}

public int copie(){ //EFFECTS: restituisce il numero di copie di this} public boolean equals(Libro p){ //REQUIRES: p non e’ null //EFFECTS: restituisce true se this e p // sono uguali, altrimenti false} } Dare l’implementazione usando variabili d’istanza private Partire dallo stato degli oggetti Poi implementare il costruttore ed i metodi di conseguenza

Esercizio: Part II Vogliamo realizzare un modulo che usa il tipo di dato Libro Un insieme di metodi statici che effettuano operazioni su un insieme di Libri (rappresentati come un array di Libro)--biblioteca Vediamo la specifica della classe (da implementare)

public class ProcLibro{ //OVERVIEW: definisce metodi statici per //effettuare operazioni su un array di Libri public static boolean cerca(Libro[] b, Libro p){ //REQUIRES: b,p diversi da null //EFFECTS: restituisce true se p occorre in b, altrimenti false} public static String cerca(Libro[] b, String a){ //REQUIRES: b,p diversi da null //EFFECTS: restituisce il titolo di un Libro //appartenente ad l con autore a, se non ce ne // sono la stringa vuota} public static String all-copie(Libro[] b, String a, String t){ //REQUIRES: b,a,t diversi da null //EFFECTS: restituisce il numero di copie in b del //Libro che ha autore a e titolo t } }

Attenzione Le variabili d’istanza che implementano Libro sono private (non sono visibili nella classe ProcLibro) I metodi statici devono essere implementati usando le operazioni, fornite dalla specifica del tipo di dato Libro