Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esame 2020, domande+risposte, Prove d'esame di Programmazione C

domande e risposte aperte linguaggi di programmazione

Tipologia: Prove d'esame

2019/2020

Caricato il 30/11/2020

Arianna.Baggio
Arianna.Baggio 🇮🇹

4.8

(5)

2 documenti

1 / 42

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Linguaggi di programmazione professore Vecchio Massimo
a cosa serve la bufferizzazione di uno stream?
a disaccoppiare le azioni di effettiva lettura/scrittura del sistema operativo dalla macchina virtuale Java
che differenza c'è tra un linguaggio di programmazione interpretato e uno compilato?
un linguaggio compilato viene prima tradotto in linguaggio macchina
che differenza c'è tra una classe ed un oggetto?
La classe è quella cosa che definisce il comportamento generale degli oggetti che vi appartengono.Con
comportamento indichiamo le azioni (metodi) che un oggetto di quella classe può fare, e lo stato interno
(le variabili). Gli oggetti sono delle "cose" che hanno il comportamento della classe.ovviamente 2 oggetti
distinti possono avere comportamenti diversi inbase al proprio stato interno (cioè alle variabili).
Una classe è la descrizione astratta di un tipo di dato; un oggetto è la realizzazione (istanza) di una classe
che differenze ci sono tra una pila e una coda?
Somiglianze> entrambi i tipi di dato astratto possono essere realizzati con la stessa struttura dati
una pila è una collezione di oggetti in cui agli oggetti si accede a LIFO (Last In First Out). Una coda è un
insieme di oggetti in cui gli oggetti sono accessibili nel FIFO (First In First Out) sequenza. In una pila, un
oggetto è spinto in cima alla raccolta durante l'operazione di inserimento. In una coda, un nuovo oggetto
viene inserito alla fine.
che differenze tra tipo di dato astratto e struttura dati? si faccia riferimento al linguaggio Java
Una struttura dati (data structure) è un modo sistematico di organizzare i dati in un contenitore e di
controllarne le modalità d’accesso. In Java si definisce una struttura dati con una classe.
Un tipo di dati astratto (ADT, Abstract Data Type) è una rappresentazione astratta di una struttura dati, un
modello che specifica: il tipo di dati memorizzati
- le operazioni che si possono eseguire sui dati, insieme
- al tipo di informazioni necessarie per eseguire tali operazioni
che somiglianze ci sono tra una pila e una coda?
entrambi i tipi di dato astratto possono essere realizzati con la stessa struttura dati
che tipo di linguaggio di programmazione è Java?
È un linguaggio semi compilato o semi-interpretato,
In informatica Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e a
tipizzazione statica, che si appoggia sull'omonima piattaforma software, specificamente progettato per
essere il più possibile indipendente dalla piattaforma hardware di esecuzione (tramite compilazione in
bytecode prima e interpretazione poi da parte di una JVM),
il codice compilato che viene eseguito su una piattaforma non deve essere ricompilato per essere
eseguito su una piattaforma diversa. Infatti il prodotto della compilazione è in un formato chiamato
bytecode che può essere eseguito da una qualunque implementazione di un processore virtuale detto
Java Virtual Machine.
I programmi scritti in linguaggio Java, dopo una fase iniziale di compilazione con ottenimento del
cosiddetto bytecode, sono destinati all'esecuzione sulla piattaforma Java attraverso una fase di
interpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di una
Java Virtual Machine e in esecuzione hanno accesso alle API della libreria standard. Questi due passi
forniscono un livello di astrazione che permette alle applicazioni di essere interamente indipendenti dal
sistema hardware su cui esse saranno eseguite.
Ma quali sono i vantaggi per passare da un linguaggio intermedio (i bytcodes) ad un linguaggio
interpretato ?Questi i principali vantaggi:
l’interprete per il linguaggio dei bytecodes è molto più efficiente di un interprete per un linguaggio ad alto
livello come il linguaggio Java. Infatti, il linguaggio dei bytecodes si approssima molto al linguaggio
macchina di una CPU reale di quanto non lo siano i linguaggi di alto livello.
grazie all’indipendenza del linguaggio intermedio (i bytecodes) che fa da raccordo tra il linguaggio Java e
le differenti piattaforme hardware. Per esempio, il linguaggio Java può anche essere modificato oppure
esteso senza aver bisogno di trasformare il linguaggio dei bytecodes e le relative JVM (questo è avvenuto
sopratutto durante le varie revisioni del linguaggio .
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a

Anteprima parziale del testo

Scarica Esame 2020, domande+risposte e più Prove d'esame in PDF di Programmazione C solo su Docsity!

Linguaggi di programmazione professore Vecchio Massimo a cosa serve la bufferizzazione di uno stream? a disaccoppiare le azioni di effettiva lettura/scrittura del sistema operativo dalla macchina virtuale Java che differenza c'è tra un linguaggio di programmazione interpretato e uno compilato? un linguaggio compilato viene prima tradotto in linguaggio macchina che differenza c'è tra una classe ed un oggetto? La classe è quella cosa che definisce il comportamento generale degli oggetti che vi appartengono.Con comportamento indichiamo le azioni (metodi) che un oggetto di quella classe può fare, e lo stato interno (le variabili). Gli oggetti sono delle "cose" che hanno il comportamento della classe.ovviamente 2 oggetti distinti possono avere comportamenti diversi inbase al proprio stato interno (cioè alle variabili). Una classe è la descrizione astratta di un tipo di dato; un oggetto è la realizzazione (istanza) di una classe che differenze ci sono tra una pila e una coda? Somiglianze> entrambi i tipi di dato astratto possono essere realizzati con la stessa struttura dati una pila è una collezione di oggetti in cui agli oggetti si accede a LIFO (Last In First Out). Una coda è un insieme di oggetti in cui gli oggetti sono accessibili nel FIFO (First In First Out) sequenza. In una pila, un oggetto è spinto in cima alla raccolta durante l'operazione di inserimento. In una coda, un nuovo oggetto viene inserito alla fine. che differenze tra tipo di dato astratto e struttura dati? si faccia riferimento al linguaggio Java Una struttura dati (data structure) è un modo sistematico di organizzare i dati in un contenitore e di controllarne le modalità d’accesso. In Java si definisce una struttura dati con una classe. Un tipo di dati astratto (ADT, Abstract Data Type) è una rappresentazione astratta di una struttura dati, un modello che specifica: il tipo di dati memorizzati

  • le operazioni che si possono eseguire sui dati, insieme
  • al tipo di informazioni necessarie per eseguire tali operazioni che somiglianze ci sono tra una pila e una coda? entrambi i tipi di dato astratto possono essere realizzati con la stessa struttura dati che tipo di linguaggio di programmazione è Java? È un linguaggio semi compilato o semi-interpretato, In informatica Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e a tipizzazione statica, che si appoggia sull'omonima piattaforma software, specificamente progettato per essere il più possibile indipendente dalla piattaforma hardware di esecuzione (tramite compilazione in bytecode prima e interpretazione poi da parte di una JVM), il codice compilato che viene eseguito su una piattaforma non deve essere ricompilato per essere eseguito su una piattaforma diversa. Infatti il prodotto della compilazione è in un formato chiamato bytecode che può essere eseguito da una qualunque implementazione di un processore virtuale detto Java Virtual Machine. I programmi scritti in linguaggio Java, dopo una fase iniziale di compilazione con ottenimento del cosiddetto bytecode, sono destinati all'esecuzione sulla piattaforma Java attraverso una fase di interpretazione (per questo motivo il linguaggio Java è detto anche semi-interpretato) ad opera di una Java Virtual Machine e in esecuzione hanno accesso alle API della libreria standard. Questi due passi forniscono un livello di astrazione che permette alle applicazioni di essere interamente indipendenti dal sistema hardware su cui esse saranno eseguite. Ma quali sono i vantaggi per passare da un linguaggio intermedio (i bytcodes) ad un linguaggio interpretato ?Questi i principali vantaggi: l’interprete per il linguaggio dei bytecodes è molto più efficiente di un interprete per un linguaggio ad alto livello come il linguaggio Java. Infatti, il linguaggio dei bytecodes si approssima molto al linguaggio macchina di una CPU reale di quanto non lo siano i linguaggi di alto livello. grazie all’indipendenza del linguaggio intermedio (i bytecodes) che fa da raccordo tra il linguaggio Java e le differenti piattaforme hardware. Per esempio, il linguaggio Java può anche essere modificato oppure esteso senza aver bisogno di trasformare il linguaggio dei bytecodes e le relative JVM (questo è avvenuto sopratutto durante le varie revisioni del linguaggio.

Il linguaggio intermedio dei bytecodes e le varie JVM sono soltanto una parte dell’insieme che fa si che il linguaggio Java si uno fra i linguaggi di programmazione più portabili. Mentre l’altra parte comprende la piattaforma Java. chi gestisce l'oggetto eccezione (exception object) in Java? In Java l’exception object viene gestito dal run-time system come avviene l'inserzione di un elemento in una lista? StringBuilder insert(int offset, boolean b) StringBuilder insert(int offset, char c) StringBuilder insert(int offset, double d) StringBuilder insert(int offset, float f) StringBuilder insert(int offset, int i) StringBuilder insert(int offset, long lng) StringBuilder insert(int offset, String s) Inserisce il secondo argomento nella posizione specificata dal primo argomento Una lista è una struttura dati che permette di memorizzare dati in maniera sequenziale, e permette di accedere e cancellare dati in posizioni arbitrarie (cioè non solo il primo o l'ultimo inserito, come nel caso di pile e code). Una lista concatenata è una sequenza lineare di nodi, ciascuno dei quali memorizza un valore e contiene un riferimento (puntatore) al nodo successivo nella sequenza. In questo modo è possibile aggiungere e cancellare nodi in qualunque posizione semplicemente aggiustando il sistema di puntatori senza operare sui nodi non interessati dalla aggiunta o dalla cancellazione. La seguente classe implementa un nodo di una lista concatenata. /**

  • Classe usata per descrivere il singolo nodo di una lista concatenata / public class ListNode { public E element ; public ListNode next ; /*
  • Costruttore nodo per liste unidirezionali */ public ListNode (E element, ListNode next) { this.element = element ; this.next = next ; } } Vediamo alcuni frammenti di codice che manipolano le liste. Si assumono le dichiarazioni ListNode l1; E A; // l'informazione da inserire Inserzione in testa, l1, (che può essere null), è la lista: l1 = new ListNode(A, l1); Inserzione in coda, l1, (che non può essere null), è l'ultimo elemento della lista: l1.next = new ListNode(A, null); Inserzione all'interno, l1, (che non può essere null), è l'elemento della lista precedente a quello in cui deve comparire il nuovo: l1.next = new ListNode(A, l1.next); Rimozione in testa, l1, (che non può essere null), è la lista:

Dove T ( Generics ) è il tipo che verrà archiviato all'interno di ArrayList. Il tipo di ArrayList può essere qualsiasi oggetto. Il tipo non può essere un tipo primitivo (usa invece le loro classi wrapper ). Per aggiungere un elemento a ArrayList , utilizzare il metodo add() : myArrayList.add(element); O per aggiungere elementi a un determinato indice: myArrayList.add(index, element); //index of the element should be an int (starting from 0) Per rimuovere un oggetto da ArrayList , utilizzare il metodo remove() : myArrayList.remove(element); O per rimuovere un elemento da un certo indice: myArrayList.remove(index); //index of the element should be an int come avviene la rimozione di un elemento in una lista? //eliminazione elemento in testa public static NodoLista outTesta(NodoLista p) { p = p.next; return p; } //eliminazione elemento prima di un dato elemento public static NodoLista elimina(NodoLista p, String cercata){ if (p == null) return p; if (p.info.equals(cercata)) { p = p.next; //eliminazione elemento cercato return p; //in prima posizione } NodoLista pp = p; while (pp.next != null) { if (pp.next.info.equals(cercata)) { pp.next = pp.next.next; //eliminazione elemento cercato break; //in posizione interna }

pp = pp.next; } return p; } //eliminazione elemento prima di un dato elemento //con nodo generatore public static NodoLista elimina(NodoLista p, String cercata){ NodoLista pp = new NodoLista(); // creazione nodo generatore pp.next = p; p = pp; while (pp.next != null) { //ora ogni nodo ha un predecessore if (pp.next.info.equals(cercata)) { pp.next = pp.next.next; // eliminazione elemento cercato break; //in posizione interna } pp = pp.next; } p = p.next; //eliminazione del nodo generatore return p; } Per modificare un ArrayList mentre lo stai scorrendo, devi necessariamente passare attraverso gli Iterator se non vuoi incappare in una ConcurrentModificationException: ArrayList list = new ArrayList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3)); for(Iterator i = list.iterator(); i.hasNext();) { Integer num = i.next(); if(num > 2) i.remove(); } come si accede all'elemento i-esimo di un array in Java? Gli elementi dell' array sono accessibili direttamente: ad ogni elemento è associato un indice , corrispondente alla sua posizione nell' array ; specificando l'indice ell'elemento a cui vogliamo accedere possiamo evitare di scandire tutti gli elementi che lo precedono. In un array l'indice del primo elemento è sempre 0; quello dell'ultimo elemento è dato dalla dimensione dell 'array – 1 come si crea un nuovo array in Java? Un array in Java è un contenitore che permette di gestire una sequenza di lunghezza fissa di elementi tutti del medesimo tipo. Il numero di elementi in un array, detto lunghezza dell’array , deve essere dichiarato al momento della sua allocazione e non può essere cambiato. La sintassi per la dichiarazione di una variabile di tipo array è la seguente: Tipo [ ] nome; Per default le variabili di tipo array sono inizializzate con il valore null. Quindi, prima di poterle usare, dovremo inizializzarle allocando per esse la memoria per mezzo della consueta keyword ‘new’: nome = new Tipo [n]; che riserva (o ‘allocà) la memoria necessaria per contenere n elementi di tipo Tipo. come si importano i package in Java? utilizzando la direttiva import Per importare un package in java si utilizza la dichiarazione import, es. import java.util.*; come si specifica che un certo metodo può lanciare una certa eccezione, in Java? con la clausola throws nell'intestazione(signature) del metodo come si specifica un exception handler in Java? In Java un exception handler si specifica prima del corrispondente blocco catch

Commentare la seguente espressione regolare: [ae]tto A o e tto etto o atto Commentare la seguente espressione regolare: /d E’ errata \d matcha qualsiasi cifra numerica Commentare la seguente espressione regolare: m[a-z]ra Qualunque lettera tra a e z in mezzo a m e ra Commentare la seguente espressione regolare: m[aeiou]ra rappresenta un gruppo di stringhe Le espressioni regolari (spesso abbreviate in Inglese con regexp o indicate come regular patterns) sono linguaggi molto usati in informatica per rappresentare in modo sintetico insiemi di stringhe di caratteri. Ad esempio, con l'espressione m[aeiou]ra

  • rappresentiamo tutte le stringhe che iniziano con 'm', hanno una vocale come secondo carattere e terminano con “ra”: { mara, mera, mira, mora, mura }
  • Spesso gli editor di testo permettono l'uso di espressioni regolari per facilitare la ricerca e la sostituzione di pattern (configurazioni di caratteri) ricorrenti nel testo. Molti programmi originati in ambiente Unix e poi portati anche in altri sistemi operativi fanno uso di espressioni regolari: grep, sed, ecc. Commentare la seguente espressione regolare: m[aeioura errata Commentare la seguente espressione regolare: m[aeu]ra Commentare la seguente espressione regolare: m[u]ra rappresenta una sola stringa Commentare la seguente espressione regolare: m[uoie]ra Commentare la seguente espressione regolare: muoiera rappresenta una sola stringa Commentare la seguente istruzione st.filter(i -> (i <0)); è lecita (non produce errore di compilazione) in Java 8 filtra i numeri negativi richiama la funzione filter sullo stream di nome st

Con riferimento a Java 8, cosa è uno stream?

Uno stream è un’interfaccia che restituisce un flusso di dati finito o infinito su cui è

possibile fare operazioni di filtro, mappa e riduzione (leggiamo aggregazione per il

momento). Può operare in modo sequenziale (che è il default) oppure a richiesta in modo

parallelo. Possiamo vedere lo stream come una pipeline di operazioni su dati che, come

ogni tubatura che si rispetti, ha una sorgente, una serie di pezzi intermedi e una

destinazione.

Una struttura dati molto importante associata alla programmazione funzionale è lo

stream: una sequenza di elementi che consente operazioni aggregate sia

sequenziali che parallele.

• In pratica uno stream è un "flusso" di oggetti su cui si può intervenire filtrando,

aggregando, selezionando ecc. mentre il flusso è generato; a differenza delle

collezioni che devono prima essere completamente allocate, e solo allora possono

essere manipolate dal programma, in uno stream il processo di elaborazione

(consumo) può iniziare prima che il processo di produzione sia terminato. È come

un nastro trasportatore, in cui gli elementi ad una estremità continuano ad essere

generati, mentre all'altra estremità vengono consumati.

• Come vedremo, gli stream hanno un ruolo decisivo nella programmazione

funzionale.

Con riferimento a Java, si introducano le servlet Con riferimento agli operatori, cosa si intende per associatività? L‘associatività degli operatori permette di stabilire l‘ordine di applicazione tra operatori che hanno la stessa precedenza.Tutti gli operatori binari sono associativi a sinistra (ad eccezione degli operatori di assegnazione, che sono associativi a destra) quindi 6 + 2 + 1 viene interpretato come (6 + 2) + 1 e vale 9. 6 - 2 - 1 viene interpretato come (6 - 2) - 1 e vale 3 (non 5) Con riferimento al Java, chi definisce una interfaccia (costrutto interface)? Argomentare la risposta Una interfaccia è definita dai metodi che la compongono Con riferimento al Java, chi implementa una interfaccia (costrutto interface)? Argomentare la risposta Si può dichiarare che una classe implementa ( implements ) una data interfaccia: in questo caso la classe deve fornire una realizzazione per tutti i metodi astratti dell'interfaccia, cioè la classe deve fornire metodi con la stessa firma descritta nell'interfaccia (e con il corpo, naturalmente). La realizzazione di un metodo deve anche rispettare la "specifica" del corrispondente metodo astratto. Con riferimento al Java, chi realizza i metodi di una interfaccia (costrutto interface)? Argomentare la risposta In generale, un interfaccia rappresenta una sorta di “promessa” che una classe si impegna a mantenere. La promessa è quella di implementare determinati metodi di cui viene resa nota soltanto la definizione. Ciò che è importante non è tanto come verranno implementati tali metodi all’interno della classe ma, piuttosto, che la denominazione ed i parametri richiesti siano assolutamente rispettati. Creiamo un’interfaccia denominata StackInterface, con il seguente codice:

public interface StackInterface { public void push(int i); public int pop(); } Sono stati definiti due metodi (push e pop), corrispondenti rispettivamente alle due operazioni di inserimento ed eliminazione di elementi dalla pila ma non ne viene in alcun modo fornita l’implementazione. Supponiamo, ora, di voler definire una classe Stack che contenga il codice necessario per la corretta gestione di una pila. Tale classe sarà definita nel seguente modo: public class Stack implements StackInterface { public void push(int i) { … …. } public int pop() { … …. } } Come si potrà osservare, all’interno della classe Stack sono implementati i metodi che sono stati definiti all’interno dell’interfaccia StackInterface. Poiché la classe Stack promette di fare uso dell’interfaccia StackInterface (lo si può notare dalla istruzione “implements StackInterface”), qualora il programmatore omettesse di definire e implementare uno o entrambi questi metodi, si otterrebbe un errore di compilazione Con riferimento al Java, cosa è Iterator? L’Iterator rappresenta un'astrazione del concetto di “puntatore a un elemento del contenitore” e permette di scorrere il contenitore senza bisogno di conoscere l'effettivo tipo degli elementi Con riferimento al Java, cosa si intende per "Autoboxing"? Argomentare la risposta L’Autoboxing è la conversione automatica che il compilatore effettua tra un tipo primitivo e l'equivalente oggetto wrapper. Ad esempio, se il contesto richiede un Integer e noi specifichiamo un int , spesso il compilatore è in grado di effettuare autonomamente la conversione richiesta: Integer i = 10; Con riferimento al Java, cosa si intende per "metodi di interfaccia" (o "interfaccia esposta")? L'interfaccia esposta della classe include tutti e solo i metodi che possono essere usati per manipolare le istanze di quella classe. Con riferimento al Java, cosa si intende per "Unboxing"? Argomentare la risposta L’Unboxing è la conversione automatica che il compilatore effettua tra un oggetto wrapper ed il suo tipo primitivo equivalente Con riferimento al Java, cosa sono StringBuffer e StringBuilder? Argomentare la risposta le classi StringBuffer e StringBuilder di oggetti possono essere modificate molte volte, e non crea nuovi oggetti inutilizzati, a differenza della classe String. Internamente, essi sono trattati come array di dimensione variabile che contengono sequenze di caratteri. La lunghezza e il contenuto della sequenza possono essere modificati mediante chiamate a metodi. La più grande differenza tra StringBuilder e il StringBuffer è che StringBuilder non è thread-safe (non può sincronizzare l'accesso). Con riferimento al Java, si commenti il seguente: public class Territorio {} Con questo codice dichiariamo una classe pubblica di nome Territorio vuota Con riferimento al Java, si commenti il seguente: public class Territorio {Int a;} Con il codice public class Territorio { Int a; } abbiamo dichiarato una classe di nome Territorio, di tipo pubblico, dichiarando una variabile a, appartenente alla classe Territorio, di tipo Integer

Adesso ereditiamo la classe, creandone un'altra che modella il "RespondabileDiProgetto" che, oltre ad uno stipendio fisso, ha un attributo che rappresenta un bonus di produzione. Dunque la retribuzione di questo dipendente sarà data dalla somma dello stipendio base con l'eventuale bonus. Quindi il codice per la classe sarà il seguente: public class ResponsabileDiProgetto extends Dipendente { private int bonus; public int stipendio() { int stipendioBase=(getOreLavorativeMensili() * getRetribuzioneOraria()); return stipendioBase + bonus; } } Con l'override, quindi, è possibile ridefinire un metodo di una classe più generalista adattandolo così alla classe più specialista mantenendo comunque una coerenza per quanto riguarda la semantica del metodo che avrà lo stesso identico nome. Con riferimento al Java, si discuta l'ereditarietà multipla non esiste l'ereditarietà è uno dei concetti fondamentali nel paradigma di programmazione a oggetti. Essa consiste in una relazione che il linguaggio di programmazione, o il programmatore stesso, stabilisce tra due classi. Se la classe B eredita dalla classe A , si dice che B è una sottoclasse di A e che A è una superclasse di B. Denominazioni alternative equivalenti, sono classe madre o classe base per A e classe figlia o classe derivata per B. L'ereditarietà può essere ereditarietà singola o semplice (ogni classe può avere al più una superclasse diretta) java diversamente dal C++ non supporta il concetto di ereditarietà multipla. È possibile, tuttavia, aggirare parzialmente l’ostacolo avvalendosi delle interfacce e facendo, pertanto, in modo che una classe implementi più interfacce, ognuna delle quali contenga al suo interno le definizioni dei metodi che si vuole vengano implementati dalla classe stessa. o multipla (ogni classe può avere più superclassi dirette). Con riferimento al Java, si elenchino almeno tre situazioni che generano eccezioni Alcune operazioni che possono causare un’eccezione in Java può essere una divisione per 0, un’apertura di un file che non esiste oppure un accesso ad elemento in posizione negativa di un array. Con riferimento al Java, si faccia un esempio (preferibilmente codice) di super-classi e sotto-classi Proponiamo come esempio una classe Persona ed una sottoclasse Studente come esempio di super-classe e sotto-classe public class Persona { String nome; String indirizzo; public Persona() { this("John Doe","ignoto"); } public Persona(String nome) { this(nome,"ignoto"); } public Persona(String nome, String indirizzo) { this.nome = nome; this.indirizzo = indirizzo;

public String getNome() { return nome; } public String getIndirizzo() { return indirizzo; } public void visualizza() { System.out.println("Nome: " + nome + "\nIndirizzo: " + indirizzo); } public boolean omonimo(Persona p) { return this.nome.equalsIgnoreCase(p.nome); } ... } Vogliamo definire una classe Studente, che rappresenti gli studenti iscritti ad un corso di laurea. Ogni studente è descritto dal nome, dall'indirizzo, dal numero di matricola e dal piano di studio. Uno Studente è un tipo particolare di Persona. L' ereditarietà ci consente di definire questa classe senza ripetere la descrizione di tutte le variabili e i metodi di Persona , ma procedendo invece in modo incrementale: public class Studente extends Persona { // Studente eredita variabili e metodi da Persona int matricola; // Nuova variabile istanza String pianoDiStudio; // Nuova variabile istanza // Nuova variabile statica (di classe) static int nextMatricola = 1; // Costruttore public Studente(String nome, String indirizzo) { this.nome = nome; this.indirizzo = indirizzo; this.matricola = nextMatricola++; this.pianoDiStudio = ""; } // Nuovo metodo public String getPdS() { return pianoDiStudio; } // Nuovo metodo public void modificaPdS(String nuovoPdS) { pianoDiStudio += nuovoPdS + "\n"; } ... } La parola chiave extends significa che  Studente è una sottoclasse o classe derivata di PersonaPersona è una superclasse o classe genitrice di Studente

booleani oppure entrambi numerici interi. Con riferimento al Java, si introduca (se esiste) l'operatore || L’operatore condizionale || (OR)valuta ilsuo operando di tipo booleano di destra solo se il valore del suo operando di sinistra è false. Se l’operando di sinistra e true l’operando di destra non vienevalutato, e l’espressione ritorna true. Con riferimento al Java, si introduca (se esiste) l'operatore punto esclamativo ( !) L’operatore logico unario NOT! (complemento) può essere applicato a un operando di tipo boolean. Il risultato dell’operazione è di tipo boolean , e il suo valore è descritto dalla seguente tabella di verità: Con riferimento al Java, si introduca ActionListener La ActionListener è una interfaccia che viene notificata ogni volta che si fa clic su un pulsante o su una voce di un menù. L'interfaccia ActionListener si trova nel pacchetto java.awt.event. Ha solo un metodo: actionPerformed (). Con riferimento al Java, si introduca il concetto di "costruttore" Un costruttore è una componente di codice che viene chiamata automaticamente quando la classe viene istanziata, e provvede all’inizializzazione dell’oggetto. • Un costruttore è simile a un metodo, ma ne differisce per due aspetti: – Un costruttore non viene mai chiamato esplicitamente, ma viene attivato dal sistema in fase di inizializzazione dell’oggetto. – Un costruttore non ritorna alcun valore. Con riferimento al Java, si introduca il concetto di dynamic binding Il dynamic binding, è il binding stabilito a tempo di esecuzione. All’atto della compilazione, il compilatore non genera una volta per tutte il codice per l'assegnazione dei valori delle variabili in funzione delle chiamate dei metodi, o il codice per calcolare quale metodo chiamare in funzione delle informazioni delle variabili è determinata a seconda del flusso di esecuzione, e non può essere stabilita a priori (variabili polimorfiche). Il binding dinamico è molto importante ai fini del paradigma della programmazione orientata agli oggetti perché permette di implementare oggetti polimorfici Con riferimento al Java, si introduca il concetto di eriditarietà l' ereditarietà è uno dei concetti fondamentali nel paradigma di programmazione a oggetti. Essa consiste in una relazione che il linguaggio di programmazione, o il programmatore stesso, stabilisce tra due classi. Se la classe B eredita dalla classe A , si dice che B è una sottoclasse di A e che A è una superclasse di B. Denominazioni alternative equivalenti, sono classe madre o classe base per A e classe figlia o classe derivata per B. L'ereditarietà può essere ereditarietà singola o semplice (ogni classe può avere al più una superclasse diretta) o multipla (ogni classe può avere più superclassi dirette). Con riferimento al Java, si introduca il concetto di sotto-classe In Java le sotto-classi sono quelle classi che estendono le superclassi ereditandone le funzionalità Con riferimento al Java, si introduca il concetto di super-classe può avere infinite sotto-classi Superclasse è un termine utilizzato nella programmazione orientata agli oggetti per indicare una classe, non necessariamente astratta, che ne estende un'altra, chiamata sottoclasse. La superclasse contiene funzionalità che vengono utilizzate e/o estese da tutte le classi figlie. I metodi pubblici vengono ereditati dalla sottoclasse, quest'ultima può modificarli, tale fenomeno è definito overriding Con riferimento al Java, si introduca la classe Arrays La classe Arrays (del package java.util) contiene molti metodi (tutti statici) per manipolare gli array. Ci sono metodi per effettuare inizializzazioni, confronti, ricerche e ordinamenti, per trasformare un array in una lista e per ottenere una stringa dal contenuto dell’array (in modo da poter stampare il contenuto dell’array senza ricorrere ad un ciclo). Con riferimento al Java, si introduca la classe Math

La classe Math in Java permette di effettuare calcoli matematici complessi. I metodi e le costanti definite nella classe Math sono static. Per poterli utilizzare bisogna importare la classe inserendo all'inizio del file sorgente la direttiva import static java.lang.Math.*; che permette di chiamare gli elementi di Math col loro semplice nome, es.: double coseno = cos(angolo); Con riferimento al Java, si introduca la classe Object, in ambito di ereditarietà In Java ad ogni classe è consentito avere al massimo una super-classe: si parla perciò di ereditarietà singola. Se, all'atto della definizione di una classe, non ne specifico la super-classe, viene assunta per default la classe Object, predefinita in Java. In effetti, Object è l'unica classe che non ha una super-classe; tutte le altre classi hanno sempre esattamente una super-classe, e sono discendenti(dirette o indirette) di Object. Con riferimento al Java, si introducano delle definizioni diverse, ma non contradditorie, di "classe" Una classe è un insieme di metodi e dati raggruppati in un'unica entità così come è nella realtà. Essa serve per descrivere un oggetto... e a sua volta è spesso costituita da altri oggetti, ha legami con altri oggetti, o ne eredità le caratteristiche di base.. Con riferimento al Java, si introducano delle definizioni diverse, ma non contradditorie, di "oggetto" Un’oggetto è un’aggregazione di variabili (dati) e metodi (comportamenti, cioè funzioni). L’oggetto occupa sempre memoria che deve essere inizializzata con qualche valore. Java garantisce che le aree di memoria associate ad un oggetto vengano inizializzate subito dopo la creazione dell'oggetto, attraverso l'attivazione del Costruttore. Con riferimento al Java, si introducano gli eventi Ogni volta che l’utente di un programma scrive qualcosa, seleziona col mouse un controllo del programma, sposta o ridimensiona una finestra ecc.., viene generato un evento. Ogni evento ha una Sorgente (event source), che è il controllo che l’ha generato: ad esempio, il bottone che è stato premuto dall’utente. In tale oggetto possono essere registrati uno o più ascoltatori (event listener), cioè oggetti in grado di intraprendere le azioni necessarie a gestire l’evento. Con riferimento al Java, si introducano gli operatori Con riferimento al Java, si introducano gli operatori condizionali Gli operatori condizionali, effettuano delle operazioni tra 2 variabili e ritornano risultato booleani, true e false Con riferimento al Java, si introducano gli operatori di assegnazione Gli operatori di assegnazione sono associativi a destra: a=b=c significa a=(b=c). L’assegnazione è infatti un’espressione, il cui tipo è quello dell’operando a sinistra dell’assegnazione.L’operando di sinistra deve essere una variabile locale, un campodell’oggetto o della classe corrente, o un elemento di array. Con riferimento al Java, si introducano gli operatori di confronto

Throwable è la superclasse di tutti gli errori ed è contenuta nella java.lang. La superclasse Throwable ha due sottoclassi dirette, sempre in java.lang  Error Errori fatali, dovuti a condizioni incontrollabili ‰ Esaurimento delle risorse di sistema necessarie alla JVM, incompatibilità di versioni,… „ In genere i programmi non gestiscono questi errori  Exception Tutti gli errori che non rientrano in Error „ I programmi possono gestire o no questi errori a seconda dei casi cosa è un array? Un array in Java è un contenitore che permette di gestire una sequenza di lunghezza fissa di elementi tutti del medesimo tipo. Il numero di elementi in un array, detto lunghezza dell’array , deve essere dichiarato al momento della sua allocazione e non può essere cambiato. La sintassi per la dichiarazione di una variabile di tipo array è la seguente: Tipo [ ] nome; Per default le variabili di tipo array sono inizializzate con il valore null. Quindi, prima di poterle usare, dovremo inizializzarle allocando per esse la memoria per mezzo della consueta keyword ‘new’: nome = new Tipo [n]; che riserva (o ‘allocà) la memoria necessaria per contenere n elementi di tipo Tipo. cosa è un exception handler? un frammento di codice Un exception handler è l’organo che gestisce le eccezioni. Il supporto run-time riceve un oggetto eccezione e trova il gestore (handler) a cui passarlo cosa è un oggetto? Un’oggetto è un’aggregazione di variabili (dati) e metodi (comportamenti, cioè funzioni). L’oggetto occupa sempre memoria che deve essere inizializzata con qualche valore. Java garantisce che le aree di memoria associate ad un oggetto vengano inizializzate subito dopo la creazione dell'oggetto, attraverso l'attivazione del Costruttore. cosa è un package in Java? Un package è uno strumento per raggruppare tipi in qualche modo legati fra di loro Il package ha lo scopo di riunire classi (o entità analoghe, quali interfacce ed enumerazioni) logicamente correlate. Per esempio, le librerie standard Java sono organizzate in un sistema di package che comprende per esempio elementi strutturali del linguaggio servizi di rete e così via. cosa è un plugin in eclipse? I plug-in sono componenti aggiuntivi che estendono l’IDE cosa è una classe? Una classe è la descrizione astratta di un tipo di dato. Una classe è un insieme di metodi e dati raggruppati in un'unica entità così come è nella realtà. Essa serve per descrivere un oggetto... e a sua volta è spesso costituita da altri oggetti, ha legami con altri oggetti, o ne eredità le caratteristiche di base.. cosa è una coda (queue)? un tipo di dato astratto Una coda ( queue ) è un sequenza di zero o più elementi in cui è possibile aggiungere elementi soltanto ad un estremo della sequenza, detto fondo ( back ), ed è possibile toglierli soltanto dall'altro estremo, detto testa ( front ). Politica di accesso: FIFO (First In, First Out) [primo elemento inserito, primo elemento rimosso] cosa è una lista concatenata semplice (o collegata o semplicemente concatenata)?

È possibile realizzare strutture dati in grado di allocare memoria solo quand'è necessaria, per ogni singolo dato da memorizzare. Un esempio sono le liste concatenate , in cui ogni elemento è associato a un puntatore contenente l'indirizzo dell'elemento successivo. Nella figura seguente, è rappresentata una lista concatenata avente quattro elementi (detti nodi ); la variabile p punta al primo di questi nodi, mentre ciascun nodo contiene un puntatore al nodo successivo. L'ultimo nodo contiene un indirizzo speciale per il puntatore, detto NULL, corrispondente all'indirizzo zero, ad indicare che non punta a nulla. cosa è una pila (stack)? un tipo di dato astratto. Il termine stack o pila , indica un tipo di dato astratto che viene usato in diversi contesti per riferirsi a strutture dati, le cui modalità d'accesso ai dati in essa contenuti seguono una modalità LIFO ( L ast I n F irst O ut), ovvero tale per cui i dati vengono estratti (letti) in ordine rigorosamente inverso rispetto a quello in cui sono stati inseriti (scritti). cosa è una un ambiente di sviluppo integrato (IDE)? Un ambiente di sviluppo integrato è un software che, in fase di programmazione, aiuta i programmatori nello sviluppo del codice sorgente di un programma. cosa è uno stream di I/O? un flusso sequenziale di dati che entrano e/o escono da un programma cosa fa il metodo metodo System.out.format()? serve per formattare una stringa cosa rappresenta una espressione regolare? Cosa riferimento al Java, che relazione c'è tra una classe pubblica e il il nome del file che contiene la sua definizione?Motivare la risposta Ogni file sorgente ( unità di compilazione ) Java devecontenere esattamente la definizione di una classe public. Il file sorgente deve chiamarsi come la classe public che definisce e deve avere estensione". java "