Étant donné un ensemble de classes de tuple dans un langage OOP: Pair, Triple et Quad, devrait Triple paire sous-classe, et sous-classe Quad Triple? Le problème, tel que je le vois, est de savoir si un Triple devrait être substituable en tant que Pair, et de même Quad pour Triple ou Pair. Si Triple est également une paire et Quad est également un Triple et une paire. Dans un contexte, une telle relation pourrait être utile pour l'extensibilité - aujourd'hui, cette chose renvoie une paire de choses, demain j'en ai besoin pour retourner un triple sans casser les appelants existants, qui n'utilisent que les deux premiers des trois.Les tuples doivent-ils se sous-classer les uns les autres?
D'un autre côté, devraient-ils être chacun de types distincts? Je peux voir des avantages dans la vérification de type plus forte - où vous ne pouvez pas passer un Triple à une méthode qui attend une paire.
Je penche pour l'utilisation de l'héritage, mais j'apprécierais vraiment l'apport des autres? PS: Au cas où cela serait important, les classes seront (bien sûr) génériques. PPS: D'un point de vue plus subjectif, les noms devraient-ils être Tuple2, Tuple3 et Tuple4?
Edit: Je pense à ces groupes plus que faiblement couplés; pas spécifiquement pour des choses comme les coordonnées x/y x/y/z, bien qu'ils puissent être utilisés pour cela. Ce serait des choses comme avoir besoin d'une solution générale pour plusieurs valeurs de retour 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é des tuples.
Pouvez-vous améliorer votre réponse avec un exemple (rapide/simple) de l'échec de la surcharge? –
BTW, c'était en jouant avec Haskell que j'ai d'abord été exposé au concept des tuples. :) –