Paradigmi di programmazione

In parallelo con i linguaggi di programmazione, si sono sviluppati vari paradigmi di programmazione:
  • Programmazione imperativa
  • Programmazione dichiarativa (funzionale, logica, algebrica)
  • Programmazione orientata ad oggetti (Object Oriented programming)
Normalmente un linguaggio fornisce costrutti e meccanismi per programmare in uno o più di questi paradigmi
 
Pascal, Fortran, Cobol, C
Imperativo
ML, Lisp, Haskell, Scheme
Dichiarativo (funzionale)
Prolog
Dichiarativo (logico)
Smalltalk
OO
C++, Java, Delphi
Imperativo + OO
Clos, Zeta-Lisp
Funzionale + OO

Tale suddivisone non è rigida: ad esempio, le versioni iniziali del sistema operativo del Macintosh furono scritte in Pascal, ma in stile OO




La programmazione orientata ad oggetti

Nella programmazione imperativa, l'enfasi viene posta nella progettazione e nella scrittura del procedimento con il quale, a partire dai dati in ingresso, si producono i risultati.

Nella programmazione orientata ad oggetti, l'enfasi viene posta nella progettazione di un modello del dominio di applicazione. Un oggetto è una rappresentazione di un oggetto del mondo reale, o di un concetto.

Nella fase di progettazione si individuano gli oggetti rilevanti, e per ogni oggetto si identifica la sua struttura e le sue funzionalità. Ogni oggetto ha un proprio stato, e gli oggetti interagiscono quando un oggetto attiva una funzionalità di un altro oggetto. L'effetto che ne consegue può essere un cambio di stato, la creazione di altri oggetti, la attivazione di altre funzionalità dello stesso oggetto o di altri oggetti.

Gli oggetti sono raggruppati in classi: ogni classe rappresenta un insieme di oggetti simili per struttura e funzionalità. La relazione di sottoinsieme viene modellata con la relazione di ereditarietà tra le classi.


Una computazione si sviluppa come una sequenza di attivazioni di funzionalità di oggetti.




Programmazione OO in Java

Java fornisce costrutti per realizzare tutti i concetti menzionati:
oggetti
instanze di classe (instances)
classi
classi (classes)
struttura
  variabili di istanza (instance variables
funzionalità
metodi (methods)
  attivazione di funzionalità 
chiamata di metodo (method call)
creazione di oggetti
primitiva new
ereditarietà
relazione extends




Uso di oggetti: spostare un rettangolo

Vogliamo scrivere un programma che: - Crea un rettangolo e stampa il suo stato
- Sposta il rettangolo
- Stampa il nuovo stato
Abbiamo bisogno di una classe i cui oggetti rappresentano rettangoli. Prima di scriverla, cerchiamo tra le classi di JDK. Lì troviamo la classe java.awt.Rectangle: questa è la sua documentazione [locale, Medialab, Sun].
 

Lo stato di ogni rettangolo è determinato da quattro variabili: x, y, width, height




Creazione di oggetti

Gli ogetti si creano (costruiscono) con la primitiva new.
 
new Rectangle(5, 10, 20, 30);  // crea istanze
new Rectangle(45, 0, 30, 20);  //  di Rectangle
new Rectangle(35, 30, 20, 20);

Per far riferimento a un oggetto, si può usare una variabile di classe:
 
Rectangle cerealBox; // dichiarazione di variabile

cerealbox = new Rectangle( 5, 10, 20, 30); // creazione e assegnamento




Il programma MoveRectangle.java

import java.awt.Rectangle;

public class MoveRectangle{
   public static void main(String[] args){
      Rectangle cerealBox = new Rectangle(5,10,20,30);
      System.out.println(cerealBox);
      cerealBox.translate(15, 25);
      System.out.println(cerealBox);
   }
}

  • Le classi sono definite in  package
  • Se si vuole utilizzare una classe, occorre importarla (oppure importare il package che la contiene)
import java.awt.Rectangle; 

La classe Rectangle del package java.awt definisce vari metodi, tra i quali translate, che somma gli argomenti alle coordinate x e y
 




Documentazione on-line di Java (1)

Java si è sviluppato in parallelo alla esplosione di Internet. Non è sorprendente che nel Web si trovi moltissima documentazione che riguarda il linguaggio.

The Java Tutorial
È la introduzione classica a Java, mantenuta dalla Sun Microsystem. Presenta tutto il linguaggio, a partire dagli aspetti basici sino alle estensioni più complesse.
È strutturato in trails, cioè gruppi di lezioni: ad esempio Getting Started, ..., Writing Applets, ..., Security in JDK 1.2, ...

Molto utile per rispondere a domande come:

  • Cosa sono gli applet 
  • Quali sono i concetti basici di una interfaccia grafica?
  • Come si manipolano gli archivi in formato JAR?
Link Sun: http://java.sun.com/docs/books/tutorial/index.html
Link Medialabhttp://medialab.di.unipi.it/doc/tutorial/index.html
(ATTENZIONE: versione del May 31, 2000)