2017-10-22 12 views
1

나는 내 프로젝트 중 일부를보고 있었는데 내가 github에서 본 것들과 비교해 보았다. OOP를 좋아하지만 너무 많은 파일을 만들고 너무 많은 수업을받는 것처럼 느껴집니다.OOP - 내가 복잡한 일을 끝내야합니까?

예를 들어, 나는 작은 프로젝트에서 체커 게임을 했었는데, 나는 하나의 파일/클래스로 갈 수있는 많은 파일을 가지고있었습니다. 솔루션을 과도하게 생각할 때 어떻게 알 수 있습니까? 다음은 내 파일의 모습입니다.

|src 
| |- player.cpp 
| |- piece.cpp 
| |- color.cpp 
| |- ... 

물론 규칙, 게임 설정, GUI 등을 다루는 많은 파일이 있습니다. 그러나이 짧은 예제에서 내 프로젝트가 어떻게 커지고 매우 커질 수 있는지를 알 수 있습니다. 이런 식으로 물건을 쓰는 것이 일반적입니까? 또는이 경우 복수/클래스/색/색 정보를 설정하는 여러 클래스를 포함하는 player.cpp 파일을 작성해야합니다.

+0

은 다음과 같이 보입니다. [소프트웨어 엔지니어링] (https://softwareengineering.stackexchange.com/) – gman

+0

결국 코드베이스를 다루어야하는 사람은 누구입니까? 고통의 원인이되는 코드의 측면. 무언가를 유지하는데 많은 시간을 소비하고 있거나 코드베이스의 특정 부분이 문제를 일으키고 있다는 것을 알게되면 문제의 원인을 설명하고 문제를 줄이거 나 제거하기위한 접근 방식을 어떻게 바꿀 수 있는지 생각해보십시오 . 그런 다음 새로운 방식으로 시도해보고 도움이되는지 확인하십시오. 그렇다면, 그것을 당신의 새로운 '우수 사례'로 채택하십시오. 그렇지 않다면 던져서 다른 것을 찾으십시오. 당신이 행복 할 때까지 반복하십시오 : –

+0

^^ 위의 과정이 끝나면, 당신은 (당신과 다르게 생각할 수있는 다른 사람과는 대조적으로) 당신에게 접근하는 것이 무엇인지 알 수 없을 것입니다. 당신은 당신이 다른 방식으로하지 않는 방식으로 당신이하는 일을 왜하는지 * 아주 잘 이해할 것입니다. 왜냐하면 당신은 그것을 다른 방식으로 시도했기 때문에 그것을 좋아하지 않았기 때문입니다. –

답변

-1

각 클래스 설계 및 프로그램을 수행하고, 각 클래스는 단 하나의 책임을 갖도록 설계되어 있기 때문에 단 하나, 일 는, 많은 클래스는 전체 응용 프로그램을 작성하는 데 사용되어야한다

3

예, 배포 코드를 여러 파일에 적용하는 것이 좋습니다. 프로젝트를 유지 관리 가능하게 만들 때이됩니다.

작은 프로젝트에 대한 우려가 있습니다. (그만한 가치가 있습니까?)하지만 실제 큰 프로젝트에서는 그렇게하지 않으면 영원히 큰 파일로 스크롤하는 사람들이 생길 것입니다 파일을 검색하여 그들이 무엇을 찾고 있는지 알아내는 것입니다.

파일을 압축하지 않고 파일 당 하나의 클래스로 유지하십시오. 모든 클래스는 견고하며 목표는 명확합니다.

때로는 파일에 함수를 작성합니다. 모든 작은 인라인 함수에 대해 파일을 만드는 것이 현명하지 않을 것이며 이유없이 파일의 수를 늘릴 것입니다. 파일 (예 : 인쇄와 관련된 기능) 내에 기능 계열을 갖는 것이 더 나을 것입니다.

결국 파일 크기와 파일 수 사이의 이상적인 균형 인 의견을 바탕으로 작성되었지만 분명히 밝히기를 바랍니다.

+0

너무 많이 추가하면 OOP에서 파일을 분리하는 데 사용해야하는 방법은 단일 책임 패러다임입니다. 각 클래스는 문제 공간에서 정확히 한 가지 '물건'을 나타내야합니다. 그래서 절대적으로 플레이어와 클래스를위한 클래스 (그리고 보통은 afile)를 가져야합니다. 이것은 각 함수가 하나의 행동을 나타내는 함수에 대한 단일 책임 패러다임과 유사합니다. 간단히 말해 클래스는 명사와 동사가되는 함수입니다. – Spaceman1701

1

실제로 "기능을 클래스로 분리하는 데는 어느 정도의 정교성이 있는가"와 "프로젝트 파일 구조를 구성하는 좋은 방법은 무엇입니까?"라는 질문이 있습니다. 둘 다 폭넓습니다.

첫 번째 답변은 아마도 하나의 책임 관용법을 따르는 것일 것입니다. 두 번째 대답은 폴더 구조를 네임 스페이스 구조와 유사하게 만드는 것입니다 (예 : 부스트). src 폴더에있는 모든 것을 저장하는 현재의 접근 방식은 동일한 이름을 가진 클래스가 다른 네임 스페이스에 나타날 때 이름 충돌을 방지하기 위해 파일 이름이 길어 지므로 C++에 적합하지 않습니다. 큰 프로젝트는 실제로 하나의 클래스가 4-5 개의 파일을 필요로하므로 너무 많은 파일을 갖는 경향이 있습니다. 그리고 이는 프로젝트에 적절한 세분성을 선택하는 또 다른 질문으로 이어집니다 ...

0

사람들은 "너무 많은 클래스"또는 "너무 많은 파일"에 대해 많이 걱정하는 경향이 있지만 대부분 역사적인 이월입니다. 40 년 전에 우리는 펀치 카드에 프로그램을 썼고 큰 쟁반과 상자를 운반해야했습니다 (그리고 떨어 뜨리지 않도록하십시오!). 이것은 분명히 우려 사항이었을 것입니다. 35 년 전 가장 큰 하드 드라이브는 33MB였습니다.오늘날 SSD 512GB 미만의 PC를 구입하지 않고 테라 바이트와 페타 바이트의 온라인 스토리지에 액세스 할 수있는 경우 파일 수와 프로그램에서 차지하는 바이트 수는 개발 과정에서 본질적으로 중요하지 않습니다.

우리가 인간에게 의미하는 바는 코드의 다른 측면을 개선하기 위해이 풍부한 용량을 사용해야한다는 것입니다. 파일이 많을수록 코드를 더 잘 이해할 수 있습니다. 더 많은 파일을 사용하십시오. 긴 파일 이름을 사용하면 코드를 더 잘 이해하는 데 도움이됩니다. 긴 파일 이름을 사용하십시오. "하나의 .cpp와 클래스 당 하나의 .h 파일"과 같은 규칙을 따르면 사람들이 코드베이스를 유지 관리하는 데 도움이되며 규칙을 따르십시오. 중요한 점은 "이 코드를 유지 관리하기 쉽고 읽기 쉽고 이해하기 쉽다는 것"과 같은 중요한 문제에 집중하는 것입니다.

이 방법에 접근하는 또 다른 방법은 "파일 수"가 코드를 유지 관리 할 수 ​​있는지를 결정하는 데 유용한 메트릭인지 묻는 것입니다. 분명히 앱에 비해 너무 낮은 숫자가 관련되어 있지만, 10 또는 100 또는 1000이 적절한 수 (적어도 포함하고있는 클래스의 수를 모른 채로)라면 말할 수 없습니다. 따라서 유용한 척도로 보이지는 않습니다.

즉, 프로그램이 모두 단일 폴더에 쌓여있는 1000 개의 파일을 가지고 있어야하며, 모두 단일 라이브러리 또는 실행 파일로 컴파일 및 링크해야합니까? 의존하지만, 같은 네임 스페이스에있는 1000 개의 클래스가 약간 붐비고 결과 프로그램이 너무 모 놀리 식일 수 있습니다. 어느 시점에서 아키텍처를보다 작고 응집력있는 패키지로 리팩터링하고 적절한 책임 영역을 갖기를 원할 것입니다. 물론, 그 마법의 숫자가 무엇인지 말할 수있는 사람은 아무도 없습니다. 완전히 응용에 의존하기 때문입니다. 그러나 이런 결정을 내리는 파일의 수는 아닙니다. 파일이 논리적으로나 구조적으로 서로 관련되어야한다는 것입니다.