Anteprima
Vedrai una selezione di 3 pagine su 9
Appunti di Programmazione orientata agli oggetti e Java Pag. 1 Appunti di Programmazione orientata agli oggetti e Java Pag. 2
Anteprima di 3 pagg. su 9.
Scarica il documento per vederlo tutto.
Appunti di Programmazione orientata agli oggetti e Java Pag. 6
1 su 9
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Vantaggi dell'OOP

L'approccio orientato agli oggetti semplifica:

●​ Creazione di applicazioni complesse: Oggetti progettati e realizzati separatamente

(anche da sviluppatori diversi, a patto di aver definito le interfacce).

●​ Manutenzione: Si può intervenire solo sugli oggetti coinvolti in caso di errori o

miglioramenti.

2. Costrutti Fondamentali di Java

Linguaggio Java

●​ Creato da Sun Microsystems e presentato ufficialmente nel 1995.

●​ Obiettivo principale: portabilità ("Write once, run everywhere").

●​ Schema di Traduzione: Il codice sorgente Java viene compilato in bytecode, che

poi viene eseguito dalla JVM (Java Virtual Machine). La JVM è specifica per ogni

piattaforma, rendendo il bytecode portabile. Le versioni più recenti della JVM usano

la compilazione JIT (Just-In-Time).

Struttura di un Programma Java

●​ Composto da un insieme di classi.

●​ Ogni classe va scritta in un file di testo con il nome della classe e l'estensione

".java".

●​ Una delle classi deve contenere un metodo speciale, chiamato "main", da cui inizia

l'esecuzione del programma.

Modificatori di Accesso

Controllano la visibilità di classi, attributi e metodi:

public:

●​ Accessibile da ogni altra classe.

private:

●​ Accessibile solo da istruzioni di metodi della sua classe. Utile per

l'incapsulamento dello stato dell'oggetto.

protected:

●​ Livello intermedio di accesso, visibile nel package e nelle sottoclassi.

●​ Default (nessun modificatore): Accessibile solo da classi del suo stesso package.

Variabili

Contenitori che possono memorizzare valori di uno specifico tipo di dato.

Tipi di Dato

●​ Tipi Primitivi: Insieme predefinito e non estendibile, modellano dati:

short, int, long);

○​ Numerici: interi (byte, in virgola mobile (float,

double).

○​ Caratteri: (char).

○​ Booleani: (boolean). Sono manipolati più efficientemente degli oggetti.

●​ Tipi Riferimento: Associati alle classi, i loro valori sono riferimenti (indirizzi) ad

oggetti. null:

○​ Letterale Valore riferimento costante che indica che una variabile non

referenzia alcun oggetto.

Classificazione in Base alla Posizione nel Codice

●​ Variabili di Istanza: Dichiarate all'interno del corpo della classe ma fuori dai metodi

private).

(tipicamente Rappresentano la memoria di un oggetto e sono uniche per

ogni istanza. Il loro ciclo di vita coincide con quello dell'oggetto a cui appartengono.

●​ Variabili di Classe (Statiche): Simili alle variabili di istanza, ma dichiarate con la

static.

parola chiave Ne esiste un'unica copia per la classe, non una per ogni

oggetto. Il loro ciclo di vita coincide con quello della classe. Si riferiscono tramite il

NomeClasse.nomeVariabileStatica).

nome della classe (es.

●​ Variabili Locali: Dichiarate all'interno dei metodi. Sono visibili solo all'interno del

metodo in cui sono definite e vengono allocate e deallocate con il record di

attivazione del metodo. Non vengono inizializzate con valori di default dalla JVM.

●​ Parametri Formali: Variabili usate per passare dati di input a un metodo o

costruttore. Sono un caso particolare di variabili locali, la loro esistenza è limitata al

metodo.

Scope (Campo di Visibilità)

Indica in quali porzioni di codice una variabile può essere richiamata. Le variabili di istanza e

di classe sono visibili in tutti i metodi della classe; le variabili locali sono visibili solo nel

metodo in cui sono definite.

Costruttori

Metodi speciali usati per creare e inizializzare lo stato di un oggetto.

●​ Hanno sempre lo stesso nome della classe.

void).

●​ Non hanno tipo di ritorno (nemmeno

public static.

●​ Possono essere (tipicamente) ma non

new

●​ La parola chiave è usata per invocare un costruttore e creare un oggetto,

restituendone un riferimento.

●​ Se non si definisce un costruttore, la classe ne viene dotata automaticamente di uno

di default (senza parametri e non modifica lo stato).

this():

●​ Usato all'interno di un costruttore per richiamare un altro costruttore della

stessa classe (es. costruttore di copia).

Metodi

Definiscono un servizio che un oggetto può offrire.

●​ Sono definiti da un'intestazione (nome, parametri formali, tipo di ritorno) e un corpo

(implementazione).

●​ Il prototipo di un metodo include nome, parametri formali e tipo di ritorno.

●​ La signature (firma) include nome del metodo e la lista dei suoi parametri. In una

classe non possono esserci due metodi con la stessa signature (per evitare

ambiguità).

●​ Invocazione: Chiedere a un oggetto di eseguire un suo metodo, inviandogli un

messaggio. Si usa la sintassi

<riferimento_oggetto>.<nome_metodo>(<parametri>).

●​ Passaggio di parametri: Sempre per valore in Java.

this:

●​ Parola chiave che si riferisce all'oggetto corrente su cui è stato invocato un

metodo o un costruttore.

return:

●​ Usata in metodi che dichiarano di restituire un valore; causa la terminazione

immediata del metodo.

●​ Metodi di accesso (getter): Accedono allo stato di un oggetto in lettura (non lo

modificano).

●​ Metodi di modifica (setter): Modificano lo stato di un oggetto.

●​ Metodi Statici (di classe): Servizi offerti dalla classe stessa, vanno invocati

NomeClasse.nomeMetodo()), non su un'istanza.

direttamente sulla classe (es.

this implicito.

Non hanno un riferimento

●​ Overloading: Più metodi possono avere lo stesso nome purché abbiano una

signature diversa (diverso numero o tipo di parametri). Il tipo di ritorno non fa parte

della signature per l'overloading.

Classi Wrapper

java.lang,

Nel package forniscono classi che rappresentano i tipi di dati primitivi (es.

Integer int, Double double).

per per

●​ Ogni oggetto wrapper "incarta" il valore primitivo da rappresentare, che costituisce il

suo stato.

●​ Sono immutabili (il loro stato non può essere cambiato dopo la creazione).

●​ Usate per creare collezioni di dati primitivi.

●​ Autoboxing: Meccanismo automatico che agevola il passaggio tra dati wrapper e

primitivi.

Classe String

●​ Modella sequenze di caratteri.

String

●​ Gli oggetti sono immutabili. new.

●​ Possono essere creati usando letterali stringa (tra apici doppi) o con l'operatore

length(), charAt(), compareTo(), indexOf(), split().

●​ Metodi comuni:

Classe Math

Contiene metodi e costanti statiche per operazioni matematiche. Ha un costruttore privato

per impedirne l'istanziazione, offrendo tutti i servizi tramite metodi statici.

Array n

Contenitori per memorizzare elementi dello stesso tipo.

0 n-1.

●​ Ogni elemento è associato a un indice da a

length

●​ Hanno un attributo pubblico che memorizza la loro dimensione; è di sola

lettura.

●​ La dimensione di un array non può essere cambiata dopo la creazione.

ArrayIndexOutOfBoundException

●​ L'accesso a un indice non valido causa a

runtime.

●​ Gli elementi vengono inizializzati con il valore di default del loro tipo alla creazione.

●​ Letterali array: Permettono di creare e inizializzare array contestualmente alla

dichiarazione.

●​ La copia di un array implica la creazione di un nuovo array e la copia elemento per

elemento, non solo del riferimento.

●​ Array bidimensionali: Array i cui elementi sono a loro volta array (es. matrici).

Possono essere "frastagliati" (righe con lunghezze diverse).

Tipi Generici (Generics)

Permettono di definire classi/interfacce parametricamente rispetto ad un altro tipo

riferimento. E Coppia<E>) String

●​ Tipo parametro (es. in e Tipo argomento (es. in

Coppia<String>).

●​ Vantaggi: Maggiore sicurezza (controlli sul tipo a compilazione) e eliminazione di

cast espliciti.

●​ Restrizioni: Non possono essere usati per campi statici, creare array o istanziare

oggetti del tipo parametro.

●​ Tipi parametro vincolati: Permettono di restringere i tipi che possono essere usati

<E extends Number> <E super Number>).

come tipi argomento (es. o

?):

●​ Segnaposto (wildcard, Indica un tipo argomento non specificato, può essere

extends T>, <? super T>) o non vincolato (<?>).

vincolato (<?

Java Collections Framework (JCF)

Fornisce un insieme di interfacce e classi per gestire collezioni di oggetti.

●​ Strutture Dati Astratte: Definiscono solo le operazioni possibili, non come sono

realizzate (es. Pila).

●​ Strutture Dati Concrete: Realizzazioni delle strutture dati astratte.

Collection<E>:

●​ Interfaccia generica che rappresenta una collezione di oggetti,

Map).

super-tipo di quasi tutte le strutture dati astratte del JCF (esclusa

size(), isEmpty(), contains(Object o), add(E e),

○​ Metodi comuni:

remove(Object o). equals.

L'uguaglianza è basata sul metodo

Iterator<E>:

●​ Oggetto che permette di scandire gli elementi di una collezione.

hasNext(), next().

Metodi: Collection Map):

●​ Principali Interfacce (che estendono o

List<E>:

○​ Sequenza ordinata di elementi. Permette duplicati.

ArrayList LinkedList

Implementazioni comuni: (array) e (liste collegate).

Set<E>:

○​ Insieme (matematico), non contiene duplicati. Implementazioni

HashSet TreeSet

comuni: (tabelle hash), (alberi bilanciati),

LinkedHashSet (tabelle hash e liste collegate).

Queue<E>:

○​ Coda, elementi estratti in ordine (spesso FIFO - First In First Out).

Deque<E> Queue,

○​ (Double Ended Queue): Estende permette operazioni su

Queue Deque: ArrayDeque,

testa e coda. Implementazioni comuni per e

LinkedList.

Map<K,V>: Collection.

○​ Non estende Memorizza coppie (chiave, valore),

recupero efficiente del valore tramite chiave. Le chiavi sono uniche, i valori

possono essere duplicati.

size(), isEmpty(), get(Object key), put(K

■​ Metodi comuni: containsKey(Object key),

key, V value),

containsValue(Object value), keySet(), values(),

entrySet(). HashMap TreeMap

■​ Implementazioni comuni: (tabelle hash), (alberi

LinkedHashMap (tabelle hash e liste collegate).

bilanciati),

●​ Esistono interfacce che estendono le precedenti per aggiungere funzionalità, come

SortedSet<E> SortedMap<K,V>

e che mantengono gli elementi ordinati.

3. Gestione della Memoria in Java

La memoria in Java è gestita principalmente in tre aree:

●​ Pila di Attivazione (Stack): Area di memoria gestita secondo la politica LIFO

(Last-In-First-Out).

○​ Record di Attivazione: Blocchi

Dettagli
A.A. 2025-2026
9 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher informaticagalaxys2 di informazioni apprese con la frequenza delle lezioni di Fondamenti informatica java e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Perugia o del prof Di Giacomo Emilio.