Fondamenti di Informatica I
Corso di Laurea in Ingegneria Informatica e Automatica

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.

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 seguente:

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