Подрыв мозга
Новичок
Ну я, например, решаю вполне конкректные а не абстрактные задачи. Меня не интересует теоретическая возможность сделать что-то, если в реальной жизни это не будет работать. Я дал несколько вариантов декомпозиции, альтернативной множественному наследованию в различных ситуациях. Одной из ситуаций был пример с магазином, где, по моему мнению, объекты вообще не нужны. Этот пункт вызвал наибольшие споры. Попробую объяснить подробнее.Поэтому ещё раз говорю, что не стоит целиком распространять выводы касательно такой АБСТРАКЦИИ как ORM на ООП.
Объект (Object)- набор данных (полей) и методов для работы с ними.
Кортеж (Tuple) - просто набор данных, к которым можно обращаться по индексу.
Запись (Record) - то же, что и Tuple, но обращение к полям идет по имени.
В разных языках это реализовано по-разному. В JavaScript объекты могут динамически изменяться, в Java - нет. В F# есть туплы, в PHP нет - это вопросы реализации. Но концептуально - объект имеет определенную структуру, по которой он однозначно характерезуется, в то время как туплы/записи могут быть любыми. И я утверждаю, что когда структура данных неопределена заранее, как например, в CMS, то строить объектно-ориентированную модель бесполезно.
Пример 1.
Вам нужно сделать пятиэтажный запрос запрос к базе данных, делающий выборку из трех таблиц с четырямя join'ами. Типичная ситуация не так ли? Какой при этом должен быть возвращенный результат? Либо вы возвращаете коллекцию туплов (или их заменителей), либо коллекцию нехилых графов объектов.
Пример 2.
Как вы будете программироваь работу с объектами, если ваша CMS уже продана заказчику? Очевидно, что теперь он сам должен рулить со своим ассортиментом, и бизнесс-правила тоже он сам будет создавать - чем лучше ваша CMS, тем больше возможностей она предоставляет без перепрограммирования. Я не знаю, как это сделать, придерживаясь ООП-стиля.
Пример 3.
Касаемо 3D графики - у вас есть объекты Vector и Point, оба содержат поля x, y, z. Метод moveТоTheRight(Vector $vector) перемещает вектор вправо. Вы хотите такой же метод но который перемещает Point, так как сигнатуры у них совпадают, а не получится - классы разные, отсюда дубляж кода. В бизнес-логике такое тоже часто встречается.
Когда я говорю "фукциональное программирование" я намекаю на фукциональное программирование.Какой именно подход имел ввиду ты в своём посте?
Нет, она посвящена хранению объектов в базе, как раз с этим-то проблем нет. Я же говорю о том, что хранить в базе объекты во вполне конкретном случае, который я описал выше, вообще не нужно.ты случайно не эту статью начитался
