了解面向对象设计和方法

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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结构方法,也受启发于面向对象方法,在后续我们继续探讨。

目录
相关文章
|
10月前
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
本文探讨了人工智能(AI)在医疗诊断领域的应用及其面临的挑战。随着技术的不断进步,AI已经在医学影像分析、疾病预测和个性化治疗等方面展现出巨大潜力。然而,数据隐私、算法透明度以及临床整合等问题仍然是亟待解决的关键问题。本文旨在通过分析当前AI技术在医疗诊断中的具体应用案例,探讨其带来的优势和潜在风险,并提出相应的解决策略,以期为未来AI在医疗领域的深入应用提供参考。
327 3
|
11月前
|
存储 NoSQL 前端开发
前端轻量级数据库mongodb
【10月更文挑战第2天】MongoDB 是一个基于分布式文件存储的开源数据库系统,不属于前端轻量级数据库,而是后端数据库。它使用 BSON 格式存储数据,支持复杂的数据结构,适用于内容管理系统、物联网等领域。MongoDB 通过动态模式和面向对象的数据存储方式,提供了灵活的数据模型。在 Web 应用中,它通常作为后端存储,通过 API 与前端交互,实现高效的数据管理和实时更新。
212 3
|
编解码 Linux iOS开发
FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流
OBS(Open Broadcaster Software)是一款开源、跨平台的直播和和Linux。官网为<https://obsproject.com/>。要使用OBS进行直播,需执行四步:1) 下载并安装OBS Studio(<https://obsproject.com/download>),2) 启动流媒体服务器如MediaMTX,生成RTMP推流地址,3) 打开OBS Studio,设置直播服务为自定义RTMP服务器(127.0.0.1:1935/stream),调整视频分辨率,4) 添加视频来源并开始直播。同时,通过FFmpeg的拉流程序验证直播功能正常。
532 4
FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流
|
关系型数据库 测试技术 Go
Go语言微服务框架 - 5.GORM库的适配sqlmock的单元测试
与此同时,我们也缺乏一个有效的手段来验证自己编写的相关代码。如果依靠连接到真实的MySQL去验证功能,那成本实在太高。那么,这里我们就引入一个经典的sqlmock框架,并配合对数据库相关代码的修改,来实现相关代码的可测试性。
268 0
|
存储 SQL 数据库
数据库技术探索:基础架构、应用场景与未来展望
一、引言 数据库技术是信息时代的基石,为企业和组织提供了数据存储、检索、分析和管理的核心支撑
|
druid Java 数据库连接
MyBatis初级实战之三:springboot集成druid
实战springboot、mybatis、druid的集成并验证
517 0
MyBatis初级实战之三:springboot集成druid
|
安全 测试技术
【软件设计师备考 专题 】软件测试的原则与方法:确保软件质量的关键步骤
【软件设计师备考 专题 】软件测试的原则与方法:确保软件质量的关键步骤
270 0
|
SQL 数据可视化 关系型数据库
7款实用的SQLite数据库可视化管理工具
7款实用的SQLite数据库可视化管理工具
1216 0
|
弹性计算 安全 关系型数据库
基于阿里云构建自己的博客(过程及心得体会)
本文介绍了如何使用免费领取的云服务器ECS、云数据库RDS MySQL Serverless 来构建自己的博客。首先,作者介绍了自己选择阿里云的原因和虚拟主机的优点。然后,详细介绍了如何配置阿里云虚拟主机以支持HTTPS和80端口等,最后在完成博客搭建后讲述了自己的心得体会。
|
存储 人工智能 测试技术
软工视频——面向对象技术(OOA、OOD、OOP、OOT)
面向对象的技术是当前计算机界所关心的重点,,面向对象的概念和应用已经扩展到很宽的范围,如面向对象的数据库系统、面向对象的系统分析与设计、CAD 技术、人工智能以及其他广泛的应用范围。

热门文章

最新文章