Structuur van computer programma's II Opgave project indexer

Structuur van computer programma's II Opgave project indexer

Dirk Vermeir
Departement Informatica
Faculteit Wetenschappen
Vrije Universiteit Brussel

Date: 2001/11/08 14:42:56

Contents

1  Inleiding: indexer
2  Achtergrond: client-server
3  Opgave: indexer en ffiles
4  Functionele eisen indexer
    4.1  Aanroepen, configuratie
    4.2  Het index bestand
    4.3  Indexer protocol
5  Functionele eisen ffiles
6  Niet-functionele eisen
7  Vragen
8  Indienen

1  Inleiding: indexer

(Deze tekst is ook beschikbaar als een postscript bestand stru2-2001.ps. dat bvb. op wilma kan afgedrukt worden).

Indexer is een server programma dat kan gebruikt worden om:

  1. een index file op te bouwen voor een aantal tekst bestanden,
  2. snel een bestand terug te vinden waarvan de inhoud voldoet aan een aantal criteria, uitgedrukt als een ``query''

Een en ander is georganiseerd als een client-server systeem bestaande uit 2 programma's:

2  Achtergrond: client-server

De programma's maken gebruik van de normale internet protocollen en standaarden: tcp/ip,dns. Zeer summier:

Voor het netwerk aspect kan gebruik gemaakt worden van het dvnet pakket dat o.a. een klasse Socket (voor clients) en SocketServer (voor servers definieert). Omdat Socket afgeleid is van iostream is het sturen en ontvangen van gegevens via een netwerkverbinding heel makkelijk.

De directorydemo bevat een volledig uitgewerkt voorbeeld van een ``echo server'', dit is een server die elke lijn gestuurd door een client terugstuurt, na de tekst te hebben omgezet naar hoofdletters.

3  Opgave: indexer en ffiles

  1. Maak een server programma ``indexer'' en een client programma ``ffiles'' die voldoen aan de onderstaande functionele1 en niet-functionele2 eisen (``requirements'').
  2. Beschrijf kort uw ontwerp in een apart document; waarvan u een afdruk bezorgt aan het secretariaat van de vakgroep vóór de uiterste indiendatum.

4  Functionele eisen indexer

4.1  Aanroepen, configuratie

Het programma kan op de volgende manier opgeroepen worden

indexer naam-van-configuratie-file

Het configuratie bestand bevat een aantal lijnen van de vorm naam=waarde waarbij naam en waarde één van de betekenissen uit tabel 4.1 kan hebben

naam waarde
index volledig pad naar index file
portnr nummer van de poort gebruikt door de server
wordlength max lengte van een woord
ignore volledig pad naar file met te schrappen woorden
logfile volledig pad naar logfile

Table 1: Configuratie elementen

4.2  Het index bestand

4.3  Indexer protocol

De server accepteert bevelen (via het netwerk) met een syntax zoals getoond in tabel 4.3.

bevel =add volledige-pad-naam
|query [woord | zin ]*
|save
|stop
;
zin =" woord woord * "
;

Table 2: Bevelen aan de server

5  Functionele eisen ffiles

Het programma kan op de volgende manier opgeroepen worden

ffiles host poort bevel

waarbij bevel de vorm beschreven in tabel 4.3 heeft. Merk op dat bij een ``query'' bevel, de hele query het best tussen single quotes kan geplaatst worden, om interpretatie door de shell te vermijden.

ffiles localhost 2002 query 'student structuur2 "niet goed" '

In principe stuurt ffiles het bevel gewoon door naar de server op de gegeven poort en host machine. Het antwoord wordt gecopieerd naar standaard output (behalve de lege lijn op het einde, bij het antwoord op een query bevel). De exit status van ffiles komt overeen met het succes van de bevelen die naar de server werden gestuurd.

De interpretatie van het add bevel is echter verschillend: als het argument van add een directorynaam is dan zullen alle tekstbestanden in de directory geindexeerd worden (het is de taak van ffiles om een aantal add bevelen naar de server te sturen). Hierbij kan bvb. gebruik gemaakt worden van de Directory klasse zoals gedefinieerd in de dvutil library.

6  Niet-functionele eisen

  1. Het programma moet volledig en uitsluitend in C++ geschreven worden.
  2. Het programma moet gebaseerd zijn op een object-georienteerd ontwerp. Functies die langer zijn dan 30 lijnen zullen met argwaan worden bekeken.
  3. Het ontwerp moet zodanig zijn dat delen zonder moeite herbruikbaar zijn. Een voor de hand liggende herbruikbare klasse is een filter stream (zie de website van het boek) die enkel woorden leest.

  4. Het programma moet correct werken op wilma.
  5. Enkel de C++ (of C) standaard library en de dvnet en dvutil libraries mogen gebruikt worden.
  6. Eigen implementaties van containers zijn niet toegestaan, enkel standaard library containers zoals map, set, vector, mogen gebruikt worden.
  7. De source (C++) bestanden dienen de suffix ``.cc'', ``.C'' of ``.cpp'' te gebruiken. De ``header files'' met declaraties dienen de suffix ``.h'' te gebruiken.
  8. Alle source bestanden, samen met een ``Makefile'', dienen zich in een directory ``structuur2/project2001'' te bevinden. De volgende reeks van bevelen zal resulteren in correct uitvoerbare programma's ``indexer'' en ``ffiles'' in dit directory:
    	make clean
    	rm -f indexer ffiles *.o
    	make all
    	
  9. Het programma moet robuust zijn. Dit wil zeggen dat het ook een redelijke actie moet ondernemen indien de input extreem of foutief is.

7  Vragen

8  Indienen

De uiterste indiendatum (de source code en Makefile worden automatisch opgehaald uit het directory $HOME/structuur2/project2001, zie punt 8 in sectie 6) is 31 maart 2002, 23:00.

Footnotes:

1 Functionele eisen leggen vast wat het programma moet doen.

2 Niet-functionele eisen leggen vast aan welke andere voorwaarden het programma moet voldoen, bvb. onder welk operating system het moet werken, welke programmeertalen of bibliotheken mogen gebruikt worden, etc.


File translated from TEX by TTH, version 2.32.
On 28 Dec 2001, 19:45.