복붙노트

[SCALA] 왜 피하고은 하위 유형?

SCALA

왜 피하고은 하위 유형?

나는 "전염병처럼"하위 유형을 피하는 스칼라 커뮤니티의 조언에 많은 사람들을 보았다. 하위 유형의 사용에 대한 다양한 이유는 무엇입니까? 대안은 무엇인가?

해결법

  1. ==============================

    1.분류 조성물의 입도, 즉 확장 성을 결정한다.

    분류 조성물의 입도, 즉 확장 성을 결정한다.

    예를 들어, 인터페이스, 예를 들어 비교, 그 콤바인 (따라서 conflates) 평등과 관계 연산자. 그러므로 평등 또는 관계형 인터페이스의 하나에 구성하는 것은 불가능합니다.

    일반적으로, 상속의 대체 원리는 결정 불가능하다. 러셀의 역설은 확장이 어떤 설정 자체를 포함 할 수 있습니다 (즉 가능한 모든 구성원 또는 하위 유형을 열거하지 않음)을 의미, 즉 자체의 하위 유형입니다. 그러나 하위 유형이며, 그 자체, 그 자체의 불변 완전히 열거 할 수 있어야합니다 어떤 순서로 식별 (결정)에, 따라서 더 이상 확장되지 않습니다. 이는 서브 타입 확장이 결정 불가능 상속하게하는 역설이다. 존재해야이 역설은, 다른 지식은 정적 인 것, 따라서 지식의 형성은 존재하지 않을 것입니다.

    함수의 입력은 함수 호출에 배치하여 출력 유형이 예상되는 경우, 입력 유형이 치환 될 수있는 임의의 출력, 즉 교체 할 수 있기 때문에 기능 조성물은 하위 유형의 surjective 교체된다. 그러나 조성물은 함수의 입력 인스턴스에 액세스하지 않고, 함수의 출력 인터페이스에 액세스 subtyping--의 전단 사 계약을하지 않는다.

    따라서 조성물은 확장과 decidable 모두 일 수있다 따라서 미래 (즉 바운드) 불변량을 유지할 필요하지 않는다. 그것이라도 유용 decidable입니다 곳이 전단 사 계약, 예를 유지하기 때문에 하위 유형은 훨씬 더 강력 할 수있다 슈퍼 타입의 불변의리스트를 정렬하는 기능, 하위 유형의 불변의리스트에 작동 할 수 있습니다.

    결론은 각 유형 (즉, 그것의 인터페이스)의 모든 불변을 열거되어, 이러한 종류 (조성 최대화 단위) 직교 확인한 다음 그 불변 직교하지 않을 것 확장을 수행 할 함수의 합성을 사용한다. 그것이라도 유용 모델링 퍼 인터페이스의 불변 및 서브 타입의 추가 인터페이스 (들)은 수퍼 인터페이스라도 유용 불변량에 직교하는 경우에 비로소 따라서 서브 타입에 적합하다. 따라서 인터페이스의 불변은 직교한다.

    분류 이론 해제 유형 함수 조성물을 보존 각 아형, 즉 펑터 실용적 및 모나드의 불변의 모델에 대한 규칙을 제공, 즉리스트에 대한 하위 유형의 전력의 상기 예를 참조.

  2. ==============================

    2.한 가지 이유는 등호 () 하위 입력이 포함될 때 제대로하기가 매우 어려운 것입니다. 자바의 평등 방법을 작성하는 방법을 참조하십시오. 특히 "함정 # 4 : 동치 관계로 등호를 정의하는 데 실패". 본질적으로 : 하위 입력 아래 평등의 권리를 얻기 위해, 당신은 이중 파견이 필요합니다.

    한 가지 이유는 등호 () 하위 입력이 포함될 때 제대로하기가 매우 어려운 것입니다. 자바의 평등 방법을 작성하는 방법을 참조하십시오. 특히 "함정 # 4 : 동치 관계로 등호를 정의하는 데 실패". 본질적으로 : 하위 입력 아래 평등의 권리를 얻기 위해, 당신은 이중 파견이 필요합니다.

  3. ==============================

    3.나는 일반적으로 관련이 lanaguage이 같은 "순수"(가능한 순수 함수로 많이 사용 예) 가능한 한 일을 위해, 그리고 하스켈과의 비교에서 오는 생각합니다. "프로그래머의 숙고"에서

    나는 일반적으로 관련이 lanaguage이 같은 "순수"(가능한 순수 함수로 많이 사용 예) 가능한 한 일을 위해, 그리고 하스켈과의 비교에서 오는 생각합니다. "프로그래머의 숙고"에서

    이 PSE 답변에서 언급 한 바와 같이 :

    그러나 실제 추천은 현재 개발중인 프로그램에 적합한 최적의 솔루션을 사용하는 것입니다.

  4. ==============================

    4.등, 클래스, 상속, OOP에 관련된 문제를 무시하고, 하위 유형에 집중 ... 우리는 아이디어 하위 유형이 유형 사이의 ISA 관계를 나타내고있다. 예를 들어, 유형 A와 B는 서로 다른 작업을해야하지만 아이 자 B 우리는 다음 A에 B의 작업 중 하나를 사용할 수있는 경우

    등, 클래스, 상속, OOP에 관련된 문제를 무시하고, 하위 유형에 집중 ... 우리는 아이디어 하위 유형이 유형 사이의 ISA 관계를 나타내고있다. 예를 들어, 유형 A와 B는 서로 다른 작업을해야하지만 아이 자 B 우리는 다음 A에 B의 작업 중 하나를 사용할 수있는 경우

    OTOH, 다른 기존의 관계를 이용하여, C의 하사의 B 경우 것은 우리가 일반적으로 언어는 당신이 더 좋은 구문을 하나 쓰기하자 C.에 B의 조작을 다시 사용할 수 있습니다, 대신 a.super.opOnB의 a.opOnB은은에있을 것 같은 조성물의 경우, cbopOnB

    문제는 대부분의 경우 두 가지 유형을 관련 더 이상의 방법이 있다는 것입니다. 예를 들어 리얼 컴플렉스 허수 부분에 0을 가정에 내장 될 수 있지만, 모두 다른 아형과 힘 하나 개 관계 하위 유형으로 간주 될 수 있도록 복합 바람직으로 볼 수, 허수 부분을 무시함으로써 실시간으로 매립 할 수있다. 또한, 더 많은 수의 관계 (예를 들어 극성 표현 세타 성분을 이용한 실시간 복잡한 뷰)이있다.

    공식 용어로 우리는 일반적으로 유형 간의 이러한 관계에 morphism에 말과 다른 속성과의 관계에 대한 morphisms의 특별한 종류를 (예를 들어 동형, 이체 동형)이 있습니다.

    일반적으로 하위 유형과 언어에서 ISA 관계에 더 많은 설탕과 우리가 우리가 바람직하지 관계를 사용할 때마다 불필요한 마찰을 참조하는 경향이 주어진 여러 가지 묻어가있다. 우리가 상속, 클래스 및 OOP를 가져올 경우 문제가 훨씬 더 가시적이고 지저분하게 섞는다.

  5. ==============================

    5.그것은 피할 수 있지만, 피할 수 있습니다 이유에서 또 다른 힌트를 제공하려고 왜 내 대답은 대답하지 않습니다.

    그것은 피할 수 있지만, 피할 수 있습니다 이유에서 또 다른 힌트를 제공하려고 왜 내 대답은 대답하지 않습니다.

    "형 클래스"를 사용하여 당신이 그들을 수정하지 않고 기존의 유형 / 클래스를 통해 추상화를 추가 할 수 있습니다. 상속은 어떤 클래스가 더 추상 클래스의 전문이라는 것을 표현하기 위해 사용된다. 그러나 형 클래스를 사용하면 기존의 수업을하고 모두가 공유 일반적인 특성, 예를 들어 그들이 대등 것을 표현할 수 있습니다. 당신이 그들에게 필적 인 관심을하지 않는 한 그리고만큼 당신도 그것을 통지하지 않습니다. 클래스는 당신이 그들을 사용하지 않는 일부 추상적 인 대등 유형에서 어떤 방법을 상속하지 않습니다. 그것은 조금 동적 언어로 프로그래밍 같아요.

    또한 읽기 :

    http://blog.tmorris.net/the-power-of-type-classes-with-scala-implicit-defs/

    http://debasishg.blogspot.com/2010/07/refactoring-into-scala-type-classes.html

  6. ==============================

    6.내가 스칼라 모르지만, 나는 진언을 생각하는 '상속을 통해 구성을 선호한다'는 다른 모든 객체 지향 프로그래밍 언어의 경우와 (과 하위 유형은 종종 '상속'와 같은 의미로 사용된다) 스칼라 방식 그대로 적용됩니다. 이리

    내가 스칼라 모르지만, 나는 진언을 생각하는 '상속을 통해 구성을 선호한다'는 다른 모든 객체 지향 프로그래밍 언어의 경우와 (과 하위 유형은 종종 '상속'와 같은 의미로 사용된다) 스칼라 방식 그대로 적용됩니다. 이리

    상속을 통해 구성을 선호?

    당신은 좀 더 많은 정보를 찾을 수 있습니다.

  7. ==============================

    7.나는 스칼라 프로그래머의 많은 전 자바 프로그래머 생각합니다. 그들은 객체 지향 하위 유형의 관점에서 생각하는 데 사용되는 그들은 쉽게 대부분의 문제에 대한 해결책 OO-처럼 찾을 수 있어야합니다. 그러나 기능성는 프로그래밍 발견 할 수있는 새로운 패러다임은, 그래서 사람들은 솔루션의 다른 종류를 부탁드립니다.

    나는 스칼라 프로그래머의 많은 전 자바 프로그래머 생각합니다. 그들은 객체 지향 하위 유형의 관점에서 생각하는 데 사용되는 그들은 쉽게 대부분의 문제에 대한 해결책 OO-처럼 찾을 수 있어야합니다. 그러나 기능성는 프로그래밍 발견 할 수있는 새로운 패러다임은, 그래서 사람들은 솔루션의 다른 종류를 부탁드립니다.

  8. ==============================

    8.이것은 내가 주제에 발견 한 가장 좋은 종이입니다. 종이에서 동기 부여 인용 -

    이것은 내가 주제에 발견 한 가장 좋은 종이입니다. 종이에서 동기 부여 인용 -

  9. from https://stackoverflow.com/questions/7266596/why-avoid-subtyping by cc-by-sa and MIT license