关于面向对象设计原理的讨论

电脑杂谈  发布时间:2020-04-20 23:27:50  来源:网络整理

管道设计过程_面向对象设计过程_过程理论设计认为

说到面向对象,我们毫不犹豫地提到了面向对象的三个主要特征: 封装,继承,多态,面向对象在软件体系结构设计中非常重要,最直接体现出的优势是软件的可扩展性和可重用性.

要理解面向对象的编程,仅停留在开发级别是不可能深入理解的. 只有在设计级别上,我们才能逐渐理解面向对象. 但是在实际开发中,并不是每个人都可以访问核心设计工作. 以面向对象的语言为例,我们可以将开发人员分为三部分.

1. 普通开发人员: 普通开发人员是初级程序员. 初级程序员的工作是实现接口. 根据文档要求实施特定的方法功能. 在此阶段,如果开发人员的公司规模较小(少于10人),则开发人员可能会参与一些简单算法的实现. 同时,它必须进行功能测试. 在这一阶段,开发人员很难掌握面向对象的本质,其中大多数是机械代码.

2. 高级开发人员: 现阶段的开发人员属于中高级程序员. 对于进入这一阶段的程序员而言,工作量呈几何倍数增长. 高级开发人员需要掌握设计要点,并能够在系统架构师的领导下独立设计功能接口. 主要工作是编写合格的文件. 在编码过程中,我们必须实现一些核心方法. 同时,有必要对项目中使用的开发框架有更好的了解,能够配置和调整这些框架,并解决相关问题,例如系统负载压力,安全性,扩展,过程和数据. 能够设计更复杂的算法,并基于这些算法设计完整的可靠数据模型.

在此过程中,您拥有的知识正面临实际问题的挑战,这也是开发人员发展的关键时期. 在此期间,由于开发人员参与了过多的设计工作,可以说面向对象的知识有了较高的改进水平.

3. 系统架构师: 可以说该领域的开发人员几乎摆脱了编码实现过程,仅涉及部分编码工作. 系统架构师的主要工作是系统分析以及系统规划和设计. 系统分析的过程是一个非常的过程,涉及太多的内容,我们暂时不讨论. 另一个工作系统规划和设计的主要内容是抽象,抽象和重新抽象实际问题面向对象设计过程,并最终形成软件系统的框架. 此过程始终涉及面向对象. 系统框架的健壮性和可伸缩性直接影响整个软件系统的性能,也影响整个团队开发的效率.

实际上,许多公司没有上述明确的职责分配. 通常,所有职责都集中在高级开发人员上. 此外,由于互联网红利的增加,初级开发人员的薪水水平通常高于设计平均水平. 水平. 由于存在劳资关系,因此被迫纳入高级开发商的行列,这将降低行业水平. 他们的工作包括系统架构师的工作,以及一些重复和人为的低级开发工作. 如果开发人员的设计能力不足,那么整个软件系统所面临的风险就会很大.

因此,在设计过程中,如何更好地理解面向对象?首先让我们了解面向对象的六项基本原理,它们是面向对象设计的指南. 这六个原则是: 单职责原则,开放和封闭原则,替换原则,依赖关系原则,接口分离原则和综合聚合复用原则.

管道设计过程_过程理论设计认为_面向对象设计过程

1单一责任原则

1. 单一职责原则(SRP),SRP原则阐明了类定义时应提供的功能范围. 它规定班级的职责应单一,确保班级的处理方法具有高度的凝聚力(相关性强),并且不应堆积大量相关性低的职责. 唯一的责任不是说类中的方法越少越好,而是要确保类中的模块方法彼此之间密切相关,而与方法的数量无关.

当一个类具有单一职责时,这些类之间的依赖关系较低,因此,当对象和对象相互调用时,它们之间的耦合(关联度)也较低,因此,单一职责的原理也“较高”. 凝聚力,“低耦合”的体现. 如果班级提供的职责过多,一旦职责改变,班级中的多个职责可能会改变风险.

由于具有单一职责,因此复杂度相对较低,并且该类的可读性,维护性和可伸缩性较高. 但是,单一原则在设计时也非常困难,它被设计者对职责划分的理解所束缚. 此外,由于职责的变化无法量化,因此在指定单一的原理设计标准时无法达到量化标准,该标准会根据项目和环境而有所不同.

2开放原则和封闭原则

开闭原理(简称OCP原理). OCP原则描述了理想的设计更改原则,该原则要求开放性要扩展,封闭性要修改.

关闭修改的主要原因是修改将导致接口或类的不稳定. 这不能保证其他对象在调用时是稳定的,这可能会导致扩展修改. 例如,修改方法的逻辑,添加和删除方法以及修改方法的参数. 原则上禁止这些修改.

在扩展方面,如果是函数扩展,则接口应该是主要的设计点,以便实现类可以显示多态性,并且不受继承的限制. 另外,尝试在方法参数和返回值中使用复合类型,不要使用基本类型和最终类型(最终修改的类,例如String,Integer等),当参数或返回类型发生更改时,复合类型具有更多的扩展优势,如下午所示.

过程理论设计认为_管道设计过程_面向对象设计过程

封装提高了可伸缩性

简而言之,OCP具有逻辑粒度小和可重用性高的优点. 其次,修改因素受到限制,可伸缩性强,升级和维护能力也很强.

3 Leeb替代原则

Liskov替代原理(LSP),也称为Liskov替代原理. LSP原则是关于子类和基类之间的继承关系. 存在继承关系时,子类型可以替换基类型,并且接口实现关系也符合LSP原则.

在设计之初,为了确保接口的可伸缩性和稳定性,经常使用LSP原理. 在OCP原则中,我们知道允许扩展,并且可伸缩性在很大程度上取决于LSP原则. 当使用的变量是接口时,意味着只要它是接口的实现类,就可以替换接口变量. 这种用法的优点是接口的功能是无限的(多态).

继承中有两种继承关系,一种是实体类之间的继承,另一种是实体类继承抽象类. 在LSP原理中,有必要尽可能采用抽象类继承的关系. 重要的原因是实体方法的逻辑通常是固定的. 子类继承并重写基类方法后,通常会更改原始逻辑,并可以添加原始逻辑. 限制很多,这违反了LSP的原理. LSP原则希望子类可以符合基类的预期行为.

LSP原则也具有隐藏的含义,这意味着类型之间的转换. 在基本数据类型中,我们知道可以将较小的基本数据类型转换为较大的基本数据类型. 但是,班级中的这种类似转换正好相反. 我们支持从子类型到父类型的转换,反之亦然. 当然,如果两种类型之间没有继承关系,则转换无疑会失败.

4依赖倒置

依赖倒置原则(DIP),用外行的术语来说,是面向接口的抽象编程. 抽象编程实际上实际上更侧重于编程,它描述了模块之间的关系,但是不需要实现每个模块.

过程理论设计认为_面向对象设计过程_管道设计过程

DIP是一种非常有测试经验的编程方法. 通常,它是由项目团队中的高级程序员或系统架构师和分析师完成的. 软件系统的稳定性,可扩展性和可维护性是否强大,完全取决于体系结构级别的抽象编程. 在实际的开发过程中,DIP具有以下优点:

1. 高级模块不依赖于低级模块: 高级模块通常根据业务策略制定各种业务模型,但是并没有真正实现这些业务模型,而实现业务模型的工作是由底部模块完成. 在此过程中,高级模块调用底层模块以实现业务. 如果高级模块依赖于低级模块,则当低级模块更改时,会影响高级模块的更改,这是DIP原理所不允许的. 根据DIP原理,底层模块应依赖于高层模块,并且高层模块应在设计之初就符合OCP规则,否则会导致底层模块发生大量更改. 简单地说,高层必须约束底层的实现行为,以便根据图纸进行构造,而不是由构造决定高层的设计.

2. 系统并行开发: 系统中的模块之间存在关系. 接口编程基本上实字塔开发团队.

3. 变更适应性: 项目需求的变更几乎是所有软件项目中的常见情况. 如果更改影响高级设计,则可以扩展高级抽象编程(接口可以继承接口)以满足更改要求. 底层只需要添加要求即可实现或进行小规模修改. 当然,这是理想的设计结构. 如果需求发生了灾难性的变化,那么这对双方都是巨大的业务考验.

总而言之,DIP编程依赖于抽象编程,而不是具体的实现. 许多常见的框架也有这个想法. 在许多经典框架中,该框架仅提供高级模块之间的调用以及对实现模块的高级模块之间的调用. 他们不需要关注实现模块的编写方式,但是指定了应如何编写实现模块. 这就是框架. 很棒.

5接口分离原理

接口隔离原则(ISP): ISP原则要求根据职责对接口进行拆分,减少接口中的方法数量,并高度聚合接口中提供的方法. 应该将其拆分.

在原则要求方面,ISP和SRP原则非常相似,但是ISP原则比SRP原则更为精细,并且ISP要求更高的凝聚力,责任是不可分割的. 但是ISP必须首先满足SRP原则,以确保接口中的职责是单一的. 一般来说,ISP遵循最小接口的原则. 当类实现接口时,它不能依赖于不需要实现的接口,如下图所示.

管道设计过程_过程理论设计认为_面向对象设计过程

ISP原则

在高级设计中,接口越大,接口的稳定性越差. 在上图中,如果仅为函数functionA实现ClassA,而其他方法实现为空(方法主体中没有逻辑代码),则如果高级模块调用空实现,将存在逻辑障碍. 当然,空实现不一定是一件坏事,它完全取决于设计的合理性. 在某些环境中,空实现是有意义的,表示未执行任何处理,例如Swing中的事件侦听处理.

6综合聚合复用原理

复合重用原则(CRP): CRP的重点是重用. 实现重用的方法有两种: 继承实现重用和对象组合实现重用.

继承的特征是子类可以继承父类的行为特征. 继承后,父类达到重用的目的. 对象组成的复用方法具有两种含义:

1. 拥有关系: 例如,当定义类型A时,类型A包含使用其他类型(B类型,C类型等)变量,这一次A类型可以重用其他类型的特征,而不必定义实现.

2. 依赖性: 依赖性是所有权的加深. 在设计阶段,实体之间存在三种关系类型: 一对多,和多对多. 例如,学生与课程之间的关系是多对多的,即一个学生需要学习多个课程,一个课程也可以被多个学生学习. 一个人与一个银行帐户之间的关系是一对多的,即一个人可以有多个银行帐户,但是一个银行帐户只能属于一个人. 关系专门指那些单一的关系,例如婚姻关系等. 这样的关系建模对于设计学习也是必要的. 在课堂上,可以通过综合聚合来实现上述三个关系.

CRP原则意味着,如果可以使用对象的组合,则不能使用继承,这主要是因为继承过于依赖,并且如果使用继承进行重用,则新类型将违反SRP原则,并导致继承. 类. 大. 也可能是因为当子类继承父类时,它会覆盖父类的某些实例方法,这违反了LSP原理. 总之面向对象设计过程,CRP的含义不是滥用继承,而是如果可以合成则不要继承.

以上是我们在面向对象设计中必须遵循的原则. 在设计软件时,应将其用作衡量是否满足这些要求的量表.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-182913-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...