Projekt 1 - wymagania szczegółowe i dodatkowe

Wymagania ogólne tego zadania

To zadanie we wszystkich trzech wariantach powinno zakończyć się utworzeniem dwóch elementów: modułu implementującego zadany ADT, oraz drivera pozwalającego uruchamiać różne warianty testowania funkcji ADT.

Moduł programowy ADT powinien być przygotowany w taki sposób, aby umożliwiał różnym programom realizację procedur takich jak podane w zadaniu. Powinien eksponować interfejs funkcji (publicznych) realizujących zadane procesy deklarując równocześnie struktury danych niezbędne do przekazania argumentów tym funkcjom, i odebranie wyników. Poza tym wszelkie szczegóły związane z implementacją tych funkcji powinny być ukryte wewnątrz modułu (prywatne). Moduł powinien zawierać pełną i dobrej jakości dokumentację, zwłaszcza części eksportowanej. Nie zawiera natomiast programu wykonywalnego.

Driver z założenia jest jednorazowym, przykładowym programem wykonywalnym, którego zadaniem jest: demonstracja działania funkcji modułu ADT, i umożliwienie możliwie wszechstronnego i pełnego przetestowania tych funkcji. Driver powinien przyjmować szereg parametrów zadawanych jako pozycyjne argumenty wywołania (argv[]). Szczegółowe wymagania dotyczące tych parametrów w każdym wariancie zadania omawiałem na zajęciach. Pewne dodatkowe szczegóły mogą pojawić się poniżej.

Zadanie w każdym wariancie należy przygotować w postaci pakietu uruchomieniowego i raportu. Dodatkowo, wykonanie tego projektu wymaga zaliczenia kamienia milowego zgodnie z opisem poniżej.

Kamienie milowe

W przypadku wyboru wariantu na ocenę 3 wystarczy oddać wykonane zadanie. Kamień milowy nie dotyczy tego wariantu.

W przypadku wyboru wariantu na ocenę 4 lub 5 należy wcześniej przygotować specyfikację planowanego modułu programowego, a następnie umówić się na spotkanie milestone z prowadzącym w jednym z terminów zajęć poprzedzających termin oddania zadania, i przedstawić planowane podejście do zadania. Część oceny za zadanie będzie przyznawana za przygotowanie tej prezentacji.

Prezentacja powinna zawierać przynajmniej specyfikację funkcjonalną planowanego modułu programowego. Ta specyfikacja w postaci pisemnej powinna być przysłana w systemie eportal przed umówionym spotkaniem z prowadzącym.

Parametry wywołania drivera

Proszę zadbać by program drivera umożliwiał testowanie z zastosowaniem argumentów wywołania zadanych zgodnie z poniższą specyfikacja. W szczególności ważna jest kolejność argumentów. Jeżeli ktoś nie zaprogramuje obsługi któregoś argumentu, to program powinien w miarę możliwości obsługiwać pozostałe argumenty odczytane z właściwych pozycji (i taka sytuacja powinna być odnotowana w pliku Readme.txt).

Gdyby ktoś zaimplementował dodatkowe parametry drivera to powinny one być pobierane z dalszych pozycji, i ich znaczenie opisane w raporcie oraz pliku Readme.txt. W przypadku wystąpienia parametru opcjonalnego jak INTERFACE, ten parametr powinien mimo wszystko wystąpić i mieć inną wartość, np. "-", a dodatkowe argumenty powinny występować na dalszych pozycjach.

Driver do zadania nr 1:

driver_zad1 number_of_elements ARRAY
driver_zad1 number_of_elements LIST

Driver do zadania nr 2:

tylko utworzenie i napełnienie kolejki, oraz zakończenie programu:

driver_zad2 init_queue_size

utworzenie i napełnienie kolejki, oraz wejście do interface'u:

driver_zad2 init_queue_size INTERFACE

Minimalne operacje dostępne w interface'ie

* dodaj element
* dodaj N elementów
* usuń pierwszy element
* usuń N pierwszych elementów

W przypadku dodawania pojedynczego elementu program powinien pozwolić wpisać jego treść, a w przypadku usuwania pojedynczego elementu program powinien wyświetlić jego treść w jakiś sposób.

Driver do zadania nr 3:

driver_zad3 file_name file_offset message_size packet_size

Uwagi dotyczące pakietu uruchomieniowego

Moduł ADT może być kompilowany do postaci modułu binarnego *.o który jest następnie linkowany z oddzielnie kompilowanym driverem.

Przykładowe polecenia kompilacji modułu i drivera:

cc -c mod.c -o mod.o
cc -o prog driver.c mod.o

Alternatywnie, moduł można skompilować do postaci biblioteki. Biblioteka może mieć formę biblioteki statycznej *.a lub biblioteki dynamicznej *.so

Przykładowe polecenie kompilacji drivera z wykorzystaniem biblioteki:

cc -o prog driver.c -L . -lmod

Planuję przyznawać punkty dodatkowe (premię) za moduł programowy poprawnie zrealizowany w postaci biblioteki dynamicznej systemu POSIX.