Java/Classi e oggetti: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Riga 2: Riga 2:


== Introduzione ==
== Introduzione ==
Ogni oggetto dovrebbe rappresentare un elemento della vita reale e gli aspetti che lo identificano sono raggruppati insieme in un unico punto del programma, cioè la definizione della classe da cui è stato istanziato l'oggetto.

Una '''classe''' è un tipo di dato creato dal programmatore, ed è usata come "stampo" per la creazione di [[w:Programmazione orientata agli oggetti|oggetti]].

Un oggetto può essere considerato come un insieme di dati (memorizzati nei campi) e di [[Java/Metodi|operazioni]] (definite dai metodi). Ogni oggetto dovrebbe rappresentare un elemento della vita reale e gli aspetti che lo identificano sono raggruppati insieme in un unico punto del programma, cioè la definizione della classe da cui è stato istanziato l'oggetto.

Questo è in analogia con i tipi primitivi, per i quali ogni valore rappresenta un dato semplice (es. un numero) su cui sono definite delle operazioni (es. gli operatori aritmetici). Il vantaggio delle classi sui tipi primitivi è che esse permettono la definizione di un numero potenzialmente illimitato di operazioni. Ognuna delle operazioni è chiamata ''metodo'' ed ha un nome alfanumerico ad esso associato.<ref>In realtà il nome da solo non è sufficiente per identificare un metodo: gli elementi che lo identificano sono collettivamente chiamati ''signature'' del metodo e comprendono anche altri elementi. Si veda la [[Java/Oggetti#Overloading|sezione]] sull'overloading dei metodi.</ref>

=== In altre parole... ===
Il concetto di partenza è che è possibile raggruppare insieme una struttura dati e un insieme di operazioni definite su questa struttura dati. L'insieme viene chiamato "oggetto". La classe non fa altro che stabilire
*come è fatta la struttura dati in questione
*quali sono le operazioni che l'oggetto consente ad altri oggetti di invocare
*l'implementazione di queste operazioni.
Si dice che un oggetto è ''istanza'' di una classe se è quella la classe che definisce la struttura dati e le operazioni che appartengono all'oggetto in questione.

La struttura dati viene definita da un insieme di ''campi'': variabili "di proprietà" dell'oggetto che vengono allocate in memoria quando l'oggetto viene creato e deallocate quando l'oggetto viene ''garbage-collected''. Le operazioni, invece, sono chiamate ''metodi'' e sono costituite da una sequenza di istruzioni che possono eventualmente fare uso dei campi dell'oggetto o anche di altre operazioni definite da quello o da altri oggetti. Si dice che un metodo viene ''chiamato'' o ''invocato'' su un certo oggetto.


Ogni metodo è dotato di una ''signature'': tipo di ritorno, nome del metodo e lista di argomenti. Nella definizione del metodo sono presenti anche altri metadati, ma quelli che distinguono univocamente un metodo tra gli altri di una certa classe (la ''[[w:it:Firma (programmazione)|signature]]'', appunto) sono questi.
Ogni metodo è dotato di una ''signature'': tipo di ritorno, nome del metodo e lista di argomenti. Nella definizione del metodo sono presenti anche altri metadati, ma quelli che distinguono univocamente un metodo tra gli altri di una certa classe (la ''[[w:it:Firma (programmazione)|signature]]'', appunto) sono questi.

Versione delle 11:10, 9 ott 2011

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazione - Specifica di linguaggioJava/Tipi di dato - Libreria standardJava/Comunicazione seriale


Introduzione:     IntroduzioneJava/Introduzione   •   Procurarsi il JDKJava/Procurarsi il JDK
Il linguaggio:     Dal sorgente all'esecuzioneJava/Dal sorgente all'esecuzione   •   Il linguaggioJava/Il linguaggio   •   Programmazione ad oggettiJava/Programmazione ad oggetti
Aspetti avanzati:     Thread e parallelismoJava/Multithreading   •   Interblocco ricontrollatoJava/Interblocco ricontrollato   •   JavadocJava/Javadoc
Appendici:     EserciziJava/Esercizi   •   La macchina virtualeJava/La macchina virtuale   •   Errori e mitiJava/Errori e mitiTrucchi e consigliJava/Trucchi e consigli


Introduzione

Ogni oggetto dovrebbe rappresentare un elemento della vita reale e gli aspetti che lo identificano sono raggruppati insieme in un unico punto del programma, cioè la definizione della classe da cui è stato istanziato l'oggetto.

Ogni metodo è dotato di una signature: tipo di ritorno, nome del metodo e lista di argomenti. Nella definizione del metodo sono presenti anche altri metadati, ma quelli che distinguono univocamente un metodo tra gli altri di una certa classe (la signature, appunto) sono questi.

Un campo o metodo di una classe può essere statico o no. Un membro statico si differenzia sintatticamente da uno di istanza per la presenza della parola-chiave static nella definizione. Un membro di istanza "appartiene" alle istanze della classe che lo definisce, nel senso che gli altri oggetti del programma chiamano il metodo o usano il campo appartenente alla singola istanza specifica. Un membro statico, invece, non appartiene a un certo oggetto, ma piuttosto alla classe in cui è definito.

La presenza dei membri statici permette di ottenere qualcosa di simile alle variabili globali e alle funzioni dei linguaggi procedurali, come il C. In alcuni casi i membri statici sono indispensabili, ma farne un uso eccessivo significa allontanarsi dall'aspetto object-oriented del Java ed è sconsigliato. In Java non si parla di funzioni, ma sempre e solo di metodi (anche quando sono statici).

Sintassi

La classe ha lo scopo di delineare le proprietà e le caratteristiche degli elementi che ci servono. Questi elementi possono poi essere creati realmente (istanziati) e diventano così “oggetti”: le istanze della classe sono gli oggetti. La classe è un po' come un modello di qualcosa e l'oggetto è questo qualcosa realizzato concretamente. Gli elementi che compongono la classe possono essere: tipi primitivi, metodi, costruttori, oggetti di altre classi, classi stesse. Questi elementi sono tutti racchiusi in un contenitore (la classe) “class”. Vi è quindi la classe e gli oggetti: sono due cose diverse. Grazie all'esistenza delle classi possiamo creare gli oggetti. Gli oggetti sono allocati in memoria dalla JVM.

Per esempio, Mario è un'istanza della classe Dipendente, ossia un oggetto di tipo Dipendente.

Per creare una classe devo usare la parola chiave class con questa sintassi:

public class Esempio {
/*
variabili e costanti...
metodi e costruttori...
cicli e controlli di flusso...
oggetti di classi e classi stesse...
*/
}

la classe Dipendente potrebbe essere


public class Dipendente {
    public int stipendio;
    public String valuta;
    public String nome, cognome;
    public void promuovi() {
     //promuovo il dipendente aumentando del 10% lo stipendio
        this.stipendio=this.stipendio*(1.1);
    }
}

Si noti che dentro la classe abbiamo definito delle variabili che rappresentano le caratteristiche (dette attributi) di un dipendente.

Si riporta l'esempio funzionante del capitolo "Primo programma" della classe HelloWorld:

public class HelloWorld {
    public static void main (String args[]) {
        System.out.println("Hello, world!");
    }
}

È convenzione che i nomi delle classi comincino con la maiuscola, ed è bene rispettare questa prassi, per la leggibilità del codice, anche se non è obbligatoria.

Note