차이점은 무엇 인가와 어떻게 행동 하는가입니다.
많은 언어들이이 두 언어를 서로 혼동 시키려고하지만, 그것들은 상당히 뚜렷합니다.
어떻게, 어떻게, 어떻게 ...
모든 것이 상속되면 object
다음과 같은 이점이 발생합니다. 객체의 모든 변수는 어떤 가치도 가질 수 있습니다. 그러나 문질러도 즉, 모든 해야한다 (행동 어떻게 ' 등) object
(같은 해 봐 무엇을 )을을 object
.
그러나:
- 객체에 평등에 대한 의미있는 정의가 없으면 어떻게됩니까?
- 의미있는 해시가 없으면 어떻게됩니까?
- 객체를 복제 할 수 없지만 객체를 복제 할 수 있으면 어떻게됩니까?
어느 object
유형은 본질적으로 쓸모가된다 - 때문에 객체에 가능한 인스턴스 모두에서 어떤 공통점을 제공합니다. 또는 다수의 문제를 제외하고는 거의 보편적 인 행동 을 object
나타내는 것으로 추정되는 보편적 인 재산에 대한 부러진 / 발굽이 있거나 터무니없는 정의를 가진 물체가 존재할 것이다 .
어떻게 묶이지 않는지
또는 What 과 How를 별도로 유지할 수 있습니다 . 그런 다음 몇 가지 다른 유형 (모두 공통적 인 내용은 없음 )은 모두 공동 작업자 의 방식과 동일한 방식으로 작동 할 수 있습니다 . 이런 의미에서의 개념은 무엇 에 Iterator
대한 것이 아니라 방법 이다. 구체적으로 어떻게 일이 당신을 상호 작용 할 아직 모를 때 무엇을 당신이와 상호 작용한다.
Java (및 유사)는 인터페이스를 사용하여 이에 대한 접근을 허용합니다. 이와 관련하여 인터페이스는 통신 수단, 그리고 암시 적으로 따르는 통신 및 행동의 프로토콜을 설명합니다. 어떤 어떤 특정의 수 자체를 선언하는 방법 은 프로토콜에 의해 설명 된 관련 통신 및 활동을 지원, 국가. 이것은 어떤 협력자가에 의존 할 수 있습니다 방법 과를 정확하게 지정하여 속도가 느려하지 무엇 의 사용할 수 있습니다.
C ++ (및 유사)는 오리 타이핑을 통해 이에 대한 접근을 허용합니다. 템플릿은 공동 작업 유형이 특정 컴파일 컨텍스트 내에서 특정 방식으로 객체와 상호 작용할 수있는 동작을 따르는 것으로 선언하는 경우 상관하지 않습니다. 이를 통해 C ++ 포인터와 특정 연산자를 재정의하는 Object를 동일한 코드에서 사용할 수 있습니다. 그들은 체크리스트를 충족시키기 때문에 동등한 것으로 간주됩니다.
- * a, a->, ++ a 및 a ++-> 입력 / 전달 반복자를 지원합니다.
- * a, a->, ++ a, a ++, --a 및 a---> 양방향 반복기를 지원합니다.
기본 유형은 심지어 어떤 수, 반복하는에게 용기를 할 필요가 없습니다 것 . 또한 일부 공동 작업자는보다 포괄적 인 기능을 수행하고 함수 만 필요하다고 생각하고 a++
반복자는이를 만족시킬 수 있으므로 포인터도 정수도 가능하므로 모든 객체를 구현할 수 operator++
있습니다.
과소 사양
두 가지 접근 방식의 문제점은 사양 이하입니다.
인터페이스를 사용하려면 객체가 지정된 동작을 지원하도록 선언해야합니다. 이는 또한 제작자가 처음부터 인터페이스를 부여해야 함을 의미합니다. 이것은 그들이 선언하지 않았기 때문에 자르지 않는 것이 무엇인지를 유발 합니다. 어느 것을 그것은 또한 수단 어떤 공통 조상을 가지고, 인터페이스가 나타내는 방법을 . 이것은의 초기 문제로 돌아갑니다 object
. 이로 인해 공동 작업자는 요구 사항을 과도하게 지정하는 동시에 선언 부족으로 인해 일부 개체를 사용할 수 없게되거나 예상되는 동작이 제대로 정의되지 않아 숨겨진 문제가 발생할 수 있습니다.
템플릿을 사용하려면 공동 작업자가 완전히 알려지지 않은 What으로 작업해야 하며 상호 작용을 통해 How를 정의합니다 . 어느 정도까지는 컴파일 오류를 피하면서 통신 기본 요소 (기능 / 필드 / 등)에 대한 내용 을 분석 하거나 최소한 주어진 내용 이 방법에 대한 요구 사항과 일치하지 않는 방법을 지적 해야하기 때문에 공동 작업자를 작성하기가 더 어려워 집니다 . 이것은 주어진에서 최소한으로 요구하는 협력자 수 있습니다 무엇을 가장 광범위한 수 있도록 무엇을 '사용들. 불행히도 이것은 기술적으로 주어진 통신 기본 요소를 제공하는 객체의 무의미한 사용을 허용한다는 단점이 있습니다.어떻게 ,하지만 나쁜 모든 일이 발생할 수 암시 프로토콜을 따르지 않습니다.
반복자
이 경우에는 Iterator
A는 어떻게 이 상호 작용에 대한 설명은 속기이다. 해당 설명과 일치하는 것은 정의상으로 Iterator
입니다. 알고 어떻게 우리가 일반적으로 알고리즘을 작성하고 '의 짧은 목록을 가질 수 있습니다 어떻게 특정 주어 s의'를 무엇 '필요가 알고리즘 작동 할 수 있도록하기 위해 제공 될 수있다. 이 목록은 함수 / 속성 / 기타이며, 구현시 알고리즘이 처리 하는 특정 내용 을 고려합니다 .