Corso di Interfacce Utente - A.A. 2002-2003

PROGETTO DI LABORATORIO - DOCUMENTO 2

(Versione semplificata 29/5/03)

Descrizione del programma che implementa l'applicazione

Introduzione

Il programma e' composto da 5 classi java (contenute in 5 file):

  1. PairOfDouble implementa una coppia di coordinate double, serve per rappresentare punti e vettori
  2. ParticleType implementa un tipo di particelle
  3. Outcome ha due scopi: implementa l'esito dello scontro fra un tipo di particelle e un altro e pure la storia di una particella (cioe' la descrizione di che cosa le e' successo al precedente passo della simulazione)
  4. Particle implementa una particella
  5. WorkEnv implementa l'ambiente di lavoro con i tipi di particelle conosciuti, le regole che stabiliscono gli esiti degli urti, l'insieme di particelle correnti ecc.
Nel seguito sono documentate le variabili e funzioni pubbliche di queste 5 classi.

Nota: non tutte le funzioni vi saranno utili per sviluppare l'interfaccia, comunque qui per completezza sono state documentate tutte.

classe PairOfDouble

Le istanze di questa classe sono coppie di coordinate che rappresentano a seconda del contesto punti oppure vettori nel piano. I punti servono per le posizioni delle particelle, i vettori servono per le velocita' delle particelle.

Elementi appartenenti alla classe (static)

Costanti che definiscono l'orientamento di una terna di punti:

Funzioni relative agli orientamenti di terne di punti (il risultato e' uno fra LEFT, ALIGN, RIGHT):

Funzione che restituisce il punto medio del segmento che unisce i punti p1 e p2:

Elementi appartenenti ad ogni oggetto istanza della classe

Variabili che descrivono lo stato interno:

Costruttori:

Funzioni che agiscono sul punto o vettore:

classe ParticleType

Le istanze di questa classe sono tipi di particelle. Un tipo di particelle e' caratterizzato da:

Elementi appartenenti alla classe (static)

Costanti che definiscono il minimo e massimo raggio che un tipo di particella puo' avere:

Costanti che definiscono il massimo valore della velocita' a zero gradi e dell'incremento di velocita come fattore moltiplicativo rispetto al raggio della particella:

VARIAZIONE rispetto al documento della tappa 0:
l'incremento di velocita' per ogni grado in piu' non puo' superare 0.005 del raggio (si era detto 0.1, ma in realta' ho visto che la velocita' tendeva a diventare troppo grande...)

Elementi appartenenti ad ogni oggetto istanza della classe

Variabili che descrivono lo stato interno sono private, accessibili in lettura e scrittura solo mediante funzioni.

Costruttore:

Funzioni relative al nome di questo tipo di particelle:

Funzioni relative al raggio delle particelle di questo tipo:

Funzioni relative al fatto che questo tipo di particelle sia un composto oppure no:

Funzioni relative alla velocita' delle particelle di questo tipo:

classe Outcome

Questa classe definisce una serie di costanti che sono usate in due situazioni:

La classe e' intesa solo come portatrice di queste costanti. Non e' previsto abbia istanze.

Elementi appartenenti alla classe (static)

Costanti che descrivono sia gli esiti d'urto che le storie. Come esito d'urto si applicano solo le prime tre costanti. Come storia si applicano tutte. Sono:

Elementi appartenenti ad ogni oggetto istanza della classe

Variabili che descrivono lo stato interno:

Questa regola d'urto descrive che cosa accade a una particella di tipo pt1 quando urta una particella di tipo pt2. Ci sara' poi un'altra regola per descrivere che cosa succede a una particella di tipo pt2 quando urta una particella di tipo pt1.

Nota: gli esiti d'urto non sono necessariamente simmetrici. Per esempio, quando il tipo 1 e 2 si urtano, e' possibile che il tipo 1 sia riflesso (esito REFLECT) e il tipo 2 sia scisso (esito SPLIT). Solo l'esito della fusione (esito MERGE) e' simmetrico.

Il costruttore e' quello di default (senza argomenti). Poi bisogna inizializzare esplicitamente le variabili (che sono pubbliche!). Sulla regola non viene fatto alcun controllo di consistenza fino al momento in cui viene inserita nell'ambiente di lavoro.

classe Particle

Le istanze di questa classe sono singole particelle. Ogni particella e' caratterizzata da:

Elementi appartenenti alla classe (static)

Funzioni relative al calcolo di distanze:

Controlla se due particelle si urtano:

Elementi appartenenti ad ogni oggetto istanza della classe

Variabili che descrivono lo stato interno sono private, accessibili in lettura e scrittura solo tramite funzioni.

Costruttori:

Funzioni relative al tipo di questa particella:

Funzioni relative alla posizione (del centro della particella):

Funzioni relative alla direzione della velocita' di questa particella:

Funzioni relative alla storia di questa particella (che cosa le e' accaduto nell'ultimo passo di simulazione. I valori ammissibili della storia sono Outcome.REFLECT, Outcome.MERGE, Outcome.BORDER, Outcome.PLAIN:

Funzioni ausiliarie usate per simulazione (in particolare per la gestione degli urti):

classe WorkEnv

Un'istanza di questa classe e' un ambiente di lavoro. Un ambiente di lavoro e' caratterizzato da:

La classe estende (e' sottoclasse) della classe java Vector. La classe Vector e' una implementazione delle liste. WorkEnv usa se stesso come lista per memorizzare le particelle contenute nell'area di lavoro.

Costruttore:

Elementi appartenenti alla classe (static)

Costanti che denotano le quattro pareti dell'ambiente di lavoro (indicate coi nomi dei quattro punti cardinali):

Costanti che denotano la temperatura minima e massima ammesse in un ambiente di lavoro:

Costante che stabilisce il massimo numero di tipi di particelle che un ambiente di lavoro puo' conoscere:

Elementi appartenenti ad ogni oggetto istanza della classe

Variabili che rappresentano il contorno dell'ambiente di lavoro sono private, accessibili solo attraverso le funzioni.

Costruttore:

Funzioni relative alla temperatura:

Funzioni per gestire i tipi di particelle conosciuti:

Funzioni per gestire gli esiti degli urti:

Funzioni relative al rettangolo che definisce l'area di lavoro e a sue sotto-aree:

Funzioni relative alle particelle presenti nell'area di lavoro:

Funzioni relative alle velocita' delle particelle:

Funzioni relative alla simulazione:

Funzioni relative agli attrattori:

Altre funzioni di utilita':

Funzioni di lettura:

Funzioni di scrittura: