ООП: что главнее, матрица или вектор
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (7) 1 2 [3] 4 5 ... Последняя » все ( Перейти к последнему сообщению ) |
ООП: что главнее, матрица или вектор
|
Сообщ.
#31
,
|
|
|
|
|
Сообщ.
#32
,
|
|
|
|
Чего нет в предметной области? Векторы и матрицы есть в предметной области. Уравнение - это поиск корней многочлена. А многочлен второй степени таки частный случай многочлена третьей степени с коэффициентом 0 у переменной в третьей степени. Если введён частный оператор для частного случая матриц, это не значит, что частный случай матриц - не матрица ![]() Цитата D_KEY @ Так разные там "являются" Ой ли? Цитата D_KEY @ Ты ж сам про принцип подстановки упомянул Ага. Давай вот на примере чисел: целые наследуются от действительных или действительные от целых? А комплексные? А вообще прикольно как вы юлите И споры по предметной области (т.е. математике) сейчас пойдут, и попытки её натянуть на используемые принципы разработки. И всё только лишь для того, чтобы не признавать, что инструмент имеет ограничения и для подобных случаев не подходит. |
|
Сообщ.
#33
,
|
|
|
|
Ещё как является. К-т при x^3 равен нулю. |
|
Сообщ.
#34
,
|
|
|
|
Цитата lamer2 @ Цитата BlackEmperor @ Попробую тогда спросить: а что будет базой для чего - квадрат для прямоугольника или прямоугольник для квадрата? Не любой прямоугольник - квадрат Поэтому базовым будет прямоугольник. Пусть так... Предположим у прямоугольника есть методы получения длин его сторон GetA и GetB, которые для прямоугольника возвращают разные значения. Квадрат будучи потомком прямоугольника наследует методы, и оба метода возвращают теперь одно и то же значение (это же квадрат). Получаем избыточные методы. В коде так же есть путаница, кто-то для получения длины стороны квадрата вызывает GetA, а кто-то GetB. Получаем не очень хорошо читаемый код. Особого криминала нет, но есть неприятный мусор и каждая попытка как-то прикрыть этот мусор будет очередным костылем. По Вашему мнению, все же квадрат и прямоугольник связаны и прямоугольник база для квадрата? |
|
Сообщ.
#35
,
|
|
|
|
Операции одинаковые Один из векторов надо "положить набок", и будет в чистом виде умножение матриц. |
|
Сообщ.
#36
,
|
|
|
|
Цитата MyNameIsIgor @ Ага. Давай вот на примере чисел: целые наследуются от действительных или действительные от целых? А мнимые? От простого к сложному. В математике от целых строться действительные и от них мнимые, а затеем кватернионы. Но вот числа как раз таки исторически сгруппированы в единый класс и имеют общие |
|
Сообщ.
#37
,
|
|
|
|
Цитата BlackEmperor @ Получаем избыточные методы. В коде так же есть путаница, кто-то для получения длины стороны квадрата вызывает GetA, а кто-то GetB. Надо применить protected-наследование, чтобы у квадрата-наследника был доступен только метод GetA |
|
Сообщ.
#38
,
|
|
|
|
Цитата BlackEmperor @ Особого криминала нет, но есть неприятный мусор и каждая попытка как-то прикрыть этот косяк ООП будет очередным костылем. fixed Цитата Pavia @ От простого к сложному Впервые слышу такой принцип проектирования. Цитата Pavia @ В математике от целых строться действительные и от них мнимые, а затеем кватернионы. В таком направлении развивалась математика На самом же деле действительные - частный случай комплексных, а целые - частный случай действительных. А предложенная вами иерархия не отвечает принципу подстановки. |
|
Сообщ.
#39
,
|
|
|
|
Цитата lamer2 @ Операции одинаковые Один из векторов надо "положить набок", и будет в чистом виде умножение матриц. Операции разные так как определения у них разные. Более того я молчу что у матриц несколько операций умножения. Если вы строите классы матрицы и вектора как дерево классов для тензерного вычисления, то тут ещё можно было бы согласиться. Но матрицы и вектора это не только тензоры они применяются для широкого круга задач. И функции и операции с ними очень различны. А процент общего очень мал. |
|
Сообщ.
#40
,
|
|
|
|
Цитата lamer2 @ Цитата BlackEmperor @ Получаем избыточные методы. В коде так же есть путаница, кто-то для получения длины стороны квадрата вызывает GetA, а кто-то GetB. Надо применить protected-наследование, чтобы у квадрата-наследника был доступен только метод GetA Хорошо. А если будет решено, что квадрат будет базой для некоторого объекта "крышка стола" и тут я опять получаю доступ к методам класса "прямоугольник", когорые были открыты / защищены и так же мне доступны при защищенном наследовании. К тому же есть теперь побочный эффект, квадрат не приводится к прямоугольнику. Нормальное С++ приведение, а не С-каст, не даст привести указатель или ссылку в данном случае квадрата на прямоугольник, так как защищенное и закрытое наследование не дадут сделать такое приведение. Получается, что квадрат - это уже не прямоугольник? |
|
Сообщ.
#41
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Ты ж сам про принцип подстановки упомянул Ага. Давай вот на примере чисел: целые наследуются от действительных или действительные от целых? А комплексные? А чего тебе наследоваться-то так хочется? |
|
Сообщ.
#42
,
|
|
|
|
Цитата MyNameIsIgor @ Ага. Давай вот на примере чисел: целые наследуются от действительных или действительные от целых? А комплексные? Принцип is A прекрасно помогает в данном случае. |
|
Сообщ.
#43
,
|
|
|
|
Цитата D_KEY @ А чего тебе наследоваться-то так хочется? Из-за чёткого отношения "является" в предметной области. Так что либо мы ему последовательно следуем в моделируемых сущностях, либо признаём, что ООП далеко не всегда позволяет удобно для человека отражать предметную область. |
|
Сообщ.
#44
,
|
|
|
|
BlackEmperor, зависит от операций, которые ты определил для прямоугольника, квадрата и пр. Скажем, иммутабельный квадрат вполне себе иммутабельный прямоугольник
|
|
Сообщ.
#45
,
|
|
|
|
Цитата D_KEY @ BlackEmperor, зависит от операций, которые ты определил для прямоугольника, квадрата и пр. Скажем, иммутабельный квадрат вполне себе иммутабельный прямоугольник ![]() Некоторые вещи кажущиеся так близкими друг другу не имеют ничего общего. Все зависит от предметной области, для которой создается сущность, какие методы и поля для той или иной сущности интересны в ракурсе той или иной системы. А от этого уже и будет зависеть связаны наследованием сущности или нет. |