面向对象设计五个基本原则

简介: 只有聪明人才能看见的简介~( ̄▽ ̄~)~

开闭原则

里氏代换原则

依赖倒置原则

接口隔离原则

单一职责原则


开闭原则,在面向对象编程领域中,规定“软件中的对象,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。

里氏代换原则(LSP)是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。大大降低了客户程序与实现细节的耦合度。


接口隔离原则。使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当建立在最小的接口上。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。如果强迫客户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。


单一职责原则(SRP:Single Responsibility Principle)。它规定一个类应该只有一个发生变化的原因。该原则基于内聚性原则发展出。所谓职责是指类变化的原因。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心是高内聚低耦合

内聚性对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。模块中组成元素结合得越紧密,模块的内聚性就越高,模块的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。高内聚性一般和许多理想的软件特性有关,包括鲁棒性、可靠度、可复用性及易懂性等特性,而低内聚性一般也代表不易维护、不易测试、不易复用以及难以理解。耦合性是和内聚性相对的概念。一般而言高内聚性代表低耦合性,反之亦然。

鲁棒是Robust的音译,也就是健壮和强壮的意思。鲁棒性(robustness)就是系统的健壮性。它是指一个程序中对可能导致程序崩溃的各种情况都充分考虑到,并且作相应的处理,在程序遇到异常情况时还能正常工作,而不至于死机。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。相应的处理,例如输入检查、异常捕获与处理等等,这些要靠程序员的经验来完成。所谓“鲁棒性”,是指控制系统在一定的参数摄动下,维持某些性能的特性。

相关文章
|
存储 Java
【JVM】 程序计数器(Program Counter Register)
【JVM】 程序计数器(Program Counter Register)
547 1
|
存储 程序员 编译器
|
IDE Java 程序员
IDEA创建maven项目过慢,一直卡在resolving dependencies...的解决办法
作为一个从事 Java 开发的程序员,每天离不开ide的帮助。一开始学习java的时候基本都是使用eclipse进行开发, 后来接触了idea,发现是真的香,比eclipse好用太多了,能够大大提升开发的效率。
5754 0
IDEA创建maven项目过慢,一直卡在resolving dependencies...的解决办法
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1666 6
|
移动开发 前端开发 JavaScript
html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
474 0
html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
|
算法 计算机视觉
【MATLAB 】 ICEEMDAN 信号分解+希尔伯特黄变换+边际谱算法
【MATLAB 】 ICEEMDAN 信号分解+希尔伯特黄变换+边际谱算法
707 0
|
算法 计算机视觉
【MATLAB】 ICEEMDAN信号分解+FFT傅里叶频谱变换组合算法
【MATLAB】 ICEEMDAN信号分解+FFT傅里叶频谱变换组合算法
1775 0
|
缓存 安全 网络安全
net::ERR_CONNECTION_RESET
`net::ERR_CONNECTION_RESET` 错误通常表示网络连接被重置。这可能是由于以下原因之一导致的: 1. 网络问题: 该错误可能是由于网络中断、不稳定的连接或基础设备故障等引起的。请确保你的网络连接正常,并尝试刷新页面或重新启动网络设备。 2. 防火墙或安全软件: 有时,防火墙或某些安全软件可能会干扰网络连接并重置它。尝试禁用防火墙或安全软件,然后再次访问网页,看看问题是否解决。 3. 代理设置: 如果你使用了代理服务器,尝试禁用代理并直接连接到互联网,然后检查问题是否仍然存在。 4. 网站服务器问题: `net::ERR_CONNECTION_RESET` 错误也可
19468 0
|
5天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
6702 45

热门文章

最新文章