[D.L.Parnas, On the Criteria To Be Used in Decomposing Systems into Modules, CACM 12 (15), 1972]
Rozważmy następujący problem. Należy napisać program, który:
- wczyta plik tekstowy,
- dany plik składa się z wierszy, a każdy wiersz ze słów oddzielonych białymi znakami,
- rozważamy rotacje cykliczne wierszy, powstałe przez przestawienie pewnej liczby słów z początku wiersza na koniec,
- program ma wypisać wszystkie możliwe rotacje cykliczne wierszy z wejścia, bez powtórzeń,
w porządku leksykograficznym, oddzielając słowa w wierszach pojedynczymi odstępami.
Podaj jak byś podzielił program na moduły.
Wymyśl zestaw realistycznych modyfikacji, jakie należy wprowadzić (a jeszcze lepiej poproś o to kolegę) i sprawdź, jak sprawuje się wymyślony przez Ciebie podział na moduły.
Zdefiniuj sygnatury/struktury odpowiadające podanym poniżej pojęciom.
Staraj się wykorzystać zdefiniowane wcześniej pojęcia.
-
Sygnatura półgrupy (typ elementów i operacja łączna).
-
Sygnatura monoidu (półgrupa z elementem neutralnym).
Struktura monoidu:
- liczby całkowite z dodawaniem,
- funkcje (na liczbach całkowitych) z operacją składania,
- listy (liczb całkowitych) z operacją sklejania,
- macierzy \(2 \times 2\) z operacją mnożenia.
-
Sygnatura grupy (monoid z elementami odwrotnymi).
-
Sygnatura pierścienia (dodawanie, mnożenie, jedynka, zero, elementy przeciwne).
-
Struktura pierścienia liczb całkowitych.
-
Sygnatura ciała (pierścień z elementami odwrotnymi).
-
Struktura ciała liczb rzeczywistych.
-
Sygnatura porządku częściowego z operacjami
sup
i inf
.
-
Struktura implementująca porządek częściowy par liczb całkowitych z operacjami
sup
i inf
.
Przyjmujemy, że \((x_1, y_1) \le (x_2, y_2)\) gdy \(x_1 \le x_2\) oraz \(y_1 \le y_2\).