OOP – La programmazione orientata agli oggetti

Java é un linguaggio di programmazione orientata agli oggetti, vale a dirsi che la soluzione al problema concreto passa attraverso la definizione per astratto di una serie di oggetti che cooperando, raggiungono il risultato computazionale previsto.

L’oggetto

Secondo la definizione di Booch un oggetto é un elemento caratterizzato da uno stato, un comportamento e un’identità. Per stato si intende l’insieme di attributi e proprietà, per comportamento l’insieme dei suoi metodi. Con identità si intende il tipo e l’identificatore.

La classe

Con la parola classe si intende lo schema di costruzione degli oggetti. Viene definita attraverso la parola chiave class e laddove non altrimenti specificato essa gode di visibilità di default package, cioé e visibile da tutte le classi appartenenti allo stesso package. La sintassi di costruzione di una classe é la seguente:

class Identificatore {
    elenco attributi
    elenco metodi
}

Gli attributi di una classe possono essere dati primitivi o oggetti, e devono essere scritti prima dei metodi.

Le istanze di una classe

Con il termine istanziare si intende l’operazione attraverso la quale viene creato un oggetto a partire da una classe. Essa avviene attraverso l’operatore new che carica dinamicamente in memoria operando su di essa per riferimento (by reference).

La sintassi per istanziare un oggetto (NomeOggetto) di tipo NomeClasse é la seguente:

NomeClasse NomeOggetto = new nomeClasse( );

A partire da questo momento l’oggetto sarà una entità distinta tanto dalla classe da cui é stato costruito quanto dagli altri oggetti dello stesso tipo.

I metodi

I metodi svolgono una funzione analoga alle funzioni e possono dunque essere invocati allo scopo di determinare una variazione degli attributi dell’oggetto, potendo anche restituire un valore. Esso é costituito da:

  • una visibilità
  • un tipo
  • un nome ed un elenco di parametri (o argomenti) accettati
  • un blocco di istruzioni chiamati anche implementazione

Qualora il metodo non restituisca alcunché viene definito come void, mentre qualora emetta un risultato visibile all’esterno del metodo, la parola chiave return consente di proiettare all’esterno questo risultato, terminando l’esecuzione del metodo. La sintassi é la seguente:

scope tipo identificatore ( argomenti ) {
    istruzioni;
}

Il metodo main

Per poter essere eseguibile un programma deve sempre contenere una classe, detta classe principale, di tipo public, contenente un metodo main.

public class MioSoftware {
    public static void main( String [ ] args ){
        /.../
    }
}

Invocazione dei metodi e passaggio di argomenti

Il metodo può essere invocato solo qualora l’oggetto definito dalla classe sia stato istanziato, cioé deve essere esistente a livello logico. Una volta che l’oggetto é stato istanziato é possibile invocarne i metodi attraverso la seguente sintassi:

NomeOggetto.nomeMetodo(argomenti);

Gli argomenti passati possono essere sia tipi primitivi che oggetti, con la differenza che nel primo caso sono passati per valore (by value) nel secondo per riferimento (by reference), ne viene passato cioé un puntatore all’area di memoria che contiene l’oggetto.

La classe System

La classe System è un contenitore di diverse funzioni essenziali del linguaggio Java come la virtuale machine, le funzionalità di sicurezza e del sistema. Fornisce inoltre l’accesso alle funzioni di I/O del sistema:

  • IN: gli input (i dati che entrano)
  • OUT: gli output ( i dati che escono)
  • ERR: il canale dedicato agli errori

I Packages

I packages sono pacchetti di classi già pronte all’uso, contenute all’interno di un file con estensione .jar. Si tratta di librerie a disposizione del programmatore che possono essere incluse nel codice attraverso la parola chiave import. Il package java.lang é il più importante di Java e racchiude le classi fondamentali del linguaggio. Questo però, a differenza dei normali packages viene incluso anche senza che venga specificato.

//Utilizzare l’asterisco * per includere tutte le classi contenute in uno specifico pacchetto

import java.awt.*;

//Oppure specificare solo le classi di interesse, per risparmiare spazio e memoria

import java.awt.Frame;

Visualizzazione dei dati

L’output dei dati a video é disponibile attraverso le funzionalità presenti nella libreria di Java. Lo standard output é accessibile attraverso l’oggetto System.out

La classe System raccoglie alcune funzionalità di sistema, uno dei suoi attributi é out, un oggetto che contiene diversi metodi per produrre output.

Lettura dei dati

La lettura dell’input avviene mediante la classe InputStream contenuta in System. Il metodo readLine() della classe BufferedReader legge sequenze di caratteri che restituisce sotto forma di stringhe. La classe BufferedReader deve essere inizializzata fornendo un input, ad esempio System.in di classe InputStream. Si può istanziare un oggetto di classe BufferedStreamReader in questo modo:

InputStreamReader leggi = new InputStreamReader(System.in);

A questo punto, potremo istanziare BufferedReader con l’oggetto leggi, che ci metterà a disposizione il metodono readLine() in esso contenuto, come nel seguente caso:

BufferedReader input = new BufferedReader(leggi);

Sarà quindi possibile leggere una linea di testo istanziando il metodo readLine() dell’oggetto input:

input.readLine();

I commenti

Come in tutti i linguaggi di programmazione, anche in Java i commenti osservano la seguente sintassi:

  • Doppio slash // ad inizio commento
  • Slash e asterisco /* ad inizio commmento e */ a fine commento
  • Slash e doppio asterisco /** e **/ a fine commmento

Relativamente alla terza categoria ci sono i commenti Javadoc che permettono di scrivere la documentazione delle classi affinché possa essere letta da un browser web. La documentazione può essere generata con il comando javadoc seguito dal nome del file contenente la classe di cui si vuole generare la documentazione e supporta l’inserimento di informazioni specifiche come l’autore e la versione del software, come nel seguente esempio:

//**
* Nome classe

* Descrizione classe

*

* @author Luca Scandroglio

* @version 0.1

*/

Pubblicato da Luca Scandroglio

Sono un consulente tecnico informatico, un web designer e uno sviluppatore italiano. Aiuto le aziende a dotarsi degli strumenti tecnologici e digitali per superare le sfide del mercato di oggi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *