Language agnostic 函数中的抽象级别

Language agnostic 函数中的抽象级别,language-agnostic,object-oriented-analysis,Language Agnostic,Object Oriented Analysis,我正在读一本名为《干净的代码》的书,当作者试图讲述如何编写一个高效的函数时,我陷入了困境。他说,“为了确保我们的函数在做“一件事”,我们需要确保 我们函数中的语句都处于相同的抽象级别”。 那么作者到底想通过抽象层次传达什么呢?同样的抽象层次: function start_a_war() { (targets_to_destroy, targets_to_occupy) = select_targets() launch_rockets_at(targets_to_destroy)

我正在读一本名为《干净的代码》的书,当作者试图讲述如何编写一个高效的函数时,我陷入了困境。他说,“为了确保我们的函数在做“一件事”,我们需要确保 我们函数中的语句都处于相同的抽象级别”。
那么作者到底想通过抽象层次传达什么呢?

同样的抽象层次:

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)
  }
  ...
}
不同的抽象层次:

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)
  }
  ...
}

在函数内部,您应该始终保持相同的概括(抽象)

您可以将函数视为某种能力或行为的计算实现

例如,如果您正在建模一个可以打开或关闭的灯,您可以在两个函数中捕获这些功能,
switchON()
switchOFF()
。或者,您可以更喜欢使用一个带有形式参数
b
的单一功能
开关(b)
来实现相同的功能。在考虑这些因素时,您对灯的概念大大简化,因为您只会对真实灯的某些方面感兴趣:状态(开/关)、颜色、,等等。根据灯具与其他物体的关系,您将包括一些特征,而忽略许多其他特征(例如,价格、重量等)

定义模型的范围,即您将密切关注的特性,构成了您对lamp的抽象。你可以把抽象想象成一幅漫画,一个真实事物(或概念)的版本,与原作共享的属性尽可能少,而不是尽可能多地完全复制它

那么,抽象的层次是什么呢?它是一组属性和行为,代表模型所拥有的某个特性:与实现某个目标相关的特性

例如,如果您的目标是模拟交通灯,那么您的灯只需要能够打开和关闭,并且颜色在绿色、红色和黄色之间

现在假设您想要对动态交通系统建模,以优化城市中的车辆流量。您的抽象必须包括街道、十字路口、大道等。在构建模型时,您将在不同的级别之间切换:灯、交通灯、绿波、高峰时间、假日、周末

作者试图传达的想法是,控制器的功能(如
规避(事故)
包含一行处理
开关(b)
实现的代码)是不好的,因为这样一行代码属于不同的详细级别,即不同的抽象层,一个适合于实现的灯。类似地,
规避(事故)
的主体在存储信息的数据库的某个
SELECT
子句中进行引用也是不好的,因为这样一行代码只适合于数据存储库级别(它对事故知之甚少)


因此,在设计程序或应用程序时,要特别注意识别其不同的层次。然后,在编写函数时,确保其代码只属于您的一个摘要。

请不要滥用语言问题标签,因为它被视为垃圾邮件的一个版本。要么选择一种语言,要么让你的问题语言不可知(我现在已经这么做了)。谢谢你,先生,很抱歉我的无知