Generics. L8 Linguaggi prog. II Unina 2

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Generics. L8 Linguaggi prog. II Unina 2"

Transcript

1 Classi parametriche

2 Generics Introdotti con JAVA 5 (2004), anche se si tratta di una delle prime specifiche di java (1999) Generic Programming > scrivere codice che può essere riutilizzato per oggetti di diverso tipo in maniera sicura. L8 Linguaggi prog. II Unina 2

3 ArrayList Prima di JAVA 5 generic programming era prodotto dall ereditarietà Esempio costruzione di una classe generica ArrayList public class ArrayList { public Object get(int i) {... } public void add(object o) {... }... private Object[] elementdata; } L8 Linguaggi prog. II Unina 3

4 In questo modo però si deve fare il cast per ottenere un oggetto, e non c è nessuno controllo dei tipi di oggetto inseriti nell ArrayList ArrayList files = new ArrayList(); files.add(new File( pippo")); String filename = (String) names.get(0); errore non in compilazione ma in esecuzione! L8 Linguaggi prog. II Unina 4

5 JAVA 5 -> tipi parametrici E possibile specificare con un parametro di tipo l elemento : ArrayList<String> files = new ArrayList<String>(); In questo modo il codice e più leggibile e i conflitti si scoprono a tempo di compilazione. Non c e bisogno di casting per ottenere gli oggetti dell array list String filename = files.get(0); files.add(new File("...")); // errore di // compilazione L8 Linguaggi prog. II Unina 5

6 La programmazione generica, classi parametriche e metodi parametrici Le classi parametriche possono essere utilizzate cosi come sono (come classi container evolute), oppure per usi più evoluti si può utilizzare la programmazione generica con oggetti complessi, utilizzando le wildcard Il nome generics può essere ingannevole in quanto si riferisce in realtà ad una regolamentazione nell uso di tipi generici rispetto le prime implementazioni L8 Linguaggi prog. II Unina 6

7 Classe parametrica Una classe parametrica ha una o più variabili di tipo (racchiuse tra <> ) public class Pair<T> { public Pair() { first = null; second = null; } public Pair(T first, T second) { this.first = first; this.second = second; } public T getfirst() { return first; } public T getsecond() { return second; } public void setfirst(t newvalue) { first = newvalue; } public void setsecond(t newvalue) { second = newvalue; } } private T first; private T second; L8 Linguaggi prog. II Unina 7

8 Utilizzo classi parametriche Le classi parametriche evitano il ricorso del cast: Pair p = new Pair( prima, seconda ); String a = a.getfirst(); Il tipo String si comporta come il parametro di tipo attuale, che sostituisce il parametro di tipo formale, come avviene per le variabili L8 Linguaggi prog. II Unina 8

9 Convezione per i nomi delle variabili di tipo <E> Elementi di collezioni K,V (Key, value), elementi per tabelle T (U,S,...) qualsiasi tipo Analogia con i template del C++ Sintatticamente si deve specificare la parola template, ci sono diverse differenze (es Boost) template <class T1, class T2> struct pair { typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair() : first(t1()), second(t2()) {} pair(const T1& x, const T2& y) : first(x), second(y) {} template <class U, class V> pair (const pair<u,v> &p) : first(p.first), second(p.second) { } } L8 Linguaggi prog. II Unina 9

10 Metodi parametrici E possibile specificare le variabili di tipo anche per un singolo metodo di una classe class ArrayAlg { public static <T> T getmiddle(t[] a) { return a[a.length / 2]); } } Invocazione String[] names = { "John", "Q.", "Public" }; String middle = ArrayAlg.<String>getMiddle(names); Oppure semplicemente (ok a compilazione e esecuzione) String middle = ArrayAlg.getMiddle(names); I metodi parametrici possono appartenere ad una classe NON parametrica o parametrica L8 Linguaggi prog. II Unina 10

11 Nell'invocazione dei metodi parametrici non è obbligatorio specificare il tipo, il compilatore applica un algoritmo type inference simile a quello dell'assegnazione dei tipi del type system. String[] names = { "John", "Q.", "Public" }; String middle = ArrayAlg.getMiddle(names); In questo caso l'algoritmo type inference è in grado di determinare come tipo più specifico String. L8 Linguaggi prog. II Unina 11

12 Da Java 5 diverse classi di Java sono diventate parametriche. Il codice pregresso generalmente continua a funzionare grazie alla type inference, con messaggi di WARNING L8 Linguaggi prog. II Unina 12

13 ... } Costruttori parametrici Anche i costruttori possono essere parametrici, come un qualsiasi altro metodo public class A<T> { public <U> A(T x, U y) { } L8 Linguaggi prog. II Unina 13

14 Parametri di tipo ristretti Può essere necessario richiedere alcune condizioni sui tipi utilizzabili dai generics. Esempio class ArrayAlg { public static <T> T min(t[] a) { if (a == null a.length == 0) return null; T smallest = a[0]; for (int i = 1; i < a.length; i++) if (smallest.compareto(a[i]) > 0) smallest = a[i]; return smallest; } } Si deve richiedere che il tipo T generico abbia il metodo compareto L8 Linguaggi prog. II Unina 14

15 La soluzione generic è quella di restringere il tipo T alle classi derivate da un interfaccia Comparable (una interfaccia standard col solo metodo compareto) public static <T extends Comparable> T min(t[] a) L interfaccia Comparable è un tipo generico essa stessa. L8 Linguaggi prog. II Unina 15

16 Tipi ristretti Sintassi generica <T extends BoundingType> BoundingType può essere una classe o una interfaccia E possibile richiedere restrizioni multiple T extends Comparable & Serializable (al più una può essere una classe che deve trovarsi però al primo posto) ES L8 Linguaggi prog. II Unina 16

17 JVM e generics LA JVM non gestisce i tipi generici, ma solo classi ordinarie. In presenza di un generic il compilatore rimuove la parametrizzazione (come prima di JAVA5), ed in fase di compilazione effettua automaticamente il casting Il meccanismo del type reference può fallire anche in presenza di una soluzione, oppure puo' fornire la soluzione errata (non è corretto né L8 Linguaggi prog. II Unina 17 completo)

18 Implementazione dei generics e type inference I generics sono implementati con un meccanismo di riscrittura del codice (raw type e type erasure) da parte del compilatore. Il risultato è quello di ottenere delle classi ordinarie. Nella definizione ai tipi generici vengono sostituiti, a tempo di compilazione con i tipi raw, che corrisponde al tipo ristretto se presente, o al tipo object. ESEMPIO Pair L8 Linguaggi prog. II Unina 18

19 public class Pair { public Pair(Object first, Object second) { this.first = first; this.second = second; } public Object getfirst() { return first; } public Object getsecond() { return second; } public void setfirst(object newvalue) { first = newvalue; } public void setsecond(object newvalue) { second = newvalue; } private Object first; private Object second; } L8 Linguaggi prog. II Unina 19

20 Invocazione dei generics Nelle istruzioni di invocazioni dei metodi generici, il compilatore inserisce automaticamente istruzioni di cast in corrispondenza del tipo. Pair<Employee> staff2 =...; Employee employee1 = (employee)staff2.getfirst(); L8 Linguaggi prog. II Unina 20

21 Implementazione metodi generici: conseguenze ESEMPIO INTERVALLO DI DATE class DateInterval extends Pair<Date> { public void setsecond(date second) { if (second.compareto(getfirst()) >= 0) super.setsecond(second); }... } L8 Linguaggi prog. II Unina 21

22 Implementazione dei metodi generici public static <T extends Comparable> T min(t[] a) RAW TYPE public static Comparable min(comparable[] a) Bridge method In alcuni casi la cancellazione del tipo generico ha come conseguenza la creazione di metodi bridge ES L8 Linguaggi prog. II Unina 22

23 class DateInterval extends Pair<Date> { public void setsecond(date second) { if (second.compareto(getfirst()) >= 0) super.setsecond(second); }... } Si richiede ovviamente che la seconda data sia maggiore della prima La cancellazione trasforma la classe DateInterval a: class DateInterval extends Pair // after erasure { public void setsecond(date second) {... }... } Ovviamente esiste anche il metodo setsecond derivato da pair public void setsecond(object newvalue) { second = newvalue; } L8 Linguaggi prog. II Unina 23

24 Cosa accade nella sequenza di istruzioni? DateInterval interval = new DateInterval(...); Pair<Date> pair = interval; // OK--assignment to superclass pair.setsecond(adate); Il compilatore crea automaticamente un bridge method per prevenire le conseguenze del type erasure sui metodi overridden public void setsecond(object second) { setsecond((date) second); } L8 Linguaggi prog. II Unina 24

25 Generic: restrizioni nei tipi Ci sono alcune restrizione nell uso dei generics, dovute principalmente ai problemi di cancellazione TIPI PRIMITIVI Non si possono usare i tipi primitivi in una variabile di tipo: NO pair<double>, MA pair<double> La ragione è la type erasure. La classe pair,dopo la cancellazione del tipo, ha tipo riferimento Object, e non puo ospitare tipi primitivi (in questo caso double). L8 Linguaggi prog. II Unina 25

26 Operatore istanceof (a instanceof Pair<String>) <-> (a instanceof Pair ) Nella JVM il confronto avviene tramite il riferimento non tipato if (a instanceof Pair<T>) T viene ignorato Cast Pair<String> p = (Pair<String>) a; Nel caso di cast il compilatore emette un WARNING can only test that a is a Pair che ricorda che che il cast non include il tipo parametrico, ma solo il raw type. Allo stesso modo il metodo getclass restituisce il tipo raw Pair<String> stringpair =...; Pair<Employee> employeepair =...; if (stringpair.getclass() == employeepair.getclass()) // UGUALI! L8 Linguaggi prog. II Unina 26

27 Eccezioni Non si possono sollevare eccezione ne catturare eccezioni di una generic class, ne avere eccezioni parametriche. public class Problem<T> extends Exception { /* */} ERROR--can't extend Throwable Non si possono usare le variabili di tipo una clausola catch. public static <T extends Throwable> void dowork(class<t> t) { try { do work } catch (T e) // ERROR--can't catch type variable { Logger.global.info(...) } } L8 Linguaggi prog. II Unina 27

28 Si può usare una variabile di tipo che però estende Trowable public static <T extends Throwable> void dowork(t t) throws T /* OK! */ { try { do work } } catch (Throwable realcause) { t.initcause(realcause); throw t; } L8 Linguaggi prog. II Unina 28

29 Array Non si possono dichiarare array di tipi parametrizzati Pair<String>[] table = new Pair<String>(10); // ERRORE Dopo la type erasure, il tipo di table è Pair[], che ovviamente è convertibile in Object[] Object[] objarray = table; Per creare associazioni di tipi parametrizzati si può usare la collection ArrayList: ArrayList<Pair<String>> L8 Linguaggi prog. II Unina 29

30 Istanziare i tipi generici I tipi generici non possono essere istanziati Pair<T> constructor -> public Pair() { first = new T(); second = new T(); } // ERROR La Type erasure cambierebbe T in Object, l errore previene questo meccanismo public <T> T[] minmax(t[] a) { T[] mm = new T[2];... } // ERROR Si costruirebbe così un array di Object Gli oggetti generici possono essere creati con il meccanismo della riflessione (Class.newInstance Array.newInstance). L8 Linguaggi prog. II Unina 30

31 Metodi Static di classi parametriche Non si possono riferire variabili di tipo in metodi statici public class Singleton<T> { public static T getsingleinstance() // ERROR } { if (singleinstance == null) construct new instance of T return singleinstance; } private static T singleinstance; // ERROR Se fosse possibile, si avrebbe un pattern Singleton universale, da istanziare secondo le esigenze (es Singleton<Random> per condividere un generatore di numeri casuali). Con la type erasure si averbbe però solo la classe Singleton, ed un solo membro singleinstance. L8 Linguaggi prog. II Unina 31

32 Conflitti da cancellazione tipi generici La type erasure può introdurre dei conflitti public class ClassP<T> extends ClassNoP { public int method(t value) { }... } Se la classe ClassNoP ha anche essa un method(object o), avremmo int method(string) // da ClassP<T> int method(object) // ereditata da ClassNoP Mentre La type erasure del metodo parametrico int method(t) produce il metodo int method(object) Rimedi: rinominare il method oppure assicurare l'ovveride con la dichiarazione public class ClassP<T> extends ClassNoP <T> L8 Linguaggi prog. II Unina 32

33 Le specifiche di Java sui generics riportano la seguente regola: "To support translation by erasure, we impose the restriction that a class or type variable may not at the same time be a subtype of two interface types which are different parameterizations of the same interface." In questo modo è illegale il costrutto: class Calendar implements Comparable<Calendar> {...} class GregorianCalendar extends Calendar implements Comparable<GregorianCalendar> {...} // ERROR La versione non parametrica è invece legale class Employee implements Comparable {... } class Manager extends Employee implements Comparable {... } L8 Linguaggi prog. II Unina 33

34 Regole di ereditarietà per tipi generici L uso delle classi parametriche non tiene in conto le relazioni che ci possono essere tra le classi istanziate al posto delle variabili di tipo Non c e alcuna relazione tra pair<s> e pair<t> qualunque sia la relazione che c e tra S e T. E una restrizione necessaria per la corretta utilizzazione dei tipi. Con un esempio si può facilmente capire il perché di questa restrizione L8 Linguaggi prog. II Unina 34

35 Il fatto che per i tipi parametrici non valgono le relazioni di sottotipo, porta dei vantaggi pratici nella scrittura dei programmi Esempio Manager[] ma = new Manager[2]; Employee[] ea = ma; //== ok Manager[] è sottotipo di //==Employee[] ea[0] = new Employee(...); //== eccezione a run time! ArrayStoreException L8 Linguaggi prog. II Unina 35

36 Uso dei generics Pair<Manager> managerbuddies = new Pair<Manager>(ceo, cfo); Pair<Employee> employeebuddies = managerbuddies; // NON è possibile, non valgono le relazioni di sottotipo! employeebuddies.setfirst(lowlyemployee); Si ha un errore di compilazione molto più facile da scoprire e correggere L8 Linguaggi prog. II Unina 36

37 Per garantire il funzionamento del codice esistente, si può sempre convertire un tipo parametrico nel tipo raw Esempio Pair<Manager> managerbuddies= new Pair<Manager>(ceo,cfo); Pair rawbuddies = managerbuddies; // OK rawbuddies.setfirst(new String("???")); Si otterrebbe pero' solo un warning a compile time! L8 Linguaggi prog. II Unina 37

38 Le classi generiche possono estendere altre generiche classi, proprio come le classi ordinarie; per esempio la classe ArrayList<T> implementa la interfaccia List<T>. Cosi' un ArrayList<Manager> puo' essere convertita in List<Manager>, mentre non è possibile ArrayList<Manager> ArrayList<Employee> ne List<Employee>. L8 Linguaggi prog. II Unina 38

39 I tipi jolly (wildcard) Per facilitare l applicazione dei generics alle classi che hanno relazione di ereditarietà sono stati introdotti i tipo JOLLY (wildcard) Le limitazioni di tipo vengono adoperate per lo più con i parametri di tipo JOLLY Pair<? extends C> Identifica qualsia classe con tipo generico che eredita da C L8 Linguaggi prog. II Unina 39

40 Esempio Pair<? extends Employee> denota ogni Pair parametrica il cui parametro è una sottoclasse di Employee (es manager), ma non di tipi che non sono in relazione di ereditarietà (come Pair<String>). L8 Linguaggi prog. II Unina 40

41 Consideriamo ad esempio un metodo che stampa una coppia di impiegati public static void printpairemp(pair<employee> p) { Employee first = p.getfirst(); Employee second = p.getsecond(); System.out.println(first.getName() + " e " second.getname()+ "sono una coppia di impiegati."; } L8 Linguaggi prog. II Unina 41

42 IL metodo non è utilizzabile per una coppia di manager a meno che non usare un wildcard type : public static void printpairemp( Pair<? extends Employee> p) Il tipo Pair<Manager> è un sottotipo di Pair<? extends Employee> L8 Linguaggi prog. II Unina 42

43 Riprendiamo l'esempio Pair<Manager> managerbuddies = new Pair<Manager>(ceo,cfo); Pair<? extends Employee> wildcardbuddies = managerbuddies; // ORA è POSSIBILE wildcardbuddies.setfirst(lowlyemployee); // compile-time error (Type error)!!! ES Il compilatore si rifiuta di passare il tipo wildcard come un tipo specifico per prevenire malfuzionamenti. In effetti Pair<? extends Employee> non è convertibile in un tipo specifico. La seconda assegnazione è invece lecita I tipo wildcard permettono di distingure tra l'accesso sicuro ai sotto tipi, ed i modificatori di tipo non sicuri. L8 Linguaggi prog. II Unina 43

44 Parametri Jolly con restrizioni di sotto tipo L8 Linguaggi prog. II Unina 44

45 Parametri jolly con restrizioni di super tipo <? super Manager> Questo parametro jolly è ristretto a tutte le super classi di manager (es Employee, o Person o Object) Motivazione principale: gestire i tipi restituiti dai metodi generici Pair<? super Manager> ha i metodi void set(? super Manager)? super Manager get() In questo modo si introducono dei limiti inferiori di tipi parametrici L8 Linguaggi prog. II Unina 45

46 Il compilatore non conosce il tipo esatto da passare al metodo set, ma può invocarlo in effetti con qualsiasi oggetto cui Manager può essere convertito All'inverso, non c'e' certezza di quale sia il tipo restituito, se non Object Esempio: Supponiamo di avere un array di Manager e di voler costruire una coppia con i manager rispettivamente col bonus più alto e quello più basso, per avere una idea del range dei bonus. L8 Linguaggi prog. II Unina 46

47 public static void minmaxbonus(manager[] a, Pair<? super Manager> result) { if (a == null a.length == 0) return; Manager min = a[0]; Manager max = a[0]; for (int i = 1; i < a.length; i++) { if (min.getbonus() > a[i].getbonus()) min = a[i]; if (max.getbonus() < a[i].getbonus()) max = a[i]; } result.setfirst(min); result.setsecond(max); } L8 Linguaggi prog. II Unina 47

48 L8 Linguaggi prog. II Unina 48

49 Da un punto di vista intuitivo, i tipi JOLLY con limitazioni di super classe consentono di restituire un oggetto generico, i tipi JOLLY con restrizioni di sottoclasse consentono di leggere da qualsiasi oggetto. Blooch (effective java) parla di PECS Product Extends Consumer Super <? extends T> <? super T> Quando gli oggetti parametrici si usano come prodotti delle collezioni, delle classi parametri, va usata la restrizione di supertipo (le collezioni, le classi parametriche producono gli oggetti). Quando invece il codice la classe parametrico, il metodo parametrico si comporta da consumer (utilizza), allora bisogna assicurare gli il tipo parametrico sia castabile al super tipo

50 Ritornando all'esempio precedente Se vogliamo applicare il metodo printemploypair definito per una coppia di impiegati public static void printpairemp(pair<employee> p) ad una coppia di manager dobbiamo dichiarare il metodo public static void printpairemp(pair<? extends Employee> p) proprio per l'invarianza dei tipi parametrici, perché Pair<Manager> non è sottotipo di Pair<Employee>, ma è sottotipo di Pair<? Extends Employee>. L'estensione? extends Manager è una specifica classe di un tipo che estende Manager, che non è nota nel contesto della compilazione ma che può essere castata a Manager in lettura

51 Nell'esempio di restrizione di sotto tipo public static void minmaxbonus(manager[] a, Pair<? super Employee> result)? super Manager è una specifica classe che è super Tipo di Manager, quindi puo' ospitare tipi manager (in scrittura, o quando il tipo è trattato come consumer). Si puo' ovviamente riscrivere il metodo come public static void minmaxbonus(manager[] a, Pair<? super Employee> result) e passarli una coppia di Employee, quando pero' i manager vengono inseriti nella coppia vengono promossi impiegati, e si perde informazione sui bonus. Se il codice si comporta sia come producer che come consumer le estensioni di super tipo e sotto tipo non sono utilizzabili. Più che come quantificatori di classi, le restrizione di super e sotto tipo vanno interpretati in funzione del loro utilizzo

52 Restrizione di sottotipo/super tipo Un altro uso della restrizione di super tipo si ha con l'interfaccia Comparable, che è di tipo generico public interface Comparable<T> { public int compareto(t other); } Per esempio String implementa Comparable<String>, con il metodo compareto public int compareto(string other) Prima di Java 5, other era un oggetto Object, e si doveva ricorrere ad un cast nell'implementazione. L8 Linguaggi prog. II Unina 52

53 Applicazioni ad array Esempio il minimo universale di array di tipi che estandono l'interfaccia Comparable public static <T extends Comparable<T>> T min(t[] a) Potrebbe essere utile a calcolare il minimo di un array di String T sarebbe il tipo String e String sottotipo di Comparable<String>. L8 Linguaggi prog. II Unina 53

54 E' applicabile ad un array di date, per esempio GregorianCalendar? GregorianCalendar è una sottoclasse di Calendar che implementa Comparable<Calendar>. GregorianCalendar implementa Comparable<Calendar> MA NON Comparable<GregorianCalendar>. In una situazione come questa ci viene d'aiuto la restrizione di super tipo: public static <T extends Comparable<? super T>> T min(t[] a) In questo modo il metodo è effettivamente applicabile L8 Linguaggi prog. II Unina 54

55 Differenze tra <? extends T> e <? super T> Il primo dice un qualiasi tipo che deriva da T, (limite superiore), ovvero un tipo che puo' essere castato a T E rappresenta la famiglia di tutti i tipi che sono sottotipi di T (T incluso) il secondo un qualsiasi tipo da cui deriva T, e rappresenta la famiglia di tutti i tipi Che sono super tipo di T (limite inferiore), ovvero cui T puo' essere castato (T incluso).

56

57 Tipi JOLLY senza restrizioni Si possono usare i tipi JOLLY anche senza restrizioni, es. Pair<?>, che non è la classe Pair RAW, ma possiede i metodi? getfirst() void setfirst(?) Il valore restituito da getfirst può essere solo assegnato ad un Object. setfirst invece non può proprio essere invocato, neanche con Object, ma solo con null. Questa è la principale differenza col Pair row type L8 Linguaggi prog. II Unina 57

58 A cosa serve allora il tipo? senza restrizioni? Si puo' usare quando non si deve utilizzare il tipo attuale, ma solo il tipo null public static boolean hasnulls(pair<?> p) { return p.getfirst() == null p.getsecond() == null; } L8 Linguaggi prog. II Unina 58

59 Il parametro di tipo jolly intuitivamente rappresenta un tipo sconosciuto. Es due liste dello stesso tipo public static <T> void addall(list<t> l1, List<T> l2) {... } due liste qualsiasi public static void addall(list<?> l1, List<?> l2) {... } L8 Linguaggi prog. II Unina 59

60 Wildcard capture Consideriamo di volere scrivere un metodo per scambiare gli elementi di una coppia E' POSSIBILE USARE UN WILDCARD?: public static void swap(pair<?> p) Una wildcard non è una variabilie di tipo, quindi non si può usare un codice come:? t = p.getfirst(); // ERROR p.setfirst(p.getsecond()); p.setsecond(t); L8 Linguaggi prog. II Unina 60

61 Soluzione Costruire un metodo helper public static <T> void swaphelper(pair<t> p) { T t = p.getfirst(); p.setfirst(p.getsecond()); p.setsecond(t); } swaphelper è un metodo generico, mentre swap non lo è (ha un parametro di tipo Pair<?>). Si può invocare saphelper da swap: public static void swap(pair<?> p) { swaphelper(p); } In questo caso il parametro T cattura la wildcard. In generale il meccanismo della wildcard capture può essere usato solo quando alla wildcard corrisponde un tipo attuale ben definito. L8 Linguaggi prog. II Unina 61

Generics. L9 Linguaggi Progr.II Unina 2

Generics. L9 Linguaggi Progr.II Unina 2 Classi parametriche Generics Introdotti con JAVA 5 (2004), anche se si tratta di una delle prime specifiche di java (1999) Generic Programming > scrivere codice che può essere riutilizzato per oggetti

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

Programmazione generica

Programmazione generica 16 Programmazione generica Obiettivi del capitolo Capire gli obiettivi della programmazione generica Essere in grado di realizzare classi e metodi generici Comprendere il meccanismo di esecuzione di metodi

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

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:

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: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti 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

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Parola chiave extends

Parola chiave extends Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi

Dettagli

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

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Main System Monitor Keyboard

Main System Monitor Keyboard Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti

Dettagli

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

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

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

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo Design Pattern L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo sviluppo dei programmi, il loro mantenimento,

Dettagli

Definizione di classi con array di oggetti

Definizione di classi con array di oggetti 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

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

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

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

Traccia di soluzione dell esercizio del 25/1/2005

Traccia di soluzione dell esercizio del 25/1/2005 Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) 1) Si considerino le classi Java: Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) class Card Card (String seed, int value) this.seed=seed; this.value=value; String seed; int

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

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

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 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 Reflection in Java 1 Reflection Riflessione

Dettagli

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

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

Dettagli

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

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Java Virtual Machine

Java Virtual Machine Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina

Dettagli

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte Java riutilizzo delle classi G. Prencipe prencipe@di.unipi.it Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Cenni su programmazione con tipi generici (generics)

Cenni su programmazione con tipi generici (generics) Cenni su programmazione con tipi generici (generics) Tipi generici (generics) Programmazione generica: Creazione di costrutti che possono essere utilizzati con tipi di dati diversi Es. ArrayList,

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

Un esercizio d esame. Flavio De Paoli

Un esercizio d esame. Flavio De Paoli Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori

Dettagli

Gestione delle Eccezioni

Gestione delle Eccezioni Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

DESIGN PATTERNS Parte 6. State Proxy

DESIGN PATTERNS Parte 6. State Proxy DESIGN PATTERNS Parte 6 State Proxy STATE Il Design Pattern State nasce dall'esigenza di poter gestire gli stati di una classe senza dover usare dei costrutti come gli Enum e quindi delle switch. Prendiamo

Dettagli

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

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le

Dettagli

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

Dettagli

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

Visual Basic.NET La Gestione degli Errori di Federico BARBATI Generalità Visual Basic.NET La Gestione degli Errori di Federico BARBATI La gestione degli errori, è una parte fondamentale di un codice ben progettato. Fino ad oggi, gli errori nelle applicazioni scritte

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Ruoli e Responsabilità: C# versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G.

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione Gerarchie di Tipi Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione Notazione UML Relazione Simbolo Significato Ereditarietà Implementazione Aggregazione Dipendenza

Dettagli

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

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java 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 Programmazione Object Oriented in Java

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VI Tatiana Zolo tatiana.zolo@libero.it 1 LE STRUCT Tipo definito dall utente i cui elementi possono essere eterogenei (di tipo diverso). Introduce un nuovo tipo di

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

Supermarket Progetto di Programmazione Febbraio 2010

Supermarket Progetto di Programmazione Febbraio 2010 Supermarket Progetto di Programmazione Febbraio 2010 1 Supermercato Dovete realizzare un insieme di classi e interfacce che riguardano la gestione di un supermercato. nella Sezione 2 verranno descritte

Dettagli

Programmazione Java Avanzata Concetti su Java

Programmazione Java Avanzata Concetti su Java Programmazione Java Avanzata Concetti su Java Ing. Giuseppe D'Aquì Testi di Riferimento Java ( R. Liguori, P. Liguori), O'Reilly Hops Tecniche Nuove (2008) Java Virtual Machine Il codice scritto in Java

Dettagli

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

Dettagli

Protezione. Protezione. Protezione. Obiettivi della protezione

Protezione. Protezione. Protezione. Obiettivi della protezione Protezione Protezione La protezione riguarda i meccanismi per il controllo dell accesso alle risorse in un sistema di calcolo da parte degli utenti e dei processi. Meccanismi di imposizione fissati in

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...

Dettagli

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

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247 Registri RMI Per poter interagire con un server remoto, un client deve essere in possesso di una sua referenza remota (ovvero un oggetto stub). Un servizio di Naming è una risorsa centralizzata che può

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. (Structured Query Language) : Il linguaggio è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. prima versione IBM alla fine degli anni '70 per un prototipo di ricerca (System

Dettagli

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

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

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1 Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

RISOLUTORE AUTOMATICO PER SUDOKU

RISOLUTORE AUTOMATICO PER SUDOKU RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it Programmazione II Lezione 4 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 30/09/2011 1/46 Programmazione II Lezione 4 30/09/2011 Sommario 1 Esercitazione 2 Panoramica della Programmazione Ad Oggetti 3

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli

Java Web Services. Uso di Eclipse e Apache Axis

Java Web Services. Uso di Eclipse e Apache Axis Java Web Services Uso di Eclipse e Apache Axis 1 Gli strumenti utili per iniziare Axis (Web Service tool) Eclipse (IDE di sviluppo) Tomcat (servlet/jsp container) N.B. Eclipse e Tomcat possono essere sostituiti

Dettagli

Esercizi della lezione 5 di Java

Esercizi della lezione 5 di Java Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente. Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

(anno accademico 2008-09)

(anno accademico 2008-09) Calcolo relazionale Prof Alberto Belussi Prof. Alberto Belussi (anno accademico 2008-09) Calcolo relazionale E un linguaggio di interrogazione o e dichiarativo: at specifica le proprietà del risultato

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli