© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Composite

Vejledende løsninger
Opgaver

 

 

1 [Ikast Handelsskole: Datamatiker - Reeksamen i Programkonstruktion, 10/8-99: Opgave nr. 7]
  Der skal implementeres et design som er beskrevet i det følgende.
  Vi skal lave en meget simpel implementation af et file-system. At vi implementerer et file-system, skal forståes på den måde at vi laver noget, der låner strukturen fra et file-system. Det er ikke nødvendigt med noget kendskab til file-systemer som sådan.

I file-systemet kan der være filer og directories (også kaldet kataloger). I directories kan der være såvel filer som andre directories.

  Ét directory adskiller sig fra de andre ved at det ikke befinder sig i et andet directory. Dette directory kaldes "roden".
  Alle filer og directories har navne (vi vil i denne opgave kun acceptere navne bestående af 'a' til 'z', 'A' til 'Z', '0' til '9' og '.' (punktum). Der skelnes mellem store og små bogstaver), undtagen roden der ikke har noget navn.
  En file har en størrelse der angives numerisk. Et directory har ikke nogen størrelse i sig selv.
  Der skal i det følgende anvendes et Composite Pattern; hvor Composite-klassen er den klasse der bruges til at repræsentere et directory, som skal hedde Directory, og Leaf-klassen er den klasse der bruges til at repræsentere en file, som skal hedde File. Component-klassen betegnes i det følgende: Node.
   
1.1 Implementer klasserne Node, Directory og File ud fra det design, der er beskrevet ovenfor. I forbindelse med Composite-klassen kan du anvende LinkedList til at opbevare Component-objekterne.
   
1.2 Udvid klassen Directory så den har en metode insert, der kan bruges til at tilføje Component-objekter.
   
1.3 Foretag en udvidelse af implementationen, således at klasserne File og Directory får metoder toString, der returnerer en tekststreng der beskriver dem.
  Hvis der f.eks. er tale om en file, der hedder "test.txt" med størrelsen 3400 skal toString returnere tekststrengen:
 

"test.txt 3400"

  Hvis der modsat er tale om et diretory, der hedder "temp" skal toString returnere tekststrengen:
 

"[temp]"

   
  I det følgende skal vi implementere tre forskellige metoder der baserer sig på det Composite Pattern vi har brugt i vores implementation. For alle metoderne gælder der, at de skal arbejde rekursivt ned i den træ-struktur Component-objektet er rod i.
   
1.4 Lav en metode size, der returnerer størrelsen af Component-objektet. For et diretory gælder der, at dens størrelse er summen af størrelsen på dens filer og diretories.
   
1.5 Lav en metode findFile, der returner om der findes en file med et bestemt navn, der gives som parameter. Som nævnt skal metoden søge rekursivt ned i træ-strukturen fra Component-objektet.
   
1.6 Lav en metode list, der udskriver samtlige filer og diretories. Som nævnt skal metoden rekursivt udskrive samtlige filer og diretories ned igennem træ-strukturen fra Component-objektet.
   
1.7 Lav en test af din implementation. Testen skal opbygge en struktur med mindst 3 directories, med mindst en file i hvert diretory. Metoderne size, findFile og list skal testes på denne struktur.