面向对象的三大特征和五大基本原则

embedded/2024/9/22 19:38:13/

三种基本特征

Java是一门纯粹的面向对象的程序设计语言,主要表现为Java是支持面向对象的三种基本特征:

封装

继承

多态

Java程序的最小程序单元是类,即Java程序是由一个个类组成的

五大基本原则

  • 单一职责原则(Single-Responsibility Principle)

    核心思想:一个类最好只做一件事,只有一个引起它的变化

    单一职责原则可以是看作是低耦合、高内聚面向对象原则上的引申,将职责定义为引起变化的原因,来提高内聚性,减少引起变化的原因

    如果职责过多,该类的变化原因就会增多,这将导致职责依赖,相互之间产生影响

    单一职责原则,从某种意义上也是降低耦合和内聚的一种方式。

  • 开放封闭原则(Open-Closed principle)

    核心思想:软件实体应该是可扩展的,而不可修改的。即对扩展开放,对修改封闭

    开放封闭原则主要体现在以下两个方面:

    1. 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展

    2. 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,不要对其进行任何尝试性的修改

    处理方式:

    对抽象编程,不对具体编程

    抽象相对稳定,可以让类依赖于固定的抽象,只提供抽象,修改就是封闭的

    通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过重写其方法来改变固有的行为,实现新的拓展,这就是开放

    总结一点:功能类需要依赖于抽象,来实现封闭;通过重写来实现开放

  • 里氏替换原则(Liskov-Substitution Principle)

    核心思想:子类必须能够替换其基类,这一思想体现在对继承机制的约束规范

    • 只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础

    • 子类继承了父类的特性,因此子类可以替换父类,但是反过来,父类不一定能替换子类

    实现方式:面向接口编程,将公共部分抽象为基类接口或抽象类,通过扩展抽象类,在子类中重写父类的方法实现新的方式支持同样的职责

    违反里氏替换原则就必然会导致违反开放封闭原则

  • 依赖倒置原则(Dependecy-lnversion Principle)

    核心思想:依赖于抽象。即高层模块不依赖于底层模块,二者都同时依赖于抽象,达到抽象不依赖于具体,具体依赖于抽象。

    依赖一定会存在于类与类、模块与模块之间,当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口实现

    在依赖之间定义一个抽象的接口,使得高层模块调用接口,而底层模块实现接口定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标

  • 接口隔离原则(Interface-Segregation Principle)

    核心思想:使用多个小的专门的接口,不要使用一个大的总接口

    接口隔离原则体现在:接口应该内聚,避免接口臃肿,一个类对另一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法

    接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调的是接口的单一性

    分离的手段有两种:

    • 委托分离:通过增加一个新的类型来委托客户请求,隔离客户和接口的直接依赖,但是会增加系统的开销

    • 多重继承分离:通过接口多继承来实现客户的需求,推荐这种方式


http://www.ppmy.cn/embedded/42744.html

相关文章

js全国省市区JSON数据(全)

AreaJson 就是全国省市区的具体数据信息,下面我自定义了一些方法,获取数据用的,不需要的可以删掉,只拿JSON内的数据即可 const AreaJson [{"name": "北京市","city": [{"name": "…

【webrtc】MediaEngine的实现CompositeMediaEngine创建VOE

m98音视频的引擎是管理channel的看起来是外部强加给CompositeMediaEngine 管理的。CompositeMediaEngine :合成媒体引擎 G:\CDN\rtcCli\m98\src\media\base\media_engine.h// CompositeMediaEngine constructs a MediaEngine from separate // voice and video engine classes…

【全开源】优校管理系统(支持微信小程序+H5+app)

优校管理系统(简称优校管)是一款基于FastAdmin和ThinkPHP进行开发的中小学信息化管理系统,拥有PC版、UniAPP版(高级授权)。支持微信小程序、H5网页等多平台,主要用于信息管理、教学管理、素养评价。 引领智慧校园新风尚 随着信息技术的快速发展&#x…

Java进阶学习笔记15——接口概述

认识接口: Java提供了一个关键字Interface,用这个关键字我们可以定义一个特殊的结构:接口。 接口不能创建对象。 注意:接口不能创建对象,接口是用来被类实现(implements)的,实现接口…

K8S认证|CKA题库+答案| 8. 查看可用节点数量

8、查看可用节点数量 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node k8s master …

OpenHarmony鸿蒙软总线使用mbedtls数据加密详解

OpenHarmony鸿蒙软总线子系统中使用了多种的加密技术,本篇介绍调用mbedtls的数据加密。 调用mbedtls加密的源码位于: foundation/communication/dsoftbus/adapter/common/mbedtls/softbus_adapter_crypto.c 这个源码单元,调用mbedTLS库实现了各种加密功能,包括AES-GCM加密…

【C++】<图形库> 三人成棋(面向对象写法)

目录 一、游戏需求 二、程序架构 三、代码实现 四、实现效果 五、已知BUG 一、游戏需求 构建一个五子棋游戏,在自定义棋盘宽度和高度的基础上,实现三人对战功能,并且能判定谁输谁赢。 二、程序架构 (1) 对象分析: 【1】 需…

[Linux]Crond任务调度以及at任务调度

一.crond任务定时调度 crond是反复检测执行的,一个任务结束后,在所规定的时间之后会再次执行 crontab 指令可以给系统分配定时任务 crontab -e 进入编辑页面,设定任务 crontab -l 查看已有定时任务 crontab -r 删除所有任务 编辑时&#xff…