Fondamenti di Informatica 1
Corso di Laurea in Ingegneria Informatica
Canale G-O, A.A. 2002/03

Esercitazione 13

Esercizio di esame


Si consideri la seguente specifica del tipo astratto Gruppo:

TipoAstratto Gruppo

Domini
Gruppo : dominio di interesse del tipo
Componente : dominio dei componenti del gruppo
Coppia(Gruppo,Gruppo) : dominio delle coppie formate da due gruppi

Funzioni
crea() $ \mapsto$  Gruppo
pre: nessuna
post: RESULT è un gruppo avente zero componenti
numComponenti(Gruppo g) $ \mapsto$  Intero
pre: nessuna
post: RESULT è il numero di componenti del gruppo g
aggiungiComponente(Gruppo g, Componente c) $ \mapsto$  Gruppo
pre: c non è presente nel gruppo
post: RESULT è il gruppo ottenuto da g aggiungendo il componente c
estComponente(Gruppo g, Componente c) $ \mapsto$  Boolean
pre: nessuna
post: RESULT è true se c è un componente del gruppo g, false altrimenti
ripartisci(Gruppo g) $ \mapsto$  Coppia(Gruppo,Gruppo)
pre: nessuna
post: RESULT è una coppia formata da due gruppi ottenuti da g ripartendo, in un modo qualsiasi, i componenti in due sottogruppi le cui dimensioni differiscono al più di 1.
FineTipoAstratto

Parte 1. Si scriva una classe Java Gruppo che realizzi il tipo astratto Gruppo, considerando che per riferirsi al tipo astratto Componente è necessario utilizzare la classe Componente che si suppone già realizzata, della quale però non è nota la definizione.

Nota: Si assuma che la classe Componente sia la realizzazione di un tipo astrazione di entità, e che quindi si possa utilizzare l'operatore "==" per verificare l'uguaglianza tra due componenti.

Soluzione: rappresentazione degli oggetti, scheletro della classe, classe Gruppo


Parte 2. Realizzare un metodo statico cliente della classe Gruppo dell'esercizio precedente, che dato un oggetto g di tipo Gruppo ed una lista lis di nodi aventi la forma

public class Nodo {
  public Componente info;
  public Nodo next;
}
verifichi se tutti i componenti nella lista lis fanno parte di g.

Soluzione


Nota: per compilare la classe Gruppo e verificarne la correttezza si utilizzi la seguente definizione della classe Componente.