[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:
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.
sup i inf.
sup i inf.
sig
type α tree =
Node of α tree * α * α tree |
Null
type α walk
make : α tree → α walk
goleft : α walk → α walk
goright : α walk → α walk
goup : α walk → α walk
lookup : α walk → α tree
exception OutsideTree
end
Wywołanie make d powinno konstruować przechadzkę, w której znajdujemy się w korzeniu drzewa d.
Wywołanie goleft p powinno konstruować przechadzkę powstałą przez przejście do lewego poddrzewa.
Analogicznie powinny działać procedury goright i goup.
Procedura lookup powinna zwrócić poddrzewo zaczepione w wierzchołku drzewa, w którym aktualnie jesteśmy.
Podczas przechadzki po drzewie możemy przebywać jedynie w wierzchołkach Node _.
Jeśli nastąpi próba wejścia do Null'a lub wyjścia ,,ponad'' korzeń, należy podnieść wyjątek OutsideTree.