首页 > 其他分享 >面向对象设计原则-01

面向对象设计原则-01

时间:2023-06-13 11:22:29浏览次数:36  
标签:01 职责 原则 对象 复用 接口 面向对象 Principle

概述

面向对象设计的原则是为了提高软件的可维护性和可复用性。最好是在保持可维护性的同时,提高可复用性。

单一职责原则

单一职责原则(Single Responsibility Principle, SRP):一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。

一个类承担的职责越多,越难以被复用。一个职责的改变可能会影响到其他职责。单一职责原则是实现高内聚、低耦合的指导方针。

开闭原则

开闭原则(Open-Closed Principle, OCP):一个软件实体应该对扩展开放,对修改关闭。

一个模块增加一个功能时,不需要修改这个模块的已有代码。一般使用抽象类等方式定义抽象层,确定一致的接口,具体的不同功能由不同的实现类根据统一的接口定义。这样添加新的功能时只需要添加新的实现类。

里氏代换原则

里氏代换原则(Liskov Substitution Principle, LSP):将程序中所有 S 类型的对象使用 T 类型的对象替换,程序的行为不发生变化,则 T 类型是 S 类型的子类型。

最初原文如下:

Let \(q(x)\) be a property provable about objects x of type T. Then \(q(y)\) should be true for objects y of type S where S is a subtype of T.

程序中使用超类的地方都可以使用子类替代,一般情况下反之不然。

依赖倒转原则

依赖倒转原则(Dependence Inversion Principle, DIP):高层模块不应该依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。另种表述是:针对接口而不是实现编程。

尽可能地针对抽象类或者接口编程,推迟对具体类的实现。类的耦合关系中,至少一方为抽象类/接口,方便扩展。比如声明参数类型时使用抽象类型或者接口。

接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP):客户端不应该依赖那些它不用的接口。(这里的“接口”指的是某种类型所提供的所有方法的集合。)

尽可能地根据实际情况将较大的接口划分成多个小的接口,保证封装性。

合成复用原则

合成复用原则(Composite Reuse Principle, CRP):尽量使用组合而不是继承达到复用的目的。

继承实现复用,会破坏超类的封装性,这种复用方式是静态的,子类也没有足够的灵活性。组合实现复用是通过将一个或者多个对象作为另一个对象的一部分,此时可以使用已有对象的方法。成员对象对新对象而言不可见,耦合度低,复用在运行时动态进行,灵活性高。

迪米特法则

迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地和其他实体发生相互作用。

用于降低耦合度。

设计模式

定义

设计模式(design pattern):一套被反复使用、多数人知道的、经过分类的、代码设计经验的总结。目标是提高代码可重用性、可理解性、可靠性。

分类

根据目的划分:

  • 创建型(creational):用于创建对象。将类的创建和使用分离。
  • 结构型(structural):处理类或对象的组合。
  • 行为型(behavioral):描述对类或对象的交互和职责分配。

根据范围划分:

  • 类模式:处理类之间的关系,静态,在编译时确定。
  • 对象模式:处理对象之间的关系,动态,在运行时变化。

参考

[1]. 刘伟, 设计模式. 2011.

标签:01,职责,原则,对象,复用,接口,面向对象,Principle
From: https://www.cnblogs.com/xdreamc/p/16452794.html

相关文章

  • 01 卢京潮《自动控制原理》学习笔记转
    原文:https://zhuanlan.zhihu.com/p/262021993先上一份821的考试大纲,四年大学出来的应该都知道课本会将知识点分为重点、一般、掌握、熟练、理解、熟悉、了解等几个等级:正确理解自动控制原理课程中的有关概念。掌握结构图等效变换方法和梅森公式。能根据结构图熟练求取系统的传......
  • SQL 2012 更换数据库路径
    SQL2012更换数据库路径 SQL2012更换数据库路径Sqlserver数据库存储路径的修改Sqlserver数据库存储路径问题:本系统sqlserver路径默认是存储在C盘目录下的,由于数据会慢慢变大和避免重装系统数据丢失等问题,最好手动将路径设置在D盘。更改路径方法:情况一:更改数据库默认存储路......
  • 代码随想录算法训练营第24天 | ● 理论基础 ● 77. 组合 - 第7章 回溯算法part01
     第七章 回溯算法part01今日内容: ●  理论基础 ●  77. 组合    详细布置   理论基础  其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。 题目链接/文章讲解:https://programmercar......
  • Python 面向对象之类和对象
    什么叫做面向对象:就是把编程当作一个事物,直接去用,不考虑中间的过程,可与面向过程做比较理解;打个比方:例如:肚子饿了,想吃饭面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃面向对象:点外卖类和对象:类是抽象的,对象是真实存在的类与对......
  • 实验7 面向对象编程与内置模块
    task1程序源码:1'''2银行账户3数据:持卡人姓名、账号、当前余额4操作:取款、存款、打印账户信息、返回账户余额5'''6classAccount:7'''一个模拟银行账户的简单类'''89def__init__(self,name,account_number,initial_amount=1......
  • 实验7 面向对象编程与内置模块
    task1实验源码:1#12classAccount:3def__init__(self,name,account_number,initial_amount=10):4self._name=name5self._card_no=account_number6self._balance=initial_amount78defdeposit(self,amount):9......
  • 实验7 面向对象编程与内置模块
    实验任务1task1.py程序源码:1'''2银行账户3数据:持卡人姓名、账号、当前余额4操作:取款、存款、打印账户信息、返回账户余额5'''67classAccount:8'''一个模拟银行账户的简单类'''9def__init__(self,name,account_number,initial_a......
  • Atcoder Beginner Contest 301
    A-OverallWinner题目大意A和T两人玩游戏,给定一串只由A和T组成的字符串,如果第i个字符是A,则A赢得第i轮的胜利,反之则T赢;当遍历完整个字符串后,谁赢的轮数多谁就是最终赢家,如果一样则谁最先达到该轮数谁赢,输出赢家的名字解题思路签到题不多嗦了神秘代码......
  • 82 面向对象
    定义一个类Phone 手机的设计图packagecom.fqs.demo0612;publicclassPhone{//定义一个类手机//属性Stringbrand;doubleprice;//方法publicvoidcall(){System.out.println("打电话");}publicvoidplay(){......
  • [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题
    [MtOI2019]幽灵乐团/莫比乌斯反演基础练习题题目描述东风谷早苗(KochiyaSanae)非常喜欢幽灵乐团的演奏,她想对她们的演奏评分。因为幽灵乐团有\(3\)个人,所以我们可以用\(3\)个正整数\(A,B,C\)来表示出乐团演奏的分数,她们的演奏分数可以表示为\[\prod_{i=1}^{A}\prod_......