프로젝트의 모든 C++ 코드를 main 클래스를 호출하여 단일 클래스로 캡슐화해야합니까? 또는 main 함수가 변수와 클래스를 선언해야합니다.큰 C++ 프로젝트 구성
답변
C++로 큰 프로젝트를 빌드하려는 경우 최소한 Large Scale C++ Software Design by John Lakos을 읽어야합니다. 조금 늙었지만 기본 원리가 도움이 될 것 같네요.
모든 언어로 대규모 시스템을 구축하는 것은 어려운 일이며 매우 빠르게 조각에 빠지지 않도록 기술과 규율이 필요합니다. 가볍게 잡지 마십시오.
그렇다면 '대형'에 대한 정의가 내 것과 다른 경우에는 다른 대안을 제시 할 수 있습니다. 저는 "백만 줄"이라는 단어가 "코드 줄"이라는 단어가 포함 된 문장에서 언급 될 프로젝트에 대해 이야기하고 있다고 가정합니다.
다른 언어로 큰 프로젝트를하고있다하더라도 Lakos를 읽어야합니다. – janm
큰 C++ 프로젝트의 경우 많은 클래스를 만들어야합니다! 단지 시스템
없음의 나머지를 발사하는 클래스로 호출 한 후 물건 오프 (아마도 몇 가지 가사 일을)하고 킥해야
주! 각 헤더/구현 파일 쌍은 단일 클래스를 나타내야합니다. 하나의 파일에 큰 프로젝트를 배치하는 것은 재앙에 대한 확실한 방법입니다. 프로젝트는 유지할 수 없게되고 컴파일에는 시간이 오래 걸릴 것입니다. 적절한 크기의 조각으로 코드를 분해하십시오.
주요 기능은 컴파일러가 선언을 읽을 수 있도록의 #include 지시어를 사용한다, 오히려, 포함 된 파일 (MAIN.CPP, driver.cpp 같은 자주 이름이 뭔가, 프로젝트 이름 .CPP를) 클래스를 선언하지 말아야 헤더 파일에. 자세한 정보는 C++의 별도 컴파일 모델을 읽어보십시오.
C++을 처음 접하는 사람들 중에는 컴파일을 할 때 발생하는 오류 코드뿐만 아니라 이해하기 어렵거나 협박하는 오류 코드가있어서 가치가 없다고 생각하는 사람도 있습니다. 이 사람이 당신이되게하지 마십시오. 코드를 올바르게 구성하는 방법에 대해 알아보십시오.
실제로 그것이 의미있는 클래스 인 경우, 적어도 IME는 예외이지만 일반 규칙은 아닙니다.
여기에 모든 코드가 하나의 클래스에 있다는 것을 의미하지는 않지만, 하나의 최상위 클래스가 있으므로 기본적으로 모두 main
이 인스턴스를 생성하고 사용합니다. 그 클래스는 아마도 다른 하위 클래스를 인스턴스화하고 사용할 것입니다.
"모든 코드가 단일 클래스에 포함되어 있어야합니까?"라는 말은 정말로 작은 프로젝트를 제외하고는 거의 확실한 대답입니다. 모든 코드가 하나의 클래스에 있으면 C++ (및 대부분의 다른 OO 언어)의 클래스 디자인 대부분이 완전히 무의미합니다.
그래, 그가 생각하기에 그는 메인에서 호출 된 최상위 클래스 하나가 실제 작업을 수행하는 하위 클래스를 호출하는 "드라이버"라는 것을 의미한다고 생각합니다. C++보다 더 엄격하게 객체 지향 언어 인 Java 또는 기타에서 온 사람들로부터 이런 종류의 질문을 볼 수 있습니다. 그가 두 번째 단락을 의미한다면, "커다란"에 대한 그의 정의는 실제로 결함이있다. 그럼에도 불구하고 그 질문은 분명하지 않다. – AntonioMO
미친 짓없이 전체 프로젝트를 하나의 클래스에 넣을 수 있다면 "큰"정의는 대부분의 사람들보다 다를 수 있습니다. 어느 것이 좋습니다. 사람들에게 "커다란"C++ 프로젝트에 대해 물어볼 때, 사람들이 여러 사람 - 년이 걸리는 것을 말하는 것으로 가정 할 것입니다.
즉, 캡슐화의 동일한 원리가 프로젝트의 크기에 관계없이 적용됩니다. 논리와 데이터를 합리적인 의미로 묶어 놓은 단위로 나누고 해당 부서를 중심으로 수업을 구성하십시오. 한 조직을 시도한 다음 다른 조직에 코드를 붙여 넣거나 다른 클래스를 지나치게 의존하는 클래스를 발견하면 다른 조직으로 리팩터링하는 것을 두려워하지 마십시오.(또는 너무 많은 클래스로 자신을 발견하면 하나의 오브젝트가 더 깔끔하고 쉽게 작업을 수행 할 수 있도록 많은 오브젝트를 생성 할 수 있습니다.)
조금만 실험 해보고 두려워하지 마십시오. .
모든 것을 하나의 클래스에 넣으면, 다른 것보다 조금 더 "크게"도달 할 것입니다. –
C++에서는 크거나 작은 것에 관계없이 전체 프로젝트를 하나의 class
에 넣지 않아야합니다. 맥스에서는 1 또는 2로 넣을 수 있습니다. namespace
(파일을 가로 질러 나눌 수 있습니다). 여러 클래스가 갖는 장점,
- 더 나은 유지 보수 코드의 여러 .H 및 .CPP 파일의 클래스 (즉, 작은 모듈) 퍼팅
- 당신에게 빠른 디버깅
- 하면 도움 모든 코드는 하나의 클래스에 있고 어딘가에서 변경이 이루어지면 전체 프로젝트를 컴파일해야합니다. 대신 프로젝트가 모듈을 거치면 변경 사항이 적용된 모듈을 컴파일 할 수 있습니다. 은 시간을 많이 절약합니다.
전체 '대형'프로젝트를 단일 클래스로 묶는 것은 캡슐화가 아닙니다. 남용이야. 해당 지역 화재 소방관은 당신과 한 마디해야 할 수도 있습니다. – corsiKa