Учитывая набор классов кортежей в языке ООП: пара, тройной и квадратный, должна быть тройная подкласса пара и квад-подкласс Triple?Должны ли кортежи подкласса друг другу?
Проблема, как я вижу, заключается в том, что тройка должна быть заменяемой как пара, а также Quad для Triple или Pair. Тройной также Пара и Квадрат также a Triple и пара.
В одном контексте такие отношения могут быть ценными для расширяемости - сегодня эта вещь возвращает пару вещей, завтра мне нужно, чтобы она вернула Тройку, не нарушая существующих абонентов, которые используют только первые два из трех.
С другой стороны, должны ли они быть отдельными типами? Я вижу преимущество в более сильной проверке типов - там, где вы не можете передать тройку методу, который ожидает пару.
Я склоняюсь к использованию наследования, но буду очень благодарен за вклад от других?
PS: В случае, если это имеет значение, классы будут (конечно) носить общий характер.
PPS: На пути более субъективная сторона, должны ли имена быть Tuple2, Tuple3 и Tuple4?
Редактировать: Я думаю об этом больше как о слабосвязанных группах; не специально для таких вещей, как координаты x/y x/y/z, хотя они могут быть использованы для таких целей. Это было бы похоже на то, что нужно общее решение для множественных возвращаемых значений из метода, но в форме с очень простой семантикой.
Тем не менее, меня интересуют все способы, которыми другие на самом деле использовали кортежи.
Можете ли вы улучшить свой ответ с помощью (быстрого/простого) примера, когда перегрузка не выполняется? –
BTW, он играл с Haskell, что я впервые познакомился с концепцией кортежей. :) –