Я пишу небольшой пакет MATLAB, который решит числовые задачи определенного класса. Есть 3 этапа алгоритма, и пользователь имеет 5 вариантов для каждого этапа. Я реализовал всю проблему, используяфункции и 3 случая переключения (по одному на каждый этап алгоритма). Он работает нормально, но я рассматриваю возможность сделать больше вещей (более 5 вариантов и еще один этап), а также сделать порт Python (некоторые люди заинтересованы).
Мне было интересно, стоит ли мне переходить на OOP-фреймворк (что у меня вообще плохо получается) или мне следует придерживаться процедурной структуры, которая у меня есть (что я хорошо умею). В своем процедурном коде я убедился, что ни одна функция не выполняет две функции и имеет минимальное перекрытие (2 сегмента кода почти никогда не делают одно и то же).
Пожалуйста, перенесите это в SO, если вы чувствуете, что это более уместно в их области.
Этот вопрос может подойти для переполнения стека. Я думаю, что это также хорошо подходит здесь, потому что это общая проблема в вычислительной науке.
С точки зрения составления алгоритмов, хорошим примером библиотеки, которая делает это хорошо, является PETSc, если вы можете читать C-код. Стиль объектно-ориентированного программирования может помочь в инкапсуляции данных, но в качестве простого первого шага вы можете просто захотеть сделать каждый выбор для этапа функцией с общим интерфейсом. Затем для вашего алгоритма передайте функцию для каждого этапа в качестве входных данных и попросите главный алгоритм вызвать функцию для каждого этапа.
источник
Не все хорошо моделируется объектами. Рассматривать1+1 , как правило, ОО-система будет рассматривать 1+1 как двоичная инфиксная функция
1
s как объекты, а+
как метод1.plus(1)
, но это не соответствует нашей естественной интерпретацииplus(1,1)
; он вводит неестественную асимметрию между первым1
как объектом, для которого определен методplus
, и вторым, который является аргументом этого метода (это приводит к появлению кладж, как__plus__
и__rplus__
в Python).Так что не думайте, что вам нужно втиснуть квадратный колышек в круглое отверстие, если ваш алгоритм выглядит хорошо в простой процедурной манере, тогда сохраняйте это так. Если он должен быть включен в ОО-систему, вы всегда можете добавить ОО-интерфейс к своему не-ОО-коду. C ++ кодеры делают это каждый день (и даже получают за это плату).
источник