문제

C#에는 인터페이스가 있습니다.이것들은 어디서 왔나요?C++에는 존재하지 않았습니다.

도움이 되었습니까?

해결책

인터페이스는 꽤 오래되었고 꽤 오랫동안 사용되어 왔습니다.

Modula 및 Euclid와 같은 초기(1970년대 중반에서 후반) 비객체 지향 언어는 "모듈"이라는 구문을 사용하여 구성 요소 간의 인터페이스를 지정했습니다.그런 다음 구성 요소는 명시적인 가져오기 및 내보내기 모듈을 통해 서로 통신합니다.C#의 인터페이스는 동일한 개념의 객체 지향적 진화입니다.

C#의 인터페이스는 C++(및 Java)의 인터페이스 개념에서 직접 확장되었으며, 여기서 인터페이스는 개체 지향 구성 요소 인터페이스를 설명하기 위해 COM의 일부로 사용되었습니다.

편집하다: 약간의 연구를 수행하면서 명시적인 "인터페이스" 키워드로 찾을 수 있는 최초의 언어는 1986년경에 만들어진 Modula의 파생물인 Modula-3이었습니다.

다른 팁

인터페이스는 인터페이스와 구현을 분리하는 매우 성공적인 기술인 COM의 핵심 부분이기도 했습니다.

이는 Java에서 왔으며 Java(및 C#)가 다중 상속을 허용하지 않기 때문에 도입되었습니다.

편집하다: C++에서 COM 인터페이스를 사용하는 사람들이 위의 설명에 동의하지 않기 때문에 일부 다운모드가 발생했습니다.그럼에도 불구하고 인터페이스의 개념은 Java에서 유래했으며 C++ COM 인터페이스는 가상 클래스였으며 Java는 이를 언어 기능으로 만든 최초의 언어였습니다.

편집 종료

예를 들어 C++에서는 Animal 및 Mammal에서 상속된 Dog라는 클래스가 있을 수 있습니다.

C#에서는 Animal이라는 기본 클래스가 있고 인터페이스(IMammal)를 사용합니다.I 명명 표기법은 C++에서 역사적으로 사용되었으며(추상 가상 클래스를 나타내는 데 사용됨) Java로 전달되었지만 C#에서는 더 중요합니다. 왜냐하면 무엇이 기본 클래스이고 무엇이 클래스인지 쉽게 알 수 없기 때문입니다. C# 클래스 선언의 인터페이스:

public class Dog : Animal, IMammal

Java에서는 더 분명했습니다.

public class Dog extends Animal implements IMammal

다중 상속은 매우 까다롭기 때문에 이를 단순화하기 위해 인터페이스가 파생되었습니다.C# 클래스는 하나의 기본 클래스에서만 상속할 수 있지만 N개의 인터페이스를 구현할 수 있습니다.

C++에서는 순수 가상 클래스를 사용하여 인터페이스를 시뮬레이션할 수 있습니다.이를 위해서는 상속 클래스가 모든 메서드를 다형성으로 재정의해야 합니다.

나는 첫 번째라는 인상을 받았다. 공식화된 인터페이스의 개념은 Objective-C("프로토콜"이라고 함)에서 나왔습니다.Java가 적어도 Objective-C에서 아이디어를 얻었음을 확실히 말할 수 있습니다. 따라서 먼저 인터페이스를 갖춘 것은 Java가 아니었습니다.

Patrick Naughton의 이메일

IPrefix 규칙이 시작된 COM 프로그래밍을 수행한 경우 인터페이스는 C++에 존재했습니다.

C++ 자체는 기본적으로 인터페이스를 지원하지 않지만 COM/C++는 인터페이스 정의만을 목적으로 하는 인터페이스 정의 언어(Interface Definition Language)에서 생성된 형식 라이브러리를 사용했습니다. 상호 작용 Java나 C#보다 오래 전에 키워드입니다.

다중 상속 형태를 허용하는 것 외에도 인터페이스에 대한 .NET의 동기는 구성 요소 지향 기원과 관련이 있으며 주요 목적은 서로의 구현에 대한 지식 없이 상호 운용할 수 있는 구성 요소 간의 계약을 정의하는 것입니다.일부 COM 상호 운용성은 .NET 인터페이스에서도 수행됩니다.

C++에서는 다중 상속이 가능합니다.Java가 개발될 때 단일 상속이 결정되었지만 클래스는 다중 인터페이스를 구현하는 것이 허용되었습니다.C#은 이 개념을 전달했습니다.

C++에도 존재했지만 순수 가상 함수로만 구성된 가상 기본 클래스로 알려졌습니다.여기서 가상 기본 클래스와 추상 기본 클래스를 구별하기 위해 인터페이스에 대한 "I-" 접두사가 유래되었습니다.

나는 Java에서 처음으로 키워드 인터페이스를 보았지만 그보다 훨씬 오래되었습니다.

C++에도 동일한 개념이 존재하지만 정확히 동일하지는 않습니다.이를 "순수 가상 클래스"라고 합니다.

http://en.wikipedia.org/wiki/Virtual_function

그들은 다른 구문으로 존재하지만 OOP에서 다형성을 허용하기 위해 존재합니다.

내가 아는 컴퓨팅 분야의 최초 인터페이스 구현은 CORBA에서 나왔습니다.

제가 이해한 바에 따르면 이 개념은 사양을 아는 사람이라면 누구나 벽에 있는 전원 콘센트를 사용(및 구현)할 수 있는 전기 및 전자 공학에서 나온 것입니다.그러면 인터페이스는 프로그래밍 방식으로 동일한 유연성을 제공합니다.

덧붙여서, 버전 관리 문제를 줄이기 위해 만들어진 것은 아니지만 확실히 도움이 될 수 있습니다.

나는 일부 프로그래머가 메소드 구현을 반복해서 작성하는 데 지쳤다는 사실에서 인터페이스가 탄생했다고 생각합니다.몇 번이나 쓸 수 있습니까?

static string Method(int i)

생각하지 않고 더 쉬운 방법이 있어야합니까?

C++에서는 구현 없이 추상 클래스를 가질 수 있으며 여러 클래스를 상속할 수 있습니다.Java와 C#에서는 다중 상속을 없애므로 동작이 아닌 다중 계약을 상속할 수 있는 기능을 갖기 위해 인터페이스를 만들었습니다.C#에서는 하나의 클래스만 상속할 수 있지만 인터페이스는 원하는 만큼 상속할 수 있습니다.

인터페이스는 일종의 계약입니다.인스턴스가 구현해야 하는 멤버를 나타냅니다.그러나 기본 동작을 구현하지 않고 이 작업을 수행합니다.

이에 대한 언어 통합 메커니즘 구문은 없었지만 순수 가상 클래스를 사용하여 C++에서 인터페이스를 구현할 수 있습니다.

class IFoo
{
public:
  void Bar() =0;
  void Bar2() =0;
};

class Concrete : public IFoo
{
public:
  void Bar() { ... }
  void Bar2() { ... }
}

인터페이스는 컴퓨터 과학에서 나왔습니다.또는 프로그래밍의 상식에서 생각해 봅시다.인터페이스는 클래스의 논리적 메소드 그룹입니다.C++에는 필요하지 않았습니다. 별도의 언어 개념 "인터페이스"의 경우 모든 클래스가 인터페이스로 사용될 수 있기 때문에 그 안에 메서드 세트를 정의하고 구현하지 않고 IExecutable처럼 호출하고 다음을 사용합니다.

class IExecutable
{
public:
    virtual void Execute() = 0;
};

class MyClass : public IExecutable
{
public:
    void Execute() { return; };
};

Python과 같이 "동적 형식"이라고 하는 일부 언어는 인터페이스를 정의할 필요가 전혀 없으며 필요한 메서드를 호출하고 가능한지 런타임에서 확인합니다("오리처럼 걷고 다음과 같이 말한다면"). 오리, 오리임에 틀림없어").

C#은 정적 타이핑을 사용하기 때문에 클래스와 인터페이스 개념을 명확하게 구분합니다.해당 언어에서는 다중 상속이 금지되지만 클래스가 하나의 기본 클래스와 다른 인터페이스를 갖거나 한 번에 여러 인터페이스를 구현하는 것은 괜찮습니다.

public interface IPurring
{
    void Purr();
}

public class Cat : Animal, IPurring
{
    public Cat(bool _isAlive)
    {
        isAlive = _isAlive;
    }

    #region IPurring Members

    public void Purr()
    {
        //implement purring
    }

    #endregion
}

'인터페이스'라고 부르지는 않지만 함수 포인터를 구조의 요소로 사용하는 C 데이터 구조 포인터는 C++가 가상 기본 클래스 IMO를 사용하기 훨씬 전에 인터페이스 개념을 구현했습니다.

인터페이스는 CORBA에서도 사용되었습니다.IDL(인터페이스 정의 언어)은 객체가 구현된 언어에 관계없이 인터페이스를 설명하는 데 사용되었습니다.이는 인터페이스와 구현뿐만 아니라 인터페이스와 언어 바인딩도 분리했습니다.

그것은 또 다른 추상화 계층일 뿐입니다.어디서 나온 내용인지는 잘 모르겠습니다..나는 아직도 인터페이스라기보다는 계약이라고 부르는 것을 자주 듣습니다.

기본 아이디어는 "다중 상속"이라고 생각합니다.그래서 아이디어는 C++에서 나왔습니다.

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