객체 방향없이 프로젝트를 살아남을 수 있습니까?


9

특정 클래스 수치 문제를 해결할 작은 MATLAB 패키지를 작성 중입니다. 알고리즘에는 3 단계가 있으며 사용자는 각 단계마다 5 가지를 선택할 수 있습니다. 나는 전체 문제를 사용하여 구현했다.20기능 및 3 개의 스위치 케이스 (각 알고리즘 단계마다 하나씩). 그것은 잘 작동하지만 더 많은 일 (5 개 이상의 선택과 한 단계 더)을하고 파이썬 포트 (일부 사람들은 관심이 있음)를 만드는 것을 고려하고 있습니다.

OOP 프레임 워크로 변환해야하는지 (아직 전혀 좋지 않음) 또는 내가 가지고있는 절차 적 프레임 워크를 고수해야하는지 궁금합니다. 절차 코드에서 함수가 두 가지 작업을 수행하지 않으며 최소한의 겹침이 없음을 확인했습니다 (2 코드 세그먼트는 거의 같은 일을하지 않습니다).

도메인에 더 적합하다고 생각되면이를 SO로 마이그레이션하십시오.

답변:


6

도움이되는 객체 지향의 이점을 얻기 위해 OOP 프레임 워크로 변환 할 필요가 없습니다. 함수의 수는 이러한 함수 내에서 또는 이들 사이의 코드 중복 또는 이러한 함수의 길이보다 지표가 적습니다. (100 줄 이상의 코드를 가진 함수는 "향상 가능성"을 나타내는 전형적인 표시입니다.)

객체 방향이 도움이되는 부분을 찾을 수 없으면 OOP 프레임 워크로 변환하는 것이 가장 좋은 첫 단계는 아닙니다. 오히려 객체 지향에 익숙한 사람에게 단순화하거나 개선 할 수있는 것을 요청한 다음 왜 단순화 또는 개선인지 이해하려고 노력하십시오.

deal.II 또는 PETSc와 같은 프레임 워크를 사용하려는 경우, 제공하는 기능이 자신의 코드를 개선하거나 유지 보수하기 쉽게 만들지 않기 때문에 제공하는 기능이 유용한 경우이를 사용하십시오. 그러나 이미 MATLAB 프레임 워크 내에 있으므로 C ++ OOP 프레임 워크로 변경하지 않을 것입니다. (MATLAB은 이미 알고 있듯이 전체 OOP 지원을 제공합니다.)

파이썬 포트의 경우 시작에 대한 현재 지식을 기반으로하고 나중에 더 잘 배울 수있을 정도로 두 번째 시작을하십시오.


여기에서 프레임 워크로 변환하는 것은 과도하다는 데 동의합니다. API와 아키텍처는 훌륭한 디자인의 예이며 가이드로 사용할 가치가 있다고 생각합니다.
Geoff Oxberry

3

이 질문은 스택 오버플로에 적합 할 수 있습니다. 나는 이것이 계산 과학에서 일반적인 문제이기 때문에 여기에도 적합하다고 생각합니다.

C 코드를 읽을 수 있다면 알고리즘 구성 측면에서이 작업을 수행하는 라이브러리의 좋은 예는 PETSc입니다. 객체 지향 프로그래밍 스타일은 데이터를 캡슐화하는 데 도움이 될 수 있지만 간단한 첫 번째 단계로 스테이지에 대한 각 선택을 공통 인터페이스가있는 함수로 만들 수 있습니다. 그런 다음 알고리즘의 경우 각 단계의 함수를 입력으로 전달하고 기본 알고리즘이 각 단계의 함수를 호출하게하십시오.


나는 흥미 롭다. PETSc를 OOP 또는 절차 적 코딩으로부터 배울 수있는 훌륭한 라이브러리로 제안하고 있습니까? OOP를 잘 수행하는 읽을 수있는 라이브러리에 대해 알고 있습니까?
Inquest September

PETSc는 소프트웨어의 좋은 예라고 생각합니다. 일반적으로 문서화가 잘되어 있습니다. 계산 과학에서는 PETSc, Trilinos, deal.II 및 FEniCS가 잘 문서화되어 있고 OOP 스타일로 작성되었다고 생각합니다. 나는 그들로부터 OOP를 배워야한다고 주저합니다. 먼저 교과서에서 배우고 실제 코드를 보는 것이 좋습니다.
Geoff Oxberry

2

모든 것이 객체에 의해 잘 모델링되는 것은 아닙니다. 치다1+1일반적으로 OO 시스템은 1s를 객체와 +방법 으로 취급 1.plus(1)하지만, 이는 자연스럽게 해석됩니다.1+1이진 삽입 함수 plus(1,1)로서; 그것은 제 간의 자연스러운 비대칭 도입 1방법이되는 오브젝트 인 것으로 plus정의되며, 그 방법의 인수 인 제 2 (이 같은 잡든지 야기 제공 __plus__하고 __rplus__파이썬하여).

따라서 알고리즘이 평범한 절차 적 방식으로 좋아 보인다면 정사각형 페그를 둥근 구멍으로 밀어 넣을 필요가 있다고 생각하지 마십시오. OO 시스템에 포함되어야하는 경우 비 OO 코드에 항상 OO 인터페이스를 배치 할 수 있습니다. C ++ 코더는 매일이 작업을 수행합니다 (비용도 지불).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.