面相对象开发的原则

2023-12-14 07:01
文章标签 开发 对象 原则 面相

本文主要是介绍面相对象开发的原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、开闭原则

        对修改关闭,对扩展打开。

2、里氏替换原则

        子类继承父类的方法时,不可重写父类的方法。

        如果重写了父类的方法会导致整个继承体系比较差,特别是运用多态比较平凡时,程序运行出错概率较大。

        如果出现了违背“里氏替换原则”替换原则,需要重新设计类之间的关系。

3、依赖倒转原则

        高层模块不应该依赖底层模块,两者应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。

        核心思想:面相接口编程,不面向实现编程。

依赖倒置原则的实现方法依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性,所以我们在实际编程中只要遵循以下4点,就能在项目中满足这个规则。

(1)每个类尽量提供接口或抽象类,或者两者都具备。

(2)变量的声明类型尽量是接口或者是抽象类。

(3)任何类都不应该从具体类派生。

(4)使用继承时尽量遵循里氏替换原则。

一个例子:

package principle;
public class DIPtest {public static void main(String[] args) {Customer wang = new Customer();System.out.println("顾客购买以下商品:");wang.shopping(new ShaoguanShop());wang.shopping(new WuyuanShop());}
}
//商店
interface Shop{public String sell(); //卖
}
//韶关网店
class ShaoguanShop implements Shop {public String sell(){return "韶关土特产:香菇、木耳……";}
}
//婺源网店
class WuyuanShop implements Shop{public String sell(){return "婺源土特产:绿茶、酒糟鱼……";}
}
//顾客
class Customer{public void shopping(Shop shop){ //购物System.out.println(shop.sell());}
}

4、单一职责原则(也适用于方法)

        单一职责原则规定一个类有且仅有一个引起它变化的原因。

        一个类承担了太多职责会有以下缺点:

        (1)一个职责发生变化时可能会抑制或削弱其他职责

        (2)当用户只需要类的每一个职责时又不得不把其他的职责引入进来,从而造成代码冗余。

        单一职责的有点:

        (1)降低类的复杂度,提高可读性。

        (2)提高系统的可维护性

        (3)引发风险变低

单一职责原则是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中。而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。

5、接口隔离原则

        要为各个类建立他们需要的专用接口,而不是试图建立一个很庞大的接口共所有依赖的类使用。

6、迪米特法则

        如果两个类无需直接通信,那么就不应该出现直接互相调用,可以通过第三方转发该调用。

只有当两个对象不存在关联,聚合和组合关系时就需要考虑使用迪米特法则。

使用这个法则会产生中介类,如果过多使用这个法则就会产生大量的中介类,会增加系统的复杂性。

用一个例子说明一下:

明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,其类图如图所示。

7、合成复用原则

该原则要求在软件开发过程中,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑继承关系来实现。如果要使用继承关系来实现,那么必须遵循里氏替换原则。

先看一个使用类继承的UML类图

使用了合成复用原则:

总结:

开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。

这篇关于面相对象开发的原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491578

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版