Pattern Singleton In Java

Il singleton è un pattern che garantisce una sola istanza di una determinata classe. Per esempio quando si desidera avere solo un Window Manager oppure una sola Coda di Stampa oppure un unico accesso al database si può usare il pattern singleton.

Singleton

Ci sono diversi modi per implementarlo in java.

Il più semplice è rendere una variabile statica dello stesso tipo della classe, il costruttore privato (quindi nessuno lo può chiamare, e di conseguenza nessuno può istanziare la classe, al di fuori di essa) e avere un metodo statico che restituisca l’unica istanza esistente della classe. Questo modo di implementare il pattern si chiama Pattern Singleton Eager.

Continua a leggere

Elementi di Logica

La logica si occupa dello studio delle regole del ragionamento.
Viene usata spesso in diversi contesti, per esempio in giurisprudenza, matematica e filosofia.

Nella logica, un ragionamento è composto da frasi, dette proposizioni. Ogni proposizione può essere vera o falsa (queste due parole sono anche dette valore di verità di una proposizione). Di conseguenza, qualsiasi frase che può assumere i valori vero o falso è una proposizione.

Una proposizione logica non può mai essere contemporaneamente vera o falsa.

Continua a leggere

Test Su Classi Avanzato

1. Progettare una applicazione per la gestione di squadre e giocatori di un campionato di calcio. I giocatori sono caratterizzati da un nome (una stringa) ed un anno di nascita (un intero). Le squadre sono caratterizzate da un nome (una stringa). In una squadra giocano almeno 15 giocatori. Tra i giocatori che giocano in una squadra uno gioca nel ruolo di capitano. Le squadre si incontrano tra di loro in partite, di cui interessa conoscere quale squadra gioca in casa e quale in trasferta, ed il risultato (due interi: uno per la squadra di casa ed uno per la squadra in trasferta). Data una squadra si vuole conoscere le squadre con cui si è incontrata, sia in casa che in trasferta.

2. Scrivere una classe per la gestione di un bancomat.

Deve essere possibile:

  • Prelevare, se c’è disponibilità sul conto, e poter scegliere il taglio di banconote da consegnare
  • Versare
  • Ottenere la lista degli ultimi 20 movimenti

 

 

3. Si vuole gestire un elenco di studenti realizzando un dizionario che contiene coppie di tipo “matricola
nome”. Il campo “matricola” `e un numero intero in formato long che ha la funzione di chiave per il
dizionario (non possono esistere due matricole uguali), mentre il campo “nome” `e una stringa composta
da una o pi`u parole che rappresenta il nome dello studente associato a ciascuna matricola.
Il candidato ha a disposizione il file StudentiTester.java, il quale contiene classi e interfacce da
utilizzare e/o completare secondo quanto qui indicato:
• Dictionary. Interfaccia che rappresenta il tipo di dati astratto dizionario, contiene le firme dei
metodi e le specifiche del loro funzionamento. Non modificare.
• DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di
una coppia nel dizionario. Non modificare.
• Studenti. Classe che implementa l’interfaccia Dictionary. Completare la classe scrivendone
la parte privata e realizzandone i metodi pubblici. La classe Studenti conterr`a coppie di tipo
“matricola nome” appartenenti alla classe Pair, realizzata come classe interna alla classe Studenti
e il cui codice non va modificato. Si richiede che il metodo find() abbia prestazioni O(log
n). Si richiede inoltre di realizzare un metodo toString per la classe Studenti, che restituisca
una stringa contenente gli elementi secondo il seguente formato: (1) ogni coppia “matricola nome”
viene scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo il
formato specificato dal metodo toString della classe Pair (si veda il corpo di tale metodo).
• StudentiTester. Classe di collaudo. Completare la classe in modo che il suo metodo main
realizzi il seguente comportamento:
– Due nomi di file di testo, file1 e file2, vengono passati come argomenti sulla riga di comando.
– Vengono creati due oggetti di tipo Studenti. Nel primo si inseriscono elementi letti dal file
file1 (scritto nello stesso formato specificato sopra per il metodo toString di Studenti).
– Viene richiesta l’immisione di un numero di matricola da input standard. Il numero immesso
viene cercato nel primo elenco di studenti e la corrispondente coppia “matricola nome” viene
(se trovata) spostata dal primo al secondo elenco di studenti (ovvero rimossa dal primo e
inserita nel secondo elenco).
– L’operazione descritta al punto precedente pu`o essere ripetuta un numero non prefissato di
volte. Il ciclo viene terminato tramite inserimento del carattere “Q” da input standard.
– Al termine delle ricerche effettuate dall’utente, il contenuto del secondo elenco viene stampato
sul file file2 (nello stesso formato specificato sopra per il metodo toString di Studenti).
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.

4. Gestionale per officina. Ogni officina è riconoscibile da un nome e una sede.
In ognuno di essa ci possono essere vari mezzi, auto e camion.
Per ogni auto, ci interessa sapere marca, modello, colore, targa, tipo di problema, costo riparazione.
Per ogni camion, ci interessa sapere marca, modello, colore, targa, presenza rimorchio, tipo di problema, costo riparazione.
Ci interessa avere uno storico con tutti i mezzi che sono stati riparati, con tutte le relative informazioni.

5. Gestionale per shopping online. Si deve poter gestire i prodotti, con le quantità disponibili, i clienti, gli ordini. Ogni ordine può essere in stato da completare, completato e pagato.

6. Creare un gestionale per gli impiegati ed i progetti di una azienda.
Degli impiegati interessa il codice fiscale, il nome, il cognome, i dipartimenti a cui appartengono, ed i progetti ai quali partecipano.
Un impiegato può appartenere a uno, o a più dipartimenti. Dei progetti interessa il nome, il budget, e la città (se stabilita) in cui vengono realizzati.
Il nome di un progetto non può essere cambiato.
Dei dipartimenti interessa il nome, il numero di telefono, l’impiegato che li dirige (se presente), e la città dove è localizzata la sede.
Delle città interessa il nome e la regione (una stringa).
Creare tutte le operazioni necessarie per il corretto utilizzo del gestionale, quindi tutti i CRUD per impiegato, progetto, dipartimento, con le ricerche che si ritiene opportune

7. Si vuole rappresentare un insieme di studenti tramite il tipo di dato astratto StudentSet. Un contenitore di tipo StudentSet conterr`a oggetti di tipo Student, dove la classe Student rappresenta le informazioni
relative ad un singolo studente (numero di matricola, cognome, nome).
Il candidato ha a disposizione il file StudentSetTester.java, il quale contiene classi ed interfacce
da utilizzare e/o completare secondo quanto qui indicato:
• StudentSet. Interfaccia che rappresenta il tipo di dati astratto “insieme di studenti”. Contiene
firme e specifiche di funzionamento dei metodi. Non modificare.
• Student. Classe che rappresenta le informazioni relative ad un singolo studente. La classe realizza
l’interfaccia Comparable, dove l’ordinamento di oggetti di tipo Student `e quello indotto dai numeri
di matricola. Inoltre la classe sovrascrive il metodo toString. Non modificare.
• ArrayStudentset. Classe che implementa l’interfaccia StudentSet. Completare la classe
scrivendone la parte privata e realizzandone i metodi pubblici. Verranno considerate ottime le
soluzioni per cui il metodo contains ha prestazioni O(log n) e il metodo intersection ha prestazioni
O(n log n). La classe deve inoltre sovrascrivere il metodo toString, che restituisca una stringa
contenente gli elementi dell’insieme di studenti secondo il seguente formato: (1) i dati di ogni elemento Student vengono scritti ciascuno su una riga diversa, e (2) all’interno di ogni riga i campi
“matricola”, “cognome” e “nome” sono separati da uno spazio.
• StudentSetTester. Classe che collauda l’insieme di studenti. Completare la classe in modo
che il suo metodo main realizzi il seguente comportamento:
– Due nomi di file di testo, file1 e file2 (scritti nello stesso formato specificato sopra per il metodo
toString di ArrayStudentSet), vengono passati come argomenti sulla riga di comando.
– Vengono creati due esemplari della classe ArrayStudentSet. Nel primo vengono inseriti
elementi letti dal file file1 (contenente gli studenti che frequentano il corso di Fond. di Informatica 1); nel secondo vengono inseriti gli elementi letti dal file file2 (contenente gli studenti
che frequentano il corso di Matematica A)
– Viene calcolato, tramite invocazione del metodo intersection, l’insieme degli studenti che frequentano entrambi i corsi, e l’elenco di tali studenti viene visualizzato sull’output standard.
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.

8. Si vuole gestire una rubrica telefonica realizzando un dizionario che contiene coppie di tipo “nome numero”. Il campo “nome” `e una stringa che ha la funzione di chiave per il dizionario (dunque la rubrica non potrà contenere omonimi), mentre il campo “numero” `e un numero intero in formato long che rappresenta i recapiti telefonici associati a ciascun nome.
Il candidato ha a disposizione il file RubricaTester.java, il quale contiene classi e interfacce da utilizzare e/o completare secondo quanto qui indicato:
• Dictionary. Interfaccia che rappresenta il tipo di dati astratto dizionario, contiene le firme dei metodi e le specifiche del loro funzionamento. Non modificare.
• DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di una coppia nel dizionario. Non modificare.
• Rubrica. Classe che implementa l’interfaccia Dictionary. Completare la classe scrivendone la parte privata e realizzandone i metodi pubblici. La rubrica conterrà coppie di tipo “nome numero” appartenenti alla classe Pair, realizzata come classe interna alla classe Rubrica e il cui codice non va modificato. Si richiede che il metodo find() abbia prestazioni O(log n). Si richiede inoltre di realizzare un metodo toString per la classe Rubrica, che restituisca una string contenente gli elementi della rubrica secondo il seguente formato: (1) ogni coppia “nome numero” viene scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo il formato specificato dal metodo toString della classe Pair (si veda il corpo di tale metodo).
• RubricaTester. Classe che collauda la rubrica. Completare la classe in modo che il suo metodo
main realizzi il seguente comportamento:
– Due nomi di file di testo, file1 e file2, vengono passati come argomenti sulla riga di comando.
– Vengono creati due oggetti di tipo Rubrica. Nella prima rubrica si inseriscono elementi letti dal file file1 (scritto nello stesso formato specificato sopra per il metodo toString di Rubrica).
– Viene richiesta l’immisione di un nome da input standard. Il nome immesso viene cercato nella prima rubrica e la corrispondente coppia “nome numero” viene (se trovata) spostata dalla prima alla seconda rubrica (ovvero rimossa dalla prima e inserita nella seconda rubrica).
– L’operazione descritta al punto precedente pu`o essere ripetuta un numero non prefissato di volte. Il ciclo viene terminato tramite inserimento del carattere “Q” da input standard.
– Al termine delle ricerche effettuate dall’utente, il contenuto della seconda rubrica viene stampato sul file file2 (nello stesso formato specificato sopra per il metodo toString di Rubrica).
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.
Usando i file paperopoli.txt e input.txt allegati, il programma pu`o essere provato con il comando
java RubricaTester paperopoli.txt topolinia.txt < input.txt

9.

Si considerino le seguenti specifiche:
Un elemento multimediale è una immagine, un filmato o una registrazione audio identificato da un titolo (una stringa non vuota).
Un elemento è riproducibile se ha una durata (un valore positivo di tipo int) e un metodo play()
Una registrazione audio è riproducibile e ha associato anche un volume (un valore positivo di tipo int) e i metodi weaker() e louder() per regolarlo. Se riprodotta, ripete per un numero di volte pari alla durata la stampa del titolo concatenato a una sequenza di punti esclamativi di lunghezza pari al volume (una stampa per riga).
Un filmato è riproducibile e ha associato un volume regolabile analogo a quello delle registrazioni audio e anche una luminosità (un valore positivo di tipo int) e i metodi brighter() e darker() per regolarla. Se riprodotta, ripete per un numero di volte pari alla durata la stampa del titolo concatenato a una sequenza di punti esclamativi di lunghezza pari al volume e poi a una sequenza di asterischi di lunghezza pari alla luminosità (una stampa per riga).
Un’immagine non è riproducibile, ma ha una luminosità regolabile analoga a quella dei filmati e un metodo show() che stampa il titolo concatenato a una sequenza di asterischi di lunghezza pari alla luminosità
Eseguire un oggetto multimediale significa invocarne il metodo show() se è un’immagine o il metodo play() se è riproducibile.
Organizzare opportunamente con classi astratte, interfacce e classi concrete il codice di un lettore multimediale che memorizza 5 elementi (creati con valori letti da tastiera) in un array e poi chiede ripetutamente all’utente quale oggetto eseguire (leggendo un intero da 1 a 5 oppure 0 per finire) e dopo ogni esecuzione fornisce la possibilità di regolarne eventuali parametri (volume / luminosità).

10. Si vuole realizzare un traduttore inglese-italiano tramite un dizionario che contiene coppie di tipo “parola
traduzioni”. Il campo “parola” `e una stringa che ha la funzione di chiave per il dizionario, mentre il
campo “traduzioni” `e un array di stringhe che contiene una o pi`u traduzioni associate a ciascuna parola.
Il dizionario pu`o inoltre essere aggiornato tramite un apposito metodo update.
Il candidato ha a disposizione il file TraduttoreTester.java, il quale contiene classi e interfacce da
utilizzare e/o completare secondo quanto qui indicato:
• DictionaryUD. Interfaccia che rappresenta il tipo di dati astratto “dizionario con update”. Contiene firme e specifiche di funzionamento dei metodi. In particolare contiene firma e specifiche di
funzionamento del metodo update. Non modificare.
• DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di
una coppia nel dizionario. Non modificare.
• Traduttore. Classe che implementa l’interfaccia DictionaryUD. Completare la classe scrivendone la parte privata e realizzandone i metodi pubblici. Il traduttore conterr`a coppie di tipo “parola
traduzioni” appartenenti alla classe WordPair, realizzata come classe interna alla classe Traduttore e il cui codice non va modificato. Si richiede inoltre di realizzare un metodo toString
per la classe Traduttore, che restituisca una stringa contenente gli elementi del traduttore secondo il seguente formato: (1) ogni coppia “parola traduzioni” viene scritta su una riga diversa, e (2)
all’interno di ogni riga la coppia viene scritta seguendo il formato specificato dal metodo toString
della classe WordPair (si veda il corpo di tale metodo).
• TraduttoreTester. Classe che collauda il traduttore. Completare la classe in modo che il suo
metodo main realizzi le seguenti specifiche:
– Due nomi di file di testo, file1 e file2, vengono passati come argomenti sulla riga di comando.
– Viene creato un primo esemplare della classe Traduttore, in cui si inseriscono elementi letti
dal file file1 (scritto nello stesso formato specificato sopra per il metodo toString di Traduttore).
– Viene creato un secondo esemplare della classe Traduttore, in cui vengono inseriti elementi
letti dall’input standard (nello stesso formato specificato pi`u sopra per il metodo toString di
Traduttore). La fine dell’inserimento di elementi viene segnalata dalla terminazione dell’input
standard <CTRL>+D.
– Tramite invocazione del metodo update, il primo Traduttore viene aggiornato con il contenuto del secondo Traduttore e successivamente stampato sul file file2 (nello stesso formato
specificato pi`u sopra per il metodo toString).
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.


Question 1 of 10

Serializzazione e Deserializzazione in Java

INDICE TUTORIAL

Serializzazione

Per serializzazione si intende la trasformazione di un oggetto java in uno stream di byte.

La deseralizzazione, invece, è la trasformazione di uno stream di byte in oggetti java. Queste operazioni vengono, ad esempio, effettuate quando  si  invoca un metodo, che prende in input un oggetto, che si trova su una macchina remota (quindi con diversa JVM) o durante la lettura/scrittura di un file binario.

java serializzazione e deserializzazione
Continua a leggere

Java Classe Anonima

INDICE TUTORIAL

Java fornisce un meccanismo per dichiarare e istanziare una classe allo stesso tempo. Queste classi prendono il nome di classi anonime, poiché sono delle classi senza nome, locali, dichiarate all’interno di un metodo.

java classi anonime

Vengono utilizzate quando si ha la necessità di avere una classe che serve solo in quel punto e in quel momento; risulta, quindi, inutile scrivere una normale classe che non verrà mai riutilizzata. E’ come se fossero delle classi usa e getta.

Continua a leggere

Java Modificatori Di Accesso

INDICE TUTORIAL

Modificatori di ACCESSO

Modificatore di accessoEffetto
Publicvisibile da qualsiasi parte del programma
Privatevisibile solo all’interno della stessa  classe
Protectedvisibile solo dalle classi dello stesso package e da tutte le sottoclassi
Defaultvisibile dallo stesso package e dalle sottoclassi se sono nello stesso package. È la visibilità assegnata di default se non viene specificato nulla.

 

Java Access for control, private, public, and protected
Continua a leggere