воскресенье, 29 января 2012 г.

Сказка о повторном использовании

Очередная цитата из книги Бертрана Мейера “Объектно-ориентированное конструирование программных систем”.

Эта сказка опубликована в разделе “Сказка о поиске классов”, но мое название, мне кажется более уместным (после прочтения будет ясно, почему).

Жил да был в стране ООП молодой человек, которому страстно хотелось узнать секрет нахождения классов. Он расспрашивал всех местных мастеров, но никто из них не знал этой тайны.

Будучи подвергнутым публичной епитимии Схемом-Блоком - аббатом Священного Порядка Стрелок и Пузырей, - он решил, что тому известна истина и настал конец его поискам. С трудом он отыскал пещеру Схема, вошел в нее и увидел Схема, погруженного в поиски вечного различия между Классами и Объектами. Осознав, что не здесь обретается истина, без единого вопроса он покинул пещеру и отправился в дальнейшие странствия.

Однажды он нечаянно подслушал разговор двух людей, один из которых занимался вталкиванием какого-то груза в тележку, а другой немедленно его выталкивал. Они шептались о неком старце, знающем секрет классов. Молодой человек решил найти этого великого Мастера. Много дорог он прошел, на многие горы он поднимался, многие реки пересекал, пока не нашел убежище Мастера. Поиски продолжались так долго, что он давно уже перестал быть молодым человеком. Но, как всем пилигримам, ему еще предстояло пройти очищение в течение тридцати трех месяцев, прежде чем он был допущен к объекту своих поисков.

Наконец, в один из темных зимних дней, когда снег покрыл все окружающие горные вершины, он вошел в комнату Мастера. С бьющимся сердцем, пересохшим от волнения голосом он задал свой сакраментальный вопрос: "Мастер, как мне найти классы?"

Мудрец склонил свою голову и ответил медленно и спокойно: "Возвращайся назад, откуда пришел. Классы уже найдены".

Оглушенный, он и не заметил, как слуги Мастера выводили его прочь. "Мастер", - теперь он почти кричал, - "пожалуйста, еще только один вопрос. Как называется эта история?" Старый Учитель покачал головой: "Разве ты еще не понял? Это сказка о повторном использовании".

К сожалению, что бы нам ни говорили адепты объектной ориентации, на сегодняшний день повторное использование в основном ограничено библиотеками, и в меньшей степени повторным использованием бизнес-классов. Конечно же, у ООП масса других полезных свойств, но без должного мастерства использовать повторно части бизнес логики весьма сложно.

Мейер в своей книге повторяет, наверное, десятки раз о том, что в современном мире проектирование должно сводиться не к “выявления” новых абстракций, а к выбору готовых классов, которые можно было бы использовать повторно.

На данный момент, это все еще является сказкой и я, честно говоря, сомневаюсь, что она когда-либо станет былью.

3 комментария:

  1. Проблема не в ООП, как не пытаются адепты ФП в этом убедить программерское сообщество. А в отсутствии методов вычленения абстракций, обобщений на уровне мышлений, проектирования. Примерно как- ну знаешь ты на отлично русский язык - напиши бестселлер!
    ФП или иной подход ничего не даст, потому что любое программирование - это запись уже формализованных знаний, алгоритмов. Попробуйте формализовать любой юридический документ, в каком угодно виде, но чтобы можно было автоматически следовать этой формализации.
    Мейер же, мне кажется, предлагает поступать практически: для удешевления разработки, при ситуации когда идеальных абстракций до сих пор нет - выбирайте те что уже есть, и код которых - известен, вместе с его недостатками.

    ОтветитьУдалить
    Ответы
    1. мне кажется что давным давно уже должен был состояться фреймворк к-й определяет абстракцию "класс", как композицию требуемых абстракций. И соотв. задача проектировщика уже должна быть не в том чтобы искать классы и объекты, а в том чтобы описывать сущности наделяя их требуемым поведением, выбирая из списка уже найденных...

      Удалить
    2. по крайней мере во многих системах интерфейс(!) делает именно это - в любом геймдев софте - просто выбираешь необходимые абстракции для нового типа. Также точно должно быть и в коде. Ибо Хватит изобретать велосипед во всех октавах, нот то все равно семь.

      Удалить