문제

봤는데에 다른 정의하고 설명하며 그들 중 아무도 나를 만족.확인하고 싶으면 사람이 정의할 수 있는 다형성에서 가장 두 문장을 사용하지 않고 어떠한 코드 또는 예입니다.내가 듣고 싶지 않아요'그래서 당신이 있는 사람/자동차/수프...'또는 단어가 어떻게 파생(아무도 감동하고 무엇을 알고 있어 많은 변신 의미합니다).는 경우 당신은 매우 좋은 이해 무엇의 다형성은 좋은 명령어의 영상을 할 수 있어야 이 질문에 대답에서 짧은,이기는 하지만 밀도,정의합니다.는 경우에 당신의 정의는 정확하게 정의 다형성하지만 그 밀도는 그것의 몇 가지가 필요합 읽 오버,다음 정확히 내가 무엇을 찾고 있습니다.

왜 두 문장은?기 때문에 정의 짧고 지적하고 있습니다.에 대한 설명이 길과 담 예고 코드입니다.모 여기에 대한 설명(대답에 해당 페이지는 만족하지 않습에 대한 내 질문):

다형성 vs 재정의 대 과부하
을 설명하려고 다형성으로 쉽게 당신

왜 이 질문을 묻는?었기 때문에 같은 질문을하고 내가 발견할 수 없었습니다.올으로 만족할 만한 정의(의 표준 규격은 매우 높은).확인하고 싶으면 훌륭한 마음에 이 사이트는 그것을 할 수 있습니다.

당신이 정말로 할 수 없습니다 두 개의 문장의 요구사항(그것이 어려운 주제를 정의하는)다음에 그것의 정밀한 이동하는 경우다.아이디어를 정의는 실제로 정의 다형성과하지 않는 것을 설명하지 않거나 그것을 사용하는 방법(차이?).

도움이 되었습니까?

해결책

다형성은 일종의 계약의 표현을 허용하며, 잠재적으로 많은 유형이 각각 자신의 목적에 따라 다른 방식으로 계약 (클래스 상속 여부에 관계없이)을 구현합니다. 암호 사용 그 계약은 (*) 어떤 구현이 관련되어 있는지 신경 쓰지 않아야하며 계약에 순종 할 것입니다.

(*) 이상적인 경우, 어쨌든 - 분명히 호출 코드는 적절한 구현을 매우 의도적으로 선택했습니다!

다른 팁

과일은 일반적으로 과일을 먹을 수 있지만 다른 유형의 과일을 다른 방식으로 먹습니다. 과일 인 사과는 과일이기 때문에 먹을 수 있습니다. 바나나는 (과일이기 때문에) 사과와는 다른 방식으로 먹을 수 있습니다. 당신은 그것을 먼저 껍질을 벗긴다.

글쎄, 적어도 나는하지만, 나는 어떤 방식으로 이상해서 나는 무엇을 알고 있습니까?

이것은 상속 (과일을 먹을 수 있음), 다형성 (과일을 먹는 것이 모든 종류의 과일을 먹을 수 있음) 및 캡슐화 (바나나에 피부가 있음)를 보여줍니다.

진지하게, 대상 상속, 다형성, 캡슐화, 가상 사물, 추상적 인 것들, 사적인 것들, 공개적인 것들, 이것들은 모두 어려운 개념입니다. 누군가가 절대적으로 2 문장 정의를 원한다면이 질문을 코드 골프 변형으로 태그하십시오. 그러한 문장 두 개는 너무 간결해야하므로 이미 무엇을 알지 못하면 충분히 배우지 않으면 충분히 배우지 않기 때문입니다. 더 많이 배우는 데 필요한 것을 아는 것입니다.

다형성은 유형이 인식되지 않는 균일 한 인터페이스를 선언하여 인터페이스를 구현하는 콘크리트 유형에 구현 세부 정보를 남깁니다.

실제로, 여러 형태의 다형성이 있으며, 그것에 대해 약간의 논쟁이 있습니다. 당신은 그것을 제대로 정의 할 수없는 CS 교수를 볼 수도 있습니다. 나는 세 가지 유형을 알고 있습니다.

  • 임시 다형성 (오리처럼 보이고 오리처럼 걷는다 =>은 오리입니다). 예를 들어 Haskell과 Python에서 볼 수 있습니다.

  • 일반 다형성 (유형이 일부 일반 유형의 인스턴스 인 경우). 예를 들어 C ++에서 볼 수 있습니다 (int의 벡터 및 문자열의 벡터는 멤버 기능 크기를 갖습니다).

  • 하위 유형 다형성 (유형이 다른 유형에서 상속되는 경우). 대부분의 OO 프로그래밍 언어에서 볼 수 있습니다 (즉, 삼각형은 모양입니다).

Wikipedia : 다형성은 균일 한 인터페이스를 사용하여 다양한 데이터 유형의 값을 처리 할 수있는 프로그래밍 언어 기능입니다. 나에게 아주 간단합니다.

나는 당신이 왜이 질문을하는지 정말로 이해합니다. 나는 다형성을 이해하지만 면접에 있었고 다형성에 대한 짧고 명확한 정의를 요구 받았다. 명확하고 짧은 정의를 줄 수 없었기 때문에 나는 그것에 대해 생각하기 시작했고 여기에 내 정의가 있습니다.

한 유형의 객체의 능력은 하나와 동일한 인터페이스를 가질 수 있지만이 인터페이스의 다른 구현을 가질 수 있습니다.

정의:

다형성은 $ 1 아이디어에 대한 $ 10 단어입니다.해야 할 일을 요청할 때 최종 결과가 적절한 한 어떻게 달성되는지는 신경 쓰지 않습니다. 길이 서비스 올바르게 제공됩니다. i 신경 쓰지 마세요 대한 구현.

논의

소프트웨어 개발, 특히 객체 지향 원칙에 따라 개발 된 시스템에서 일반적으로 사용되지만 다형성은 근본적으로 실제 원칙이며 기술적 인 것이 아니라 실제 용어로 정의되어야합니다.

전화를 걸고 싶을 때 전화를 들고 전화를 걸고 다른 쪽 끝에서 파티와 대화합니다. 나는 누가 전화를 만들었는지, 어떤 기술을 사용하는지, 유선, 무선, 모바일 또는 VoIP 또는 보증하에 있는지 신경 쓰지 않습니다.

문서를 인쇄하고 싶을 때 인쇄합니다. 구현 언어, 프린터 브랜드, 연결 스타일, 소모품 선택 또는 용지 품질에 대해서는 신경 쓰지 않습니다.

동일한 인터페이스의 여러 구현.

예 : 많은 전화 모델은 숫자 키패드 인터페이스를 구현합니다.

다형성은 객체 모델을 설계 할 때 사용되는 객체 지향 전략으로 코드를 단순화하는 데 도움이됩니다. 그것은 핵심 다형성에서 두 개의 simillar의 다른 물체를 정의하고 두 물체를 마치 마치 마치 마치 처리하는 능력입니다.

알았어 어렵다 ....

나는 방금 다형성이 무엇인지에 대한 내 자신의 해석을 추가 할 것이라고 생각했다 : 매우 일반적으로 다형성은 단일 인터페이스 엔터티에 다른 유형.

그것은 다소 일반적이지만, 그것이 내가 알고있는 세 가지 유형의 다형성을 모두 포장 할 수있는 유일한 방법입니다. 애드 혹, 파라 메트릭 그리고 하위 유형. 아래에 자세한 내용을 살펴보고 알파벳순으로 이름 별 다형성 유형을 정렬했습니다. 당신이 관심있는 사람은 아마도 아마도 아마도입니다 하위 유형 다형성, 이것이 마지막입니다.

임시 다형성

임시 다형성 다른 매개 변수 유형에 대해 동일한 방법의 여러 구현을 제공하는 행위입니다. ~ 안에 OOP, 그것은 일반적으로 알려져 있습니다 메소드 과부하. 예를 들어:

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

둘 다 format 방법을 공유합니다 단일 인터페이스, 그러나 그들은 엔터티에서 일합니다 다른 유형.

파라 메트릭 다형성

파라 메트릭 다형성 클래스 (또는 메소드)가 클래스 (또는 메소드)의 매개 변수 인 유형에서 작동하는 행위입니다. 그것은 종종라고 불립니다 제네릭.

예를 들어, Java 's List[T] 매개 변수를 기대합니다 T 인스턴스화 시간 에이 매개 변수는 결과 객체의 유형을 정의합니다.

내가 의도적으로 무시하고있는 순수 주의자들에게 참고 원시 유형 내가이 맥락에서 물이 진흙 투성이라고 생각합니다.

List[String] 그리고 List[Date] 공유 a 단일 인터페이스, 그러나 일을하고 (그리고) 다른 유형.

하위 유형 다형성

하위 유형 다형성 아마도 당신이 처음에 당신의 질문에서 의미했던 것일 것입니다 : 그것은 동일한 유형의 여러 구현에 단일 인터페이스를 제공하는 행위입니다.

관습 예제를 사용하려면 : Animal 모든 구현이 존중 해야하는 계약을 제공합니다. Dog 이다 Animal, 그리고 그와 같이 모든 작업을 지원합니다 Animal 선언합니다. 에 따르면 Liskov 대체 원리, 이를 통해 인스턴스를 사용할 수 있습니다 Dog 인스턴스 Animal 예상됩니다 (그러나 다른 방법은 아닙니다).

만약에 Cat 그리고 Dog 둘 다 서브 클래스입니다 Animal, 그들은 a를 공유합니다 단일 인터페이스 그러나 사실입니다 다른 유형.

나는 여기서 약간의 접선에서 벗어나지 만, 하위 유형 다형성은 (내 생각은) 우선: 부모 클래스에 의해 정의 된 방법의 동작을 재정의하는 행위. 이것은 종종 혼란 스럽습니다 과부하 우리가 이전에 본 것처럼, 다형성의 한 유형이며 실제로 서브 클래싱이 필요하지 않습니다 (실제로 클래스가 필요하지도 않습니다).

다형성은 여러 다른 기본 엔티티 (일반적으로 데이터이지만 항상 NIT)가 모두 런타임에 동일하게 보이고 동일하게 행동 할 수있는 공통 인터페이스를 공유하는 소프트웨어 코딩 추상화입니다. 우리는이를 개발 기술로 사용하여 광범위한 유사하지만 동일한 사례에 비해 일관된 동작을 시행하여 절대 최소 구현으로 버그와 불일치에 대한 기대를 줄입니다.

폴.

다형성 == 다중 클래스 + 동일한 방법 서명 + 클래스 별 행동.

최상의 정의가 여기에 제공된 것 같습니다. 2 센트 다른 관찰자들을 위해서만 제발. 더 도움이되기를 바랍니다.

다형성에는 두 가지 종류가 있습니다.

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

그것은 단순히 메소드 과부하 및 연산자 과부하입니다

2.  Run time or (dynamic) polymorphism.

첫 번째 용어 Java 및 C ++ 용어에서 상속됩니다.

그러나 .그물 용어 만 두번째 것 (내말은 시간 다형성을 실행하십시오)는 실제로 다형성으로 여겨지고 단순히 불려집니다 다형성.

그리고 내가 아는 한 구현을위한 세 가지 방법이 있습니다 (런타임) 다형성.

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

인터페이스 기반 다형성의 간단한 예 :

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

산출:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

단일 물체의 여러 형태를 다형성이라고합니다.

다형성은 물체가 동일한 호출을 위해 다르게 나타나고 다르게 행동하는 능력입니다. 예 : 각 동물이 나타나고 다르게 소리를냅니다 (당신이 그것을 때렸을 때 :))

다형성은 객체를 슈퍼 타입의 인스턴스로 취급 할 수있는 프로그래밍 언어의 특징입니다.

다른 유형의 유사한 작업 세트에 단일 이름을 제공합니다. 잘 수행되면, 비유는 분명합니다. 예를 들어 "추가"숫자를 산술적으로 추가하고 "길이를 합산)에 의해 문자열을"추가 "합니다.

다형성

다른 객체는 다른 방식으로 동일한 메시지에 응답 할 수 있으며, 객체가 정확한 유형을 모르고 서로 상호 작용할 수 있습니다.

을 통해:http://www.agiledata.org/essays/objectorientation101.html

이것이 내가 항상 따르는 정의입니다.

두 가지 객체는 동일한 의미로 동일한 메시지에 응답하면 (특정 프로토콜과 관련하여) 다형성입니다 (특정 프로토콜과 관련하여).

다형성은 메시지에 관한 것입니다. 동일한 의미로 동일한 메시지 세트에 응답 할 수있는 것입니다.

두 객체가 빈에 응답 할 수 있다면? 그러나 메시지의 의미는 다릅니다. 그들은 다형성이 아닙니다.

하위 레벨의 다형성은 인터페이스 인스턴스에서 인터페이스의 구현자가 정의하는 메소드를 호출하는 능력입니다.

다형성 프로그래밍 기능을 할 수 있는 객체에는 많은 유형('형상')에 있으로 취급하는 모든 사람들의 형식에 따라 무엇을 할 필요가 없이 알거나 배려에 대한 다른 형식입니다.

다형성은 언어 기능으로, 높은 수준의 알고리즘 코드는 여러 유형의 데이터에서 변경되지 않은 작동을 허용합니다. 그리고 다른 문장, 그것이 무엇이든 ...; -p.

(C ++ 지지대 유형은 내 대답에 나열되고 대조됩니다. C ++의 다형성 )

다형성 개념은 최근 현상이되었습니다. 여기 실제 드리프트가 있습니다. 런타임은 슈퍼 클래스의 참조로 호출 해야하는 하위 메드를 정의합니다. 이제 실제로 무엇을 의미합니까? 그것은 실제로 아무것도 의미하지 않습니다. 다형성없이 단순히 코딩 할 수 있습니다. 왜? 다형성을 얻지 못하면 모든 서브 클래스 함수 정의를 외우야했습니다. 다형성은 우리를 실제로 이것으로부터 구해줍니다.

목록을 다음과 같이 정의 할 수 있습니다.

List list = new List();

그러나 당신이 확인하면 IList, 당신은 다음과 같이 인터페이스의 이점을 얻을 수 있습니다.

IList list = new List();

그리고 사용하십시오 IList 자유롭게 참조하십시오. 가정합니다 IList 다른 클래스에서도 구현되며 다시 알 수없는 클래스의 메소드를 사용할 수 있습니다. IList 그 클래스 이름을 기억하지 않고 참조. 놀랍지 않습니까?

이제 더 가치있는 정보가 다가오고 있습니다.
Java는 기본적으로 다형성이며 .NET 및 C ++는 MS에서는 기본 기능을 선언해야합니다. virtual (및 .NET에서 override 예어).

또한 다형성에는 2 가지 필수 규칙이 있습니다. 하나는 상속 (인터페이스 명소를 통해 또는 클래스 확장을 통해)이고 다른 하나는 상속입니다. 재정의 없이는 다형성이 존재하지 않습니다. 메소드 과부하 (항상 단일 클래스에서)는 또한 "최소한의"다형성 유형입니다.

주어진 방법 시그니처의 경우, 다른 방법 구현이 다른 계층 적으로 관련된 클래스에 대해 실행됩니다.

다형성은 특정 구현이 필요하지 않고 공통된 방식으로 공통 인터페이스 (또는 공통 기본 클래스를 확장)를 구현하는 다른 클래스를 사용하는 능력이며, 공통 인터페이스에서 사용 가능한 방법 만 사용하는 능력입니다.

IE : Java에서 ArrayList 및 LinkedList는 모두 구현 목록으로, 변수를 목록으로 선언하는 경우, 변수가 ArrayList 또는 LinkedList로 변수가 발생한 경우에 관계없이 항상 목록에서 허용되는 작업을 수행 할 수 있습니다.

동일한 유형의 엔티티 (즉, 동일한 인터페이스를 구현하거나 동일한 클래스에서 파생)는 다른 방식으로 (동일한 메소드 이름으로) 행동합니다.

다른 클래스에서 동일한 서명의 방법을 구현하는 것은 (확장 또는 구현을 사용하는 일종의 상속 관계를 갖는가)는 방법을 무시하고 다형성이라고 생각합니다. 왜냐하면 우리는 동일한 방법 서명의 여러 형태를 달성하기 때문입니다.

나는 때때로 물체가 동적으로 호출되는 것 같다. 당신은 대상이 클래식 모양의 폴리의 삼각형, 사각형 등인지 확실하지 않습니다. 예시.

따라서 그러한 모든 것들을 남겨두기 위해, 우리는 파생 클래스의 기능을 호출하고 동적 클래스 중 하나를 호출한다고 가정합니다.

sqaure, 삼각형 또는 사각형이든 상관하지 않을 것입니다. 당신은 그 지역에 관심이 있습니다. 따라서 GetArea 방법은 전달 된 동적 물체에 따라 호출됩니다.

다형성은 다른 데이터 유형의 입력 데이터를 수락하도록 자동으로 적응하는 기능의 능력입니다. '두 개의 복식'1.1 '과'2.2 '를'추가하고 '3.3'또는 '두 줄'스택”과 '오버 플로우'를 추가하고 'stackoverflow'를 얻을 수 있습니다.

다형성은 다른 물체가 다른 방식으로 동일한 방법에 반응 할 때입니다. 예를 들어, 사람이 도로를 걷는 동안 자동차가 도로에서 움직입니다. 그것들은 다른 방식으로 같은 도로에 반응하는 두 가지 물체입니다.

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