2011-04-08 3 views
3

프로젝트의 모든 C++ 코드를 main 클래스를 호출하여 단일 클래스로 캡슐화해야합니까? 또는 main 함수가 변수와 클래스를 선언해야합니다.큰 C++ 프로젝트 구성

+9

전체 '대형'프로젝트를 단일 클래스로 묶는 것은 캡슐화가 아닙니다. 남용이야. 해당 지역 화재 소방관은 당신과 한 마디해야 할 수도 있습니다. – corsiKa

답변

10

C++로 큰 프로젝트를 빌드하려는 경우 최소한 Large Scale C++ Software Design by John Lakos을 읽어야합니다. 조금 늙었지만 기본 원리가 도움이 될 것 같네요.

모든 언어로 대규모 시스템을 구축하는 것은 어려운 일이며 매우 빠르게 조각에 빠지지 않도록 기술과 규율이 필요합니다. 가볍게 잡지 마십시오.

그렇다면 '대형'에 대한 정의가 내 것과 다른 경우에는 다른 대안을 제시 할 수 있습니다. 저는 "백만 줄"이라는 단어가 "코드 줄"이라는 단어가 포함 된 문장에서 언급 될 프로젝트에 대해 이야기하고 있다고 가정합니다.

+1

다른 언어로 큰 프로젝트를하고있다하더라도 Lakos를 읽어야합니다. – janm

0

큰 C++ 프로젝트의 경우 많은 클래스를 만들어야합니다! 단지 시스템

0

없음의 나머지를 발사하는 클래스로 호출 한 후 물건 오프 (아마도 몇 가지 가사 일을)하고 킥해야

주! 각 헤더/구현 파일 쌍은 단일 클래스를 나타내야합니다. 하나의 파일에 큰 프로젝트를 배치하는 것은 재앙에 대한 확실한 방법입니다. 프로젝트는 유지할 수 없게되고 컴파일에는 시간이 오래 걸릴 것입니다. 적절한 크기의 조각으로 코드를 분해하십시오.

주요 기능은 컴파일러가 선언을 읽을 수 있도록의 #include 지시어를 사용한다, 오히려, 포함 된 파일 (MAIN.CPP, driver.cpp 같은 자주 이름이 뭔가, 프로젝트 이름 .CPP를) 클래스를 선언하지 말아야 헤더 파일에. 자세한 정보는 C++의 별도 컴파일 모델을 읽어보십시오.

C++을 처음 접하는 사람들 중에는 컴파일을 할 때 발생하는 오류 코드뿐만 아니라 이해하기 어렵거나 협박하는 오류 코드가있어서 가치가 없다고 생각하는 사람도 있습니다. 이 사람이 당신이되게하지 마십시오. 코드를 올바르게 구성하는 방법에 대해 알아보십시오.

1

실제로 그것이 의미있는 클래스 인 경우, 적어도 IME는 예외이지만 일반 규칙은 아닙니다.

여기에 모든 코드가 하나의 클래스에 있다는 것을 의미하지는 않지만, 하나의 최상위 클래스가 있으므로 기본적으로 모두 main이 인스턴스를 생성하고 사용합니다. 그 클래스는 아마도 다른 하위 클래스를 인스턴스화하고 사용할 것입니다.

"모든 코드가 단일 클래스에 포함되어 있어야합니까?"라는 말은 정말로 작은 프로젝트를 제외하고는 거의 확실한 대답입니다. 모든 코드가 하나의 클래스에 있으면 C++ (및 대부분의 다른 OO 언어)의 클래스 디자인 대부분이 완전히 무의미합니다.

+0

그래, 그가 생각하기에 그는 메인에서 호출 된 최상위 클래스 하나가 실제 작업을 수행하는 하위 클래스를 호출하는 "드라이버"라는 것을 의미한다고 생각합니다. C++보다 더 엄격하게 객체 지향 언어 인 Java 또는 기타에서 온 사람들로부터 이런 종류의 질문을 볼 수 있습니다. 그가 두 번째 단락을 의미한다면, "커다란"에 대한 그의 정의는 실제로 결함이있다. 그럼에도 불구하고 그 질문은 분명하지 않다. – AntonioMO

1

미친 짓없이 전체 프로젝트를 하나의 클래스에 넣을 수 있다면 "큰"정의는 대부분의 사람들보다 다를 수 있습니다. 어느 것이 좋습니다. 사람들에게 "커다란"C++ 프로젝트에 대해 물어볼 때, 사람들이 여러 사람 - 년이 걸리는 것을 말하는 것으로 가정 할 것입니다.

즉, 캡슐화의 동일한 원리가 프로젝트의 크기에 관계없이 적용됩니다. 논리와 데이터를 합리적인 의미로 묶어 놓은 단위로 나누고 해당 부서를 중심으로 수업을 구성하십시오. 한 조직을 시도한 다음 다른 조직에 코드를 붙여 넣거나 다른 클래스를 지나치게 의존하는 클래스를 발견하면 다른 조직으로 리팩터링하는 것을 두려워하지 마십시오.(또는 너무 많은 클래스로 자신을 발견하면 하나의 오브젝트가 더 깔끔하고 쉽게 작업을 수행 할 수 있도록 많은 오브젝트를 생성 할 수 있습니다.)

조금만 실험 해보고 두려워하지 마십시오. .

+0

모든 것을 하나의 클래스에 넣으면, 다른 것보다 조금 더 "크게"도달 할 것입니다. –

0

C++에서는 크거나 작은 것에 관계없이 전체 프로젝트를 하나의 class에 넣지 않아야합니다. 맥스에서는 1 또는 2로 넣을 수 있습니다. namespace (파일을 가로 질러 나눌 수 있습니다). 여러 클래스가 갖는 장점,

  1. 더 나은 유지 보수 코드의 여러 .H 및 .CPP 파일의 클래스 (즉, 작은 모듈) 퍼팅
  2. 당신에게 빠른 디버깅
  3. 하면 도움 모든 코드는 하나의 클래스에 있고 어딘가에서 변경이 이루어지면 전체 프로젝트를 컴파일해야합니다. 대신 프로젝트가 모듈을 거치면 변경 사항이 적용된 모듈을 컴파일 할 수 있습니다. 은 시간을 많이 절약합니다.