137852 Letture

Corso Java - Prima lezione

Iniziamo con questo articolo la nostra panoramica su uno dei linguaggi di programmazione più famosi del mondo, Java. In questa prima puntata ci proponiamo di chiarire alcuni concetti di base, necessari per avere una discreta comprensione non solo del linguaggio in senso stretto, ma anche delle sue peculiarità rispetto ad altri linguaggi e delle potenzialità che Java offre.

Prima di cominciare, potete trovare qui informazioni circa le risorse che impiegheremo durante questi articoli, gli scopi e una breve storia del linguaggio.

Che cos'è Java? Java è un linguaggio di programmazione orientato agli oggetti con una struttura ibrida di compilazione e interpretazione. Cercheremo adesso di fare chiarezza su questi due punti fondamentali.

Java è un linguaggio di programmazione orientato agli oggetti.
Java fa parte di quella generazione di linguaggi di programmazione che fanno riferimento al cosiddetto "paradigma della programmazione ad oggetti". Di questa famiglia fanno parte la stragrande maggioranza dei linguaggi attualmente più utilizzati (da C++ a VB), delineando un netto distacco rispetto alla programmazione imperativa, particolarmente diffusa fino a qualche anno fa (che aveva nel linguaggio C l'esponente forse più celebre, se non altro per l'associazione immediata col kernel di Unix).
Fondamentalmente il paradigma della programmazione ad oggetti si fonda sui seguenti cardini:
1. Il metodo ed il linguaggio devono avere la nozione di classe come loro concetto principale
2. Ogni cosa è un oggetto, e gli oggetti sono definiti dalle classi
3. Gli oggetti interagiscono tra loro esclusivamente tramite i metodi
4. Le classi dovrebbero essere i soli moduli (vedremmo che questo in Java non è vero)
5. Il linguaggio deve permettere il meccanismo dell'ereditarietà, eventualmente controllandolo

Per i nostri scopi è necessario capire subito il significato dei primi tre punti che potrebbero risultare oscuri a chi non ha esperienza di programmazione.
In un linguaggio di programmazione ad oggetti il programma vero e proprio è dato da una collezione di oggetti che interagiscono tra di loro tramite i cosiddetti messaggi, ovvero l'esecuzione di una determinata azione è richiesta sempre da un determinato oggetto (in realtà in Java esiste un'altra via che vedremmo più avanti).


Pensate ad un televisore: si tratta di uno strumento che, per esempio, sa accendersi, sa sintonizzarsi su canali specifici, sa spegnersi. Ogni azione è però richiesta esplicitamente da parte dell'utente, servendosi di un altro oggetto (il telecomando).
In pratica, è il telecomando che invia al televisore un messaggio comunicandogli quale azione deve essere intrapresa. Il televisore poi è in grado di conoscere il suo stato attuale ossia le proprie proprietà (il televisore è acceso o spento? Su quale canale è sintonizzato?). Analogamente, anche gli oggetti software dialogano tra loro per mezzo di messaggi ed ogni oggetto è caratterizzato da un insieme di proprietà che ne descrivono lo stato.

I linguaggi di programmazione più moderni fanno uso degli oggetti software per rendere la scrittura dei programmi più semplice e più intuitiva. Non è richiesta, infatti, al programmatore la conoscenza sul funzionamento "interno" dell'oggetto software (chi utilizza il televisore non deve sapere come sono strutturati i circuiti elettronici che gli permettono di funzionare...): gli è sufficiente apprendere le modalità per colloquiare con lui, ossia i messaggi che possono essere inviati e l'effetto di ogni singolo messaggio (semantica). Questa importante caratteristica prende il nome di incapsulamento.

In pratica se vogliamo scrivere un programma che cosa dobbiamo fare? Dobbiamo scrivere una classe per ogni tipo di oggetti (nel nostro caso una classe "televisore" ed una classe "telecomando"): le classi sono infatti il modello degli oggetti che intendiamo usare.

Facendo un altro esempio, il progetto di un'abitazione rappresenta la classe ma in se stesso non è veramente una casa. Solo una volta che la casa sarà stata costruita avremo un oggetto di tipo "casa" così come l'avevamo progettato; è solo a questo punto che l'oggetto esiste e - dal nostro punto di vista - occupa memoria del calcolatore ed è accessibile tramite un identificatore.

Notate che tuttavia esiste una certa relazione stretta tra la casa e il suo progetto, poiché per costruirne un'altra completamente diversa abbiamo bisogno di un altro progetto. In generale, quindi, nella classe non è riservata memoria per i dati, cosa che invece viene fatta quando si istanziano uno o più oggetti.

Tornando al nostro esempio del televisore dopo aver definito le classi che ci interessano dovrebbe essere a questo punto chiaro che abbiamo bisogno di istanziare ("costruire") un televisore ed un telecomando (impareremo presto come si fa in Java...) e usare l'oggetto telecomando per dare "ordini" al televisore. Questi ordini vengono impartiti tramite l'invocazione dei metodi sui due oggetti, ed è infatti solo all'interno dei metodi che è permesso l'uso di istruzioni vere e proprie (è solo all'interno dei metodi che avviene la computazione).

Rimane ancora da capire come deve essere costruita logicamente la classe dal punto di vista dei dati da memorizzare. Pensate al progetto della casa: esso deve contenere il numero e la disposizione di porte, finestre, muri, le loro caratteristiche (spessore, materiale, ecc...) e tutta una serie di altri dettagli. Allo stesso modo ci dovremmo comportare col televisore e il telecomando. Come già detto in precedenza, il televisore deve avere memorizzato da qualche parte il suo stato attuale (on/off), il suo canale corrente e quanti più dettagli volete, così come il telecomando deve avere il numero e la disposizione dei tasti, per esempio.
Com'è facile comprendere dagli esempi illstrati sinora, la programmazione ad oggetti ha un alto livello di astrazione rispetto alla macchina e può risultare più ostica almeno all'inizio. L'evidente vantaggio è che una volta compreso il meccanismo potete pensare al problema da risolvere nei termini del problema stesso (visto che nel mondo reale esistono gli oggetti) e non nei termini della macchina su cui lo dovrete eseguire.


I punti 4) e 5) saranno più chiari man mano che andremo avanti, così come il meccanismo della definizione delle classi e quindi degli oggetti sarà più chiaro molto presto, non appena cominceremo a scrivere il nostro primo codice Java.


  1. Avatar
    Stefano906
    30/10/2009 17.12.33
    salve ho un piccolo problema con il jcreator istallato il programma in eseguzione mi dà il seguente errore:

    --------------------Configuration: <Default>--------------------
    Error : Invalid path, \bin\javac.exe -g -classpath E: -d E: E:\SommaArray.java

    Process completed.

    ho provato e riprovato a creare path e cose varie ma non sono riuscito nell'imprsa è la prima vola che mi cimento nella programmazione di java e ....
    sapete aiutarmi?

    grazie in anticipo dell'attenzione
Corso Java - Prima lezione - IlSoftware.it