【中级软件设计师】上午题07-面向对象技术(通俗易懂版)

上午题07-面向对象技术

  • 1 类
  • 2 对象和消息
    • 2.1 对象
    • 2.2 消息
  • 3 方法重载
  • 4 封装
  • 5 继承
  • 6 多态
  • 7 静态、动态绑定
  • 8 面向对象设计原则
  • 9 面向对象分析与设计
    • 9.1 面向对象分析
    • 9.2 面向对象设计
    • 9.3 面向对象测试

1 类

实体、接口、控制

类是在对象之上的抽象,对象是类的具体化,是类的实例(Instance)。
类可以分为三种:实体类、接口类(边界类)和控制类。

(1)实体类的对象表示现实世界中真实的实体,如人、物等。
(2)接口类(边界类) 的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏、窗口、Web 窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法。
(3)控制类的对象用来控制活动流,充当协调者。

2 对象和消息

2.1 对象

对象、属性、方法

在面向对象的系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为)。所以,一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。在对象内的操作通常称为方法。一个对象通常可由对象名、属性和方法 3个部分组成。
每个对象都有它的属性和操作,如电视机有颜色、音量、亮度、灰度、频道等属性,可以有切换频道、增大/减低音量等操作。
电视机的属性值表示了电视机所处的状态,电视机是黑色、电视机的音量很大这些都是状态
电视机的各组成部分,如显像管、电路板和开关等都封装在电视机机箱中,人们不知道也不关心电视机是如何实现这些操作的。

对象的状态标识了该对象的所有属性,以及每个属性的当前值。
对象共享属性和行为。

2.2 消息

调用

对象之间进行通信的一种构造叫作消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。接收到信息的对象经过解释,然后予以响应。这种通信机制称为消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。

调用类的方法
ml.changeLevel(2)

3 方法重载

不同的参数去控制同一个方法。

方法同名但是方法参数个数不同,或方法参数类型不同,或方法参数类型顺序不同都是方法重载。指在同一个类中使用相同的方法名,但是参数列表不同,来实现不同的功能。

例如,有一辆车,我们为这辆车定义了一个 run 方法,可以根据不同的参数来控制车辆的运行方式,比如可以传入速度参数、方向参数等,来实现不同的运行效果。

4 封装

封装就像是将一个物品放入一个包裹或容器中,然后提供一个外部接口来与其交互,而不需要了解包裹内部的具体细节。

在编程中,封装是指将数据(属性)和操作(方法)封装在一个对象中,并且只通过对象的公共接口(方法)来访问数据,隐藏了对象内部实现的细节。

想象一辆汽车,我们只需知道如何使用汽车的接口(如方向盘、油门、刹车等),而无需了解汽车的内部引擎或机制。

5 继承

狗类可以继承动物类的属性和方法,如名称、种类、吃等,同时可以在这基础上添加自己特有的行为或属性,如“汪汪叫”和“看门”。

继承可以让一个类(子类)从另一个类(父类)那里继承属性和行为,子类可以重用父类的属性和行为,并且可以在此基础上添加新的属性和行为。

假设有一个动物类(父类),其中包含了共有的属性和行为(如名称、种类、吃、睡等),然后有一个狗类(子类)继承自动物类,狗类可以继承动物类的属性和方法,如名称、种类、吃等,同时可以在这基础上添加自己特有的行为或属性,如“汪汪叫”和“看门”。

6 多态

动物类中有一个叫声的方法 makeSound(),而狗类和猫类继承自动物类并重写了这个方法。狗类中的 makeSound() 方法会发出汪汪的声音,而猫类中的 makeSound() 方法会发出喵喵的声音。

多态指的是同一个方法可以以不同的形式(参数类型、个数)出现,实现不同的功能。

参数多态是应用比较广泛的多态,被称为最纯的多态。
包含多态在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。
过载(Overloading)多态是同一个名字在不同的上下文中所代表的含义不同

7 静态、动态绑定

静态绑定在编译,动态绑定在运行。

绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫作静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。
动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。

8 面向对象设计原则

(1)单一责任原则(Single Responsibility Principle,SRP)。就一个类而言,应该仅有一个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
(2)开放-封闭原则(Open & Close Pinciple,OCP)。软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的
(3)里氏替换原则(Liskov Substitution Principle,LSP)。子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
(4)依赖倒置原则(Dependence Inversion Principle, DIP)。抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
依赖于抽象,而不依赖于细节。
(5)接口分离原则(Interface Segregation Principle,ISP)。不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。即:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。
依赖于抽象,而不依赖于具体。

上述(1)~(5)是面向对象方法中的五大原则。除了这五大原则之外,Robert C.Martin提出的面向对象设计原则还包括以下几个。

(7)共同封闭原则(Common Closure Principle,CCP)。包中的所有类对于同一类性质的变化应该是共同封闭的。**一个变化若对一个包产生影响,则将对该包中的所有类产生影响,**而对于其他的包不造成任何影响。
(8)共同重用原则(Common Reuse Principle,CRP)。一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

9 面向对象分析与设计

9.1 面向对象分析

认定 组织 描述 确定 定义
面向对象分析包含5个活动:
(1)认定对象、
(2)组织对象、
(3)描述对象间的相互作用、
(4)确定对象的操作、
(5)定义对象的内部信息。

9.2 面向对象设计

3个识别 2个定义

其目标是定义系统构造蓝图。
(1)识别类及对象
(2)定义属性
(3)定义服务
(4)识别关系
(5)识别包

9.3 面向对象测试

(1)算法层
(2)类层
(3)模板层
(4)系统层

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安科瑞精密配电柜助力数据中心节能降耗

彭姝麟 Acrelpsl 1.趋势分析 能源支出作为数据中心运营的主要成本之一。清华大学能源互联网创新研究院常务副院长高文胜曾在公开场合指出,随着我国数据中心能源消耗的逐年攀升,电费支出约占数据中心年运营成本的95%。加之“双碳”战略的出台&#xff0c…

markdown支持的emoji表情

markdown-emoji Markdown语法支持添加 emoji 表情,输入不同的符号码(两个冒号包围的字符)可以显示出不同的表情 Emoji Cheat Sheet全列表参见:Emoji Cheat Sheet markdown-emoji 人物自然事物地点符号 人物 :bowtie: :bowtie…

ActiViz三维场景的基本要素——灯光

文章目录 一、ActiViz 中灯光的基本要素二、ActiViz 中灯光的使用方法三、ActiViz 中灯光的高级特性四、性能优化和注意事项五、总结一、ActiViz 中灯光的基本要素 灯光是在三维场景中模拟光照效果的重要组成部分。在 ActiViz 中,灯光具有多种类型和属性,可以通过设置这些属…

字符串(string)篇(一)

文章目录 1.1 capitalize()函数1.2 casefold()函数1.3 center()函数1.4 count()函数1.5 decode()函数1.6 encode()函数1.7 endswith()函数1.8 expandtabs()函数1.9 find()函数 1.1 capitalize()函数 在Python中,capitalize() 是一个字符串(string&#…

SkyWalking上报Java应用数据

重要 本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。 通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以…

cyclictest 交叉编译报错---rt_numa.h:18:10: fatal error: numa.h: 没有那个文件或目录

cyclictest 主要是用于测试系统延时,进而判断系统的实时性 使用版本 rt-tests-2.6.tar.gz numactl v2.0.16 问题 编译时,需要先编译 numactl ,不然会有以下报错: arm-linux-gnueabihf-gcc -D VERSION2.6 -c src/cyclictest/c…

软考 网工 每日学习打卡 2024/3/19

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

量化交易入门(七)Python开发-面向对象和类

在Python中,面向对象(OO)是一种编程范式或思想,它将现实世界中的实体抽象为对象(Object),通过对象之间的交互来解决问题,在量化交易中,它可以帮助我们更好地组织和管理复杂的交易策略和系统。在面向对象编程中,我们把数据和操作数据的方法封装在对象内部…

Day22初识集合

Day22初识集合 一、集合 1、概念: 集合是指将多个元素组合在一起的数据结构。在编程中,集合用于存储和操作一组相关的数据对象。与数组相比,集合具有更灵活、动态和高级的功能。 2、常见的集合类: List(列表&#x…

454.四数相加

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 方法一&#xff1a; 双层for循环&#xff0c;将nums1、…

KY115 后缀字串排序

描述&#xff1a; 对于一个字符串&#xff0c;将其后缀子串进行排序&#xff0c;例如grain 其子串有&#xff1a; grain rain ain in n 然后对各子串按字典顺序排序&#xff0c;即&#xff1a; ain,grain,in,n,rain 输入描述&#xff1a; 每个案例为一行字符串。 输出描述&…

JS的Document属性和方法

在javascript中&#xff0c;document对象是一个非常重要的全局对象&#xff0c;它代表整个html文档。你可以通过document对象来访问和修改html文档的内容和结构。以下是一些常见的document属性和方法&#xff1a; 属性 1、document.title&#xff1a;获取或设置文档的标题&am…

HTML 特殊元素:展示PDF、展示JSON 数据

<pre> 标签 (preformatted text) <pre> 标签用来表示预格式化的文本内容 在页面数据展示时&#xff0c;后端返回了一段未经处理的JSON 数据&#xff0c;将这段数据在页面正常展示&#xff0c;让可读性更高。 {/"project": {/ "title": "…

TSP问题消除子环

个人感觉看这一个就够了&#xff01;&#xff01;&#xff01; 优化│TSP中两种不同消除子环路的方法及callback实现&#xff08;Python调用Gurobi求解&#xff09; 刘兴禄运筹学修炼日记&#xff1a;TSP中两种不同消除子环路的方法及callback实现&#xff08;Python调用Guro…

sentry-cli - error: Failed to load .sentryclirc file from project path

Xcode 15.2 warning sentry-cli - error: Failed to load .sentryclirc file from project path (/Users/zhuhongwei/Desktop/pandabill/.sentryclirc)推荐一下刚上线的 App 熊猫小账本&#xff0c;里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App&#xff0c;用于…

1、鸿蒙学习-为应用/服务进行签名

针对应用/服务的签名&#xff0c;DevEco Studio为开发者提供了自动签名方案&#xff0c;帮助开发者高效进行调试。也可选择手动方式对应用/服务进行签名&#xff0c;如果使用了需要ACL的权限&#xff0c;需采用手动方式进行签名。 自动签名 说明 使用自动签名前&#xff0c;请…

AI智能报表助手

AI智能报表助手 目标&#xff1a;通过对话一句话智能引导出报表 NL2SQL 自然语言转换为sql 数据集 ATIS&GeoQuery数据集&#xff1a;ATIS数据集来源于机票订阅系统&#xff0c;与美国的地理相关&#xff0c;包含880条问题及对应的SQL语句&#xff0c;属于单一领域但上…

C++ 【深基3.习8】三角形分类

文章目录 一、题目描述【深基3.习8】三角形分类题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 样例 #4样例输入 #4样例输出 #4 提示 二、参考代码 一、题目描述 【深基3.习8】三角形分类 题目描述 给…

闭包机制的底层实现原理

说明:此次分享不涉及ES6的let,const,块级作用域,这些其实都是对本次分享内容的扩展。 闭包的重要性 JS的内功心法,闭包是JavaScript中非常重要的核心概念,关系着JS里很多核心的机制,理解了它,很多问题都会迎刃而解,不理解闭包用JS永远像隔着一层窗户纸。 前端发展日新…