Java Flashcards

1
Q

Maven - Build Profiles:

A

Un profilo di compilazione è un insieme di valori di configurazione, che può essere utilizzato per impostare o sovrascrivere i valori predefiniti della build Maven. Utilizzando un profilo di compilazione, è possibile personalizzare la compilazione per ambienti diversi, ad esempio ambienti di sviluppo e produzione.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cos’è un repository Maven?

A

Nella terminologia di Maven, un repository è una directory in cui sono memorizzati tutti i jar del progetto, i jar della libreria, i plugin o qualsiasi altro artefatto specifico del progetto e può essere utilizzato facilmente da Maven.

I repository Maven sono di tre tipi:
*Locale
*Centrale
*Remoto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Repository maven Locale:

A

l repository locale Maven è una posizione di cartella sul computer. Viene creato quando si esegue qualsiasi comando maven per la prima volta.

Il repository locale di Maven mantiene tutte le dipendenze del progetto (jar di librerie, jar di plug-in, ecc.). Quando si esegue una build Maven, Maven scarica automaticamente tutti i jar di dipendenza nel repository locale.

Il repository locale di Maven per impostazione predefinita viene creato da Maven nella directory %USER_HOME%.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Repository centrale:

A

Il repository centrale di Maven è un repository fornito dalla comunità Maven. Contiene un gran numero di librerie di uso comune.

Quando Maven non trova alcuna dipendenza nel repository locale, inizia la ricerca nel repository centrale utilizzando il seguente URL − https://repo1.maven.org/maven2/

I concetti chiave del repository centrale sono i seguenti:

  • Questo repository è gestito dalla comunità Maven.
  • Non è necessario configurarlo.
  • Richiede l’accesso a Internet per essere cercato.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Repository remoto:

A

A volte, Maven non trova una dipendenza menzionata anche nel repository centrale. Quindi interrompe il processo di compilazione e restituisce il messaggio di errore alla console. Per evitare tale situazione, Maven fornisce il concetto di Remote Repository, che è il repository personalizzato dello sviluppatore contenente le librerie richieste o altri jar di progetto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

L’operatore ternario

A

è un operatore condizionale che permette di assegnare un valore a una variabile basato su una condizione. Si chiama “ternario” perché coinvolge tre parti: la condizione, il valore se la condizione è vera e il valore se la condizione è falsa.

La sintassi generale dell’operatore ternario è la seguente:

*variabile = (condizione) ? valore_se_vera : valore_se_falsa;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Special Comment

A

Esistono tre tipi di commenti speciali:
- XXX: per definire qualcosa di sbagliato ma che funziona

  • FIXME: per definire qualcosa di sbagliato e che non funziona
  • TODO: per definire qualcosa ancora da fare
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Loose coupling

A

significa che le classi o componenti del tuo programma dipendono il meno possibile l’una dall’altra. Ciò rende il codice più flessibile e facile da modificare, poiché le componenti possono essere cambiate senza influire sulle altre

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

POJOs “Plain Old Java Object”

A

è una semplice classe Java con campi e metodi di accesso (getter e setter) utilizzata per rappresentare dati in modo indipendente da librerie o framework specifici.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

AOP “Aspect-Oriented Programming”

A

in Java, è un paradigma di programmazione che permette di separare le preoccupazioni trasversali, come il logging, la sicurezza o la gestione delle transazioni, dal codice di business principale.
AOP consente di definirle separatamente in “aspetti” o “advice”, che possono poi essere applicati in modo trasparente al codice principale.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Comandi per eseguire una aplicazione java

A

Ci sono due opzioni:

1.mvn exec:java

2.java -jar target/TestApiTraduttore-1.0-SNAPSHOT.jar

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Eseguire questo comando per generare le dipendence e il jar a deployare

A

mvn clean dependency:copy-dependencies package

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Inversion of control ?

A

L’inversione di controllo (Inversion of Control o IoC) è un principio di progettazione software che ribalta il controllo dell’esecuzione del programma. Invece di avere il controllo centralizzato all’interno di un componente o di una classe principale, l’IoC sposta il controllo dell’esecuzione a un framework o a un contenitore.

Ci sono principalmente due tipi di inversione di controllo:

  1. Iniezione di Dipendenza (Dependency Injection - DI): La DI è un tipo comune di IoC in cui un componente o una classe riceve le sue dipendenze da un’esterna, invece di crearle internamente. Questo può essere fatto tramite il passaggio dei parametri nel costruttore, tramite setter o anche tramite annotazioni, a seconda del linguaggio di programmazione e del framework utilizzati.

2.Gestione degli Eventi: Un altro tipo di IoC è la gestione degli eventi, in cui il controllo viene gestito da eventi o messaggi generati da oggetti o componenti all’interno del sistema. Un componente può registrarsi per ascoltare determinati eventi e reagire quando quegli eventi si verificano. Questo è spesso utilizzato in framework basati su eventi come JavaBeans o nella programmazione basata su messaggi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Dependency Injection (DI)

A

Nel contesto della Dependency Injection (DI) in Java, ci sono due forme fondamentali per implementarla:

  1. Questa è la forma più comune di Dependency Injection ed è basata sulla passaggio delle dipendenze attraverso il costruttore di una classe. Qui, le dipendenze sono fornite come argomenti al costruttore della classe.
    esempio:
  2. Iniezione di Dipendenza tramite Setter (Setter Injection):

In questa le dipendenze sono impostate utilizzando i metodi setter di una classe. Invece di passare le dipendenze attraverso il costruttore, le classi forniscono metodi setter che consentono di impostare le dipendenze.
esempio:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Singleton

A

è uno dei pattern di progettazione più comuni utilizzati in Java. Questo pattern ha lo scopo di garantire che una classe abbia una sola istanza e fornisce un punto di accesso globale a tale istanza.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Prototype

A

il pattern Prototype consente di duplicare oggetti senza doverne definire ogni dettaglio di nuovo. Puoi pensare a un “prototipo” come un modello da cui creare altre copie, o clone, con la stessa struttura e stato iniziale. Questo è utile quando desideri avere diverse copie di un oggetto, ma non vuoi passare attraverso il processo di inizializzazione complessa ogni volta che ne hai bisogno.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Ciclo di vita del Bean

A

Il ciclo di vita di un bean comprende tipicamente le seguenti fasi:

  1. Definizione: In questa fase, il bean viene configurato. Questo coinvolge la definizione delle dipendenze del bean, i valori delle proprietà e altre configurazioni. Questa definizione può essere fatta attraverso XML o annotazioni.
  2. Creazione (instantiation):
  3. Injection delle dipendenze:
    4.Inizializzazione:
  4. Utilizzo
    6.
    (da rivedere)
18
Q

Annotations

A

Le annotazioni (annotations) in Java sono metadati aggiunti al codice sorgente per fornire informazioni aggiuntive su classi, metodi, variabili e altri elementi del programma. Le annotazioni sono ampiamente utilizzate in Java per scopi di documentazione, refactoring, sicurezza e persino per la configurazione di framework come Spring.

19
Q

Annotations piu comuni

A

Ecco alcune delle annotazioni più comuni in Java:

  1. @Override: Usato per dichiarare un metodo come un’implementazione effettiva di un metodo da una superclasse o da un’interfaccia. Aiuta a prevenire errori di battitura o sovrascritture accidentali.
  2. @Deprecated: Indica che un elemento (solitamente un metodo o una classe) è deprecato e non dovrebbe essere utilizzato. È utilizzato per avvisare gli sviluppatori di metodi o classi obsoleti.
  3. @SuppressWarnings: Usato per sopprimere i warning del compilatore. È utile quando si sa che un certo warning è sicuro da ignorare.
    java
  4. @Entity (utilizzata in JPA - Java Persistence API): Usata per dichiarare una classe come entità, cioè una classe che è mappata a una tabella in un database relazionale.

5.@Autowired (utilizzata in Spring): Usata per l’iniezione di dipendenze. Indica a Spring di iniettare un’istanza di una classe in un’altra classe.

  1. @RequestMapping (utilizzata in Spring MVC): Definisce un mapping tra un URL e un metodo di gestione delle richieste in un controller Spring.
  2. @Test (utilizzata in JUnit): Usata per annotare metodi di test. I metodi annotati con @Test vengono eseguiti quando si eseguono i test JUnit.
  3. @Component: è una delle annotazioni principali nel framework Spring. Essenzialmente, indica a Spring che una classe è un componente o un bean che deve essere gestito dal container Spring. Ciò significa che Spring riconoscerà questa classe, la istanzierà e la manterrà nel suo contesto, consentendoti di accedervi quando necessario.

9.@Qualifier:

20
Q

<context:component-scan>
</context:component-scan>

A

Serve per cercare automaticamente i componenti del tuo progetto, come classi con annotazioni

21
Q

MVC / Model-view-controller

A

E’ un modello di progettazione spesso utilizzato nello sviluppo del software per organizzare il codice in modo più chiaro e separare le diverse responsabilità di un’applicazione.

*Modello : Rappresenta i dati e la logica di business. Il Modello contiene informazioni sullo stato dell’applicazione e fornisce metodi per accedere e modificarlo. Ad esempio, se stai sviluppando un’applicazione per una libreria, il Model potrebbe contenere le informazioni sui libri, come titolo, autore, anno di pubblicazione, ecc.

*Vista: è responsabile dell’interfaccia utente e di come i dati vengono presentati agli utenti.

*Controllore: Il Controllore funge da intermediario tra il Modello e la Vista. Accetta le richieste dell’utente, le elabora e agisce di conseguenza sul Modello o sulla Vista. Ad esempio, se un utente cerca un libro nella tua applicazione, il Controller riceve la richiesta di ricerca, consulta il Model per ottenere i dati pertinenti e quindi li presenta alla Vista per visualizzarli all’utente.

22
Q

JPA / Java Persistence API

A

è una specifica Java che definisce un’interfaccia standard per la gestione della persistenza dei dati in applicazioni Java. In altre parole, JPA fornisce un modo unificato e orientato agli oggetti per interagire con database relazionali all’interno delle applicazioni Java

23
Q

JSP / Java server pages

A

è una tecnologia utilizzata nello sviluppo web per creare pagine web dinamiche. È basata su Java e consente agli sviluppatori di mescolare codice Java con il markup HTML per generare contenuti web interattivi

24
Q

Aspect-Oriented Programming / AOP

A

(Programmazione Orientata agli Aspetti) è un paradigma di programmazione utilizzato in Java e in altri linguaggi per separare le preoccupazioni o gli aspetti di un’applicazione che non sono correlati alla sua funzionalità principale. AOP consente di modularizzare aspetti specifici di un’applicazione, come la registrazione, la sicurezza, le transazioni, la gestione degli errori e altri, in modo più pulito e manutenibile.

Invece di mescolare questi aspetti con il codice principale dell’applicazione, AOP utilizza qualcosa chiamato “aspetti” per incapsulare e modularizzare il comportamento correlato a queste preoccupazioni. Un aspetto è un modulo che incapsula il comportamento specifico e può essere applicato a più parti dell’applicazione.

AOP si basa su due concetti chiave:

  • Punto di Unione (Join Point): È un punto nel flusso di esecuzione dell’applicazione in cui è possibile applicare un aspetto. I punti di unione possono essere i metodi in esecuzione, eventi specifici, chiamate a metodi e altri luoghi in cui si desidera iniettare il comportamento dell’aspetto.
  • Consiglio (Advice): È il codice che viene eseguito in un punto di unione specifico. I consigli sono metodi o blocchi di codice che rappresentano il comportamento incapsulato in un aspetto. I consigli possono essere eseguiti prima, dopo o intorno al punto di unione.

Inoltre, AOP introduce anche altri concetti come:

  • Aspetto (Aspect): È il modulo che incapsula un insieme di consigli e regole su dove applicare quei consigli. Gli aspetti sono i mattoni di base di AOP.
  • Punto di Taglio (Pointcut): È un’espressione che definisce dove applicare i consigli. I punti di taglio vengono utilizzati per specificare i punti di unione specifici in cui verrà applicato un consiglio.
  • Introduzione (Introduction): Consente di aggiungere nuovi metodi e attributi alle classi esistenti senza modificarle. Questo può essere utile per estendere la funzionalità delle classi senza modificare il loro codice sorgente.

*crosscutting concern: si riferisce a una parte del software che coinvolge molte parti del codice, tagliando trasversalmente diversi moduli o componenti. Queste preoccupazioni trasversali sono funzionalità o requisiti che non sono facilmente incapsulati all’interno di un singolo modulo o classe e spesso coinvolgono operazioni comuni, come la gestione delle transazioni, il logging, la sicurezza, la gestione delle eccezioni o l’aspetto transazionale.

25
Q

Tipi di advice:

A
  • Before advice: Questo tipo di advice viene eseguito prima dell’esecuzione del punto di taglio. Puoi utilizzarlo per eseguire azioni preventive o validazioni prima che un metodo venga eseguito.
  • After returning advice: Questo advice viene eseguito dopo che un punto di taglio ha completato l’esecuzione con successo (senza lanciare eccezioni). È utile per l’elaborazione dei risultati o la pulizia delle risorse.
  • After throwing advice: Questo advice viene eseguito dopo che un punto di taglio ha lanciato un’eccezione. È utile per la gestione delle eccezioni o la registrazione degli errori.
  • After (finally) advice: Questo advice viene sempre eseguito, sia che il punto di taglio abbia completato l’esecuzione con successo che abbia generato un’eccezione. Può essere utilizzato per la pulizia delle risorse o altre azioni necessarie.
  • Around advice: Questo è il tipo più potente di advice e consente di controllare completamente l’esecuzione del punto di taglio. Puoi intercettare il metodo del punto di taglio, eseguire codice prima o dopo di esso e persino decidere se il metodo dovrebbe essere chiamato o meno.
26
Q

PCD (Pointcut Designators)

A

Sono espressioni per selezionare punti specifici nell’applicazione dove gli aspetti (aspects) dovrebbero essere eseguiti.

  • execution: Utilizzato per invocare un advice quando si verifica un determinato join point (viene eseguito il metodo indicato nell’espressione).
  • Within: Utilizzato per invocare un advice quando si verificano i join point di un certo tipo (ad es. viene eseguito un qualunque metodo dei bean che si trovano nel package specificato).
27
Q

I concetti alla base di AOP sono :

A

I concetti alla base di AOP sono :

  • Crosscutting Concern
    -Aspect
    -Join Point
    -Advice
    -Pointcut
    -Target object
    -AOP proxy

Crosscutting Concern (Preoccupazione trasversale): Una “crosscutting concern” è un aspetto di un’applicazione che si diffonde attraverso molte parti del codice, attraversando diversi moduli o componenti. Queste preoccupazioni non sono strettamente legate a una singola classe o modulo e spesso includono attività come il logging, la sicurezza, la gestione delle transazioni e la gestione delle eccezioni. L’obiettivo principale di AOP è separare queste preoccupazioni trasversali dal codice principale dell’applicazione.

Aspect (Aspetto): Un “aspect” è un modulo o un blocco di codice che implementa una preoccupazione trasversale specifica. In AOP, gli aspetti sono utilizzati per incapsulare queste preoccupazioni trasversali in modo che possano essere applicate in modo dichiarativo e riutilizzate in tutta l’applicazione. Gli aspetti contengono advices e pointcuts.

Join Point (Punto di Unione): Un “join point” è un punto specifico nell’esecuzione del programma, come l’invocazione di un metodo o la gestione di un’eccezione. Gli aspetti possono definire advices che saranno eseguiti in risposta a determinati join point.

Advice (Consiglio): Un “advice” è un blocco di codice che viene eseguito in un determinato join point specificato da un pointcut. Gli advices possono essere di diversi tipi, come “before” (eseguito prima del join point), “after” (eseguito dopo il join point) o “around” (che può sostituire l’invocazione del join point).

Pointcut (Punto di Taglio): Un “pointcut” è una specifica che definisce un insieme di join points in cui un advice dovrebbe essere eseguito. I pointcuts consentono di dichiarare in modo flessibile dove applicare gli advices. Ad esempio, un pointcut può corrispondere a tutte le invocazioni di metodi di una classe specifica.

Target Object (Oggetto Target): L’“oggetto target” è l’oggetto reale che viene eseguito durante l’applicazione, ad esempio un oggetto di una classe Java. Gli aspetti possono influenzare il comportamento dell’oggetto target attraverso l’applicazione di advices.

AOP Proxy (Proxy AOP): Un “proxy AOP” è un oggetto generato dinamicamente che avvolge l’oggetto target. Questo proxy consente agli aspetti di intercettare le chiamate all’oggetto target e applicare gli advices in base ai pointcuts. L’uso di proxy è un meccanismo chiave nell’implementazione di AOP in Java.

28
Q

Front controller pattern

A

Questo pattern prevede un punto di ingresso centralizzato per la gestione delle richieste.
Un punto di ingresso potrebbe essere un servlet Java o una pagina PHP.

In spring MVC il “Front controller pattern” è implementato attraverso un servlet chiamato Dispatcherservlet

29
Q

Dispatcherservlet

A

E’ un servlet a dispozisione dal framework Spring MVC e implementa un algoritmo per la elaborazione delle richieste e si occupa di inoltrare la richiesta al controller di riferimento.

Per utilizzare il Dispatcherservlet dobbiamo dichiararla e mapparla, possiamo utilizzare la configurazione Java o via web.xml

la Dispatcherservlet utilizza la configurazione spring per conoscere quali sono i controller a cui delegare le richieste.

Dispatcherservlet utilizza un oggetto di tipo WebApplicationContext(una estenzione di ApplicationContext) per la propria configurazione.

  • Dispatcherservlet:
    Delega a dei “bean” speciali l’elaborazione delle richieste e restituire la risposta al client. Per “bean speciali” si intendono oggetti che implementano determinate funzioni, alcuni “bean speciali” sono:

*HadlerExceptionResolver: Consente di gestire le eccezioni, visulizzazione degli errori.

*ViewResolver: Permette di identificare una determinata view sulla base di una stringa.

  • LocaleResolver, LocaleContextResolver: Gestisce le impostazione sulla localizzazione utilizate dal client.(per localizzazione si intende creare una applicazione in piu lingue)

*MultipartResolver: Gestisce il parse di una request di tipo milti-part(esempio, upload di un file).

*ThemeResolver: Gestisci i temi definiti nella applicazione web per offrire layout personalizzati.

30
Q

Cos’è una variabile.

A

Una variabile è una porzione di memoria al cui interno viene salvato un nostro dato.

31
Q

Tipi di variabili in java

A

Abbiamo quattro tipi di variabili in Java variabili locali, variabili di istanza, variabili di classe

*Variabili locali: Sono definite all’interno di un metodo, Sono create quando un metodo viene chiamato e cancellare quando il metodo termina.

*Variabili di istanza: sono definitre all’interno di una classe, ma fuori dai metodi della classe stessa

*Variabili di classe: Sono variabili di istanza ma nella loro definizione viene usato il modificatore static

*Parametri: vengono dichiarate all’interno delle parentesi tonde di un determinato metodo

32
Q

Tipo di dato primitivo

A

I dati primitivi in java sono 8

  • byte: Questo tipo di dato è utilizzato per archiviare valori interi molto piccoli. Ha una dimensione di 8 bit.
  • short: Il tipo short è utilizzato per archiviare valori interi più grandi rispetto al byte, ma ancora abbastanza piccoli. Ha una dimensione di 16 bit.
  • int: L’int è comunemente usato per archiviare valori interi. Ha una dimensione di 32 bit.
  • long: Il tipo long è utilizzato per archiviare valori interi molto grandi. Ha una dimensione di 64 bit.
  • float: Questo tipo è utilizzato per archiviare numeri in virgola mobile con precisione limitata. Ha una dimensione di 32 bit.
  • double: Il tipo double è utilizzato per archiviare numeri in virgola mobile con una maggiore precisione rispetto al float. Ha una dimensione di 64 bit.
  • char: Il tipo char è utilizzato per archiviare un singolo carattere Unicode. Ha una dimensione di 16 bit.
  • boolean: Il tipo boolean rappresenta un valore booleano, che può essere true o false. È spesso usato per espressioni condizionali.
33
Q

Metodi

A

Metodi

se definiscono :

modificatore di accessoTipoRitornato nomeMetoro(parametri)

  • [modificatore di accesso] : uno a scelta tra private, protected, public, default
  • TipoRitornato = void(in caso che il metodo non ritorna niente) tipo primitivo o classe in base al valore inserito
  • nomeMetodo: nome scelto
  • parametri: lista dei parametri ammessi in ingreso, è possibile definire metodi che non accetanno parametri di ingresso
34
Q

Linguaggi e paradigmi

A

● Un paradigma è una collezione di modelli concettuali che insieme plasmano il processo di analisi,
progettazione e sviluppo del software.
● I paradigmi influenzano il modo in cui pensiamo e formuliamo le soluzioni, arrivando anche a condizionare
l’organizzazione del codice.
● Ogni linguaggio, quindi, si basa su un determinato paradigma, anche se, in generale, esistono linguaggi in
grado di supportare più di un paradigma.

35
Q

Paradigmi e approccio al problem solving

A

● Approccio operazionale: descrive per passi come costruire una soluzione (es. paradigmi imperativo e object
oriented ).
● Approccio dimostrazionale: illustra la soluzione mediante esempi e lascia al sistema il compito di
generalizzare questa soluzione (es. robotica, apprendimento automatico o machine learning).
● Approccio definizionale: stabilisce le proprietà della soluzione senza descrivere come viene costruita (es.
paradigma dichiarativo).

36
Q

Paradigma imperativo

A

Il paradigma imperativo utilizza il modello di macchina di Von
Neumann per concettualizzare la soluzione.
● Lo stile è prescrittivo: si definiscono in anticipo tutte le azioni
da compiere per giungere dai dati iniziali del problema alla
soluzione finale.
● L’esecuzione è sequenziale, a meno di strutture di controllo
che possono alterare il processo.

NOTA:
Il modello di von Neumann è un’architettura hardware per computer Il modello prevede tre sottosistemi: il processore, la memoria e i dispositivi di I/O (input/output), collegati da un bus. Programmi e dati sono archiviati nella stessa memoria. Il modello di von Neumann è la base per quasi computer moderno.

37
Q

Sotto-paradigmi:

A

● Programmazione strutturata:
è un paradigma di programmazione che si basa su una struttura gerarchica, controlli di flusso chiaramente definiti e l’uso di blocchi di costruzione ben organizzati per scrivere il codice. Questo paradigma si concentra su tre strutture di controllo principali:

  • Sequenza: L’elaborazione delle istruzioni avviene in sequenza, dall’alto verso il basso, in modo da eseguire una serie di operazioni una dopo l’altra.
  • Selezione: L’esecuzione del programma è guidata da condizioni logiche. Le strutture condizionali (solitamente dichiarate con istruzioni “if”, “else if” e “else”) permettono di fare scelte basate su condizioni booleane.
  • Iterazione: La ripetizione delle istruzioni è possibile mediante cicli o loop. Questi cicli consentono di eseguire un blocco di codice più volte, finché una condizione specifica è soddisfatta.

● Programmazione procedurale: nasce, nei primi anni ‘70, per
fornire tecniche di organizzazione del codice tali da migliorare
leggibilità e modificabilità e consentirne il riutilizzo, anche se
parziale.
La programmazione procedurale si basa sulla tecnica di scomposizione di un problema in sottoproblemi.
La scomposizione di un problema complesso in parti più semplici può avvenire con approccio top-down o
bottom-up.
○ Top-down: si parte dal problema generale e si arriva al particolare attraverso raffinamenti successivi.
○ Bottom-up: si parte dal dettaglio per arrivare al problema generale mediante interconnessione delle
varie parti.

Ciascun sottoproblema viene rappresentato mediante un sottoprogramma, ossia un blocco di codice
identificato da un nome.
Sinonimi di sottoprogramma: funzione, procedura, sub-routine.

38
Q

Edizioni delle piattaforme Java

A

● Java Card: sviluppo software per dispositivi embedded, in particolare smart card
● Java Micro Edition (Java ME): sviluppo software per dispositivi con risorse limitate (Internet of Things): PDA,
smartphone, wearable, …
● Java Standard Edition (Java SE): sviluppo di applicazioni desktop
● Java Enterprise Edition (Jakarta EE): estende Java SE con specifiche per funzionalità come elaborazione
distribuita e servizi Web.

39
Q

Compilazione vs Interpretazione

A

● Linguaggi compilati
○ In un linguaggio compilato, il codice sorgente viene tradotto in codice macchina (binario) dal
compilatore, che, dopo una serie di passaggi, crea un file eseguibile (.exe).
○ Questo file .exe viene poi eseguito direttamente dal sistema operativo.

● Linguaggi interpretati
○ In un linguaggio interpretato, il codice sorgente viene interpretato da un un programma detto
interprete.
○ L’interprete legge il codice sorgente riga per riga e lo esegue immediatamente.
○ L’interprete può eseguire il codice su qualsiasi sistema operativo che abbia l’interprete installato.

● Confronti
○ Il codice compilato non è portabile (o portatile) perché è specifico per un particolare sistema
operativo, mentre il codice interpretato è portabile perché può essere eseguito su qualsiasi
sistema operativo che abbia l’interprete installato.
○ Il codice compilato tende ad essere più veloce del codice interpretato perché è già stato tradotto
in codice macchina.

40
Q

Approccio ibrido

A

Approccio ibrido

● Alcuni linguaggi, come Java, utilizzano un approccio ibrido di compilazione e interpretazione.
● Il codice sorgente viene compilato in un codice intermedio (non eseguibile) detto bytecode o codice
target, totalmente indipendente dall’architettura del sistema.
● Il compilatore Java (javac) contiene anche un analizzatore sintattico (parser) che verifica la correttezza
sintattica del codice, prima di effettuare la traduzione.
○ il nome del file contenente il codice sorgente deve coincidere con il nome della classe e avere
estensione “.java”;
○ se il file contenente il codice sorgente si chiama MyClass.java, il bytecode viene salvato nel file
MyClass.class.

● Il bytecode viene poi eseguito da un interprete, la Java Virtual Machine (JVM).
● L’approccio ibrido consente di rendere il codice indipendente dalla piattaforma su cui verrà eseguito
(portabilità).
● L’importante è che l’interprete sia quello adatto, cioè sia in grado di tradurre il bytecode nel codice
binario eseguibile dalla particolare macchina.

41
Q

JDK e JRE

A

● Per sviluppare software in Java è necessario installare sul proprio computer il Java Development Kit, che
comprende, tra le altre cose:
○ il compilatore javac,
○ la JVM,
○ le librerie di classi Java,
○ il tool Javadoc per creare la documentazione delle classi.

● Se non si è sviluppatori, ma si vuole solo eseguire il codice Java, è sufficiente installare il Java Runtime
Environment, che comprende:
○ la JVM,
○ le librerie di classi Java.