首页 > 其他分享 >设计原则

设计原则

时间:2024-03-29 15:00:14浏览次数:11  
标签:企鹅 原则 代码 复用 抽象 模块 设计 父类

两大主题

系统复用:如何使用已有的组件或类来构建新系统

系统扩展:如何通过扩展现有的系统,同时保持系统的可维护性和灵活性。

设计模式主要关注如何以一种灵活的方式设计和组织对象和类,以满足系统复用和扩展的需求。

七大原则

1 迪米特法则

1.1 定义

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。

如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

1.2 说明

前提共识:在类的结构设计上,每一个类都应当尽量降低成员的访问权限。

根本思想:强调了类之间的松耦合。

生活中的思想体现的举例:

你第一天去公司,怎么会认识 IT部的人呢?

如果公司有很好的管理,那么应该是人事的小杨打个电话到IT部,告诉主管安排人给小菜你装电脑,

就算开始是小菜负责,他临时有急事,主管也可以再安排小李来处理。

由于IT 部是抽象的,哪怕里面的人都离职换了新人,我的电脑出问题也还是可以找IT部解决,而不需要认识其中的同事。

类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

信息的隐藏促进了软件的复用。

2 开放-封闭原则

2.1 定义

软件实体(类、模块、函数等等)应该可以被扩展,但是不可被修改。

2.2 本原则的两个特征

1.对于扩展是开放的(Open for extension)

2.对于更改是封闭的(Closed for modification)

2.3 说明

做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化。

怎样的设计才能面对需求的改变却可以保持相对稳定、安全,从而使得系统可以在第一个版本以后不断推出新的版本呢?

开放-封闭给我们答案。(就是多扩展,少修改)

1.

设计的时候,时刻要考虑,尽量让这个类是足够好。

写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。

2.

绝对的对修改关闭是不可能的。

无论模块是多么的'封闭',都会存在一些无法对之封闭的变化。

既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。

他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。

3.

猜测程序可能会发生的变化是很难做到的。

但我们却可以在发生小变化时,就及早去想办法应对发生更大变化的可能。

也就是说,等到变化发生时立即采取行动。(即当你发现现有代码结构不灵活、不适用未来的持续开发、不适用未来潜在需要的可扩展的需要时)

在我们最初编写代码时,假设变化不会发生。

当变化发生时,我们就创建抽象来隔离以后发生的同类变化。(即不同程度的重构!)

具体行动的做法:

在尽量减少已有代码的修改,然后重构。

然后面对新需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

不立即行动的后果:

我们希望的是在开发工作展开不久就知道可能发生的变化。

查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。

如果不灵活的代码都在很多地方应用了,再考虑抽象、考虑分离,就很困难。

2.4 小结

开放-封闭原则是面向对象设计的核心所在。

开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象。

对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。

拒绝不成熟的抽象和抽象本身一样重要。切记,切记。

3 依赖倒转原则

3.1 定义

A.高层模块不应该依赖低层模块。两个都应该依赖抽象。
B.抽象不应该依赖细节。细节应该依赖抽象。

3.2 说明

说白了,就是要根据接口(即是计算机世界中的某种标准和协议)来编程,不要对根据具体实现来编程。

面向过程的开发时,为了使得常用代码可以复用,一般都会把这些常用代码写成许许多多函数的程序库。

这样我们在做新项目时,去调用这些低层的函数就可以了。

这也就叫做高层模块依赖低层模块

问题也就出在这里。

我们要做新项目时,发现业务逻辑的高层模块都是一样的,

但客户却希望使用不同的数据库或存储信息方式,这时就出现麻烦了。

高层模块都是与低层的访问数据库绑定在一起的,没办法复用这些高层模块,这就非常糟糕了。

就像刚才说的,PC 里如果 CPU、内存、硬盘都需要依赖具体的主板,主板一坏,所有的部件就都没用了。

这显然不合理。

4 里氏替换原则

4.1 定义

子类必须能够替换掉它们的父类。

4.2 举例

问:

如果在面向对象设计时,一个是鸟类,一个是企鹅类,如果鸟是可以飞的,企鹅不会飞。

那么,企鹅是鸟吗? 企鹅可以继承鸟这个类吗?

答:

类拥有父类所有非 private 的行为和属性。

鸟会飞,而企鹅不会飞。

尽管在生物学分类上,企鹅是一种鸟,但在编程世界里,企鹅不能以父类——鸟的身份出现。

因为前提说所有鸟都能飞,而企鹅飞不了。

所以,企鹅不能继承鸟类。

4.3 说明

只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用。

而子类也能够在父类的基础上增加新的行为。

说白了,本原则是,在贯彻开闭原则且涉及类的继承时的一条注意事项。

扩展的时候(开闭原则),注意要保证扩展的子类,兼容已有的代码、支持已有的功能。

4.4 小结

正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

再回过头来看依赖倒转原则,高层模块不应该依赖低层模块,两个都应该依赖抽象,对这句话你会有更深入的理解。

标签:企鹅,原则,代码,复用,抽象,模块,设计,父类
From: https://www.cnblogs.com/AbendEssen29/p/18103878

相关文章

  • 【附源码】JAVA计算机毕业设计在线考试答题系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展,教育信息化已成为现代教育发展的重要趋势。在线考试答题系统作为教育信息化的重要组成部分,能够打破传统考试的时间和空间限......
  • Node.js毕业设计航空订票系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着航空业的迅速发展,越来越多的人选择飞机作为出行的主要交通方式。航空订票系统作为航空公司与旅客之间的桥梁,其重要性不言而喻。一个好的航空订票系统能......
  • 【附源码】JAVA计算机毕业设计在线考试(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,传统的教育模式正在经历深刻的变革。在线教育以其灵活、便捷的特性受到了广大师生的青睐。在线考试作为在线教育的重要组成......
  • Node.js毕业设计航空订票系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的不断发展,人们的生活越来越离不开网络。航空订票系统作为在线旅游行业的重要组成部分,为用户提供了便捷的航班查询、预订、支付等服务。传统......
  • 【附源码】JAVA计算机毕业设计在线考试系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的迅猛发展,教育领域正经历着深刻的变革。在线考试系统作为现代教育信息化建设的重要组成部分,已经逐渐成为各级教育机构优化考试流程......
  • 【附源码】JAVA计算机毕业设计在线考试系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,传统的教育模式正面临着深刻的变革。在线考试系统作为教育信息化进程中的重要组成部分,其设计与开发逐渐受到广泛关注。在当前......
  • 摄影跟拍预定系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。项目研究的背景困扰管理层的许多问题当中,摄影跟拍预定管理一定是不敢忽视的一块。但是管理好摄影跟拍预定又面临很多麻烦需要解决,例如有几个方面:第一,往往用户人数都比较多,如何保证能够管理到每一用户;第二,......
  • Bootloader/IAP零基础入门(1.1) —— 设计一个Bootloader引导进入APP的程序,包含中断向量
    前言(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动/单片机/RTOS的实习岗位,可C站直接私聊,或者邮件:[email protected],此消息至2025年1月1日前均有效(2)在上一章节中,我们详细介绍了如何让Bootloader引导进入APP程序。但是上一章节的工程是无法使用......
  • 京准 | NTP网络时间同步系统(子母钟系统)设计与答疑
    京准|NTP网络时间同步系统(子母钟系统)设计与答疑京准|NTP网络时间同步系统(子母钟系统)设计与答疑京准电子科技官微——ahjzsz 子母钟系统,顾名思义就是由1/2套母钟和一群子钟组成。如果你选择了安徽京准公司的HR系列时钟系统产品,那么所有的系统设计将会变得非常简单: HR系列......
  • 设计效果图渲染是什么?用云渲染快多少?
    渲染设计效果图是利用计算机技术将设计师的想法和规划转换成直观图像的过程,这一步骤能够直观地呈现设计成果的预期外观。而云渲染作为一种新兴的技术手段,依托于云计算平台所提供的高性能计算资源,显著加快了渲染过程,与传统的本地渲染方式相比,它能够大幅度缩短时间消耗,并显著提升工......