Wnioski z pewnego projektu
Projekt Multigrids:
Struktura: MultigridFrame/MultigridApplet –WektorZerowyPanel ControlPanel GraphPanel WektorPoczatkowy ->IteracjePanel –IteracjePanel ControlPanel GraphPanel Numeryka ->WektorPoczatkowy
Działanie: MultigridFrame/Applet –tworzy WektorZerowyPanel –tworzy IteracjePanel –WektorZerowyPanel.iteracjePanel -> IteracjePanel WektorZerowyPanel: –Zmiana na ControlPanelu zmienia WektorPoczatkowy przekazuje WektorPoczatkowy do GraphPanel przekazuje WektorPoczatkowy do iteracjePanel
Działanie: IteracjePanel –Zmiana na ControlPanelu lub –zmiana WektoraPoczatkowego: tworzy nową Numerykę przekazuje do niej parametry startuje iteracje przekazuje wynik do GraphPanelu GraphPanel reaguje na zmianę danych wejściowych.
Lepsze jest wrogiem dobrego: Jest dobrze, bo: –struktura jest poprawnie zmodularyzowana – 2 duże moduły realizujące wzorzec MVC (Model – obiekt numeryczny, View – graphPanel, Controller – panel z suwakami) Minimalna komunikacja między modułami Łatwość modyfikacji klasy głównej (application/applet)
Jest dobrze, bo: –używamy wielokrotnie komponentu GraphPanel – ew. modyfikacje będziemy wprowadzać w jednym miejscu –mamy poprawnie zdefiniowaną klasę Numeryka i dziedziczące po niej realizacje (Richardson/Jacobi) wybierane z GUI –GUI ma jednorodną formę dzięki użyciu wzorca "ulepszonego suwaka"
Może być lepiej: –"ulepszony suwak" możemy zrealizować jako osobną klasę – trochę uniwersalności i łatwe stosowanie –wybór klas numerycznych można zrealizować z użyciem wzorca Factory –W przyszłości będzie można doładowywać nowe klasy dynamicznie