Programmazione Orientata agli Oggetti in Java: concetti e caratteristiche

Documento da Oracle su Object-Oriented Programming (JAVA). Il Pdf approfondisce i concetti fondamentali e le caratteristiche del linguaggio, la gestione dei thread, la sincronizzazione e i meccanismi di comunicazione tra thread, utile per lo studio universitario di Informatica.

Mostra di più

43 pagine

0
Object-Oriented
Programming (JAVA)
1
Object-oriented programming (Java)
Introduzione
1.1 Caratteristiche generali
Java è un linguaggio di programmazione di alto livello, Object-oriented (orientato agli oggetti), sviluppato
da Sun Microsystems nel 1995.
Object-oriented è un paradigma di programmazione che permette di definire oggetti software in grado di
interagire gli uni con gli altri attraverso lo scambio di messaggi. Ci sono diversi vantaggi della
programmazione orientata agli oggetti: i software sono facili da modificare e da mantenere, inoltre,
consente alti livelli di riutilizzabilità del codice.
Java ha una ricchissima libreria per lo sviluppo di interfacce utente e di applicazioni Internet impiegabili
con relativa facilità. È un linguaggio robusto poiché una delle principali cause di crash dei programmi
scritti in C/C++ è luso scorretto dellaritmetica dei puntatori: infatti Java non fornisce tipi puntatori, né
tanto meno laritmetica dei puntatori. Inoltre, possiede un meccanismo automatico della gestione della
memoria (Garbage Collection) che esonera il programmatore dallobbligo di dover deallocare la memoria
quando non ce né bisogno.
È un linguaggio efficiente pur essendo un linguaggio interpretato: i programmi Java sono, mediamente,
meno di 10 volte più lenti dei corrispondenti programmi C++, anche se lefficienza si riduce per particolari
applicazioni Java e in quel caso sarebbe meglio utilizzare altri linguaggi interpretati (Basic, PERL, etc).
È sicuro, poiché lesecuzione dei programmi è confinata in un firewall da cui non è possibile accedere ad
altre parti del computer e ciò è estremamente utile per lesecuzione di programmi scaricati da Internet.
Java è un linguaggio portabile: offre la possibilità di compilare il nostro codice su qualsiasi macchina,
indipendentemente dal software o dallhardware. Infatti, i programmi scritti in linguaggi convenzionali
(es. C/C++) devono essere ricompilati per la nuova piattaforma, mentre in Java il compilatore genera un
codice (Bytecode) eseguibile per una CPU virtuale, detta macchina virtuale (JVM). La macchina virtuale
viene poi simulata su una CPU reale.
1.2 Differenza compilatore e interprete
La compilazione e l'interpretazione sono due metodi per eseguire un programma.
La compilazione traduce tutte le istruzioni di un programma in linguaggio nativo, eliminando le
ridondanze e poi le sottomette alla CPU, creando un file eseguibile (oggetto) ed è immediatamente
eseguibile dal processore. Ogni volta che eseguo il programma, eseguo il file eseguibile. Il file sorgente
non svolge alcuna funzione durante l'esecuzione del programma. La compilazione viene eseguita da
un software, il compilatore.
da 1.1 a 1.6 fai con francesco

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Object-Oriented Programming (JAVA)

ORACLE
Libera Menava
0da 1.1 a 1.6 fai con francesco

Introduzione alla programmazione orientata agli oggetti (Java)

Caratteristiche generali di Java

Java è un linguaggio di programmazione di alto livello, Object-oriented (orientato agli oggetti), sviluppato
da Sun Microsystems nel 1995.
Object-oriented è un paradigma di programmazione che permette di definire oggetti software in grado di
interagire gli uni con gli altri attraverso lo scambio di messaggi. Ci sono diversi vantaggi della
programmazione orientata agli oggetti: i software sono facili da modificare e da mantenere, inoltre,
consente alti livelli di riutilizzabilità del codice.
Java ha una ricchissima libreria per lo sviluppo di interfacce utente e di applicazioni Internet impiegabili
con relativa facilità. È un linguaggio robusto poiché una delle principali cause di crash dei programmi
scritti in C/C++ è l'uso scorretto dell'aritmetica dei puntatori: infatti Java non fornisce tipi puntatori, né
tanto meno l'aritmetica dei puntatori. Inoltre, possiede un meccanismo automatico della gestione della
memoria (Garbage Collection) che esonera il programmatore dall'obbligo di dover deallocare la memoria
quando non ce né bisogno.
È un linguaggio efficiente pur essendo un linguaggio interpretato: i programmi Java sono, mediamente,
meno di 10 volte più lenti dei corrispondenti programmi C++, anche se l'efficienza si riduce per particolari
applicazioni Java e in quel caso sarebbe meglio utilizzare altri linguaggi interpretati (Basic, PERL, etc ... ).
È sicuro, poiché l'esecuzione dei programmi è confinata in un "firewall" da cui non è possibile accedere ad
altre parti del computer e ciò è estremamente utile per l'esecuzione di programmi scaricati da Internet.
Java è un linguaggio portabile: offre la possibilità di compilare il nostro codice su qualsiasi macchina,
indipendentemente dal software o dall'hardware. Infatti, i programmi scritti in linguaggi convenzionali
(es. C/C++) devono essere ricompilati per la nuova piattaforma, mentre in Java il compilatore genera un
codice (Bytecode) eseguibile per una CPU virtuale, detta macchina virtuale (JVM). La macchina virtuale
viene poi simulata su una CPU reale.

Differenza tra compilatore e interprete

La compilazione e l'interpretazione sono due metodi per eseguire un programma.
La compilazione traduce tutte le istruzioni di un programma in linguaggio nativo, eliminando le
ridondanze e poi le sottomette alla CPU, creando un file eseguibile (oggetto) ed è immediatamente
eseguibile dal processore. Ogni volta che eseguo il programma, eseguo il file eseguibile. Il file sorgente
non svolge alcuna funzione durante l'esecuzione del programma. La compilazione viene eseguita da
un software, il compilatore.

Codice
Sorgente

Compilatore

Codice
Oggetto

CPU

1L'interpretazione traduce ed esegue ogni singola istruzione del programma, traducendola in
linguaggio macchina per farla eseguire dal processore. Legge ed esegue il codice sorgente del
programma senza creare un file oggetto eseguibile. Tutti questi passaggi si ripetono ogni volta che
eseguo il programma. Per questa ragione l'esecuzione di un programma interpretato è più lenta.

JVM
Linux

Codice
Sorgente

Compilatore

Bytecode per la
macchina virtuale

JVM
Windows

JVM
Solaris

Bytecode

Un file di bytecode è costituito da una sequenza di caratteri in formato Unicode (uno schema di codifica
più ricco di ACII/ANSI che sono un sottoinsieme dell'Unicode). Il bytecode contiene tutte le informazioni
che descrivono le classi ed è dato "in pasto" alla JVM che ne legge i contenuti. Con opportuni tool è
possibile ricostruire il codice sorgente del programma a partire dal bytecode.

Java Platform

La Java platform è solo software e viene eseguita al di sopra di altre piattaforme hardware: Java Virtual
Machine (JVM), Java Application Programming Interface (Java API).
La Java Platform è una collezione di software pronti per l'uso, inoltre, è organizzata in librerie di classi e
interfacce correlate, detti packages. Abbiamo 3 edizioni principali:

  1. Standard Edition (Java SE™): fornisce ambiente runtime per esecuzione di applicazioni Java; API
    essenziali per sviluppare applicazioni di vario tipo (applet, applicazioni stand-alone).
  2. Enterprise Edition (Java EE™): fornisce un framework per lo sviluppo di applicazioni server-side
    complesse. Adatta allo sviluppo di applicazioni Web-based a livello di impresa, per commercio
    elettronico.

ab

  1. Micro Edition (Java ME™): un Java runtime environment altamente ottimizzato indirizzato
    specificamente a "computer piccoli": smart card, telefonini, PDA.

Il Java SE comprende di un JDK (Java Development Kit) formato da un insieme base di programmi che
consente di far girare applicazioni scritte nel linguaggio Java. I programmi più importanti sono il
compilatore Java (javac) che traduce il sorgente Java in codice eseguibile dalla macchina virtuale Java, e
l'esecutore (java), che implementa la vera e propria macchina virtuale.

API (Java Application Programming Interface)

API (Java Application Programming Interface) è un codice già scritto, strutturato in packages relativi a un
insieme di argomenti comuni. Un package è una collezione di classi correlate e interfacce, che forniscono
accesso protetto e namespace management. Per usare una classe o un'interfaccia in un package bisogna
usare il nome completo della classe (Es: java . util . ArrayList) o importare la classe (import
java. util. ArrayList ; ) o importare tutto il package (import java. util. * ; ).
2

JVM (Java Virtual Machine)

La JVM è un calcolatore astratto che consiste di un caricatore di classi e di un interprete del linguaggio
che esegue il bytecode. Il caricatore delle classi carica i file .class, sia del programma scritto in Java sia
della libreria API, affinché l'interprete possa eseguirli. Il verificatore delle classi controlla la correttezza
sintattica del codice bytecode. La JVM gestisce la memoria in modo automatico poiché possiede un
proprio garbage collector che consiste nel recupero delle aree di memoria assegnate ad oggetti non più in
usi per poi restituirla al sistema.
La JVM E le librerie di base costituiscono il Java Runtime Enviroment (JRE), necessario per esecuzione di
programmi Java. Per mantenere l'efficienza di un programma Java sono stati introdotti dei compilatori
Just In Time (JIT), che alla prima esecuzione prendono pezzi di bytecode e li analizzano.

Programmazione

Un programma è un software, ovvero un insieme di programmi che consentono all'hardware di svolgere i
compiti richiesti, che può essere eseguito da un elaboratore e che riceve dati in input di un problema per
poi produrre una soluzione algoritmica restituendo dati output.
Un programma è un insieme di linee di codice a loro volta costituite da un insieme di istruzioni. Il
problema deve essere risolvibile attraverso un algoritmo affinché un programmatore possa codificarlo in
istruzioni in un linguaggio di programmazione; in questa fase - detta programmazione - viene realizzato il
codice sorgente del programma.
Il linguaggio di programmazione può essere di diverso tipo:

  • Basso livello. È un linguaggio di programmazione più vicino a quello della macchina e ciò è utile
    poiché rende il programma veloce e ingombra poca memoria, infatti avremo le istruzioni in codice
    binario eseguibili direttamente. Lo svantaggio è che costringe a pensare soluzioni che riflettono il
    modo di operare dell'elaboratore, rendendo difficoltoso il riutilizzo del codice e la manutenzione.
  • Alto livello. È un linguaggio di programmazione orientato verso l'uomo che rende il programma più
    pesante in termini di memoria, inoltre, non è richiesta una conoscenza dell'hardware. Questo tipo di
    linguaggio non è adatto allo sviluppo di software di base (SO, Driver, compilatori, ... ).

Classi e oggetti

In Java si costruiscono programmi usando oggetti. Ogni oggetto ha un comportamento e può essere
manipolato mediante l'invocazione dei suoi metodi. Un metodo è costituito da una sequenza di istruzioni
che possono accedere ai dati interni dell'oggetto. Un oggetto esiste fino a quanto c'è una variabile di
riferimento che si riferisce a lui, poi avviene la distruzione automatica.
Nella OOP, un oggetto può contenere elementi concreti, ma anche entità come processi o concetti teorici
e astratti. Gli oggetti ma sono identificati dall'avere:

  • stato, contiene le informazioni conservate nell'oggetto, inoltre condiziona il suo comportamento
    nel futuro e può variare nel tempo per effetto di un'operazione sull'oggetto;
  • "comportamento", è definito dai metodi che possono essere eseguiti dall'oggetto e tali metodi
    possono modificare anche lo stato dell'oggetto.

L'interazione tra diversi oggetti avviene attraverso lo scambio di messaggi. In Java un "oggetto" è
un'istanza di una certa classe, ed esso può possedere alcuni metodi. Quindi un oggetto può ricevere un
certo messaggio se possiede un metodo che l'oggetto sender è in grado di chiamare.
3Per ogni oggetto è necessario sapere qual è il set dei messaggi che è in grado di ricevere.
Una classe è un'astrazione indicante un insieme di oggetti che condividono le stesse caratteristiche e
funzionalità. La classe definisce un TIPO, inoltre, in essa vengono definiti tutti i messaggi che ciascun
oggetto sarà in grado di ricevere mediante la definizione di metodi. Il comportamento di un oggetto è
descritto da una classe. Ogni classe ha:

  • Un identificatore.
  • Un insieme di attributi.
  • Un'interfaccia pubblica. L'insieme dei metodi (funzioni) che si possono invocare per manipolare
    l'oggetto.
  • Un'implementazione nascosta. Codice e variabili sono usati per implementare i metodi
    dell'interfaccia e non sono accessibili all'esterno della classe.

Una classe è a tutti gli effetti un tipo di dato (detto tipo riferimento), infatti, nella programmazione
orientata agli oggetti è sia possibile usare tipi di dato esistenti (int, float, char, ... ) detti tipi primitivi, sia definirne di nuovi tramite le classi.
Un programma Java è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi.

Riferimenti a oggetti

In Java, una "variabile oggetto" (cioè una variabile il cui tipo sia una classe) memorizza al proprio interno
solo la posizione dell'oggetto perché risulta più efficiente memorizzare soltanto la posizione dell'oggetto,
piuttosto che l'oggetto intero.
Un riferimento a un oggetto descrive la posizione dell'oggetto in memoria. E' possibile avere più
riferimenti ad uno stesso oggetto.

Variabili

Cibera Mente
Quando un programma manipola oggetti c'è bisogno di memorizzare gli oggetti stessi e i valori restituiti
dai loro metodi, in modo da poteri utilizzare anche in seguito. Per memorizzare valori in un programma
Java si usano le variabili.
Una variabile è una zona di memoria usata all'interno di un programma: ciascuna variabile ha un nome e
contiene un valore o può essere utilizzata per riferirsi ad oggetti. Quando si dichiara una variabile di solito
se ne specifica anche un valore iniziale, cioè la si inizializza attraverso l'operatore assegnamento (=).
Per convenzione i nomi delle variabili cominciano per lettera minuscola, mentre i nomi delle classi
cominciano per lettera maiuscola.
Le variabili locali sono variabili presenti dentro il metodo, la loro presenza nell'esecuzione del
programma termina alla fine dell'esecuzione del metodo. La variabile avrà influenza esclusivamente
all'interno dello scope dove è inserita. (Lo Scope è la sezione racchiusa tra le due parentesi graffe di
apertura e chiusura).
Le variabili di istanza, anche note come field o campi, sono dichiarate all'interno di una classe ma
all'esterno di ogni metodo, quindi hanno valore anche all'interno di ogni metodo. Le variabili di
istanza solitamente possono essere lette e modificate solo dai metodi della stessa classe. Se
esistessero due variabili con lo stesso identificativo le Variabili Locali prenderebbero la precedenza
sulle Variali di Istanza. Un'istanza di una variabile (non statica) continua ad esistere nella memoria di
un programma fino a quando esiste l'oggetto che la contiene. Lo specificatore di accesso private
In sintesi, utilizza le variabili locali quando hai bisogno di conservare dati temporanei all'interno di un metodo o di un blocco di codice. Utilizza le
variabili di istanza quando vuoi mantenere dati specifici per ogni oggetto della classe e condividerli tra i metodi dell'oggetto.
4

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.