шаблон проектирования - строительство домов - PullRequest
0 голосов
/ 07 ноября 2010

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

 class crew

    blueprint     

    fn frame_house
        fn get_wood
          fn_drive_to_store
        fn do_framing
        get_wood
        do_framing

    fn carpet_house
        fn buy_carpet
        fn install carpet 
        buy_carpet
        do_framing

 -

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

each blueprint
  laborers = new crew(blueprint)
  laborers.frame_house
  laborers.carpet_house
-

Или я хочу, чтобы мои работники были более точными?

class FrameCrew inherits Crew
      fn get_wood
        fn drive_to_store
      fn do_framing
        get_wood
        do_framing
-

и тогда я смогу ....

foreach blueprint
   #send crews to work with the blueprint

Или я мог бы использовать их в проекте, в котором есть и проект, и конструктор, выполняющий роль мастера?

class Project

   blueprint

   fn construct
      #create and deploy crews

   class FrameCrew
   class CarpetCrew

, а затем просто спроецируйте каждый проект.

Кажется, что, как я думаю об этом, я получу программу, которая выглядит следующим образом:

  -
   - 
    -
     - 
      - 

  -
   - 
    - 
     -
      - 

 -
 -

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

спасибо, Брэндон

1 Ответ

1 голос
/ 07 ноября 2010

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

Некоторые аспекты, такие как принцип единой ответственности, позволяют разложить проблему.Таким образом, отделяя каркасную работу от ковровой работы, вы выигрываете в том, что каждый кусочек легче понять, но это правда, что хороший процедурный код также может этого достичь.Сначала есть лучшие методы структурирования.Классы скрывают естественную информацию, у нас есть личные данные и методы.Таким образом, детали того, что значит построить дом, скрыты внутри этого класса.Вы можете добиться таких результатов в процедурных языках, но обычно это требует больших усилий.

Во-вторых, у вас есть возможность использовать полиморфизм, различные реализации с одной и той же ответственностью.Это окупается в будущем, когда вам нужно согнуть вещи, например, Carpeting действительно особенный король напольных покрытий, поэтому вы можете также представить Tiling.

Общая отдача в ОО имеет тенденцию проявляться в будущей гибкости и ремонтопригодности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...