Piszę mały pakiet MATLAB, który rozwiąże pewne problemy numeryczne klasy. Istnieją 3 etapy algorytmu, a użytkownik ma 5 opcji do wyboru dla każdego etapu. Zaimplementowałem cały problem za pomocą funkcji i 3 skrzynek przełączników (po jednym dla każdego etapu algorytmu). Działa dobrze, ale zastanawiam się nad tym, aby zrobić więcej rzeczy (więcej niż 5 opcji i jeszcze jeden etap), a także zrobić port Python (niektórzy ludzie są zainteresowani).
Zastanawiałem się, czy powinienem przejść na strukturę OOP (w której wcale nie jestem dobry), czy też powinienem trzymać się proceduralnych ram, które mam (w których jestem dobry). Upewniłem się w moim kodzie proceduralnym, że żadna funkcja nie robi dwóch rzeczy i że zachodzi minimalne nakładanie się (2 segmenty kodu prawie nigdy nie robią tego samego).
Przeprowadź migrację do SO, jeśli uważasz, że bardziej pasuje do ich domeny.
To pytanie może być odpowiednie w przypadku przepełnienia stosu. Myślę, że jest to również dobre dopasowanie, ponieważ jest to powszechny problem w nauce obliczeniowej.
Jeśli chodzi o algorytmy komponowania, dobrym przykładem biblioteki, która robi to dobrze, jest PETSc, jeśli umiesz czytać kod C. Obiektowy styl programowania może pomóc w enkapsulacji danych, ale jako prosty pierwszy krok możesz chcieć, aby każdy wybór na scenie był funkcją ze wspólnym interfejsem. Następnie, dla swojego algorytmu, wprowadź funkcję dla każdego etapu jako dane wejściowe i niech główny algorytm wywoła funkcję dla każdego etapu.
źródło
Nie wszystko jest dobrze modelowane przez obiekty. Rozważmy , zwykle system OO będzie traktował s jako obiekty, a jako metodę , ale to nie odpowiada naszej naturalnej interpretacji jako funkcji binarnej poprawki ; wprowadza nienaturalną asymetrię między pierwszym jako obiektem, dla którego metoda jest zdefiniowana, a drugim, który jest argumentem dla tej metody (daje to kludges podobne i w Pythonie).1+1 1+1
1
+
1.plus(1)
plus(1,1)
1
plus
__plus__
__rplus__
Więc nie uważaj, że musisz wcisnąć kwadratowy kołek w okrągły otwór, jeśli algorytm wygląda dobrze w zwykły sposób proceduralny, zachowaj go w ten sposób. Jeśli konieczne jest włączenie go do systemu OO, zawsze możesz umieścić interfejs OO w kodzie innym niż OO. Koderzy C ++ robią to codziennie (a nawet otrzymują za to wynagrodzenie).
źródło