Zangrone
Ominide
13 min. di lettura
Vota

Concetti Chiave

  • Java, sviluppato da James Gosling presso Sun Microsystems nel 1991, è noto per la sua portabilità grazie al motto "Scrivi una volta, esegui ovunque", reso possibile dalla JVM.
  • Due caratteristiche chiave di Java sono la sua natura object-oriented, che promuove modularità e manutenibilità, e la portabilità del codice attraverso la JVM.
  • Il processo di sviluppo di un’applicazione Java coinvolge la scrittura del codice sorgente, compilazione in bytecode con javac, e esecuzione su JVM tramite JRE.
  • In Java, le classi fungono da modelli per gli oggetti, che sono istanze di classi e risiedono nell'HEAP, gestiti dal garbage collector per la memoria.
  • La programmazione orientata agli oggetti in Java centralizza gli oggetti, che incapsulano dati e metodi, esponendo solo le interfacce pubbliche per l'interazione.

Indice

  1. Capitolo 1: Introduzione al Linguaggio di Programmazione Java
  2. Principali caratteristiche
  3. Processo di sviluppo di un’applicazione Java
  4. Struttura di un Programma Java
  5. La classe in Java
  6. Differenza tra Classe Java e Struct in Linguaggio C
  7. Gli oggetti in Java
  8. Differenza tra STACK e HEAP
  9. Centralità degli oggetti nella pprogrammazione orientata agli oggetti
  10. Esempio di programma Java

Capitolo 1: Introduzione al Linguaggio di Programmazione Java

Prima di immergerci nelle caratteristiche e nei concetti fondamentali di Java, è importante fare un breve excursus della storia di questo linguaggio di programmazione.
Java è stato sviluppato da James Gosling e dal suo team di sviluppo alla Sun Microsystems (ora parte di Oracle Corporation) nel 1991. Inizialmente, il progetto Java era conosciuto come "Progetto Green" e aveva l'obiettivo di creare un linguaggio di programmazione per controllare e gestire dispositivi elettronici in modo più efficiente. Nel 1995, Sun Microsystems ha rilasciato ufficialmente Java al pubblico con il motto "Scrivi una volta, esegui ovunque." Questo concetto di portabilità del codice attraverso la JVM è stato uno dei punti di forza che ha reso Java così popolare. Da allora, Java è cresciuto costantemente in popolarità ed è diventato uno dei linguaggi di programmazione più utilizzati in tutto il mondo. Java è stato adottato in una vasta gamma di applicazioni, inclusi sviluppo di applicazioni desktop, sviluppo web, sviluppo mobile (attraverso Android), sviluppo di applicazioni embedded e persino nell'ambito della programmazione aziendale.

Principali caratteristiche

Java è un linguaggio di programmazione con diverse caratteristiche distintive che hanno contribuito alla sua popolarità. Due di queste caratteristiche di spicco sono la sua natura object-oriented e la portabilità. Java è un linguaggio quasi interamente orientato agli oggetti, il che significa che quasi tutto in Java è un oggetto fatta eccezione per gli 8 tipi primitivi di Java di cui si parlerà in seguito. Questo paradigma di programmazione promuove la modularità e l'astrazione, consentendo agli sviluppatori di organizzare il codice in modo più intuitivo e manutenibile. Le classi definiscono i modelli dai quali vengono istanziati gli oggetti, e il concetto di ereditarietà consente la creazione di gerarchie di classi, fornendo una struttura chiara e organizzata per la costruzione di programmi complessi. La portabilità è uno dei punti di forza del Linguaggio Java. Grazie alla Java Virtual Machine (JVM), il codice sorgente Java viene compilato in bytecode, un formato intermedio che può essere eseguito su qualsiasi sistema con una JVM compatibile. Ciò significa che un programma Java può essere scritto una sola volta e poi eseguito su diverse piattaforme senza la necessità di adattamenti specifici per ciascuna. Questa caratteristica lo rende ideale per lo sviluppo di applicazioni cross-platform, riducendo i costi e semplificando la distribuzione su diverse piattaforme hardware e software.

Processo di sviluppo di un’applicazione Java

Lo sviluppo di un'applicazione Java coinvolge diverse fasi, dalla scrittura del codice sorgente all'esecuzione. Ecco un riepilogo delle principali fasi del processo di sviluppo di un'applicazione Java, tenendo presente il ruolo chiave del Java Development Kit (JDK), del Java Runtime Environment (JRE), e la natura interpretativa della Java Virtual Machine (JVM). - Scrittura del Codice Sorgente: La fase iniziale coinvolge la scrittura del codice sorgente dell'applicazione in uno o più file Java (.java). In questa fase, si definiscono le classi (una per file) inserendo al loro interno la definizione delle variabili di istanza e dei metodi. Il codice Java deve rispettare: 1) una sintassi rigorosa, del tutto simile a quella del Linguaggio C; 2) l’uso di convenzioni ormai ampiamente riconosciute a livello mondiale. Ad esempio, sebbene non sia una regola sintattica, è opportuno che i nomi delle classi abbiano l’iniziale maiuscola e utilizzino il CamelCase in presenza di più parole nel nome della classe; - Compilazione con il compilatore javac: Una volta scritto il codice sorgente, è necessario compilarlo in bytecode. La compilazione è il processo di traduzione del codice Java in istruzioni bytecode, che sono indipendenti dalla piattaforma. Per compilare il codice, si utilizza il compilatore Java (chiamato javac) incluso nel Java Development Kit (JDK). Il JDK contiene anche altri strumenti utili per lo sviluppo, come debugger e profiler;

- Esecuzione con JRE e JVM: L'applicazione Java può essere eseguita su una qualsiasi piattaforma che abbia una Java Virtual Machine (JVM) installata. La JVM è un interprete che traduce il bytecode in istruzioni specifiche del sistema operativo e dell'hardware sottostante, una per volta procedendo man mano alla loro esecuzione (interprete Java). Per avviare l'applicazione, è necessario utilizzare il comando java, seguito dal nome della classe contenente il metodo main() senza l’estensione .class. Il metodo main() funge da punto di ingresso dell'applicazione ed è il primo metodo ad essere eseguito. Il Java Runtime Environment (JRE) include la JVM e le librerie di classi standard necessarie per eseguire l'applicazione. Vedi figure sotto.

Struttura di un Programma Java

Un programma Java è composto da una o più classi. Una classe è un modello per fare oggetti. Al suo interno definisce gli attributi (o variabili di istanza) che conservano i dati, e i metodi (cioè le funzioni) che permettono di avanzare “richieste di servizio” verso gli oggetti. Ogni programma Java deve contenere almeno una classe con un metodo speciale chiamato main(). ### 1.4.1 Il Metodo main() Il metodo main() è il punto di ingresso di un programma Java. È dal main() che parte l’esecuzione del programma Java. Naturalmente è possibile definire una o più classi senza inserire il main() in nessuna di esse. Queste classi non saranno eseguibili. E’ bene precisare una cosa sin dall’inizio. Abitualmente il metodo main() viene inserito in una classe appositamente definita. Anche in questo caso, la classe in questione conserva il suo ruolo che è quello di produrre oggetti.

La classe in Java

La classe è uno strumento fondamentale in Java. Essa rappresenta un modello per la creazione di oggetti. Gli oggetti sono le istanze di una classe, e ciascun oggetto può avere attributi (anche detti variabili di istanza proprio perché ogni istanza-oggetto ha le sue variabili) e comportamenti (capacità di rispondere all’invocazione dei metodi).
Importante: In Java non eseguiamo funzioni! In Java creiamo oggetti ai quali facciamo richieste di servizio invocando su di essi i metodi con la seguente sintassi: nomeVariabileRiferimento.nomeMeotodo();

Differenza tra Classe Java e Struct in Linguaggio C

A differenza di una struct C, una classe Java può contenere sia dati (variabili) che metodi (funzioni) che operano su quei dati. Inoltre, gli oggetti Java possono essere allocati soltanto dinamicamente attraverso un meccanismo che somiglia molto alla funzione malloc() del C. Come vedremo in seguito, una classe Java può ereditare da altre classi, creando così una gerarchia di classi. Questa caratteristica non è disponibile per le struct di C.

Gli oggetti in Java

In Java, gli oggetti sono le istanze di una classe. Essi vengono allocati nellHEAP, che è un’area della memoria RAM riservata alle esigenze di allocazione dinamica di un programma Java. La funzione malloc() di C ha una sua controparte che è la funzione free() che permette di “rilasciare” la memoria precedentemente allocata con malloc(). In Java, quando un oggetto non serve più, non è necessario liberare esplicitamente la memoria occupata dall’oggetto in quanto c’è una componente della JVM che si occupa di questo compito: il garbage collector.

Differenza tra STACK e HEAP

Come già noto dalla programmazione C, lo STACK e l’HEAP sono due regioni di memoria utilizzate per scopi diversi in un programma in esecuzione. Lo STACK viene utilizzato per memorizzare i dati relativi ad una invocazione di metodo quindi sia i parametri formali sia le variabili locali. Quando il metodo viene invocato e parte la sua esecuzione, nello STACK viene aggiunto un frame (o record di attivazione). Quando il metodo termina la sua esecuzione, il frame viene rimosso dallo STACK. La modalità di funzionamento è LIFO cioè l’ultimo frame ad essere allocato sullo STACK è anche il primo ad essere rimosso. Lo STACK cresce e si comprime dinamicamente con un andamento che sembra quello di una fisarmonica. Invece, gli oggetti vengono allocati nella memoria HEAP e persistono in quest’area finché hanno riferimenti ad essi. Sicuramente, le variabili presenti nello STACK hanno un ciclo di vita più breve rispetto agli oggetti presenti nell’HEAP.

Centralità degli oggetti nella pprogrammazione orientata agli oggetti

La programmazione orientata agli oggetti (OOP) è una metodologia di sviluppo software che mette gli oggetti al centro del processo di sviluppo. Questo approccio permette di modellare il mondo reale in modo più accurato, organizzando il codice in classi. Gli oggetti nella OOP sono responsabili di rispondere alle richieste di servizio attraverso i loro metodi, incapsulando i dati nel loro nucleo. L’oggetto espone in superficie i metodi pubblici che possono essere utilizzati per interagire con l’oggetto, nascondendo la sua implementazione all’interno. L’utilizzatore dell’oggetto non è tenuto a conoscere questa implementazione. Egli deve sapere 1) come creare l’oggetto e 2) come utilizzarlo. Un oggetto in Java può essere immaginato come una figura solida, es. una capsula o una sfera. Questa figura incapsula i dati al suo interno e li protegge dall'accesso diretto da parte di altre parti del programma. Gli oggetti espongono metodi pubblici che fungono da interfaccia per interagire con loro. La capsula o sfera rende l’idea di un corpo solido che non è flessibile. Infatti, anche un oggetto non potrà modificare la propria forma dopo la creazione.

Esempio di programma Java

Ecco un esempio di programma Java composto da due classi: Rettangolo e MainRettangolo. // Definizione della classe Rettangolo public class Rettangolo { // Variabili di istanza double altezza; double larghezza;

// Costruttore per inizializzare altezza e larghezza public Rettangolo(double a, double l) { altezza = a; larghezza = l; } // Metodo per calcolare l'area del rettangolo public double getArea() { return altezza * larghezza; } } // Classe contenente il metodo main() public class MainRettangolo { public static void main(String[] args) { // Creazione di un oggetto Rettangolo Rettangolo mioRettangolo = new Rettangolo(5.0, 10.0); // Calcolo dell'area del rettangolo utilizzando il metodo getArea() double area = mioRettangolo.getArea(); // Stampa del risultato a video System.out.println("L'area del rettangolo è: " + area); } } In questo programma, la classe Rettangolo ha due variabili di istanza altezza e larghezza, un costruttore che inizializza queste variabili, e un metodo getArea() che calcola l'area del rettangolo. Nella classe MainRettangolo, nel metodo main(), viene istanziato un oggetto Rettangolo chiamato mioRettangolo con altezza 5.0 e larghezza 10.0. Successivamente, viene chiamato il metodo getArea() sull'oggetto mioRettangolo per ottenere l'area del rettangolo, e il risultato viene stampato.

Domande da interrogazione

  1. Qual è la storia e l'origine del linguaggio di programmazione Java?
  2. Java è stato sviluppato da James Gosling e il suo team alla Sun Microsystems nel 1991, inizialmente come "Progetto Green" per gestire dispositivi elettronici. È stato rilasciato al pubblico nel 1995 con il motto "Scrivi una volta, esegui ovunque", grazie alla sua portabilità tramite la JVM.

  3. Quali sono le principali caratteristiche che rendono Java popolare?
  4. Java è noto per la sua natura object-oriented e la portabilità. Quasi tutto in Java è un oggetto, promuovendo modularità e astrazione. La portabilità è garantita dalla JVM, che permette l'esecuzione del bytecode su diverse piattaforme senza modifiche.

  5. Come avviene il processo di sviluppo di un'applicazione Java?
  6. Il processo include la scrittura del codice sorgente, la compilazione in bytecode con javac, e l'esecuzione tramite JRE e JVM. Il codice sorgente è scritto in file .java, compilato in bytecode, e poi eseguito su qualsiasi piattaforma con una JVM compatibile.

  7. Qual è la differenza tra una classe Java e una struct in C?
  8. Una classe Java può contenere sia dati che metodi, mentre una struct in C contiene solo dati. Inoltre, le classi Java supportano l'ereditarietà, creando gerarchie di classi, una caratteristica non disponibile per le struct in C.

  9. Qual è il ruolo degli oggetti nella programmazione orientata agli oggetti in Java?
  10. Gli oggetti sono centrali nella OOP, modellando il mondo reale e rispondendo a richieste di servizio tramite metodi. Incapsulano dati e offrono metodi pubblici per interagire, proteggendo l'implementazione interna e facilitando l'organizzazione del codice.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community