OOP는 구성과 치환이 있습니다.
C ++에는 다중 상속, 템플릿 전문화, 임베딩 및 가치 / 이동 / 포인터 시맨틱이 있습니다.
Java에는 단일 상속 및 인터페이스, 임베드 및 참조 시맨틱이 있습니다.
OOP 학교에서 이러한 언어를 사용하는 일반적인 방법은 객체 대체 및 컴포지션을위한 상속을 사용하는 것입니다. 그러나 공통 조상과 런타임 캐스트 방법이 필요합니다 (C ++에서는 dynamic_cast
, Java에서는 다른 인터페이스를 요구합니다).
자바는이 모든 것을 독자적인 java.lang.Object
뿌리 계층 구조로 수행합니다. C ++에는 사전 정의 된 공통 루트가 없으므로 최소한 동일한 "그림"이되도록 정의해야합니다 (그러나 이것은 일부 C ++ 가능성을 제한하고 있습니다 ...).
그 후, 컴파일 타임 다형성 (CRTP로 생각) 및 가치 의미론을 가질 가능성은 "OOP 객체"개념을 C ++ 프로그램으로 이식 할 수있는 방법에 대한 다른 대안을 제공 할 수 있습니다.
당신은 실제로 전통적인 학교 패러다임을 뒤집는 구성을 관리하기 위해 대체 및 개인 상속을 관리하기 위해 포함 및 암시 적 변환을 사용하는 이단을 상상할 수 있습니다. (물론이 방법은 다른 방법보다 20 년 어리기 때문에 그렇게하는 데 폭 넓은 커뮤니티 지원을 기대하지 마십시오)
또는 "다중 스택을 통해 인터페이스에서 구현으로 디스패치 할 때"우세 "를 사용하여 부분적으로 구현 된 인터페이스에서 균일 한 인터페이스 클러스터를 거치는 인터페이스 (구현 없음)에서 최종 클래스 (완전하게 구현 됨)까지 모든 클래스에 대한 가상 공통 기반을 상상할 수 있습니다. -평행도 "상속 체계.
OOP 방식이 단 하나 뿐이고 OOP 방식 만 있다고 가정하면 OOP와 Java를 C ++과 비교하는 것은 두 언어의 기능을 모두 제한하는 것입니다.
C ++가 Java 코딩 관용구를 엄격하게 준수하도록 강요하는 것은 Java가 C ++와 유사한 언어로 작동하도록하는 것이 Java를 변질시키는 것이므로 C ++를 변질시키는 것입니다.
"민감성"의 문제가 아니라 다른 "집계 메커니즘"의 문제로, 두 언어가 다른 언어보다 한 언어에서 일부 관용구를 다른 언어보다 더 수익성있게 만드는 두 언어가 서로 다른 방식으로 결합합니다.