[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
.