面向对象技术(第二周)

简介: 面向对象技术(第二周)



前言

本文所有知识点和内容均来自山东大学潘丽老师及山东大学软件学院教研组PPT。

回顾

1、消息:是由一个对象发出给另一个对象的,消息内容的完成是由消息接收器(对象)自己来实现。消息能够发出是由于对象自己的声明,消息能够完成是由于对象内部的方法

2、封装:作为发送者的对象只需要知道作为接收器的对象的名字,不需要、不能且没必要知道具体执行的动作

3、责任:接收器A声明了自己的方法就代表它需要对它声明的方法的功能负责。发送器B对行为的要求仅仅表达它所期望的结果。A接受B的消息后就需要对B的要求负责。

4、类:根据抽象原则对客观事物进行归纳分割出抽象的属性。类是对象相关行为的存储库。

5、实例:实例就是类的对象。实例就是消息的接收器。

类的层次

定义

在每一层次上,都可以了解与该层次适配的特定的信息。并且这些信息适用于所有较低的层次抽象程度越高的的类所在层次越高。

本图中越外层的类的层次越高,越中心的类的层次越低 (花商例子)

层次关系的实现

层次关系的实现依赖于:继承

层次关系上下层的另一种表达方式:一般/特殊、泛化/特化

总结:越上层的类越一般,泛化层度越高;越下层的类越特殊,特化层度越高

上面这张图更直观的体现了上下层以及继承的关系

继承

特点

一、类可以组织成一个有层次的继承结构

二、一个子类继承层次树中更高一层的父类的属性、方法(继承性

三、抽象父类是指没有具体实例的类(不能产生具体实例,这与抽象类中的抽象方法有关),他只是用来产生子类

四、子类可以重写父类的同名方法,并在调用时对父类同名方法进行隐藏(多态性

编程方法

编程方法分为:面向对象编程与非面向对象编程

非面向对象编程

其中唯一有使用价值的方法为:面向数据流的结构化开发方法

根本思想

一、面向数据流。仅仅关注每个功能下数据的输入与输出。从数据的输入输出来考虑具体要实现迭的函数的功能。一个个子功能实现再带进整体系统的完成。

二、自顶向下设计。在设计阶段把一个系统的总问题,逐一分解为多个子问题。把每个模块看成一个结构,通过实现一个个子结构完成大结构的创建

特点

一、程序的主体是一个个方法

二、方法是最小的功能模块

三、一组相关的方法组合成一个大的功能模块(功能子结构)

四、程序面向过程或面向数据

例子(设计一个画板系统Panel)

包含4个功能:选择形状、画长方形、画圆、画直线

第一步:整体设计

思想1、按照结构化编程就将这个系统分为上面四个功能模块,同时四个模块也可以再细化为几个方法(体现自顶向下思想)

思想2、按照数据流走向去思考整个程序运行的流程,思考不同模块的组合方式(体现面向数据流思想)

第二步:模块具体设计

这一步按照每个模块具体的功能去具体设计方法,再把方法组合在一起完成模块的具体功能即可。

如果子模块的功能仍然复杂,可以将子模块继续细分处理

缺点分析

一、自顶向下分析系统的功能,但是系统的功能并不是一成不变的。在层次结构的功能中,其中一个功能的改变可能会导致其他的功能的变化。(功能之间是彼此相互联系的)

二、软件系统中最小的子系统是方法,方法和一部分与之相关的数据分离。这导致处理不同方法间的数据相当糅合、麻烦,会造成极大不便利。系统独立性太弱。

面向对象编程

程序编程的主体是对象,解决问题的主体也是对象

特点

一、所有操作的主体、所有编程完成的主体都是对象

二、对象封装了其所属类这一概念所有的行为和信息。独立性非常强

三、系统实现功能依靠对象间的通信

四、类定义对象拥有的数据类型和行为,但是各自数据的责任由具体对象承担

实例解释面向对象思想

编写程序中:

1、我们的角色就是企业主(公司老大)

2、主程序所写的程序就是我们作为企业主把所需要干的各个事情分配给手下的员工去完成

3、我们写类的过程也就是企业主招收、培养员工的过程。

优点

总结

面向对象编程的特点和优点如下:

封装性---->数据好管理、代码可读性高、便于系统修改升级

多态性---->增加灵活性、符合自然界进化多样性的特性

继承性---->抽象归纳降低软件设计的复杂性、符合自然界层层进化的特性

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

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

天天开心,没有Bug每一天

相关文章
|
存储 自然语言处理 Oracle
打造全球化企业:ERP系统的国际化与多语言支持
打造全球化企业:ERP系统的国际化与多语言支持
1023 2
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
2180 1
|
11月前
|
敏捷开发 监控 数据可视化
关键链项目管理:全球化与本地化的完美结合
关键链项目管理(CCPM)由以色列物理学家艾利·高德拉特提出,基于“约束理论”,通过优化资源分配、引入缓冲管理和动态调整,显著提升项目效率和成功率。本文探讨了CCPM的国际化实践现状、应用优势及未来发展趋势,特别是在欧美、亚太及新兴市场的广泛应用。CCPM在缩短项目周期、提高资源利用率、降低风险和增强团队协作方面表现出色。未来,CCPM将与数字化工具深度融合,并在全球化与本地化结合中进一步普及,成为复杂项目管理的核心方法。
|
7月前
|
前端开发
🔈阿里云百炼工作流里循环节点和批量节点,你需要知道的事儿
本文介绍了智能体应用和工作流应用中的循环节点与批量节点的使用方法及区别。两者都适用于多次调用任务,输入为列表,输出也为列表。不同在于:循环节点顺序执行,可依赖前序结果;批量节点并行执行,各任务独立。以旅游推荐为例,用户输入城市后,通过大模型生成景点列表,再用循环或批量节点生成详细攻略。最后通过脚本处理输出结果,形成清晰展示。
1146 22
|
12月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
存储 开发框架 Java
libgdx ashley框架的讲解
本文介绍了libgdx游戏开发框架中的Ashley实体系统,包括如何引入依赖、创建实体、添加组件和系统,并通过代码示例演示了如何使用PooledEngine、Component、EntitySystem等核心类来构建游戏逻辑。
243 1
|
存储 测试技术
山东大学计算机组成原理课设 实验四
第四次实验:2022年4月19日星期四,第7周 第二次部件级实验,算分
|
机器学习/深度学习 运维 算法
AIOps
AIOps
872 0
|
机器学习/深度学习 算法 网络架构
大模型开发:什么是梯度消失和梯度爆炸问题?如何解决这些问题?
深度学习中的梯度消失和爆炸问题影响模型学习和收敛。梯度消失导致深层网络参数更新缓慢,而梯度爆炸使训练不稳。解决方法包括:使用ReLU类激活函数、权重初始化策略(如He或Xavier)、残差连接、批量归一化。针对梯度爆炸,可采用梯度裁剪、权重约束和优化器如RMSProp、Adam。结合这些技术能改善网络训练效果和稳定性。
3469 3
|
安全 Java 数据库
Springboot 用session监听器统计在线用户数量
Springboot 用session监听器统计在线用户数量
1185 0
Springboot 用session监听器统计在线用户数量

热门文章

最新文章