문제

OOP 언어로 튜플 클래스 세트가 주어지면 : 쌍, 트리플 및 쿼드, 트리플 서브 클래스 쌍 및 쿼드 서브 클래스 트리플이어야합니까?

내가 알 수 있듯이 문제는 트리플을 쌍으로 대체 할 수 있고 트리플 또는 쌍의 경우 쿼드와 마찬가지로 쿼드입니다. 트리플이든 또한 쌍과 쿼드 또한 트리플과 쌍.

한 맥락에서, 그러한 관계는 확장성에 가치가있을 수 있습니다. 오늘이 일은 한 쌍의 물건을 반환합니다. 내일 나는 세 가지 중 첫 두 개만 사용하는 기존 발신자를 깨지 않고 트리플을 반환해야합니다.

반면에, 그들은 각각 뚜렷한 유형이어야합니까? 더 강력한 유형 검사에서 혜택을 볼 수 있습니다. 쌍을 기대하는 방법으로 트리플을 전달할 수 없습니다.

나는 상속을 사용하는 것에 기대고 있지만 다른 사람들의 입력에 정말로 감사 할 것입니까?

추신 : 중요한 경우, 수업은 물론 일반적입니다.

PPS : 더 주관적인 측면에서 이름은 tuple2, tuple3 및 tuple4 여야합니까?


편집 : 나는 이것을 느슨하게 결합 된 그룹으로 생각하고 있습니다. x/yx/y/z 좌표와 같은 것들에 대해서는 구체적으로 사용되지 않지만, 이들은 사용될 수 있습니다. 방법의 여러 반환 값에 대한 일반적인 솔루션이 필요하지만 매우 간단한 의미를 가진 형태입니다.

즉, 나는 다른 사람들이 실제로 튜플을 사용한 모든 방법에 관심이 있습니다.

도움이 되었습니까?

해결책

다른 길이의 튜플은 다른 유형입니다. (어쨌든 많은 유형 시스템에서.) 강력하게 입력 된 언어로, 나는 그들이 컬렉션이어야한다고 생각하지 않을 것입니다.

이것은 더 많은 안전을 보장하기 때문에 좋은 것입니다. 튜플을 반환하는 곳은 일반적으로 다소 결합 된 정보와 함께 각 구성 요소가 무엇인지에 대한 암시 적 지식을 가지고 있습니다. 예상보다 튜플에서 더 많은 값을 전달하면 더 나쁩니다. 그게 무슨 뜻입니까? 상속에 맞지 않습니다.

또 다른 잠재적 문제는 과부하를 사용하기로 결정한 경우입니다. 튜플이 서로 상속되면 오버로드 해상도가 실패하지 않아야합니다. 그러나 이것은 아마도 과부하에 대한 더 나은 주장 일 것입니다.

물론, 특정 사용 사례가 있고 특정 행동이 도움이 될 것임을 알게 된 경우이 중 어느 것도 중요하지 않습니다.

편집 : 일반 정보를 원한다면 약간의 Haskell 또는 ML 제품군 (OCAML/F#)을 사용하여 사용 방법을 확인한 다음 자신의 결정을 형성하십시오.

다른 팁

일반적인 튜플 인터페이스를 만들거나 위에서 언급 한 컬렉션과 같은 것을 사용하고 쌍과 3 튜플 클래스가 해당 인터페이스를 구현해야합니다. 이렇게하면 다형성을 활용할 수 있지만 쌍이 임의 크기의 튜플보다 간단한 구현을 사용할 수 있습니다. 아마도 튜플 인터페이스에 .x와 .y 액세서가 처음 두 요소의 속기로 포함되며, 더 큰 튜플은 더 높은 지수가있는 품목에 적합한 자체 속기를 구현할 수 있습니다.

대부분의 디자인 관련 질문과 마찬가지로 답은 다음과 같습니다.

기존의 튜플 디자인을 찾고 있다면 tuple2, tuple3 등이 갈 길입니다. 상속 문제는 우선 트리플렛이 쌍의 한 유형이 아니라는 것입니다. 그것에 대한 동등한 방법을 어떻게 구현 하시겠습니까? 삼중 항은 처음 두 항목을 가진 쌍과 같습니까? 쌍 모음이있는 경우 트리플렛을 추가 할 수 있습니까? 도메인에서 괜찮다면 상속을 통해 갈 수 있습니다.

어쨌든, 그것은 이들 모두가 구현하는 인터페이스/초록 클래스 (튜플)를 갖는 것을 지불합니다.

그것은 당신이 필요로하는 의미론에 달려 있습니다.

  • 한 쌍의 반대는 비슷한 물체의 3- 튜플과 의미 적으로 호환되지 않습니다.
  • 극장 공간의 한 쌍의 좌표는 유클리드 공간의 3 튜플의 좌표와 의미 적으로 호환되지 않습니다.

당신의 의미론이 단순한 구성이라면 일반적인 클래스 튜플u003CN> 더 의미가 있습니다

나는 0,1,2 또는 무한대로 갈 것입니다. 예를 들어 NULL, 1 개체, 쌍 클래스 또는 일종의 모음.

쌍은 컬렉션 인터페이스를 구현할 수도 있습니다.

3-4 개의 항목 사이에 구체적인 관계가 있다면 아마도 이름이 지정 될 것입니다.

아마도 문제가 없어도, 나는 3 가지를 일반적인 방식으로 구체적으로 연결하고 싶은 경우를 생각할 수 없습니다.

길라드 브라차 튜플에 대해 블로그를 작성했습니다, 나는 흥미로운 독서를 찾았습니다.

그가 한 한 가지 요점 (아직 판단 할 수 없는지 여부에 관계없이)은 다음과 같습니다.

리터럴 튜플은 읽기 만 가장 잘 정의됩니다. 그 이유 중 하나는 준비된 튜플이 더 다형성이기 때문입니다. 긴 튜플은 짧은 튜플의 아형입니다.

{stu v} <= {st u} <= {S. t} <= {s}

그리고] 튜플 만보 다 공분산입니다.

t1 <= t2, s1 <= s2 ==> {s1. T1} <= {S2. T2}

그것은 상속을 사용하는 것에 대한 나의 성향이 옳을 수 있으며, 트리플이 ~ 아니다 한 쌍.

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