当前位置:首页 > 生态圈 > 正文内容

面向对象设计原理与模式(面向对象程序设计知识点总结java)

abcsky887个月前 (10-28)生态圈112

今天给各位分享

面向对象设计(OOD)核心原则让我的程序模块达到“高内聚低耦合”,这是来自于30年前兴起的结构化设计(structuredDesign),但是同样适用于我们的OOD1.高内聚:高内聚是指某个特定模块(程序,类型)都应完成一系列相关功能,描述了不同程序,类型中方法,方法中不同操作描述的逻辑之间的距离相近。

面向对象设计原理与模式(面向对象程序设计知识点总结java)

高内聚意味可维护性,可重新性,因为模块对外部的依赖少(功能的完备性)如果两个模块之间的修改,互不影响这说明模块之间是高内聚的模块的内聚和其担当的职责成反比,即,模块的职责越多,模块的内聚性越低,这也是模块的单一原则(SRP),SRP提倡每个类型都最好只承担单一的职责,只有单一的改变网站推广报价怎么做因素。

2.低耦合:耦合是描述模块之间的依赖程度,如果一个模块的修改,都有影响另一个模块则,两模块之间是相互依赖耦合的(依赖具有传递性,耦合的两个模块可能间接依赖),低耦合是我们的设计目的,但不是不存在耦合不存依赖,依赖是必须的,因为模块之间必须通信交互,不过我的设计依赖应该依赖于不变或者不易变的接口,无需了解模块的具实现(OO封装性)。

在面向对象:我们可以简述为功能完备(高内聚)的对象之间的交互是依赖于不变或不易变的接口契约(低耦合)实现高内聚低耦合:行之有效的方式是分了关注点(SOC),将系统拆分成功能不同没有重叠功能集每个功能只关注一个方面(Aspect)保证模块之间功能没有或者尽量少的重网站推广报价怎么做复。

模块化内部实现细节隐藏,只暴露必须的接口,使得模块之间依赖于抽象,达到稳定分离关注点的思想存在于我们软件设计的各个领域如在.net的世界里SOA(面向服务架构)服务就是关注点,只暴露出必要的契约分层架构从逻辑上利用接口抽象信息隐藏,减少依赖。

MVC,MVP也是遵循分了关注点原则,达到表现层和逻辑的分离面向对象设计原则:1.降低耦合度:对象直接需要交互,这就存在依赖,为了实现低耦合就必须减少依赖,依赖于稳定或不易变抽象考虑如下订单日志记录场景:我们需要在订单每部操作记录更改日志。

在这里我们的OrderManager和Logger存在高耦合,Logger类的修改可能导致OrderManager网站推广报价怎么做的修改,而且不能随意切换我们的日志记录方式,比如文件,控制台,数据库等日志方式面向抽象编程提出抽象(接口,abstract类)是不易变的稳定抽象;对于OrderManager来说我不需要了解日志记录组件内部,只需要明白提供那些接口可用,怎么用。

那么我们可以从设计模式工厂模式(工厂模式是负责一些列相似对象的创建)Create日志组件ILogger。我们的OrderManager就可以实现为:

这样我们的OrderManager就依赖于ILogger,而隔离Logger具体实现,将依赖于抽象,把变化缩小到Factory内部(同样也可以用抽象工厂),如果日志实现变化我们可以重新实现ILogger,修改网站推广报价怎么做Factory逻辑,如果内部利用配置我的需求变更转移到配置。

这就是面向对象第一原则,依赖于抽象而隐藏实现(利用IOC是一种更好的方式)2.代码的重用性:尽量保证相同功能代码只出现一次(Codeoncerunanywhere)代码的重用在面对对象设计中有继承和组合两种方式,一般推荐组合优先。

组合依赖于接口,组合更安全,易于维护,测试继承存在父类访问权限,父类的修改导致子类的变化,太多的继承也有导致派生类的膨胀,维护管理也是件头痛的事3.开闭原则(OCP):表述拥抱需求变化,尽量做到对模块的扩展开发,修改关闭。

对于新增需求我们完美的做法是新增类型而不是修改逻辑,这就意味着我们必须使用组合或者是继承网站推广报价怎么做体系(为了避免上一条重用性,我的继承应该是干净的继承体系,派生类应该只是新增功能而不是修改来自父类上下文),4.里氏替换(LSP):表述派生类应该可以在任何地方替代父类使用。

并不是所有的子类都可以完全替换子类,比如设计父类私有上下文信息的访问,导致子类无法访问5.依赖倒置(DIP):描述组件之间高层组件不应该依赖于底层组件依赖倒置是指实现和接口倒置,采用自顶向下的方式关注所需的底层组件接口,而不是其实现。

DI框架实现IOC(控制反转)就是DIP很好的插入底层组件构造框架(分构造注入,函数注入,属性注入)微软Unity,Castlewindsor,Ninject等框架支持最后分离关注点,衍生出声网站推广报价怎么做明式编程,面向方面编程(AOP)实现纵切关注点,把具体业务逻辑和日志安全等框架集公用逻辑分离。

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/636.html

分享给朋友:

“面向对象设计原理与模式(面向对象程序设计知识点总结java)” 的相关文章

java开发常见面试题(java开发面试题库)

本文分享给大家的是: Java程序员面试过程中少不了专业上的考试,那么面试过程中面试官会问些什么问题呢?接下来黑马君带你一起来进入面试环节! Java开发实用的面试题及参考答案 1、进程,线程,协程之间的区别是什么?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进...

java开发岗位招聘(java应用开发项目工程师招聘)

今天给各位分享 点击蓝色“黄小斜学Java”关注我哟加个“星标”,每天和你一起多进步一点点秋招总结写在最前笔者2年前的秋招总结,重新整理了一下,更加全面更加综合,献给有需要的你们我写过很多篇秋招总结,这篇文章应该是最后一篇总结,当然也是最完整,最详细的一篇总结。 秋招是我人...

java语言和c语言的相同(java和c语言联系大吗)

本文分享给大家的是: Java和C语言是两种不同的编程语言,它们有许多不同之处,同时也有一些共同之处首先,C语言是一种编译型语言,而Java是一种解释型语言这意味着,在编写C程序时,源代码需要先被编译成机器码,然后才能被计算机执行;而Java程序则直接被Java虚拟机(JVM)解释...

新手学java用什么软件(新手学java 买什么电脑好)

今天给各位分享 原标题:小白学Java大概需要多久?Java作为目前最流行的一种编程语言,具有面向对象、应用广泛等特点随着市场对Java程序员的需求增加,单靠科班出身的人已无法填补人才缺口,越来越多的人抓住机遇想要转行,这些人最关心的问题之一就是:从小白开始学Java,到找到工作,...

计算机科学与技术专业的专业介绍怎么写(计算机科学与技术专业的专业介绍是什么)

本篇文章给大家谈谈 很多孩子对专业的选择仅限于一种表面的认知,并不了解其未来从业方向以及专业对人的要求,因此导致进入大学后学习没兴趣,毕业后找不到对口的职业,只能经过不断的跳槽去验证,因此今日为您推送【计算机科学与技术】专业解读,希望能帮助到孩子! 1、 计算机科学与技术是...

又要面试了?23年国内招聘(20年面试)

本篇文章给大家谈谈 最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手!新的一年需要抓住新的机会,不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了!为了帮大家节约时间,给大家搞来了2022年 大厂Java面试题合集,内容非常的全面,...