首页 > 解决方案 > 函数中的抽象级别

问题描述

我正在读一本名为“干净的代码”的书,当作者试图告诉我们如何编写一个高效的函数时,我被卡住了。他说,“为了确保我们的函数做‘一件事’,我们需要确保我们函数中的语句都处于相同的抽象级别”。那么作者究竟想通过抽象层次来传达什么?

标签: language-agnosticobject-oriented-analysis

解决方案


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

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

定义模型的范围,即您将密切关注的特征,构成了您对灯的抽象。您可以将抽象视为漫画,是实际事物(或概念)的一个版本,与原始事物共享尽可能少的属性以使其相似,而不是尽可能多地完全复制它。

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

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

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

作者试图传达的想法是,对于控制器的功能,例如circumvent(accident)包含处理 的实现的代码行是不好的switch(b),因为这样的代码行属于不同的详细级别,即在不同的抽象层中,适合灯的实现。circumvent(accident)类似地,在存储信息的数据库的某些子句中引用的主体是不好的SELECT,因为这样的代码行只适合数据存储库级别(对accident.

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


推荐阅读