面向对象思想

5、面向对象的设计思想 一 面向对象设计思想 1.1 面向过程的设计思想与面向对象的设计思想 例如:我要去新疆 面向过程: 我开车,我挂挡,我踩油门,我过河北,我过陕西... 面向对象: 我命令车去新疆 车怎么去不关我事 信息封装在这这个类的内部 我不用去了解车整个开动的过程 面向对象可以对代码重复的使用,比如上面我要去新疆,先造一个车的类,稍后在去新疆的时候直接调用... 阅读详情

一、三大特性

1、封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

优点:

  • 减少耦合:可以独立地开发、测试、优化、使用、理解和修改
  • 减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块
  • 有效地调节性能:可以通过剖析来确定哪些模块影响了系统的性能
  • 提高软件的可重用性
  • 降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的

2、继承

继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。

继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。

Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。父类引用指向子类对象称为 向上转型 

Animal animal = new Cat();

3、多态

多态分为编译时多态和运行时多态:

  • 编译时多态主要指方法的重载
  • 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定

运行时多态有三个条件:

  • 继承
  • 覆盖(重写)
  • 向上转型

下面的代码中,乐器类(Instrument)有两个子类:Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。在 Instrument 引用调用 play() 方法时,会执行实际引用对象所在类的 play() 方法,而不是 Instrument 类的方法。

public class Instrument {

    public void play() {
        System.out.println("Instument is playing...");
    }
}

public class Wind extends Instrument {

    public void play() {
        System.out.println("Wind is playing...");
    }
}


public class Percussion extends Instrument {

    public void play() {
        System.out.println("Percussion is playing...");
    }
}


public class Music {

    public static void main(String[] args) {
        List<Instrument> instruments = new ArrayList<>();
        instruments.add(new Wind());
        instruments.add(new Percussion());
        for(Instrument instrument : instruments) {
            instrument.play();
        }
    }
}

//结果
Wind is playing...
Percussion is playing...

二、类图

1、泛化关系

用来描述继承关系,在 Java 中使用 extends 关键字。

2、实现关系

用来实现一个接口,在 Java 中使用 implements 关键字。

3、聚合关系

表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。

4、组合关系

和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。

5、关联关系

表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。

6、依赖关系

和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式:

  • A 类是 B 类方法的局部变量;
  • A 类是 B 类方法的参数;
  • A 类向 B 类发送消息,从而影响 B 类发生变化。

三、设计原则

S.O.L.I.D

简写全拼中文翻译
SRPThe Single Responsibility Principle单一责任原则
OCPThe Open Closed Principle开放封闭原则
LSPThe Liskov Substitution Principle里氏替换原则
ISPThe Interface Segregation Principle接口分离原则
DIPThe Dependency Inversion Principle依赖倒置原则

1.单一责任原则

修改一个类的原因应该只有一个。

一个类只负责一件事,当这个类需要做过多事情的时候,就需要分解这个类。

如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱这个类完成其它职责的能力。

2.开放封闭原则

类应该对扩展开放,对修改关闭。

扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码。

符合开闭原则最典型的设计模式是装饰者模式,它可以动态地将责任附加到对象上,而不用去修改类的代码。

3.里氏替换原则

子类对象必须能够替换掉所有父类对象。

继承是一种 IS-A 关系,子类需要能够当成父类来使用,并且需要比父类更特殊。

如果不满足这个原则,那么各个子类的行为上就会有很大差异,增加继承体系的复杂度。

4.接口分离原则

不应该强迫客户依赖于它们不用的方法。

因此使用多个专门的接口比使用单一的总接口要好。

5.依赖倒置原则

高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
抽象不应该依赖于细节,细节应该依赖于抽象。

高层模块包含一个应用程序中重要的策略选择和业务模块,如果高层模块依赖于低层模块,那么低层模块的改动就会直接影响到高层模块,从而迫使高层模块也需要改动。

依赖于抽象意味着:

  • 任何变量都不应该持有一个指向具体类的指针或者引用;
  • 任何类都不应该从具体类派生;
  • 任何方法都不应该覆写它的任何基类中的已经实现的方法。

其他常见原则

简写全拼中文翻译
LODThe Law of Demeter迪米特法则
CRPThe Composite Reuse Principle合成复用原则
CCPThe Common Closure Principle共同封闭原则
SAPThe Stable Abstractions Principle稳定抽象原则
SDPThe Stable Dependencies Principle稳定依赖原则

1.迪米特法则

迪米特法则又叫作最少知识原则(Least Knowledge Principle,简写 LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。

2.合成复用原则

尽量使用对象组合,而不是通过继承来达到复用的目的。

3.共同封闭原则

一起修改的类,应该组合在一起(同一个包里)。如果必须修改应用程序里的代码,我们希望所有的修改都发生在一个包里(修改关闭),而不是遍布在很多包里。

4.稳定抽象原则

最稳定的包应该是最抽象的包,不稳定的包应该是具体的包,即包的抽象程度跟它的稳定性成正比。

5.稳定依赖原则

包之间的依赖关系都应该是稳定方向依赖的,包要依赖的包要比自己更具有稳定性。

 

 

 

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南) 本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。 阅读详情

相关推荐

从零构建:基于Docker与FRR的OSPF虚拟网络实验室

本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。

plum99的博客 221

面向对象思想总结(值得一读)

一、面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。 面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。 二、简单理解面向对象 就是在程序里面首先分解出来的应该是注意不再是一步一...

zp19860529的博客 3073

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3844

面向对象的设计思想是什么?

3.封装(Encapsulation):封装是将数据和操作数据的方法集合在一起,形成一个独立实体,同时隐藏对象内部的细节。它将问题领域中的实体抽象成对象,通过对象之间的交互和合作来模拟和解决实际问题,为软件开发提供了一种更加容易理解、设计和实现的方式。通过多态,可以提高代码的灵活性和可扩展性,使得程序可以根据当前对象的类型选择合适的方法进行调用。面向对象的程序设计思想是一种软件开发方法,它将系统中的数据和操作数据的方法组织成对象,通过对象之间的交互来实现程序的设计和功能。

2301_76831820的博客 766

pytorch图像分类篇: 花分类数据集下载和AlexNet网络搭建训练

一、花分类数据集下载 data_setdata_set该文件夹是用来存放训练数据的目录 使用步骤如下: (1)在data_set文件夹下创建新文件夹"flower_data" (2)点击链接下载花分类数据集 (3)解压数据集到flower_data文件夹下 (4)执行"flower_data.py"脚本自动将数据集划分成训练集train和验证集val ├── flower_data ├── flower_photos(解压的数据集文件夹,3670个样本) ...

橙子的博客 8218

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

面向对象思想(详解)

一、面向过程编程与面向对象编程 1、什么是面向过程编程? 面向过程其实是最为实际的一种思考方式,就是算面向对象的方法也是含有面向过程的思想.可以说面向过程是一种基础的方法,它考虑的是实际的实现一般的面向过程是从上往下步步求精.对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织.比如拿做饭说这种面向过程吧.粗略的可以将过程拟为: 买菜>淘米>切菜>蒸米&

极限突破者的博客 2868

Scratch离线版部署指南:解决资源缺失与页面显示异常问题

本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。

wine的专栏 1261

面向对象的设计思想

面向过程与面向对象 面向过程(POP) 分析出解决问题所需要的的步骤,然后把步骤一步一步实现。 面向过程直接关注流程。 面向对象(OOP) 以分类的方式进行思考和解决问题 面向对象先对整体关系作出分类,然后根绝不同的类深入细节的处理。 面向对象与面向过程之间的关系 面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观 上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过 程的思维方式。面向对象如果离开了面向过程,就无法实现真正的落地, 成为无源之水。 JAV..

keop123的博客 1018

r语言svr模型_R语言初探强化学习中的马尔可夫模型

强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以...

weixin_28994357的博客 1111

yolo自动化项目实例解析(九) 导航

比如我们经常使用的导航,说白了就是寻找两点之间最近的路径,也就是所谓的寻路,我们需要想办法让程序知道他要去哪里,路径包含(起点、轨迹、路径)

默子昂 1995

面向对象设计思想的要点

允许父类中返回的是父类型,而子类中返回子类型,例如父类中返回的是Number类型,而子类中返回的是Integer)(下图代码段)针对一个类对象有两种类型,一种称之为编译期类型,编译时系统识别对象的类型,”动物x=new猫()”在编译时,系统识别x是动物类别的,所以只能调用动物类定义的方法,而不能调用猫中特殊的方法。以上代码段子类中定义的同名同参数的方法覆盖了父类中所定义的方法定义,如果需要调用父类中的方法则需要使用supper.pp(k)进行调用。方法的名称相同,参数不同,和返回值类型无关。...

weixin_42383952的博客 209

#systemverilog# 之 event region 和 timeslot 仿真调度(二)例子

由于疫情的关系,一时半会回不了学校了。今天开始,哪怕在家也要克服惰性开始学习了。今天来个的想了很久但都犯懒而没动手的内容,就是关于仿真软件在跑systemverilog的时候,是如果通过将HDL代码分成5个区域来编译,从而实现用软件模拟硬件的运行结果的思想。 首先,是基础概念,systemverilog标准划分了仿真软件的5个跑仿真所要执行的区域,说白了就是规定了软件在跑代码的时候要把代码分成5类,放到5个堆栈里面分别跑,这样才能:明明在软件上是以顺序方式来执行代码的,却能“看似”像在硬件中那样的实现并行

那么菜的博客 1763

面向对象思想总结

  一、面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。       面向对象有一个非常重要的设计...

每一天都是余生 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

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

JAVA面向对象思想

JAVA语言的思想就是面向对象,它是基于面向过程的。(C语言是面向过程的,其强调的是功能行为。)而面向对象强调的是功能和属性封装体,也就是说JAVA强调的是对象。如果说C语言着重个体的功能,那么JAVA则着重讲整体功能,或者说对象的功能。相对于C语言来讲,JAVA的出现也是编程思想的一种转变,从而使得编程变得好懂、易学。 例: C语言面向过程: 打开冰箱。 存储大象。 关上冰箱。 强调

a18937103206的专栏 1274

VB摄像头监控

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

全面化讲解面向对象思想

我们先来初步了解一下面向对象 初识面向对象 面向对象,他是我们开发的一种编程思想 编程思想 面向对象 : 就是一种编程思想 面向过程 : 也是一种编程思想 前言 学习面向对象,最重要的是理解,基于面向对象的编程思想,不断结合,使得语法认知更加透彻,并细致入微总结每一个语法点,关于面向对象的语法,前期需非常努力,后期也会持续加强,但学习时不可以疏忽懈怠 面向对象类和对象的概念理解 给大家一个概念,什么样算是面向对象呢? 生成一辆汽车过程示例 它包括了生产汽车的全部过程方法组成等等等等 这里,了

Jan's的博客 482

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

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

简述Java面向对象的基本思想_简述面向对象思想

简述Java中的面向对象(OOP)思想Java是一种面向对象的语言,那么什么是面向对象(Object Oriented Programming)?首先,什么是对象(Object)?Java中有一种思想叫做“万物皆对象”,对象就是具有某些特殊属性(成员变量)和行为方式(方法)的实体。现实生活中的任何事物都可以看作是对象,无论是具体或抽象的事物,比如:一个动物或者是城市的变化。具有两个特征:属性(Pr...

weixin_39968436的博客 726

Java 面向对象思想

一、浅谈Java面向对象三大特征:封装、继承、多态 对象,是具体存在现实中的事物,比如人,比如手机。 那么如果将对象用代码表示出来呢?首先我们要知道我们表示的是什么?我们表示的是人 二、面向对象的抽象、接口特征 参考博客有: 接口和抽象类的区别---相信你看完不会再混淆了_不悔的青春-优快云博客_接口与抽象类的区别 ...

weixin_60808029的博客 1817

Java面向对象思想

目录 面向过程思想概述 面向对象思想概述 举例 1:面向对象思想 2:面向对象的思想特点 3:把大象装进冰箱 4:开发,设计,特征 类与对象关系 类的定义 成员变量和局部变量的区别 类和对象的内存关系 总结 面向过程思想概述 l我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后...

moonlightpeng的博客 484

java的面向对象思想

1、初识面向对象 2、类与对象的关系 3、对象的创建分析 4、面向对象三大特性(封装、继承、多态) 5、抽象类和接口 6、四种内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)

m0_72541008的博客 1222

在编程里,什么是面向对象的思想?

这些概念老生常谈,但校长发现,不少同学对它们的理解还是停留在“考试会写代码”的层面,今天就给你拆开讲透。这个话题,听起来很玄乎,但凡是写过代码的同学都知道,几乎所有主流编程语言都在大谈“面向对象”:Java号称“生而为对象”,Python在用面向对象“秀优雅”,连C++的诞生都带着面向对象的使命。面向对象的核心思想,是把世界看作由一个个对象组成,而每个对象都是一个独立的“小世界”,有自己的属性和行为。于是,聪明的程序员们就开始琢磨:有没有一种更“优雅”的编程方式,能让代码更易读、好维护,还能少掉头发?

m0_61562916的博客 535

java面向对象思想

抽象是指将现实世界中的事物抽象成类和对象,忽略其非本质的细节,只关注其本质特征和行为。在 Java 中,抽象通过抽象类和接口来实现。抽象类不能被实例化,它可以包含抽象方法和具体方法;接口是一种特殊的抽象类型,它只包含抽象方法。Java 面向对象思想通过对象、类、封装、继承、多态和抽象等概念,提供了一种结构化、模块化的编程方式,使得代码更加易于理解、维护和扩展。在实际开发中,合理运用面向对象思想可以提高开发效率和代码质量。

qq_36633637的博客 438
上一篇: 结构型设计模式
下一篇: 牛客网java题目四
trytrylmt
博客等级 码龄9年 7粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值