面向对象开发技术(第三周)

回顾

上一堂课主要学习了面向对象编程与非面向对象编程(面向功能、过程编程),本节课就重点来看看面向对象编程中的一个具体思想——抽象

面向对象编程的特性:1、封装性 2、继承性 3、多态性

封装:意味着提供服务接口

继承:意味着类之间层层的关系,也就是需要从上层到下层具体化,或从下层到上层抽象化

多态:意味着处理继承中的特殊情况,让类的关系更加自由

所以,本堂课重点来来看看抽象思想

抽象定义 

抽象:是建立、理解和管理复杂的系统最主要的技术

包括:1、对一个功能实现的过程细节有目的的隐藏

           2、以便让其他方面、细节表达的更清楚

举例:1、世界地图忽略细节以便呈现世界的整体样貌,整体关系

           2、地方性的地图重点展示各山峰、超市、街道等,而忽略了整体的样貌、关系

抽象层次

层次一、团体

在面向对象程序开发过程中,关于“团体有两个层次的含义:

1、首先是指程序员的团体,他们在现实世界中相互作用,以便开发出应用程序来。

2、第二个团体是这些程序员创建的对象的团体,它们在虚拟世界中相互作用,以完成它们的共同目标。

下图可以理解为一个程序的程序员团体一个程序的对象团体

 层次二、单元

在面向对象程序开发过程中,单元的含义有:

1、许多协同工作的对象组合到一个“单元”中

2、这些单元允许某些特定的名称暴露在单元以外,而其他特征则隐藏在单元中

3、例如,Java” (packages)C++名字空间(name spaces)Delphi中的单元(units)

注意:当用protected修饰类成员时,该类成员能够被其子类同一包中的其他类访问 

层次三、CS

在面向对象程序开发过程中,CS的含义有:

1、处理两个独立对象之间的交互

2、两个对象间交互时涉及两层抽象:一个对象(服务者, server)向另一个对象(客户, client)提供服务,二者之间以通信来交互

层次四、服务实现方式

1、考虑第三层次中的服务中具体的实现方式

2、这个具体实现方式仍然存在一定抽象,包括:实现算法、数据结构等

 层次五、具体实现

1、方法的具体实现逻辑(具体过程、具体的算法数据结构的实现)

2、关注执行一个方法的具体操作实现

总结

1、在软件产品设计的过程中,我们思考的层次从上到下进行的。因为越上层的抽象层度越高,越简洁。

2、软件开发团队布置任务的顺序也是从上层到下层,层层分解来布置的。越上层的其对应开发团队中的地位也相对更高

抽象方法 

特化分层

定义

特化分层又称为特殊化或具体化,在具体化的物体中抽象出一些共同的特性、特点归为一个特殊的上层类的方法就称为抽象

举例

一、汽车是一个有轮的载运工具,而有轮的载运工具又是一个载运工具,所以载运工具就是从汽车这个具体化的物体中抽象提炼出来的

二、生物分为动物和植物,动物又分为脊椎动物和无脊椎动物,脊椎动物包括哺乳动物,哺乳动物又分为猫、狗

分治法

定义

将一层复杂的系统划分为多个组成部分,从而将复杂系统简单化。任何平常接触的名词都是抽象化后的结果,例如:汽车、手机等。这些都是将许多系统(传动系统、显示系统等),甚至更底层可以说是物质组合后抽象归纳出来的东西

举例

汽车是由发动机、传动机构、车身和车轮组成的,要理解汽车这个概念,只要依次检查其组成部件就行了

不同视角

定义

对同一件物品提供不同的视角。每一个视角会强调某一些细节而忽略其他细节,因此,对同一对象描述出不同的特性。本质上就是利用视角不同,对物体的功能和实现方式进行不同程度的抽象处理。

举例

一、机械师眼里的汽车和外行眼里的汽车,看法是很不一样的。机械师眼里的汽车抽象程度相对于外行人眼里的汽车就更低

二、服务视角:服务的制造者仅仅关注服务功能的实现并不关注使用的场地、环境等,服务的使用者仅仅关注什么时候使用服务并不关注服务的具体实现方式

总结

如果觉得写的还不错,可以点个赞收藏一下呀~~

祝大家学业、事业、爱情顺利!

天天开心,没有Bug每一天

 


http://www.ppmy.cn/devtools/18171.html

相关文章

【k8s】(七) kubernetes1.29.4离线部署之-部署网络插件

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

简单的jmeter脚本自动化

1、创建线程组,定义自定义变量,保存请求默认值 2、用csv编写测试用例 备注:如果单元格内本身就有引号,则格式会有点小问题,不能直接修改为csv 用txt打开后 有引号的需要在最外层多包一层引号,每个引号前…

3D抓取算法的介绍

3D抓取算法是一个用于三维点云数据上物体抓取的基线算法。该算法基于深度学习,利用点云数据来预测最佳的抓取点,以便机器人或其他自动化系统能够执行精确的抓取操作。 以下是关于3D抓取算法的详细介绍: 1. 数据输入 3D抓取算法通常接受三维…

qt实现视频采集及显示相关思考

为了保证相机图像采集帧率,通常最好的方式是开启一个子工作线程,将采集到的图像经过处理后显示到界面控件上。这时候为了保证充分发挥相机性能,使用一个无限循环来采集图像,同时为了保证显示的帧率,尽量在采集后立马显…

盲盒小程序开发:揭秘惊喜,探索无限可能

在快节奏的现代生活中,人们总是渴望寻找一些新颖、有趣的方式来放松心情、体验惊喜。盲盒作为一种充满神秘与期待的商品形式,正逐渐受到越来越多人的喜爱。为了满足广大用户的需求,我们倾力打造了这款独具匠心的盲盒小程序,让您随…

ROS1快速入门学习笔记 - 02ROS相关介绍

一、什么是ROS? ROS 通信机制 开发工具 应用功能 生态系统 目的:提高机器人在研发中的软件复用率 1. 通信机制 2. 开发工具 3. 应用功能 4. 生态系统 二、ROS的核心概念 1. 节点(Node)-- 执行单元 执行具体任务的进程、独立…

Python Flask Web框架快速入门

Flask 入门Demo Flask 开发环境搭建,执行如下指令: pip install flask # 第一节: Flask 快速入门from flask import Flask app Flask(__name__)app.route(/flask) def hello_flask():return Hello Flaskapp.run() 核心代码剖析: 从 fla…

大语言模型在研究领域的应用——传统自然语言处理任务中的大语言模型

传统自然语言处理任务中的大语言模型 序列标注关系抽取文本生成总结应用建议未来方向 语言模型是自然语言处理领域的重要研究方向之一,相关技术进展有力地推动了下游应用任务的性能提升。本部分内容将主要介绍大语言模型在三大类经典自然语言处理任务上的应用&#…

C语言----单链表的实现

前面向大家介绍了顺序表以及它的实现,今天我们再来向大家介绍链表中的单链表。 1.链表的概念和结构 1.1 链表的概念 链表是一种在物理结构上非连续,非顺序的一种存储结构。链表中的数据的逻辑结构是由链表中的指针链接起来的。 1.2 链表的结构 链表…

Android 使用 GeckoView 并实现 js 交互、权限交互

参考文档: geckoview版本 引入文档(有坑 下面会给出正确引入方式) 官方示例代码1 官方示例代码2 参考了两位大神的博客和demo: GeckoView js交互实现 geckoview-jsdemo 引入方式: maven {url "https://maven.…

【附送】macbook删除快捷键大全,一款高效的macbook删除工具 Mac实用软件推荐

几乎每一个macbook的用户在拿到电脑的第一时间,都会去了解macbook删除快捷键大全,因为这样不仅能够方便日常使用,提高工作效率,更重要的是随着使用时间的增长,不仅系统中会堆积许多不必要的文件,还会有一些…

路由器使用docker安装mysql和redis服务

路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 (需要u盘 或者 移动硬盘) 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…

typescript 文件命名规范

文章目录 1. 使用小写字母2. 使用连字符(-)分隔3. 相关文件保持命名一致4. 组件文件使用大写开头5. 明确的后缀6. 避免过于通用的名称7. 测试文件的特殊命名总结 在 TypeScript 项目中,文件命名规范对于保持代码的整洁和易于理解是非常重要的…

【Python系列】受保护属性

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SpringBoot:SpringMVC(下)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、RequestBody补充二、PathVariable三.RequestPart:四.ResponseBody五.CookieValue,SessionAttribute,RequestHeader 前言 提示&…

机器学习笔记 - 基于pytorch的自定义数据集和数据加载器

PyTorch 提供了torch.utils.data.DataLoader和torch.utils.data.Dataset 允许您使用预加载的数据集以及您自己的数据。 Dataset存储样本及其相应的标签,并基于DataLoader进行迭代Dataset以访问样本。 自定义 Dataset 类必须实现三个函数:__init__、__len__和__getitem__。 下…

QBoxLayout的addWidget(QWidget * w)会改变w的parent()

示例: 我希望在page_frame对象中使用orders_add_page对象的price变量, 但按照下面这样写得到的price的值都不对。 int price; orders_add_page::orders_add_page(QWidget *parent): QDialog(parent) {ui.setupUi(this);page new page_frame(type, t…

Leetcode 605. Can Place Flowers

Problem You have a long flowerbed in which some of the plots are planted, and some are not. However, flowers cannot be planted in adjacent plots. Given an integer array flowerbed containing 0’s and 1’s, where 0 means empty and 1 means not empty, and an…

JVM 讲解 (主要类加载其以及流程和机制(双亲委派))

JVM有什么用? 说白了,就是我们编写 Java 代码,编译 Java 代码,目的不是让它在 Linux、Windows 或者 MacOS 上跑,而是在 JVM 上跑。(保证只要有JVM这个东西,就可以跨平台使用Java) 可以把JVM想象…

关于pdf.js中文本坐标尺寸的使用

一个电子教材项目中有这样一个需求: 用户向网站上传一个PDF书籍后,网站可以对PDF书籍进行解析,并支持用户对PDF书籍的每一页做一些操作,比如:为英语课本的单词和句子添加音频热区。因为热区数量很多,所以&a…