Уровни абстракции в функции - PullRequest
0 голосов
/ 30 мая 2018

Я читал книгу под названием «Чистый код» и застрял, когда автор пытался рассказать о том, как мы можем написать эффективную функцию. Он говорит: «Чтобы убедиться, что наши функции выполняют« одну вещь,«Нам нужно убедиться, что все операторы в нашей функции находятся на одном уровне абстракции».Так что же именно хочет передать автор по уровням абстракции?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

Например, если вы моделируете лампу, которую вы можете включить или выключить, вы можете зафиксировать эти возможности в двух функциях.switchON() и switchOFF().Или вы могли бы предпочесть реализовать те же способности, используя одну функцию switch(b) с формальным параметром b и т. Д. Обдумывая эти соображения, само понятие lamp значительно упрощается, так как вы будетеинтересуют только некоторые аспекты реальной лампы: состояние (ВКЛ / ВЫКЛ), цвет и т. д. В зависимости от роли, которую лампа будет играть по отношению к другим объектам, вы будете включать некоторые характеристики и игнорировать многие другие (например, цену, вес).и т. д.).

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

Что такое уровень абстракции тогда?Это набор атрибутов и поведений, которые представляют определенную черту, принадлежащую модели: тот, который имеет отношение к достижению какой-то цели.

Например, если ваша цель - моделировать светофор, ваш Лампа должна иметь возможность только включать и выключать и иметь цвет внутри ЗЕЛЕНЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ.

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

Идея, которую автор пытался донести, состоит в том, что было бы плохо для функции контроллера, такой как circumvent(accident), включать строку кода, касающуюся реализации switch(b), потому что такая строка кода принадлежитдругой уровень детализации, т. е. в другом уровне абстракции, который соответствует реализации лампы.Точно так же было бы плохо для тела circumvent(accident) ссылаться на какое-то условие SELECT базы данных, где хранится информация, потому что такая строка кода хорошо подходит только для уровня хранилища данных (который знает очень малоо accident).

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

0 голосов
/ 05 июня 2018

один и тот же уровень абстракции:

function start_a_war() {
  (targets_to_destroy, targets_to_occupy) = select_targets()
  launch_rockets_at(targets_to_destroy)
  send_occupation_forces(targets_to_occupy)
}

различные уровни абстракции:

function get_diploma() {
  select_industry()
  select_university()
  study_and_pass_all_exams()
  go_to_administration()
  if (secretary_is_sexy()) {
     smile()
  }
  say('hi, i'm john doe, i've just passed all exams and i want my diploma')
  put_right_hand_into_the_pocket()
  grab_your_id()
  while(id_not_visible_to_the_secretary) {
    raise_right_hand_by(10 cm)
  }
  ...
}

внутри функции, вы всегда должны поддерживать один и тот же уровень обобщения (абстракции)

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