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.
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.
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_zad1 number_of_elements ARRAY
driver_zad1 number_of_elements LIST
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_zad3 file_name file_offset message_size packet_size
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.