Re[7]: winapi - ООП или нет
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 17.05.07 14:25
Оценка: :)
Здравствуйте, FDSC, Вы писали:

К>>Ага, а функции работы с матрицами — методами матриц, с числами — методами чисел (например sin, cos) и т.д.


FDS>Смотря как они реализованы. Или ты считаешь, что если объект представляет матрицу, то это уже не объект???


Нет, не объект. Всё-таки даже в не всё должно быть объектом. Например, числа никогда объектами не являются. Если мы объявляем переменную типа int, то мы потом можем сколько угодно раз изменять её. Но мы не можем, присовив этой переменной, скажем, единицу, изменить саму единицу. Единица в данном случае — нечто целое и неделимое.

Думаю, ООП работает не только с объектами, но и со "значениями". Значениям нельзя посылать сообщения, их внутренняя структура неизменна, у них по-другому определятеся identity. Значения могут передаваться в сообщениях. Как представлять данную сущность — через значение или через объект — решается на основе опыта.

Приведу пример с теми же матрицами. Если матрицу сделать объектом, то матрица должна быть изменяемой. Т.е. должны быть такие сообщения, которые изменяют отдельные компоненты. При этом разумно к объекту "матрица" прикрутить события. Иначе, если мы присвоим матрицу 4-го порядка чему-нибудь вроде RenderingDevice, а потом станем изменять её компоненты, то это никак не затронет картинку, воспроизводимую RenderingDevice. Кроме того, уже не будет объекта IdentityMatrix типа Matrix, поскольку его можно будет изменить и это будет уже не IdentityMatrix. Вместо этого нужно будет иметь singletone-объект IdentityMatrixMaker, который будет посылать данной матрице такую серию сообщению, которая сделает её единичной.

Если же рассматривать матрицу как значения типа Matrix, то указанные проблемы отпадают. Правда, появляется проблема с тем, что Matrix — неизменяемое значение. Но это легко исправить, введя объект типа MatrixBuilder.
... << RSDN@Home 1.2.0 alpha rev. 672>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.