apr
19
2013

La classe Class – Lezione 4 di Java Avanzato

In Java viene messa a disposizione un tipo particolare di classe, si tratta di Class. Questa classe consente di tenere traccia alla JVM durante l’esecuzione di un’applicazione di tutte le classi caricate in memoria. Può essere vista come il corrispondente di Object per le classi, se Object serve per “gestire” gli oggetti di un’applicazione, la classe Class serve a modellare le classi. Quando un programma ha la capacità di eseguire operazioni che hanno oggetto se stesso, ed in particolare del suo codice sorgente, si parla di riflessione o reflection.
Un’istanza di una classe Class rappresenta una classe o un’interfaccia in un’applicazione Java a runtime. Anche gli array appartengono ad una classe che viene riflessa come un oggetto Class e condiviso da tutti gli array con lo stessa dimensione e tipo di elementi. Pure i tipi primitivi (boolean, byte, char, short, int, long, float, e double) e la parala chiave void sono rappresentati come oggetti Class.

L’intestazione di Class è la seguente:
  public final class Class
  extends Object
  implements Serializable
Continua a leggere…

apr
18
2013

Relazioni tra i tipi in Java – Lezione 3 di Java Avanzato

Java è un linguaggio staticamente tipato:

  • “tipato” vuol dire che ad ogni espressione viene assegnato un tipo che rappresenta l’insieme di valori che l’espressione potrebbe assumere;
  • “staticamente” vuole dire che il tipo di ogni espressione deve essere noto al momento della compilazione.

Continua a leggere…

apr
17
2013

Il corretto uso delle eccezioni verificate e non verificate – Lezione 2 di Java Avanzato

Abbiamo già parlato di eccezioni in Java, il meccanismo che permette di gestire gli eventuali errori durante l’esecuzione di un programma. Le eccezioni vengono suddivise in eccezioni verificate e non verificata: le prime si riferiscono al fatto che il compilatore verifica se tali eccezioni sono opportunamente trattate dal programmatore; al contrario, quelle non verificate sono ad uso libero del programmatore.

Approfondiamo il discorso, vediamo esattamente come si comporta il compilatore quando incontra un’eccezione verificata. Se abbiamo un oggetto x che invoca un metodo f:

  x.f();

Per un corretto funzionamento il compilatore dovrebbe analizzare tutto il corpo di f() per controllare se ci potrebbe essere il lancio di un’eccezione… quest’operazione sarebbe molto lunga e dispendiosa, si dovrebbero controllare tutti i metodi del programma alla ricerca di eccezioni. In termini di costi e tempo sarebbe disastroso!
A tale scopo è stata introdotta in Java la possibilità di poter dichiarare le eccezioni, il programmatore che ha scritto il codice sa se un metodo potrebbe lanciare un’eccezione e di conseguenza la può dichiarare tramite la clausola throws. La clausola throws può essere usata sia per le eccezioni verificate che per quelle non verificate, ma è buona norma utilizzarla solo per quelle di tipo verificato.

  public void f() throws RuntimeException {
    // Codice che potrebbe lanciare RuntimeException
  }
Continua a leggere…

apr
15
2013

Introduzione – Lezione 1 di Java Avanzato

Dopo il successo della guida base di Java, ho deciso di scriverne una seconda parte in modo da poter riprendere ed analizzare meglio certi aspetti e per introdurne di nuovi. In particolare riprenderemo approfondiremo meglio il discorso delle eccezioni, delle classi interne ma anche dei tipi wrapper introducendo l’autoboxing. Introdurremo nuovi concetti come i pattern, per la risoluzione dei problemi, delle classi parametriche introdotte con la versione Java 1.5, ma anche altri argomenti utili nella programmazione come i thread in Java. Continua a leggere…

giu
5
2012

Hidden Markov Models, cos’è e perchè viene utilizzato

Le tecniche basate su Hidden Markov Models (HMM) rappresentano una tecnica che sta ottenendo buoni risultati sia per il riconoscimento di testi scritti che per il riconoscimento del parlato ed i suoi fonemi. Modello di Markov nascosto, prende il nome dal suo ideatore, ed in particolare la parola “nascosto” indica che per un osservatore qualsiasi non è visibile la sequenza di stati interni ma solo la sequenza di output dei simboli. Continua a leggere…

giu
4
2012

Dynamic Time Warping, l’algoritmo per uniformare i suoni

Ogni ogni frase, ogni parola ma anche ogni singola lettera possono essere pronunciati in maniera diversa da persona a persona. In particolare persone diverse possono impiegare tempi diversi per pronunciare lo stesso fonema. Queste differenze rappresentano un forte ostacolo per i processi di riconoscimento del parlato, non è possibile confrontare direttamente segnali audio. Continua a leggere…

giu
2
2012

Classificazione dei segnali audio

Essere in grado di catalogare i vari file audio è un passo molto utile per la ricerca di informazioni all’interno di un file audio. La principale suddivisione dei suoni che viene utilizzata è quella di dividere i suoni in due grandi categorie: la Musica ed il Parlato.

Ovviamente, la suddivisione in due sole categorie dei suoni rappresenta un tipo di classificazione molto generica. E’ possibile raffinare questa classificazione in vari modi: se la voce è maschile o femminile, se si tratta di suoni alti o bassi e tanto altro. Ecco una tabella che racchiude le principali caratteristiche/differenze nei segnali audio: Continua a leggere…