面向对象思想学习总结(超赞!!!)

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

我是技术搬运工,好东西当然要和大家分享啦.原文地址

S.O.L.I.D

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。

简写全拼中文翻译
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. 依赖倒置原则

  1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
  2. 抽象不应该依赖于细节,细节应该依赖于抽象

封装、继承、多态

封装、继承、多态是面向对象的三大特性。

1. 封装

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

封装有三大好处:

  1. 良好的封装能够减少耦合。

  2. 类内部的结构可以自由修改。

  3. 可以对成员进行更精确的控制。

  4. 隐藏信息,实现细节。

以下 Person 类封装 name、gender、age 等属性,外界只能通过 get() 方法获取一个 Person 对象的 name 属性和 gender 属性,而无法获取 age 属性,但是 age 属性可以供 work() 方法使用。

注意到 gender 属性使用 int 数据类型进行存储,封装使得用户注意不到这种实现细节。并且在需要修改使用的数据类型时,也可以在不影响客户端代码的情况下进行。

public class Person {
    private String name;
    private int gender;
    private int age;

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender == 0 ? "man" : "woman";
    }

    public void work() {
        if(18 <= age && age <= 50) {
            System.out.println(name + " is working very hard!");
        } else {
            System.out.println(name + " can't work!");
        }
    }
}

2. 继承

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

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

继承应该遵循里氏替换原则:当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有 is-a 关系。

Animal animal = new Cat();

3. 多态

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

多态有三个条件:1. 继承;2. 覆盖父类方法;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();
        }
    }
}

UML

1. 类图

1.1 继承相关

继承有两种形式: 泛化(generalize)和实现(realize),表现为 is-a 关系。

① 泛化关系(generalization)

从具体类中继承

② 实现关系(realize)

从抽象类或者接口中继承

1.2 整体和部分

① 聚合关系(aggregation)

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

② 组合关系(composition)

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

1.3 相互联系

① 关联关系(association)

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

② 依赖关系(dependency)

和关联关系不同的是, 依赖关系是在运行过程中起作用的。一般依赖作为类的构造器或者方法的参数传入。双向依赖时一种不好的设计。

2. 时序图

2.1 定义

时序图描述了对象之间传递消息的时间顺序,它用来表示用例的行为顺序。它的主要作用是通过对象间的交互来描述用例(注意是对象),从而寻找类的操作。

2.2 赤壁之战时序图

从虚线从上往下表示时间的推进。

可见,通过时序图可以知道每个类具有以下操作:

publc class 刘备 {
   public void 应战();
}

publc class  孔明 {
  public void  拟定策略();
  public void  联合孙权();
  private void 借东风火攻();
}

public class 关羽 {
    public void  防守荊州();
}

public class 张飞 {
   public void  防守荆州前线();
}

public class 孙权 {
   public void  领兵相助();
}

2.3 活动图、时序图之间的关系

活动图示从用户的角度来描述用例;

时序图是从计算机的角度(对象间的交互)描述用例。

2.4 类图与时序图的关系

类图描述系统的静态结构,时序图描述系统的动态行为。

2.5 时序图的组成

① 对象

有三种表现形式

在画图时,应该遵循以下原则:

  1. 把交互频繁的对象尽可能地靠拢。

  2. 把初始化整个交互活动的对象(有时是一个参与者)放置在最左边。

② 生命线

生命线从对象的创建开始到对象销毁时终止

③ 消息

对象之间的交互式通过发送消息来实现的。

消息有4种类型:

1. 简单消息,不区分同步异步。

2. 同步消息,发送消息之后需要暂停活动来等待回应。

3. 异步消息,发送消息之后不需要等待。

4. 返回消息,可选。

④ 激活

生命线上的方框表示激活状态,其它时间处于休眠状态。

参考资料

【ros】ROS1的安装和相关使用方法 主要学习ros相关内容 阅读详情

相关推荐

从零开始:用YOLOv8-Pose实现实时人体姿态检测(附完整代码)

本文提供了一份从零开始的完整实战指南,详细介绍了如何使用YOLOv8-Pose构建实时人体姿态检测系统。内容涵盖环境搭建、数据准备、模型训练与调优,以及高性能部署和进阶应用开发,并附有可直接运行的代码示例,帮助开发者快速掌握Pose Estimation技术并将其应用于实际项目。

h6i7j8的博客 621

面向对象的学习

面向对象(上) Java面向对象学习的三条主线 java类及类的成员:**属性、方法、构造器;**代码块、内部类 **面向对象的三大特征:**封装、继承、多态 其他关键字:this、super、static、final、abstract、interface、package、import 面向对象与面向过程 面向过程(POP)与面向对象(OOP) 面向过程:强调的是功能、以函数为最小单位,考虑怎么做 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做 面向对象的思维概述: 程序

weixin_55350383的博客 672

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 274

Java面向对象的学习总结

面向对象的学习方法

sxsxsx2的博客 2139

EDF Browser使用说明和技巧

edf browser使用说明和一些小技巧

Erhu_666的博客 8334

AI人工智能与TensorFlow的教育科技应用

随着科技的飞速发展,AI人工智能在各个领域都展现出了巨大的潜力,教育领域也不例外。本文章的目的在于深入探讨AI人工智能与TensorFlow在教育科技中的具体应用,包括智能教学系统的开发、学生学习情况的评估与预测等方面。范围涵盖了从基础概念到实际项目应用的各个层面,旨在为教育科技工作者和相关研究者提供全面且深入的技术指导。本文将首先介绍AI人工智能和TensorFlow的核心概念及其联系,让读者对相关技术有基本的了解。接着详细讲解核心算法原理和具体操作步骤,并结合数学模型和公式进行深入分析。

AI智能探索者的博客 1698

Java中的面向对象

面向对象的三大特性:封装、继承、多态。

m0_46977298的博客 1111

无人驾驶感知融合——横摆角速度的多源估计算法解析

本文深入解析了无人驾驶感知融合中的横摆角速度多源估计算法,详细介绍了轮速差法、侧向加速度法、曲率法和惯性传感器直读法四种计算方法及其优缺点。通过卡尔曼滤波实战案例,展示了多源融合算法在提升精度和稳定性方面的显著优势,并探讨了工程实践中的时间对齐、坐标系统一等关键问题。

weixin_31458015的博客 462

JAVA基础(笔记)

q2fefg

qq_48385654的博客 633

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

weixin_72194028的博客 3010

GEE:面对对象土地利用分类(结合SNIC、GLCM 和机器学习算法)

本文将介绍在Google Earth Engine中结合SNIC、GLCM和机器学习算法的的土地利用/土地覆盖(LULC)分类方法。结果如下图所示,

养乐多的博客 5618

python | 基础学习(五)面向对象

文章目录一、面向对象的基本概念1、面向对象2、类和对象(1)类(2)对象(3)定义简单的类(4)创建对象(5)增加属性(6)`dir(函数名)` 查看函数的属性和方法①初始化方法__init__②在初始化方法内部定义属性③形参,使代码更灵活④__del__⑤__str__方法二、面向对象的三大特性1、面向对象封装应用1:Yilia的体重应用2:摆放家具应用3:士兵突击(1)身份运算符`is`、`is not`(2)私有属性和私有方法(3)伪私有属性和私有方法(科普)2、继承3、单继承(1)语法:(2)与继承

qq_44250700的博客 6470

YOLO26 标签分配机制:STAL 小目标感知分配策略

YOLO26提出的STAL标签分配策略通过尺度感知机制优化了小目标检测性能。该方法根据目标面积将检测对象分为小、中、大三类,分别采用差异化的分配参数(TopK数量、IoU阈值和中心度权重),特别是对小目标采用更宽松的匹配条件和更高的中心度权重。实验结果表明,STAL策略显著提升了小目标检测精度(AP_small),同时保持了整体检测性能(mAP),为解决目标检测中尺度不平衡问题提供了有效方案。

一键难忘的博客 791

C 语言面向对象思想

注:本博客参考了很多大神的文章加上自己的理解,只做学习复习用 一. C语言面向对象设计引入 1.我们为什么要学习面向对象思想??? 在我们平时的开发中也经常会遇到一些简单的项目我们很快就完成了,并且测试着也没有任何问题,但是随着产品迭代,需求增加,项目维护起来越来越耗时,一个看似简单的需求,需要花费较多的时间去开发,出现项目延期。 项目超期的很大一部分原因都是因为代码“牵一发动全身”,当我们的项目需求在累加的过程中,功能相近的应用我们也习惯性的复制,粘贴。导致出现了很多的冗余代码,同时业务逻辑与执.

lzs940320的博客 4123

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java 面向对象思想

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。类:是一组相关属性和行为的集合。

TMesh的博客 909

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

面向对象思想(详解)

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

极限突破者的博客 2869

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Delphi面向对象编程思想》前言

        Delphi面向对象编程思想   刘 艺 著前  言   第一次知道Delphi并不是因为Borland公司的Delphi软件,而是在柏拉图的经典著作《柏拉图对话录》“申辩篇”中读到了这个单词。A friend of mine . . . went to Delphi and boldly asked the or

newdream的专栏 2451

全面化讲解面向对象思想

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

Jan's的博客 482

面向对象编程思想

面向对象编程思想(Object Oriented Programming) 面向过程编程思想面向过程核心思想:自顶向下,逐步求精。 面向对象编程思想面向对象核心思想:以对象为单位,将解决客观世界问题的方式方法引入到编程领域中。 面向对象编程是面向过程的一种升级。 1 什么是对象? 概念:由于计算机不断地发展需要计算机解决人类在现实世界中的问题,所以必须在程序中模拟出客观世界存在事物,而对象就是对事物的一种统称 一句话总结:万物皆对象,一切客观存在的事物在面向对象思想中统称为对象。 1.1

weixin_40055163的博客 5966

Java学习——面向对象编程思想

本文向大家介绍了面对对象的基本概念、面向对象与面向过程的区别、面向对象程序设计的类与对象、面向对象的四大特征:抽象、继承、封装、多态、实现多态性的三种方式:重载、重写、接口、 面向对象思想优点、面向对象思想总结、三大特征、五种关系、七大原则,希望对你有用~~

weixin_53919192的博客 2191

JAVA面向对象思想

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

a18937103206的专栏 1274

面向对象程序设计思想的魅力

说说面向对象程序设计 在学习面向程序之前,我先学了C语言,也就是面向过程的程序设计。学完C后的第一个感觉只能编写一些及其简单的题目,什么判断大小,或者利用一些循环语句,用批量判断大小。最起码我那时还不懂C专家的编程思想,所以觉得自己什么都写不出来。(当然要写出一些有点技术含量的代码还需要非常多其他的知识)。那时候C语言的课程设计写一个五子棋,一个把数据关系变相表达出来的一个程序,那时候用了两个星

if(代码==人生) 3694

面向对象思想

特点: 每个类都有构造方法,如果没有显式地为类定义构造方法,Java将会为该类提供一个默认无参构造方法,但是只要在一个Java类中定义了一个有参构造方法后,默认的无参构造方法会失效。解决问题是以类为单位进行组织的,将同一事物的属性和行为封装到一个类中,解决莫一类问题是,找对应的类即可。在计算机程序设计过程中,参照显示的事物,将事务的属性特征,行为特征抽象出来,用类来表示。编程时,先分析事物,由哪些类,将不同类型的功能,定义在各自类中。对象:实际存在的该类事物的每个个体,是具体的,因而也成为实例。

2402_88089241的博客 645

Java学习总结(三) ——面向对象思想

Java学习总结(三) —— 面向对象思想一、面向对象思想概述二、类与对象1. 什么是类?2. 什么是对象?3. 类与对象的关系4. 对象的内存图4.1 一个对象,调用一个方法内存图4.2 两个对象,调用同一方法内存图4.3 一个引用,作为参数传递到方法中内存图5. 成员变量和局部变量区别 一、面向对象思想概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向...

weixin_42290410的博客 244

面向对象思想:从面向过程到面向对象的转变

面向过程(Procedural Programming,简称PP),是最贴近人类“做事习惯”的编程思想,也是大多数初学者入门编程时接触的第一种思想——比如我们学习C语言时,写的每一个程序,本质上都是面向过程的。面向对象(Object-Oriented Programming,简称OOP),是为了解决面向过程的局限而诞生的编程思想——它不聚焦“步骤”,而是聚焦“参与者”,将“数据”和“操作数据的方法”封装在一起,通过“参与者”的交互完成任务。

qq_43402143的博客 2220

Java面向对象思想

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

moonlightpeng的博客 484
上一篇: java容器学习总结(超赞!!!)
下一篇: 设计模式学习总结(超赞!!!)
普通网友
博客等级 码龄9年 489粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值