了解面向对象设计和方法

简介: 【6月更文挑战第26天】本文介绍面向对象编程(OOP)强调通过对象来模拟现实世界,以数据和行为的结合体形式存在。核心概念是封装、继承和多态,关系包括依赖、实现、关联、聚合和组合。组合是强于聚合的关联,当部分与整体有相同生命周期时适用。OOP允许创建复杂系统模型,如汽车的组件,提供不同层次的抽象。

1 简介

设计不只是外表和感觉,它更是产品如何运作。

在计算机编程中,面向对象方法编程将在相当长的一段时间内占据重要位置。
---乔布斯  

我们知道现实世界的对象是什么:我们可以感知、感觉和操纵的有形事物。

人类最早接触的对象通常是玩具。木块、塑料形状和超大拼图是常见的第一对象。

并且很快学会某些物体做某些事情:铃铛响起,按下按钮,拉动杠杆。

软件开发中对象的定义并没有太大的不同。软件对象可能不是你可以拾取、感知或感觉到的有形的东西,但它们是可以做某些事情并对其完成某些事情的模型。从形式上讲,对象是数据和关联行为的集合。

现实世界或者系统是由可区分的"对象"构成的。现实:对象可以被看成一个个具有某个功能的个体。 软件系统中,对象可以被看成是一个可执行某程序的个体。

treeoflife6.png

2 面向对象方法

考虑到对象是什么,面向对象意味着什么?在字典中,定向意味着指向。

我们可能在阅读时遇到过面向对象分析、面向对象设计、面向对象分析和设计以及面向对象编程等术语。这些都是一般面向对象保护伞下的相关概念。

事实上,分析、设计和编程都是软件开发的阶段。称它们为面向对象只是指定了正在追求的软件开发类型。

面向对象编程意味着编写针对建模对象的代码。这是用于描述复杂系统动作的众多技术之一。它通过描述交互对象的数据和行为来定义。

3 面向对象分析 OOA:

面向对象分析 OOA object-Oriented Analysis

这是查看问题、系统或任务(有人想要变成一个工作软件应用程序)并识别对象和这些对象之间的交互的过程。分析阶段是关于需要做什么的。

OOA模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。

OOA包括九大基本原则:抽象,封装,继承,分类,聚合,关联,消息通信,粒度控制,行为分析。

基本五步骤包括依次确定: 对象和类,结构,主题,属性,方法。

OOA 面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;

设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。

4 面向对象设计 OOD:

面向对象设计方法(Object-Oriented Design,OOD)是OOA方法的延续,其基本思想包括抽象、封装和可扩展性,其中可扩展性主要通过继承和多态来实现。

这是将此类需求转换为实现规范的过程。设计器必须命名对象,定义行为,并正式指定哪些对象可以激活其他对象上的特定行为。设计阶段就是将应该做的事情转化为应该如何完成。

设计阶段的输出是实现规范。如果我们要在一步中完成设计阶段,我们将把面向对象分析期间定义的需求转换为一组类和接口,这些类和接口可以在(理想情况下)任何面向对象的编程语言中实现。

面向对象分析类可以分为边界类、控制类和实体类。

边界类是一种用于对系统外部环境与其内部运作之间交互进行建模的类。

控制类用于对一个或多个用例所特有的控制行为进行建模,描述用例业务逻辑的实现。

实体类是用于对必须存储的信息和相关行为建模的类,用于保存和更新一些现象的有关信息。

比如面向对象技术设计在线教育平台系统,“学员类”和“课程类”主要用于存储数据,所以设计为实体类;而“窗口”位于系统与外界的交接处,应设计为边界类。

5 面向对象编程 (OOP)

面向对象的程序设计 OOP Object-Oriented Programming是将设计转换为执行产品所有者最初要求的工作程序的过程。OOP包括分析(OOA)、设计(OOD)和编程。OOA识别对象及它们的交互,OOD将需求转化为实现规范,而OOP将设计变为可执行代码。

OOP达到了软件工程的3个主要目标:重用性、灵活性和扩展性。

OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。

OOP 基本特征:封装,继承,多态。

数据描述对象的状态:从数据开始。数据代表某个对象的个体特征;其当前状态。类可以定义特定的特征集,这些特征集是属于该类的所有对象的一部分。

对于给定特征,任何特定对象都可以具有不同的数据值。

例如,我们桌子上的三个橙子(如果我们没有吃过的话)每个橙子的重量可能不同。

橙色类可以具有表示该基准面的权重属性。橙色类的所有实例都有一个权重属性,但每个橙色都有此属性的不同值。但是,属性不必是唯一的;任何两个橙子的重量可能相同。

6 面向对象关系

面向对象关系主要包括: 封装、继承、多态,实现、依赖、关联、聚合、组合。

这里简单介绍OOA的几个关系:

依赖

指两个相对独立的对象,当一个对象负责构造另一个对象的实例,
或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系

实现

指的是一个类实现一个接口的功能,在Java中一个类可以实现多个接口,
使用implements作为关键字。

关联

指一个类的实例A使用另外一个类的实例B,这两个对象之间为关联关系,
关联关系分为单项关联和双向关联

聚合

 聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,
 仅仅是在语义上有所区别:关联关系的对象间是相互独立的,
 而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。

组合

相比于聚合,组合是一种耦合度更强的关联关系。
存在组合关系的类表示“整体-部分”的关联关系,
“整体”负责“部分”的生命周期,他们之间是共生共死的;
并且“部分”单独存在时没有任何意义

例子:

当部分属于多个整体,则属于聚合。

当部分和整体有相同生命周期,属于组合。

7 小结

面向对象(OO)通常用于将多个对象收集在一起以创建新对象的行为。

当一个对象是另一个对象的一部分并且有相同生命周期时,组合通常是一个不错的选择。比如在谈论汽车时,我们就已经看到了构图。

化石燃料汽车由发动机、变速箱、起动机、前灯和挡风玻璃等众多部件组成。

对应的,发动机由活塞、曲轴和气门组成。在此示例中,组合是提供抽象级别的好方法。
汽车对象可以提供驾驶员所需的接口,同时还提供对其组件的访问,从而提供适合机械师的更深层次的抽象。如果机械师需要更多信息来诊断问题或调整发动机,这些组件可以进一步分解为细节。

有趣的是,SOA结构方法,也受启发于面向对象方法,在后续我们继续探讨。

目录
相关文章
|
3月前
|
人工智能 测试技术 开发者
AI Coding后端开发实战:解锁AI辅助编程新范式
本文系统阐述了AI时代开发者如何高效协作AI Coding工具,强调破除认知误区、构建个人上下文管理体系,并精准判断AI输出质量。通过实战流程与案例,助力开发者实现从编码到架构思维的跃迁,成为人机协同的“超级开发者”。
2419 106
|
9月前
|
机器学习/深度学习 人工智能 安全
制造业工业4.0落地案例:AMR如何提升车间效率?
第四次工业革命为制造业带来了巨大的机遇与挑战。本文综合分析了工业4.0在制造业应用中的优势与局限,为企业更清晰地理解潜在障碍与收益提供参考。以自主移动机器人替代传统叉车为例,通过在主入口服务器、制造执行系统与仓储管理系统之间采用先进的API通信协议,不仅实现了物料搬运的智能化,还显著节省了工艺时间。通过对约15个工位的时间研究,记录到每班次节省约1.14小时。同时,时间与成本分析被用于支持企业的决策流程。成本分析基于5年周期构建了OPEX和CAPEX模型。在三种模型中,自主移动机器人的CAPEX模型被证明节省了30%的成本。
497 3
|
机器学习/深度学习 自然语言处理 算法
人类偏好对齐训练技术解析
大型语言模型(LLMs)通过在大量文本数据集上进行无监督预训练,获得丰富的语言模式和知识,这一阶段训练后的模型被称为base model。
|
存储 监控 API
1688商品评论数据接口实战指南:挖掘电商洞察
要获取1688商品评论数据,先注册1688开放平台并登录,然后用Python等工具调用API获取评论信息,如内容、评分等,并存储或分析这些数据。使用时须遵守平台规定,保障数据安全及隐私,利用接口进行舆情监控、提升品牌形象,并留意接口更新以优化业务流程。
|
Linux 知识图谱 Docker
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装
537 0
|
算法 程序员 C语言
【深度揭秘】汇编语言:现代编程中不可或缺的秘密武器!它如何在幕后操控一切?
【8月更文挑战第31天】随着计算机科学的进步,尽管高级编程语言因易读和可维护而流行,汇编语言在特定领域仍不可或缺。本文介绍汇编语言基础及其在现代编程中的应用。汇编语言通过助记符表示机器码,便于编写和理解。例如,在x86架构下,加法指令可表示为 `add eax, ebx`。尽管高级语言提供更高抽象,但在优化性能瓶颈(如矩阵乘法)和嵌入式系统中精确控制硬件方面,汇编语言依然发挥重要作用。例如,通过AVX-2指令集优化矩阵乘法,或在实时系统中实现精确时间延迟。这些示例展示了汇编语言在现代编程中的独特价值。
386 3
|
存储 SQL 数据库
数据库技术探索:基础架构、应用场景与未来展望
一、引言 数据库技术是信息时代的基石,为企业和组织提供了数据存储、检索、分析和管理的核心支撑
|
存储 人工智能 自然语言处理
数字时代是什么意思
数字时代是什么意思
1542 1
|
存储 运维 监控
双活中心故障检测与切换机制
双活中心故障检测与切换机制
778 2
|
前端开发 容器 JavaScript