воскресенье, 9 февраля 2014 г.

[prog.flame] Какая страшная штука -- этот ваш ООП!

Настолько страшная, что нужно какие-то правила и ограничения для себя выдумывать:

Классы большей частью используются, как модули.

Наследование большей частью одноуровневое. Варианты разбираются через variable as Class.

Виртуальные функции и другие типы наследования и использования классов используются редко. Виртуальные функции они скрывают логику и плохо расширяются (см. expression problem). Наследование глубиной больше 1 тоже скрывает логику и его трудно сделать правильно.

Объекты классифицируются на неизменяемые и IORef-like. Неизменяемые всегда пересоздаются вместо изменений, IORef-like переписывают свое содержимое заново созданными значениями.

Последнее позволяет создавать коллекции, которые можно итерировать, не опасаясь вносить в них изменения.

Иначе, видимо, такая херня выходит... :)

Я, наверное, уже слишком старый и слишком больной на голову человек. Но, думается, лучше всего ООП вообще и использование ООП для проектирования ПО в частности, было описано всего в двух книгах. У Бьерна Страуструпа в его "Язык программирования C++" (если не ошибаюсь, начиная со второго издания там есть несколько глав, посвященных проектированию ПО, в третьем специальном издании они были точно и это было чуть ли не лучшее, что я читал по проектированию с применением ООП). И у Бертранда Мейера в "Объектно-ориентированное конструирование программных систем" (хотя там чуть ли не сразу идет проецирование материала на Eiffel).

Все остальное -- будь то хоть Гради Буч, хоть Алан Кей, хоть еще кто угодно -- все это фигня и пространное изложение богатства внутреннего мира автора.

Комментариев нет: