Corso di Linguaggi di Programmazione
|
|
- Tiziano Castellani
- 6 anni fa
- Visualizzazioni
Transcript
1 Corso di Linguaggi di Programmazione Lezione 17 Alberto Ceselli Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 14 Maggio 2010
2 Features richieste al linguaggio: Supporto per ADT (lezione 8) Binding dinamico di chiamate a metodi (e possibilità di polimorfismo)
3 Ripasso: il concetto di sottotipo un tipo A è un insieme di elementi, un sottotipo B del tipo A è un sottoinsieme degli elementi di A per ogni elemento b B vale b A: vale la relazione è-un rispetto ad A. più concretamente: in un programma B può apparire ovunque appare A. N.B un sottotipo è compatibile con il tipo da cui deriva, ma in generale non equivalente!
4 Ripasso: classi e sottoclassi fra classi e sottoclassi c è una relazione gerarchica una sottoclasse è un sottotipo se assicuro che: una sottoclasse possa solo aggiungere proprietà e metodi oppure ridefinire metodi della superclasse in modo compatibile (senza causare errori di tipo) ereditarietà: è la proprietà di una sottoclasse di possedere caratteristiche della superclasse Una sottoclasse può ridefinire un metodo delle sue superclassi (overriding). l ereditarietà può essere singola o multipla.
5 singola e multipla Il linguaggio permette ad una sottoclasse di ereditare da più superclassi? Arredamento mult1.cpp 1 Problema dell ambiguità Es. A deriva sia da B che da C; sia B che C hanno un metodo display che può essere ereditato. C++ permette eredità multipla, e risolve ambiguità utilizzando ::, ovvero A non eredita display, ma B::display e C::display
6 singola e multipla Il linguaggio permette ad una sottoclasse di ereditare da più superclassi? Arredamento mult2.cpp 2 Problema degli antenati comuni ( diamond o shared inheritance) Es. Sia B che C derivano da D; A deriva sia da B che da C: A deve ereditare due copie di tutti i metodi di D? Oppure solo una copia? Da quale genitore? C++ permette eredità multipla, e risolve ambiguità utilizzando ::
7 Implementazione di ereditarietà singola e multipla A compile time viene costruito per ogni classe (e sottoclasse) un class instance record (CIR), in cui sono memorizzate proprietà e puntatori ai metodi. multipla in sintesi: molta flessibilità, marginale problema di efficienza, sostanziale problema di struttura e manutenzione del codice.
8 e scope Object Oriented Programming Modificatori di scope: public: visibile ai metodi della classe, metodi delle sottoclassi e codice client private: visibile solo ai metodi della classe protected: visibile ai metodi della classe e delle sottoclassi (a volte a tutte le sottoclassi nel package, es. Java), ma non a codice client alcuni linguaggi hanno modificatori appositi per il package (es. internal in C#) C++ utilizza anche friend In C++ i modificatori di scope sono utilizzati anche durante l estensione di una classe class Sedia : public Mobile
9 e scope Object Oriented Programming N.B. Ricordando che una sottoclasse è un sottotipo se assicuro che: una sottoclasse possa solo aggiungere proprietà e metodi oppure ridefinire metodi della superclasse in modo compatibile (senza causare errori di tipo) utilizzare private nella derivazione di una classe C++ potrebbe impedire alle sottoclassi di essere sottotipi della superclasse.
10 Binding dinamico Object Oriented Programming Variabili polimorfiche: una variabile di tipo superclasse può fare riferimento anche ad oggetti di una sua qualsiasi sottoclasse. Le sottoclassi potrebbero aver sovrascritto alcuni metodi della superclasse. binding dinamico: la porzione di codice da attivare (metodo sottoclasse / metodo superclasse) viene deciso a run-time Arredamento v2.cpp
11 Esempio di applicazione: lista eterogenea Arredamento lista.cpp
12 Type checking e polimorfismo Molti linguaggi hanno strong typing come obiettivo. Binding statico permette static type checking (vedi lezioni precedenti) E il binding dinamico? Alternative
13 Type checking e polimorfismo Molti linguaggi hanno strong typing come obiettivo. Binding statico permette static type checking (vedi lezioni precedenti) E il binding dinamico? Alternative 1 richiedere che tipi di parametri formali ed attuali corrispondano perfettamente (equivalenza), e che il tipo del valore restituito dal metodo corrisponda con il tipo atteso nella chiamata. (il prototipo del metodo che sovrascrivere deve essere identico a quello del metodo sovrascritto) 2 rilassamento: richiedere compatibilità anziché equivalenza 3 differire il controllo sui tipi a run-time (molto più dispendioso)
14 Overloading Object Oriented Programming un sottoprogramma generico è un sottoprogramma la cui computazione può essere effettuata su dati di tipo diverso durante attivazioni diverse un sottoprogramma si dice overloaded se ha lo stesso nome di un altro sottoprogramma nello stesso scope Arredamento overload.cpp domanda: possono esserci metodi con stessi parametri formali, ma che restituiscono valori di tipo diverso? class Stack { double get(); int get(); }
15 Overloading Object Oriented Programming risposta: in generale non è ammesso. Come potrei fare a scegliere quale dei due deve essere chiamato basandomi sul tipo dei parametri attuali? inferenza di tipo?
16 Un oggetto conosce se stesso Come per gli ADT, i metodi di una classe hanno accesso agli altri metodi ed alle proprietà della classe e anche all oggetto stesso Es. this in C++ Spesso ha accesso anche alla superclasse (Es. super in Java o base in C#) o alle superclassi (superclasse A:: in C++)
17 Classi e tipi base: Object Oriented Programming in OOP puro, tutto è un oggetto, compresi i tipi base (int, char ) e tutta la computazione avviene tramite scambio di messaggi tra questi oggetti pulito, ma in pratica l overhead è troppo elevato wrapper: classi che incapsulano i tipi base boxed: un tipo base incapsulato in un wrapper A volte gestiti automaticamente (Es. Java)
18 Boxing e unboxing Object Oriented Programming Boxing in Java fino a v. 1.4: // Assigning primitive type to wrapper type Integer iwrapper = new Integer(10); Autoboxing in Java dalla v. 1.5: // Assigning primitive type to wrapper type Integer iwrapper = 10; Unboxing in Java fino a v. 1.4: // Assigning object to primitive. public void intmethod(integer iwrapper){ int iprimitive = iwrapper.intvalue(); } Autounboxing in Java dalla v. 1.5: // Assigning object to primitive. public void intmethod(integer iwrapper){ int iprimitive = iwrapper; }
19 Up e down - cast Object Oriented Programming Domanda: assegnamenti fra superclassi e sottoclassi sono validi? class Sedia: public Mobile { } Mobile m; Sedia s; m = s; // Es 1 s = m; // Es 2
20 Up e down - cast Object Oriented Programming Es 1: upcast (OK, compatiblità di tipi) class Sedia: public Mobile { } Mobile m; Sedia s; m = s; // Es 1 s = m; // Es 2 Es 2: downcast (deve essere gestito come cast esplicito!) s = (Sedia) m; // Es 2
21 Membri di una classe e membri di un istanza Concettualmente: fino ad ora abbiamo parlato di proprietà e metodi di istanze di una classe potrebbero esserci membri della classe stessa? C++, Java, C# utilizzano la parola chiave static per descrivere membri della classe Esempio: class Mobile { static const double PesoLegno = 10.0; static double calcolapeso(double volume); } public static int main() { System.out.println( Mobile.PesoLegno ); Mobile.calcolaPeso(4.2); }
22 Interface ed implementation Alcuni linguaggi non supportano ereditarietà multipla. Java prevede la definizione di classi puramente astratte (interface ed implements) (Es1 Container.java e List.java) Ogni classe può implementare più interfacce (Es2 Container, Comparable e Printable.java)
23 C++ Object Oriented Programming struct e class gestite allo stesso modo (i membri di una struct sono per default public, quelli di class sono private) Binding per default statico, a meno che non venga specificato virtual
24 C++ Object Oriented Programming Possibilità di definire interfacce a metodi: public class shape { public: virtual void draw() = 0; } draw() è pure virtual, una classe con almeno un metodo pure virtual è detta astratta e non può essere istanziata Valutazione: molto potente, molti controlli di tipo a compile time, preserva l obiettivo efficienza del C, ma articolato e difficile da gestire.
25 Java Object Oriented Programming Utilizza parola chiave extends per implementare ereditarietà singola Simula ereditarietà multipla tramite implements di più interfacce. Le classi sono istanziate dinamicamente (new) Hanno un costruttore (metodo con nome della classe) e metodo finalize chiamato dal garbage collector (Es3 : List.java e DList.java)
26 Java Object Oriented Programming Ogni metodo può essere overridden, tranne quelli marcati final (ESEMPIO su List.java) Il binding è dinamico per tutti i metodi, tranne quelli final Tutte le classi discendono da Object Valutazione: supporto consistente (ed esclusivo) di OOP, gestione semplice di scoping ed ereditarietà
27 C sharp Object Oriented Programming extends, implements ed interface analogo a Java singola, ma possibilità di implementare più interfaces. Valutazione: stile intermedio tra C++ e Java. binding statico per default, ma possibilità di definire metodi virtual e corrispondenti override pure virtual di C++ parola chiave abstract. ogni classe che contiene (anche per ereditarietà) un metodo abstract deve essere marcata come abstract.
28 Ada 95 Object Oriented Programming Ha un meccanismo di classi e sottoclassi tramite tipi tagged: type Person is tagged private type Student is new Person with gestito anche meccanismo di coercion (a variabile di tipo Person posso assegnare valori tipo Student) solo ereditarietà singola, ma meccanismo simile a friend in C++ (Child library packages) nessun meccanismo per restringere l ereditarietà (sempre sottotipi)
29 Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds
30 Idea Object Oriented Programming Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Programma = Algoritmi + Strutture dati (Wirth) idea: rendere l algoritmo indipendente dai dati a cui è applicato Idea: combinare tipi parametrici e overloading
31 Codice generico in C Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Il sogno di avere codice generico non è nuovo #define max(a,b) ( (a) > (b)? (a) : (b) ) codice generico tramite definizione di macro
32 Scansione di una lista Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds struct Element // This is an extremely simplified definition, { // but enough for this example. int value; struct Element * next; }; int high = list->value; // list points to the first element struct Element * current = list->next; // refers (points) to second element while (current!= NULL) // test if within the group of elements { if (current->value > high) { high = current->value; } current = current->next; // Advance to next element } }
33 Scansione di un array Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds int high = *array; int * one_past_end = array + size; int * current = array + 1; // starts at second element while (current!= one_past_end) // test if within the group of elements { if (*current > high) { high = *current; } current++; // Advance to the next element }
34 Containers e Iterators Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Container: una classe che contiene una qualsiasi collezione di oggetti (es. vector, list, hash table ) Iterator: una funzione che scandisce questa collezione. La Standard Template Library di C++ è basata, appunto su templates, containers ed iterators.
35 Scansione di una lista o di un array Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds // list<int>::iterator current = values.begin(); vector<int>::iterator current = values.begin(); int high = *current++; while (current!= values.end()) { if (*current > high) { high = *current; } current++; }
36 C# Object Oriented Programming Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Containers: oggetti che implementano IEnumerable Iterators: costrutto foreach.. Esempio: String[] strlist = { Alberto, Chiara, Roberto, Valentina }; foreach (String name in strlist) Console.WriteLine( Nome: {0}, name) in
37 Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Java Containers: chiamati Collection in Java List<Integer> mylist = new ArrayList<Integer>(); Iterators simili a C++ void cancelall(collection<timertask> c) { for (Iterator<TimerTask> i = c.iterator(); i.hasnext(); ) i.next().cancel(); } Iterators simili a C# void cancelall(collection<timertask> c) { for (TimerTask t : c) t.cancel(); }
38 Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Python Containers: oggetti che implementano len (self) getitem (self, key) setitem (self, key, value) delitem (self, key) contains (self, item) Iterators: restituiti implementando un metodo iter () in un container. Utilizzo: >>> t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) >>> count = 0 >>> for num in t: count += num else: print count 45
39 Iterators in Python Object Oriented Programming Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Esempio: iterator per classe stack
40 Containers e Iterators Iterazione indipendente dalla struttura dati Type upper bounds Type upper bounds tipi parametrici e meccanismo di tipi e sottotipi possono essere combinati: public class Tree<V extends Comparable> anche in modo più esotico public class Tree<V extends Serializable & Comparable<V>> Java permette anche l utilizzo di wildcards? : public static double sum(tree<? extends Number> t) { }
41 Riassumendo Object Oriented Programming Approccio procedurale: Decidi quali procedure vuoi, ed utilizza i migliori algoritmi tu possa trovare. Approccio modulare: Decidi quali moduli vuoi, e partiziona il programma in modo che i dati siano nascosti nei moduli. Approccio ad oggetti: Decidi quali classi di oggetti vuoi, fornisci un set completo di operazioni per ogni classe, e rendi esplicite le parti comuni utilizzando l ereditarietà Approccio generic programming: Decidi quali algoritmi vuoi, e parametrizzali per il maggior numero possibile di tipi e strutture dati. (B. Stroustrup)
42 Esercizi: Esercizi: Realizzare un ADT Buffer Circolare FIFO (interfaccia, implementazione e codice client) (Lez 8 e 9) Rendere parametrico l ADT rispetto al tipo di dati memorizzato nel Buffer (Lez 9) Estendere il Buffer Circolare in un Buffer Circolare Collegabile, ovvero un buffer che può essere riempito con elementi di un altro buffer.
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliRiassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,
DettagliPolimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
DettagliRiassunto. La programmazione OO. Oggi. Esempio
Riassunto La programmazione OO Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 17 29 novembre
DettagliProgrammazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
DettagliInformatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)
Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una classe Modulo
DettagliInformatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1
Informatica 3 Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una
DettagliA. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
DettagliIl linguaggio Java: aggiunte in Java 1.5
.. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
Dettagli18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliEredità e Polimorfismo in Java
Eredità e Polimorfismo in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Definizione di Classe Java è un linguaggio object-oriented per cui il costrutto fondamentale è quello
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliProgrammazione. ( a.k.a. Generics )
Programmazione Parametrica ( a.k.a. Generics ) Programmazione parametrica: introduzione Generics e relationi di sottotipo wildcards generics e vincoli Implementazione di classi e metodi parametrici Supporto
DettagliEreditarietà. Ereditarietà. Ereditarietà. Ereditarietà
L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe
DettagliObject-Oriented Technology. Giuliano Armano 1
Object-Oriented Technology Giuliano Armano 1 Object Oriented Technology ADT + Eredità + Polimorfismo Object-Orientation Giuliano Armano 2 Terminologia Tipica Classica... Tipo di dato (astratto) = ADT Operazione
DettagliPolimorfismo per Genericità in Java
Polimorfismo per Genericità in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Polimorfismo Polimorfismo Ad-Hoc: Overloading Un metodo può essere sovraccaricato per manifestare
DettagliCapitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125
Capitolo 6 Uso della gerarchia c 2005 Pearson Education Italia Capitolo 6-1 / 125 Sommario: Uso della gerarchia 1 Notazione UML per le classi 2 Introduzione alla gerarchia 3 Gerarchia e tipi La gerarchia
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliL ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà
L ereditarieta` Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino Riuso del software: Ereditarieta`, Composizione,
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...
DettagliEsempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
DettagliSTRUTTURE DATI: OLTRE GLI ARRAY LISTE
STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi
DettagliLa classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
DettagliEsempi in Java di program.ne O-O
Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico
DettagliCosa sono i Generics?
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 13 - Generics in Java 1 Cosa
DettagliRICHIAMI DI PROGRAMMAZIONE A OGGETTI. Corso di Informatica Medica
Università degli Studi di Trieste Corso di Laurea Magistrale in INGEGNERIA CLINICA RICHIAMI DI PROGRAMMAZIONE A OGGETTI Corso di Informatica Medica Docente Sara Renata Francesca MARCEGLIA Dipartimento
DettagliProgrammazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
DettagliIL CONCETTO DI CLASSE
IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi
DettagliClassi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura
Classi astratte Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura Rettangolo getarea() Quadrato getarea() getarea() Cerchio
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 08 Ereditarietà A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Ereditarietà 1 Contenuti!Livelli di astrazione
DettagliIntroduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011
13 aprile 2011 Cos è una collezione? Gerarchia delle collezioni Introduzione Una collezione è semplicemente un oggetto che raggruppa più oggetti (detti elementi della collezione) in una singola unità.
Dettagli14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliProgrammazione orientata agli oggetti Classi astratte e interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma
DettagliGerarchia di classi Java 1
Costruttori della sottoclasse Gerarchia di classi Java Parte 2 Corso di laurea in Comunicazione digitale I costruttori non vengono ereditati, non essendo membri di classe Vengono definiti esplicitamente
DettagliSul pattern Iterator
Sul pattern Iterator 1 Introduzione Capita spesso di aver a che fare con strutture dati complesse, come ad esempio, liste, code, ecc. È buona norma accedere a queste strutture senza esporre la loro organizzazione.
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliLa programmazione ad oggetti: chiamate di metodi. Overloading. This
ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMA SVOLTO A.S. 2015/2016 Classe IV C Informatica Proff. Fabio Ciao / Simone Calugi Libro di testo: Cloud B P.
DettagliAstrazioni sui dati : Specifica di Tipi di Dato Astratti in Java
Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java 1 Specifica ed Implementazione di Tipi di Dato Astratti in Java cos è un tipo di dato astratto specifica di tipi di dati astratti un tipo
DettagliDefinizione di una classe
Definizione di una classe ffl Creazione di una classe class LaMiaClasse {... ffl Creazione di una sottoclasse class LaMiaClasse extends LaMiaSuperClasse {... ffl Se la classe realizza una specifica interfaccia
DettagliObiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.
Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette
DettagliInformatica 3. LEZIONE 2: Sintassi e semantica
Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica
DettagliInformatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione
Informatica 3 Informatica 3 LEZIONE 2: Sintassi e semantica Lezione 2- Modulo 1 Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4:
DettagliInformatica 3. LEZIONE 5: Tipi di dati
Informatica 3 LEZIONE 5: Tipi di dati Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Informatica 3 Lezione 5 - Modulo 1 Tipi
DettagliGenerics in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Generics in Java 1 Cosa sono i Generics?
DettagliCorso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona
di Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona su Sommario di su di di di su Astrazione sugli oggetti di su Il concetto di classe Classe: realizza l astrazione
DettagliOOP: Object Oriented Programming
OOP: Object Oriented Programming Riferimenti per questa parte: 1. Capitoli 7 e 8 del testo di riferimento 2. https://docs.python.org/3.6/tutorial/classes.html OOP: Idea Principale L idea principale della
DettagliISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016
ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016 Classe: 4^A inf Prof.ssa Lami Carla Prof. Simone Calugi Programma di INFORMATICA GENERALE, APPLICAZIONI
DettagliOggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
DettagliIl Linguaggio Java. Le interfacce
Il Linguaggio Java Le interfacce Ordinamento dei conti PROBLEMA: si vogliono ordinare i libretti di risparmio (SavingsAccount) in base al loro tasso di interesse REQUISITO: La classe dovrebbe essere ordinabile,
DettagliAstrazioni Polimorfe e Tipi Generici
Astrazioni Polimorfe e Tipi Generici Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo polimorfo può avere parametri di tipi diversi Un tipo
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliProgrammazione Java: Polimorfismo
Programmazione Java: Polimorfismo romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Polimorfismo» Upcasting» Selezione dei metodi» Comportamento dei metodi polimorfi dentro i costruttori»
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
DettagliAlberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
DettagliIndice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3
Introduzione...vii Organizzazione del libro... viii Struttura del libro e convenzioni... ix Codice sorgente e progetti... x Compilare ed eseguire direttamente i listati e gli snippet di codice... x Compilare
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliOggetti. Interfacce e sottotipi
Programmazione a Oggetti Interfacce e sottotipi Sommario Classi e Interfacce Subtyping/polimorfismo Tipi Statici e Tipi Dinamici Dynamic Method Lookup Sviluppo del Software Suddivisa in due fasi: 1. Specifica:
DettagliIngegneria del Software T. Principi e concetti object-oriented
Principi e concetti object-oriented Dal caos iniziale Data Code Data Variabili globali Data Code Programmazione strutturata Goto Code Data Code 2 Dal caos iniziale Fortran (versione iniziale) Caos nel
DettagliAlgoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari
Algoritmi e Strutture Dati Tipo di dato astratto e Strutture dati elementari 1 Argomenti della lezione Tipi di dato astratto Strutture dati elementari Liste o Implementazione di liste in Java Stack Code
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliClassi, Ereditarietà e Polimorfismo. Lezione 7
Classi, Ereditarietà e Polimorfismo Lezione 7 Scopo della Lezione Presentare il concetto di classe ed oggetto come istanza della classe; Affrontare il concetto di ereditarietà tra classi e le sue ricadute
DettagliTIPI PRIMITIVI E CLASSI WRAPPER
I tipi primitivi come oggetti Package java.lang In varie situazioni, può essere comodo poter trattare i tipi primitivi come oggetti per passarli per riferimento a una funzione quando una funzione pretende
DettagliProgrammazione ad Oggetti. Java Parte II
Programmazione ad Oggetti Java Parte II Overview Caratteristiche lessicali Il primo programma Java 1 Commenti /* Commento tradizionale, eventualmente su più linee, non nidificato */ // Commento su di una
DettagliSubtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo
Subtype Polymorphism Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch Conversioni di tipo Variabile: locazione con un tipo associato Tipo della variabile
DettagliMacchine astratte, linguaggi, interpretazione, compilazione
Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta
DettagliInformatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list
LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di
DettagliLinguaggi di programmazione e astrazione
Linguaggi di programmazione e astrazione i linguaggi di programmazione ad alto livello moderni sono il più potente strumento di astrazione messo a disposizione dei programmatori che possono, con un solo
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
DettagliAstrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari
Astrazione Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 10 mag, 2016 Sommario 1 Astrazione dati Incapsulamento Esempio / ADT pila
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliInformatica 3. Informatica 3. LEZIONE 5: Tipi di dati. Lezione 5 - Modulo 1. Tipi predefiniti. Introduzione
Informatica 3 Informatica 3 LEZIONE 5: Tipi di dati Lezione 5 - Modulo 1 Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Tipi
DettagliRichiami su oggetti e OOP
Richiami su oggetti e OOP Un oggetto (object) è una entità caratterizzata da una struttura dati alla quale si associa l insieme delle operazioni che è possibile compiere su di essa. Un oggetto può essere
DettagliIntroduzione. Java. Esempio. Esempio
Java polimorfismo G. Prencipe prencipe@di.unipi.it Introduzione È un altro degli ingredienti fondamentali della OOP Permette di organizzare il codice e la leggibilità e di ottenere programmi estensibili
DettagliClassi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali
Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate
DettagliI Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi
I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di: Giancarlo Cherchi Introduzione Cosa sono i Template? TEMPLATE? MODELLI Funzionalità non presenti nelle prime versioni del
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliCORSO DI PROGRAMMAZIONE JAVA STANDARD + ENTERPRISE EDITION
CORSO DI PROGRAMMAZIONE JAVA STANDARD + ENTERPRISE EDITION 0 DURATA 200 ore CONTENUTI Oracle PL/SQL Introduzione al PL/SQL Cenni su SQL con utilizzo di SQL*PLUS Configurazione ambiente Developer DB Classi,
DettagliInterfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato
Interfacce 1 Interfacce Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato costituito dall intestazione senza il corpo della definizione
Dettagli3. Il sistema dei tipi I tipi wrapper
3. Il sistema dei tipi I tipi wrapper Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II Il sistema dei tipi Il inguaggio
Dettagli16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
DettagliLezione 11 programmazione in Java. Anteprima. Gestione della memoria
Lezione 11 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio di parametri
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti I Template a.a. 2008/2009 Claudio De Stefano 1 Programmazione generica E una tecnica di programmazione che permette di definire una classe di oggetti (o una funzione)
DettagliProgrammazione a Oggetti. Ereditarieta
Programmazione a Oggetti Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare una gerarchia
DettagliMetodologie di Programmazione. ovvero, Principi e Tecniche per la costruzione di programmi
Metodologie di Programmazione ovvero, Principi e Tecniche per la costruzione di programmi 1 In questo corso Sviluppo in piccolo: Tempi: mesi/uomo v.s. anni/uomo Strumenti: personal v.s. professional Programmazione
DettagliSommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
DettagliEreditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
DettagliIntroduzione all OOP!
Introduzione all OOP! Introdurre l evoluzione dei linguaggi di programmazione e la loro classificazione Introdurre l OOP (astrazione, incapsulamento, ereditarietà) Dal C a Java un primo esempio 1 LINGUAGGI
DettagliMetodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
DettagliProff. Fabio Ciao e Raffaele Bortone
ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud
Dettaglipublic BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }
Il Linguaggio Java Le interfacce La classe BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double
DettagliIntroduzione alla Java Collections Framework
OGGI (RI)VEDIAMO Recap ereditarietà, Object, final Classi wrapper Introduzione alla Java Collections Framework Tabelle hash 1 Ereditarietà - recap Una classe può derivare da un altra - extends Eredita
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliInformatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.
Informatica 3 Informatica 3 LEZIONE 17: lberi generici Lezione 17 - Modulo 1 Modulo 1: Definizione e DT Modulo 2: Implementazione Modulo 3: lberi e classi di equivalenza Definizione e DT Politecnico di
DettagliIndice. Introduzione PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1
Indice Introduzione XV PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1 Capitolo 1 Una panoramica sul linguaggio C 3 1.1 Le origini e la storia del linguaggio C 3 1.2 Il C è un linguaggio di medio livello
Dettagli