Объектно-ориентированный или последовательный? - PullRequest
6 голосов
/ 25 ноября 2008

Я выполняю рефакторинг 500 строк кода C ++ в main () для решения дифференциального уравнения. Я хотел бы заключить большие идеи нашего решателя в меньшие функции (то есть «SolvePotential (...)» вместо 50 строк числового кода).

Должен ли я кодировать это последовательно с помощью набора функций, принимающих очень длинные списки параметров, такие как:

int main(int *argc, void **argv){
   interpolate(x,y,z, x_interp, y_interp, z_interp, potential, &newPotential);
   compute_flux(x,y,z, &flux)
   compute_energy(x,y,z, &eng)
   ...
   // 10 other high-level function calls with long parameter lists
   ...
   return 0;
}    

Или я должен создать класс "SolvePotential", который будет называться так:

int main(int *argc, void **argv){
   potential = SolvePotential(nx, ny, nz, nOrder);
   potential.solve();
   return 0;
}

Где бы я определял функции в SolvePotential, которые используют переменные-члены, а не длинные списки параметров, такие как:

SolverPotential::solve(){
  SolvePotential::interpolate()
  SolverPotential::compute_flux()
  SolverPotential::compute_energy()
  // ... 
  //  10 other high-level function calls with NO parameter lists (just use private member variables)
}

В любом случае, я сомневаюсь, что я буду многократно использовать код ... на самом деле, я просто рефакторинг, чтобы помочь с ясностью кода в будущем.

Может быть, это все равно что спорить «12» или «одна дюжина»? », Но как вы думаете?

Ответы [ 12 ]

0 голосов
/ 25 ноября 2008

Поскольку в этот момент вы не собираетесь повторно использовать код в другом месте, я бы сосредоточился на том, чтобы сделать код читаемым и чистым. Таким образом, вы можете понять, что он делает через год, когда вам нужно снова решить дифференциальные уравнения или когда вы узнаете, что вы действительно хотите повторно использовать код. ИМХО, функции со списками параметров пока кажутся хорошим подходом. Если вы обнаружите, что он становится слишком громоздким или вам действительно нужно его повторно использовать, тогда может иметь смысл отправиться в путь объекта в этой точке.

0 голосов
/ 25 ноября 2008

Поскольку вы используете объектно-ориентированный язык, вам следует искать объекты, предполагая, что вы можете повторно использовать таких в будущем.

Только один совет: попытайтесь создать хорошую диаграмму классов. Какие сущности вашей программы? Я видел бы класс «уравнения» с производным классом «дифференциального уравнения» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...