0 votes

Les tuples doivent-ils se sous-classer les uns les autres ?

Étant donné un ensemble de classes de tuple dans un langage OOP : Pair, Triple et Quad, est-ce que Triple devrait sous-classer Pair, et Quad sous-classer Triple ?

La question, à mon sens, est de savoir si un triple doit pouvoir être remplacé par une paire, et de même un quad pour un triple ou une paire. La question de savoir si un triple est également une paire et un quadruple est également un triple et une paire.

Dans un certain contexte, une telle relation peut être utile pour l'extensibilité - aujourd'hui, cette chose renvoie une paire de choses, demain j'aurai besoin qu'elle renvoie un triple sans interrompre les appelants existants, qui n'utilisent que les deux premiers des trois.

D'autre part, doivent-ils être des types distincts ? Je vois l'intérêt d'un contrôle de type plus fort - où l'on ne peut pas passer un Triple à une méthode qui attend un Pair.

Je penche pour l'utilisation de l'héritage, mais j'apprécierais vraiment l'avis d'autres personnes ?

PS : Au cas où cela aurait de l'importance, les classes seront (bien entendu) génériques.

PPS : D'un point de vue beaucoup plus subjectif, les noms devraient-ils être Tuple2, Tuple3 et Tuple4 ?


Edit : Je pense à ces groupes plutôt comme des groupes à couplage lâche ; pas spécifiquement pour des choses comme les coordonnées x/y x/y/z, bien qu'ils puissent être utilisés pour cela. Il s'agirait de choses comme le besoin d'une solution générale pour des valeurs de retour multiples d'une méthode, mais sous une forme avec une sémantique très simple.

Cela dit, je suis intéressé par toutes les façons dont les autres ont utilisé les tuples.

0voto

Lawrence Dol Points 27976

Gilad Bracha a blogué sur les tuples que j'ai trouvé intéressant de lire.

L'un des points qu'il a soulevés (que ce soit à juste titre ou non, je ne peux pas encore en juger) est le suivant :

Il est préférable de définir les tuples littéraux comme étant en lecture seule. L'une des raisons en est que les tuples en lecture seule sont plus polymorphes. Les tuples longs sont des sous-types des tuples courts :

{S. T. U. V } <= {S. T. U} <= {S. T} <= {S}

[Les tuples en lecture seule sont covariants :

T1 <= T2, S1 <= S2 ==> {S1. T1} <= {S2. T2}

Cela semble indiquer que mon penchant pour l'utilisation de l'héritage est peut-être correct, et contredirait amit.dev lorsqu'il dit qu'un Triple est pas une paire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X