面向对象设计的11原则

面向对象设计原则 (快速记忆11个原则) (1)单一责任原则(Single Responsily Pinciple, SRP). 就个类而言, 应该仅有个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做种类型责任。 (2)开放-封闭原则(Open & Close Principle, OCP). 软件实体(类、模块、函数等)应该是可以扩展的,即开放的:但是不可修改的,即封闭的。 (3)里氏替换原则(Lis... 阅读详情

面向对象设计是什么?都包含了哪些内容?它所带来的好处是什么?需要你为之付出些什么?在如今这个年代,问这些问题似乎显得很愚蠢,因为这年头几乎每位软件开发人员都知道如何使用某种面向对象编程语言。可是这个问题还是很重要,因为在我看来,绝大多数人在使用这些语言的时候并不知道为什么,而且也不知该如何最充分的运用它们。

软件业曾经爆发过的所有变革里,其中曾经有两个派系如此广泛的深入人心,它们就是结构化编程和面向对象编程。所有主流的现代编程语言都被它们两个激烈的影响着。实际上,要想不像结构化和面向对象编程的样子来编写程序都是一件难事。我们的主流编程语言都没有goto,因此它们服从了结构化编程中最重要的禁令。我们的大多数主流编程语言都是基于类的,而且不支持在类以外定义函数或是变量,因此也避免了面向对象编程中最容易坠入的陷阱。

用这些编程语言所编写的程序可能看起来是结构化的或是面向对象的,可是“看起来”是会欺骗人的。当今的编程语言经常不顾他们所从属那种派系的编程语言的基本原则。我会在另篇blog中再探讨结构化编程的原则,本篇,我想要谈论的是面向对象编程的基本原则。

在1995年的三月,我写了一篇文章并发表在comp.object上,那是我第一次写OOD(译注1)原则的文章,此后就一发不可收拾的写了很多。你可以在我的PPP一书(译注2)中看到它们,在object mentor的很多文章中也都有,其中就有那篇众所周知的纲要(近期会译为中文,请关注)。

这些原则着重于OOD中的依赖管理方面,而淡化抽象与建模方面。这并不是说OO在抽象方面不够强大,或是OO不适合构建模型。当然有很多人都在使用OO的这些部分,只是这些原则集中关注于依赖管理。

依赖管理是我们每个人都要面对的问题,每当我们在屏幕面前打开那些彼此纠结又令人作呕的代码,我们就会遭受不良的依赖管理所带来的恶果。不良的依赖管理导致代码难以改变,易被破坏,而且不可重用。实际上,我在PPP一书中谈论过很多不同的设计坏味道,而这些都与依赖管理有关。从另一方面来说,如果依赖经过了良性的管理,代码就可以保持灵活性、健壮性和重用性。所以依赖管理和这些相关原则是程序员们渴求的让软件保持优良架构的基石。

头五项原则是关于类设计的,它们是:

另外的六项是关于包的设计原则。在本文中,包是指一个二进制的可发布文件,比如.jar文件、或dll文件,而不是Java包或是C++的命名空间(译注3)。

头三项包原则是关于包内聚性的,它们会告诉我们该把什么划分到包中:


最后的三项原则是关于包之间的耦合性原则的,并且论述了评价系统中包结构优良与否的评判标准。

 

 译注:

1,OOD,全称Object Oriented Design,即面向对象设计。

2,PPP,即Bob大叔的著作《敏捷软件开发 原则、模式与实践》一书以及其相关书籍,因都有“原则、模式与实践”,即Priciples, Patterns and Practices,故常简称为PPP。

3,命名空间,原文为namespace,也译作名字空间。它是一种特殊的作用域,它包含了处于该作用域内的所有标示符,且本身也用一个标示符来表示,这样便于将一系列在逻辑上相关的标示符用一个标示符来组织。就Java编程语言来说,命名空间是通过java包来表达的,所有代码都归属与一个包。来自其他包中的代码要通过指定包名来引用某项特定的标示符,例如,包java.lang中的String类要通过java.lang.String的形式引用。在C++中,命名空间常用来避免命名冲突,尽管现今的C++语言对命名空间做出了扩展,但过去的C++代码很少使用此项功能。
 

面向对象的11个原则 面向对象的11个设计原则 SOLID原则 单一职责原则(The Single Responsibility Principle) 开放/关闭原则(The Open Closed Principle) 里氏替换原则(The Liskov Substitution Principle) 依赖倒置原则(The Dependency Inversion Principle?) 接口分离原则(The Interface Segregation Principle) 包的的设计原则 发布/重用等价原则(REP) 公共闭合原则(CCP) 共同重用原则(CRP) 非循环依赖原则(ADP) 稳定依赖原则(SDP) 稳定抽象原则(SAP)。 立即下载

相关推荐

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2351

npm常用命令操作

npm常用命令操作简介版本号~ 、 ^ 和 *基本命令修改NPM源 简介 比较常用的包管理工具 新版的node.js自带了npm,无需额外安装 版本号 npm的版本号分三个部分:主版本号.次版本号.补丁版本号 主版本号: 当API发生改变,并与之前的版本不兼容的时候 次版本号: 当增加了功能,但是向后兼容的时候 补丁版本号: 当做了向后兼容的缺陷修复的时候 ~ 、 ^ 和 * 会匹配最近的小版本依赖包,比如1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 会匹配最新的大版本依赖包,比如1.2.3会匹

yuzenan的博客 432

生信人的一天~HIFI数据+HIC数据组装基因组

HIFI+HIC数据组装基因组!

qq_43337286的博客 9530

npm run start 与 npm run dev的区别?

1-具体看你package.json 2-start和dev都是脚本 start执行的就是dev的脚本 - - > 最终目的是执行dev后面的

404路西法的博客 2万+

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7153

RK3308B开发板WiFi+蓝牙一体模组RTL8821CS驱动移植保姆级教程(含DTS配置与避坑点)

本文提供RK3308B开发板RTL8821CS WiFi+蓝牙模组驱动移植的完整教程,涵盖SDK环境配置、DTS设备树设置、内核编译优化及功能验证全流程。重点解析引脚复用冲突、电源管理等关键配置,并给出常见错误解决方案,帮助开发者快速实现双模通信功能。

weixin_42531163的博客 398

面向对象设计的11原则--你称得上OO专家么? (原文最终修订于2006-04-10 下午06:19:40)

面向对象设计是什么?都包含了哪些内容?它所带来的好处是什么?需要你为之付出些什么?在如今这个年代,问这些问题似乎显得很愚蠢,因为这年头几乎每位软件开发人员都知道如何使用某种面向对象编程语言。可是这个问题还是很重要,因为在我看来,绝大多数人在使用这些语言的时候并不知道为什么,而且也不知该如何最充分的运用它们。软件业曾经爆发过的所有变革里,其中曾经有两个派系如此广泛的深入人心,它们就是结构化编程和

Robert C. Martin博客中文版 1万+

实战指南:CentOS 7下VOS3000 8.0从零部署到授权激活全流程

本文提供了一份详尽的CentOS 7系统下部署VOS3000 8.0的实战指南。从环境准备、使用FileZilla上传安装包、执行自动化安装脚本,到获取软件码、利用注册机生成授权文件并激活,手把手带领用户完成从零部署到投入商用的全流程,确保系统稳定运行。

zero1的博客 897

egg的npm运行命令: npm run dev实现后台运行命令 和npm start/stop运行成功的方法

如果出现npm start后 出现127.0.0.1:7002 或7003等 原因是7001端口被占用了 你需要关闭使用7001端口的程序即可又变成127.0.0.1:7001了。**注意:**7001端口需要在宝塔安全那里放行以及在阿里云规则那里放行7001端口,两者缺一不可,该步骤不可缺。运行npm start后,关闭终端也能后台运行,但是要关闭的话有两种,1.则。2.npm stop 也能关闭(提前是进入相应网站的根目录后运行该命令才行)对应的pid号,然后:kill pid号。

潘万丁的博客 8212

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1268

3.嵌入式控制器EC学习,源码框架(60/64端口)(一)

服务函数剖析 上一篇讲到while循环会一直查询十六个标志位是否满足要求,一旦其中某个标志位为1时,程序将会执行相应的服务函数,而执行服务函数是通过函数指针(service_table[ _R1 ])();来实现的。接下来我们分别来看看这十六个服务函数分别包含了哪些内容。 16个函数的函数名如下: const FUNCT_PTR_V_V code service_table[16] = { // Hi-Level Service Service_PCI, // Host 6

qq_30135687的博客 4160

vue 项目 npm run serve 或 npm run dev 时自动打开浏览器

开发 vue 项目 npm run serve 时没有不自动打开浏览器,还得自己输入 ip 或 localhost,想让浏览器自动打开,需要做以下配置 1、使用vue-cli 老版本构建项目时, 可修改config文件夹下index.js文件 autoOpenBrowser 属性给为 true 即可 2、使用vue-cli 3.x 版本后,所有的配置项均在vue.config.js中,修改...

yun_hou的博客 3万+

华为面试手撕真题【最长不重复子串】

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

MISAYAONE的博客 1万+

面向对象设计的11个原则

面向对象设计的11个原则,摘自《敏捷软件开发:原则、模式、与实践》 单一职责原则(The Single Responsibility Principle,简称SRP) 开放-封闭原则(The Open-Close Principle,简称OCP) Liskov替换原则(The Liskov Substitution,简称LSP) 依赖倒置原则(The Dependency ...

banyinlve3147的博客 279

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

面向对象设计的11原则--你称得上OO专家么?

 面向对象设计的11原则--你称得上OO专家么? (原文最终修订于2006-04-10 下午06:19:40) 面向对象设计是什么?都包含了哪些内容?它所带来的好处是什么?需要你为之付出些什么?在如今这个年代,问这些问题似乎显得很愚蠢,因为这年头几乎每位软件开发人员都知道如何使用某种面向对象编程语言。可是这个问题还是很重要,因为在我看来,绝大多数人在使用这些语言的时候并不知道为什么,而且也

飞羽飞の猪の博客 1125

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

敏捷软件开发-面向对象设计的11原则

敏捷软件开发-面向对象设计的11原则 "你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚. 但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起." 1.SRP单一职责原则[适用于类功能] (就一个类而言,应该仅有一个引起它变化的原因.) 详细说明: 如果一个类承担的职责过多,就等于把这些职责耦合在一起. 一个职责的变化可能会削弱或者抑制这个类完成其它职责的能

yuyongjun的专栏 415

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

面向对象设计的11项原则

(1)单一责任原则。就一个类而言,应该仅有一个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。 (2)开放一封闭原则。软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。 (3)里氏替换原则。子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。 (4)依赖倒置原则。抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 (5)接口分离原则。不应

梦里蓝天 2268
上一篇: 免费午餐已经结束——软件历史性地向并发靠拢
下一篇: 敏捷开发的精神内涵
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值