среда, 7 декабря 2011 г.

Почему надо проектировать "от обязанностей", или сколько функций выполняет чашка?


В одном из комментариев к своей статье, желая подчеркнуть важность учёта обязанностей при проектировании программы, я написал:

"У каждой кружки есть своё предназначение. Есть кофейные чашки, есть чашки из чайного сервиза, есть чашки для чайной церемонии, есть походные кружки, кружки офисные, подарочные и т.д. В зависимости от назначения они приобретают нужную форму и размеры, а также - подбирается материал для их изготовления. Если в игру был добавлен объект "смертельно ядовитая трава", то он был добавлен не просто так, а потому что, например, уровень для прохождения без этого объекта - слишком лёгкий. Таким образом, его задача - "усложнить прохождение уровня".

Один из коллег в личной переписке на это возразил:

  1. Если задумываться о назначении чашки, то будет сложно налить в чайную чашку кофе, а в кофеную – чай.
  2. Гораздо проще снабдить обычную чашку двумя интерфейсами – "налить кофе" и "налить чай".

В качестве возражения на это замечание коллеги мне бы хотелось сказать вот что...

Следует различать разные виды человеческой деятельности и классы решаемых задач:

  1. Есть задачи, которые можно решить приспособлением и/или использованием уже готового предмета. К таким задачам относится использование чайной чашки для питья кофе. По сведениям историков, похожие задачи с лёгкостью решали наши древние предки – доисторические люди. По словам биологов, такие задачи могут решать и человекообразные обезьяны.
  2. Есть задачи, решение которых требует создания принципиально новых орудий труда. К числу таких задач относятся: проектирование программы, проектирование посуды и т.п.

Одно дело – приспособить готовое орудие труда для выполнение похожих функций, а другое дело – сконструировать новое орудие труда.

Та же чашка выполняет множество полезных функций:

  1. Удерживает жидкость, чтобы та не разлилась под действием силы тяжести.
  2. Сохраняет некоторое время тепло, чтобы жидкость не остывала слишком быстро.
  3. Позволяет охладить верхний слой жидкости, чтобы человек не обжёг свои губы и рот.
  4. Позволяет легко налить в неё жидкость.
  5. Имеет приспособление для того, чтобы человек мог удерживать её в руках.
  6. Защищает руки и пальцы от ожога.
  7. Отмеряет порцию напитка.
  8. Доставляет эстетическое удовольствие (например, за счёт своей формы и рисунка на боку).
  9. И т.д.

Чашка является далеко не самой простой технической системой, которая выполняет много полезных функций. Конструкция чашки зависит от функций, которые она выполняет, а также – от моделей её использования в разных культурах.

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


Источник картинки: http://geritul-fin.ru/?page_id=313

На востоке "чашку" принято держать в ладони. Такая "чашка" имеет специальную форму, которая позволяет легко её удерживать в ладони. Эта "чашка" называется "пиалой". Чтобы защитить ладонь от ожога, пиала имеет утолщение со стороны дна.



Источник картинки: http://kazan.olx.ru/iid-175734474

Для походной кружки очень важно, чтобы она не разбилась от соприкосновения с предметами в рюкзаке или от случайного падения на землю. Поэтому походные кружки делают из металла – нержавеющей стали или алюминия. Походная кружка может иметь крыжку, чтобы чай не расплескался, и крепление, которое позволяет её подвесить к рюкзаку.


Источник картинки: http://nigdenet.ru/podarki/13/409

Офисные кружки вмещают в себя в два раза больше жидкости, чем обычные чашки. Больший объём офисной кружки позволяет сократить количество хождений работника на офисную кухню и, таким образом, способствует меньшему отвлечению человека от работы.


Источник картинки: http://www.payfavor.ru/termokruzhki/item/396

Сервизные чашки имеют меньший объём по сравнению с офисными кружками. Это обусловлено тем, что на праздничном столе, как правило, имеется чайник, из которого гости могут наливать себе чай по мере необходимости.


Источник картинки: http://www.idh.ru/jornal/archive/article100000218.html

Каждый напиток употребляется определёнными порциями. Это влияет на объём чашки, предназначенной для данного напитка. Кофе эспрессо подаётся порциями 30 и 60 мл. в чашках объёмом 60 – 70 мл.



12 комментариев:

  1. материал грамотный, буквы нет. Празднечный ожёг и экспрессо это весело :)

    ОтветитьУдалить
  2. ребят, у вас очень много свободного времени))) даже переписываться на подобные темы успеваете

    ОтветитьУдалить
  3. Дмитрий, просьба выражать своё мнение в конструктивной форме. Спасибо!

    ОтветитьУдалить
  4. При проектировании ПО иногда очень важным является универсальность, но тут тяжело провести аналогию с чашками.

    ОтветитьУдалить
  5. Универсальные чашки тоже существуют (см., например, здесь - http://gorod-atv.ru/shop/4715.html).

    В обычной технике так же господствуют две противоположные тенденции: универсализация и специализация.

    ОтветитьУдалить
  6. А как насчет использования чашки, как пепельницы, черпака, ложки и т.д.?

    ОтветитьУдалить
  7. Анонимный, я ответил на Ваш вопрос в начале статьи.

    ОтветитьУдалить
  8. Architecture Consists of Function Related by Concept To Form (программа открытых курсов по системной инженерии Массачусетского технологического института)

    ОтветитьУдалить
  9. Простите, и к чему это все было написано? Вы произвели полную исчерпывающую классификацию типов чашек? Нет. Описали способы быстрого описания разного вида чашек? Опять же нет.
    Предназначение, цель, использование, интерфейсы. Это все куча терминов, относящихся к разным областям программной инженерии.

    Всего лишь два слова.
    Композиция. Контракты.
    И вместе это композиция контрактов. Где каждый контракт отвечает за свою крохотную область обязанностей. И тогда каждую кружку можно представить совокупностью таких контрактов, которые она реализует. Например - походная кружка инкапсулирует контракты - прочный, защита от расплескивания, большой объем. Офисная кружка - зашита от расплескивания, странные прибамбасы и т.д.
    Рекомендую к прочтению - J.Greenfield,K.Short Software Factories.

    ОтветитьУдалить
  10. Анонимный, статья была написана для того, чтобы показать, как конструкция системы зависит от её назначения.

    Ваше замечание замечание про контракты непонятно. Проясните.

    ОтветитьУдалить