`
wunglee
  • 浏览: 4644 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

对于抽象稳定等价原则的深入思考

OO 
阅读更多

      在前一篇的《关于稳定依赖原则的深入思考》中,我提到,稳定性不等于独立性,如果这个理论成立,那么,这里的抽象稳定等价原则需要改为抽象独立等价原则吗?包越独立,其编译期的变更影响越小(减少客户代码被动修改的机会),而抽象的目的也是为了在编译期——而不是运行期对变更进行隔离(我的实现可以变,但我的客户代码不变),所以,我认为,抽象性应该与独立性相关,而不是稳定性——因为它是个运行期的概念;

      接着,我们再看看抽象独立等价的内涵,抽象的目的是为了获取“共性”,它将共性背后的“个性”变化与客户隔离开,“共性”的变更风险小,所以它才可以被放心地依赖,于是传入依赖可以多多,这同时意味着它承担的责任也是重重的,所以它要尽量减少对外的依赖,将自身被动改变的风险降到最低,因此,根据独立性的公式计算,其独立性必定是要高;反过来,如果一个包的独立性很高,也就是传入多于传出,意味着它的责任很重,为了减少变更的风险,它就需要让传入的方法仅仅依赖于抽象方法,隔离个性实现的变更。这实际上是在暗示:传入的依赖就是对抽象的依赖,所以,传入的依赖越多,对抽象的依赖就要越多,这才是根本的 ;

      然而,我们计算包的抽象性独立性等价的公式是这样的:D=|A+C-1|,其中,C就是独立性,A是抽象性,A=抽象类的数量/全部类的数量,试想,如果所有的传入依赖都依赖于抽象方法,并且所有实现类对外是不可见的,但抽象类的数量在包中的比例很低,这个公式的度量结果就会得出与抽象独立等价的内涵不一致的结果,所以,对于抽象性的度量,我个人认为,应该是从实际被依赖的方法数量进行考察——甚至不是类的数量,因此,公式是否应该是:A=传入的抽象依赖/传入的全部依赖,这样,抽象性独立性等价的内涵才得以真正体现。

 

分享到:
评论

相关推荐

    java抽象类与接口的深入思考

    ### Java抽象类与接口的深入思考 在Java编程语言中,抽象类(abstract class)与接口(interface)是实现多态性以及代码复用的重要工具。本文将通过具体实例来探讨这两种概念的区别及其应用场景,帮助读者更好地...

    Java_面向对象设计原则总结

    Java_面向对象设计原则总结 ...9 稳定抽象等价原则-The Stable Abstractions Principle (SAP) 10 共同封闭原则-The Common Closure Principle (CCP) 11 全部重用原则-The Common Reuse Principle (CRP)

    代码的抽象三原则-阿沐1

    本文将围绕三个与抽象相关的经典原则进行深入探讨:DRY(Don't Repeat Yourself)、YAGNI(You Aren't Gonna Need It)以及Rule of Three。 首先,DRY原则强调的是避免代码重复。当系统中出现相同或类似的功能时,...

    面向对象的11个原则

    此外,还有其他六个包的设计原则,它们分别是发布/重用等价原则、公共闭合原则、共同重用原则、非循环依赖原则、稳定依赖原则和稳定抽象原则。 **单一职责原则 (Single Responsibility Principle, SRP)**:一个类或...

    绘制哈斯图,等价矩阵,计算等价类

    总的来说,哈斯图、等价矩阵和等价类是理解离散数学和计算机科学中许多抽象概念的关键工具,它们不仅在理论研究中有重要地位,也在实际应用中发挥着巨大作用。通过深入学习和掌握这些概念,我们可以更好地理解和解决...

    C#抽象类与抽象方法

    首先,让我们深入理解抽象类。当你创建一个抽象类时,通常是因为你想要定义一个通用的模板,而这个模板的部分细节将在特定的派生类中完成。抽象类可以用`abstract`关键字来标记,如`abstract class MyClass`。抽象类...

    Java语言的接口与抽象类

    这里我们将深入探讨这两个概念,并分析它们的异同。 首先,接口(Interface)是Java中的一种特殊类型,它通过使用`interface`关键字声明。接口的主要特点包括: 1. 访问修饰符:接口的访问修饰符可以是`public`或...

    Java抽象类和抽象方法

    在深入探讨Java抽象类与抽象方法之前,我们首先需理解其基本概念以及它们在面向对象编程中的作用。Java作为一种广泛使用的编程语言,提供了多种机制来实现代码的复用性和灵活性,其中抽象类和抽象方法是关键特性之一...

    对中学美术课教学中抽象美术教学的思考和建议.docx

    【标题】:对中学美术课教学中抽象美术教学的思考和建议 【描述】:本文主要探讨了在中学美术教学中如何有效地进行抽象美术教育,提出了结合通感、艺术关联和多元教学方法的策略。 【标签】:解决方案 【正文】:...

    抽象编程 公开课

    在“抽象编程”这门公开课中,斯坦福大学深入浅出地介绍了如何利用抽象来提高代码的可读性、可维护性和复用性。这门课程涵盖了从基础到高级的抽象技术,包括类、接口、模块、函数以及数据结构的抽象化等。 课程.txt...

    等价闭包,等价类,哈斯图实现

    在程序设计中,等价闭包常用于抽象和简化问题,例如在编译器设计中,它可以用于识别和合并等价的语法元素。 接着是“等价类”。在等价关系下,集合中的元素被划分为若干个互不相交的子集,这些子集称为等价类。每个...

    抽象代数基础 丘维声

    丘维声的书试图在教学内容上做到精选内容,抓住主线,并注重培养学生的思考方式,将高等代数课程和抽象代数课程的教学内容构成一个有机整体。 在内容编排上,本书不仅为读者提供了丰富的例题和习题,还附有解答提示...

    Java 抽象类

    - 封装变化:将可能变化的部分抽取到抽象类中,使得子类可以专注于各自的实现细节,提高代码的稳定性和可维护性。 7. **抽象类与构造器** 抽象类可以包含构造器,用于初始化抽象类中的成员变量,但不能创建抽象类...

    敏捷软件开发

    面向对象设计的原则 SRP 单一职责原则 就一个类而言,应该仅有一个引起它变化的原因。 OCP 开放←封闭原则 软件实体(类、模块、函数等)应该是可以扩展的,但是...SAP 稳定抽象原则 包的抽象程度应该和其稳定程度一致。

    抽象代数、代数学习题解

    3. **抽象代数的学习资源**:“抽象代数、代数学习题解”提供的是一份全面的习题解答资源,旨在帮助学生深入理解和掌握抽象代数的基本概念和理论。这类资源对于初学者来说非常重要,因为它不仅可以巩固课堂上学到的...

    面向抽象编程

    下面我们将深入探讨面向抽象编程的相关知识点。 1. **接口与抽象类** 接口(Interface)是面向抽象编程的核心概念,它定义了一组方法签名,但不提供具体实现。通过实现接口,类可以保证遵循特定的行为规范。抽象类...

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    在C#编程语言中,类、接口、虚...在选择使用抽象类还是接口时,应根据项目需求和设计原则来权衡。例如,如果需要共享部分实现并有继承关系,可以选择抽象类;如果需要多个类实现一组共同行为,接口可能是更好的选择。

    抽象代数.rar

    《抽象代数》是数学领域中的一个重要分支,主要研究代数结构及其性质。这份压缩包文件包含了一系列关于近世代数的课件和习题解答,是科任老师精心制作的教学资料,适合对近世代数感兴趣的学生或教师使用。以下是根据...

    抽象工厂的介绍应用

    在提供的CH06文件中,可能包含了关于抽象工厂模式的详细讲解,包括代码示例和注释,这些内容将帮助读者深入理解抽象工厂模式的实现和应用。例如,可能会有WindowsFactory和MacFactory的实现,以及如何通过这两个工厂...

Global site tag (gtag.js) - Google Analytics