문제

객체가 클래스에 대한 계약 계약입니까?

코드에서 실행 코드에 이르기까지 이와 같은 동일한 것을 구별해야 할 필요성은 무엇입니까? 나는 클래스 A 클래스의 이름 지정과 인스턴스형을 실행하는 클래스 A 객체의 아이디어를 얻는다. 그러나 전반적으로,이 반 중복 용어의 유일한 이유는 무엇입니까?

도움이 되었습니까?

해결책

설마. 여기에는 네 가지 용어가 있으므로 각각을 살펴 보겠습니다.

상호 작용

인터페이스는 추상 클래스 (다중 상속이없는 Java와 같은 언어로, 때로는 유사하게 행동하는 여러 개체에 액세스하기 위해 공통 기반으로 사용되는 별도의 데이터 유형과 같은 다른 제한이 있습니다)입니다. . 개념적으로, 추상성에 대한 요구 사항은 없지만 일반적으로 인터페이스에는 적어도 하나의 추상 방법이 있습니다. 인터페이스는 프로그램이 여러 가지 유사한 클래스와 의사 소통하는 방법으로, 각각은 다른 의미를 갖지만 동일한 범용을 갖는 방법입니다.

계약

계약은 클래스 또는 인터페이스의 사용자와 구현 자 사이에 내재 계약입니다. 예를 들어, 전제 조건 및 사후 조건 (불변은 일반적으로 클래스의 구현 내에서 계약입니다. 일반적으로 내부 구성원 간의 관계와 같은 것은 노출 될 필요가 없습니다). 반환 값 또는 인수에 대한 사양도 계약의 일부가 될 수 있습니다. 기본적으로 함수/클래스/인터페이스를 사용하는 방법을 나타내며 일반적으로 모든 언어로 완전히 표현할 수 없습니다 (에펠과 같은 일부 언어는 명시 적 계약을 적용 할 수 있지만 항상 요구 사항을 완전히 살펴볼 수는 없습니다. ). 인터페이스를 구현하거나 클래스에서 파생 할 때는 항상 인터페이스 요구 사항을 충족해야하거나, 비 임금 클래스를 재정의 할 때 외부 뷰어가 차이를 알지 못할 정도로 유사하게 행동하기 위해 (Liskov입니다. 대체 원리; 파생 된 물체는 외부 관점에서 동작에 차이가없는베이스를 대체 할 수 있어야합니다).

수업

수업은 이전에 명확하게 사용했기 때문에 수업을 많이 진행할 필요가 없습니다. 클래스는 데이터 유형이며 일부 언어에서는 인터페이스의 슈퍼 세트 (C ++에서와 같이 공식적인 정의가 없음)이며 다른 언어는 독립적입니다 (예 : Java).

물체

객체는 클래스 유형 (또는 비 클래스 유형)의 인스턴스입니다. 객체의 정확한 정의는 언어에 매우 구체적이지만 일반적인 정의는 실제와 같은 것과 같은 여러 참조/포인터에 의해 언급되는 실제 정의입니다. 예를 들어 Java와 같은 일부 언어에서는 두 변수가 동일한 객체, 반드시 의미 적으로 동일하지는 않습니다. 객체는 클래스 또는 인터페이스와 독립적입니다. 단일 인스턴스를 나타냅니다. 그것을 생각하는 또 다른 방법은 클래스 나 인터페이스가 곰팡이이고, 물체는 곰팡이에서 나오는 물리적 물체라는 것입니다 (다소 나쁜 비유이지만 지금은 내가 지금 생각할 수있는 최고입니다).

다른 팁

아니 정말. 클래스는 정의하는 템플릿입니다. 해당 클래스를 인스턴스화하는 각 객체는 템플릿을 따릅니다. 두 가지가 동일하지 않기 때문에 실제로 중복되는 용어가 아닙니다. 클래스를 사용자 정의 데이터 유형으로 생각할 수 있습니다. 클래스와 객체는 원시 데이터 유형과 똑같은 방식으로 서로 다릅니다. int 문자 값 3과 다릅니다.

인터페이스는 모든 구현 클래스가 지원 해야하는 일련의 메소드 세트를 정의합니다. 인터페이스 자체는 구현 클래스에 대해 정의하는 계약입니다. 인터페이스를 구현하는 클래스는 해당 인터페이스의 공개 방법 세트를 가져야한다고 말합니다.

글쎄요 ... 인터페이스가 클래스보다 계약을 지정하면 특정 객체의 (또는 여러) 인스턴스를 지정합니다.

용어는 적용보다 덜 중요합니다.

실제로, 인터페이스는 계약입니다. 객체가 클래스의 인스턴스 인 경우에는 공통점이 많지 않은 다른 것입니다.

인터페이스는 객체에 대한 외관을 제공하거나 호출자가 객체가 구현을 모르더라도 일부 작업을 수행 할 수 있다는 보증을 제공합니다.

예를 들어, 동일한 인터페이스/계약을 구현하는 두 개의 클래스를 가질 수 있지만, 그 의미가 동일하더라도 완전히 다른 일을 할 수 있습니다.

예를 들어 idisposable 인터페이스를 사용하십시오. 각 객체는 사용하는 리소스를 해제 할 수 있지만 여러 가지 방법으로 수행 할 수 있으므로 아무것도 해제하지 않도록 선택할 수 있습니다. 그것은 대상의 선택입니다.

적어도 이것은 .NET의 POV 일 것입니다

이전 답변을 완성하려면 인터페이스에 대한 단어가 있습니다.

클래스가 객체의 템플릿 이상인 경우 (인스턴스와 무관하게 글로벌 특성으로 인해) 인터페이스는 관점

여러 인터페이스를 구현하는 클래스 :

  • 존중하는 계약을 완료하십시오
  • 사용자가 해당 클래스의 인스턴스를 관점 구현 된 인터페이스로 표시된 것 중 하나입니다.

"Point of View"는 해당 인터페이스에 의해 정의 된 계약에만 집중하여 객체를 사용할 수 있음을 의미합니다.

그 측면에서 인터페이스는 "추상화"(클래스의 일부 특성을 따르는 것과 같은 다른 것들을 남겨 두는 것)와 마찬가지로 "추상 클래스"입니다. Java World에서는 인터페이스가 실제로 많은 것을 잎을 제거합니다. 예를 들어 정적 방법이나 함수가 아닌 계약을 정의하는 데만 적용될 수 있기 때문입니다.

"클래스"와 "개체"는 두 가지 다른 것을 나타냅니다. 그것들은 관련이 있지만, 그들이 대표하는 것은 매우 다릅니다.

이것을 설명하는 가장 좋은 방법은 정적을 보는 것입니다. 수업에는 정적 멤버가있을 수 있으며 해당 클래스의 모든 인스턴스와 완전히 분리되어 있습니다. 해당 클래스의 개체는 해당 정적 멤버를 사용하거나 사용하지 않을 수 있습니다. 그러나 해당 클래스의 대상의 인스턴스는 해당 클래스의 정적 사용과 완전히 분리되어 있습니다 (또는 최소한이어야합니다).

또는 싱글 톤 패턴을 생각하십시오. 정적 클래스 액세서에 클래스 객체의 인스턴스를 저장하는 것은 일반적인 관행이며 차이를 보여줍니다. 당신은 클래스 정적 액세서 얻기 위해 객체 인스턴스 싱글 톤 클래스의; 만약 클래스 정적 멤버 an이 없습니다 객체 인스턴스 참조하여 수업 creates the 사례물체.

다른 방법으로 말하십시오. 객체 ~이다 수업의 사례; 그러나 수업은 될 수 있습니다 객체가 인스턴스화되는 템플릿보다. 정적 클래스 멤버는 해당 클래스의 객체 인스턴스와 완전히 독립적 인 메모리 표현을 가지고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top