面向对象之旅:核心理念、设计方法与UML详解(软件设计师笔记)

news2024/11/24 11:09:37

😀前言
面向对象技术是现代软件工程的核心,为软件设计和开发带来了一种强大且有序的方法。通过将现实世界的实体和概念映射到可操作的代码结构,该技术使我们能够更高效、清晰和可靠地创建复杂的软件系统。在本章中,我们将详细介绍面向对象技术的各个方面,包括它的基本组成部分、设计原则以及在统一建模语言(UML)中的具体实现。

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

    • 第七章 面向对象技术
        • 对象
        • 多态
        • 面向对象设计的原则
        • 事物
        • 关系
      • UML 中的图
        • 类图
        • 对象图
        • 🔺用例图(P368)
        • 交互图
        • 🔺状态图
        • 活动图
        • 构件图(组件图)
        • 部署图
        • UML图汇总
    • 😄总结

第七章 面向对象技术

面向对象 = 对象(Object)+ 分类(Classification)+ 继承(Inheritance)+通过消息的通信

对象

对象通常可由对象名、属性和方法 3 个部分组成。

多态

多态有不同的形式,分为了四类:

  • 通用的:
    • 参数多态:应用比较广泛的多态,被称为最纯的多态。
    • 包含多态:在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。
  • 特定的:
    • 过载多态:同一个名字在不同的上下文中所代表的含义不同。
    • 强制多态:通过强制类型转换(也称为强制转型)将一个对象或变量视为另一个类型的操作。
面向对象设计的原则

面向对象方法中的五大原则:

  1. 单一责任原则:就一个类而言,应该仅有一个引起它变化的原因。
  2. 开放-封闭原则:软件实体应该是可以扩展的,即开发的;但是不可修改的,即封闭的。(扩展开放、修改关闭)
  3. 里氏替换原则: 子类型必须能够替换掉他们的基类型。(基类出现的地方,子类一定可以出现)
  4. 依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。(依赖于抽象,而不依赖于细节[实现])
  5. 接口分离原则:不应该强迫客户依赖于它们不用的方法。(依赖于抽象,不依赖于具体)

共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响

共同重用原则:一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类

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

面向对象设计的活动(OOD在复用OOA模型的基础上,包含与OOA对应如下五个活动):

  1. 识别类及对象
  2. 定义属性
  3. 定义服务
  4. 识别关系
  5. 识别包
事物

UML中有4中事物:

  1. 结构事物:结构事物是UML模型中的名词,通常是模型的静态部分,描述概念或物理元素。

  2. 行为事物:行为事物是UML模型的动态部分,它们是模型中的动词,描述了跨越时间和空间的行为。

  3. 分组事物:分组事物是UML模型的组织部分,是一些由模型分解成“盒子”。

  4. 注释事物:注释事物是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。

关系

UML中有4种关系:依赖、关联、泛化和实现。

  1. 依赖:依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。


  2. 关联:关联是一种结构关系,它描述了一组链,链是对象之间的连接。

    • 聚合:部分和整体的生命周期不一致,整体消失了,部分仍然存在,部分可以脱离整体存在。
    • 组合:部分和整体的生命周期一致,整体消失了,部分也消失了,部分不可以脱离整体存在。
  3. 泛化:泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。子元素共享了父元素的结构和行为。

  4. 实现(了解):实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。

UML 中的图

类图

类图(Class Diagram)展现了一组对象、接口、协作和它们之间的关系。

符号:

+ : public 公有的

- : private 私有的

# : protected 受保护的

~ : package 包的

🔺通常以下述3种方式之一使用类图:

  1. 对系统的词汇建模。
  2. 对简单的协作建模。
  3. 对逻辑数据库模式建模。

image.png

对象图

对象图(Object Diagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照

对象图给出系统的静态设计视图静态进程视图

🔺用例图(P368)

用例图(Use Case Diagram)展现了一组用例、参与制(Actor)以及它们之间的关系。

一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例。

参与者:参与者是与系统交互的外部实体,可能是使用者,也可能是与系统交互的外部系统、基础设备等。

用例:用例是从用户角度描述系统的行为,它将系统的一个功能描述成一系列的事件,这些事件最终对操作者产生有价值的观测结果。用例是一个类,它代表一类功能而不是使用该功能的某一具体实例。

之间的关系:

  1. 包含关系(用例之间)
  2. 扩展关系(用例之间)
  3. 关联关系(参与者和用例之间)
  4. 泛化关系(用例与用例以及参与者与参与者之间)

用例图用于对系统的静态用例视图进行建模。

可用以下两种方式来使用用例图:

  1. 对系统的语境建模。
  2. 对系统的需求建模。

交互图

交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和它们之间的关系组成。包含它们之间可能传递的消息。

  1. 序列图(顺序图、时序图) :序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
    序列图有两个不同于通信图的特征:
  • 序列图有对象生命线

  • 序列图有控制焦点

  1. 通信图(协作图):通信图强调收发消息的对象的结构组织,在早期的版本中也被称作协作图。
    通信图有两个不同于序列图的特性:
  • 通信图有路径
  • 通信图有顺序号
  1. 交互概览图

  2. 计时图

🔺状态图

状态图(State Diagram)展现了一个状态机,它由状态、转换、事件和活动组成。

可以用状态图对系统的动态方面建模。当对系统、类或用例的动态方面建模时,通常是对反应型对象建模

定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。

三种标准事件:entry、exit、do

  • entry:入口动作,进入状态立即执行
  • exit:出口动作,退出状态立即执行
  • do:内部活动,占有限时间,并可以中断的工作

事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。

转换包括两个状态(源状态,目标状态)

事件,监护条件,动作

事件触发转换(迁移)

活动(动作)可以在状态(迁移)内执行,也可以在状态转换时执行。

监护条件是一个布尔表达式。

活动图

活动图(Activity Diagram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。

活动图一般包括活动状态和动作状态、转换和对象。

通常有两种使用活动图的方式:

  1. 对工作流建模。
  2. 对操作建模。

构件图(组件图)

构件图(Component Diagram)展现了一组构件之间的组织和依赖。

构件图专注于系统的静态实现试图。


部署图

部署图(Deployment Diagram)是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。

部署图展现了系统的软件和硬件之间的关系,在实施阶段使用。

UML图汇总
  • 静态建模:类图、对象图、用例图
  • 动态建模:序列图(顺序图、时序图)、通信图(协作图)、状态图、活动图
  • 物理建模:构件图(组件图)、部署图
  • 交互图:序列图(顺序图、时序图)、通信图(协作图)

😄总结

通过本章的探讨,我们了解了面向对象技术的各种要素,从对象的基本结构,到多态的不同形式,再到面向对象设计的原则,我们对面向对象的精髓有了更深入的了解。UML作为一个强大的工具,为我们提供了表示和设计面向对象系统的方法,通过对事物和关系的描述,我们能够更加清晰地理解和构建复杂的系统。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

我的国庆回家之路

文章目录 回家的计划假期的礼物学习新技术与家人团聚遇到的趣事总结 🎉欢迎来到IT陈寒的博客空间~我的国庆回家之路 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:Java学习路线&#x1…

【运维日常】华为云专线实现idc通过nat出网

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

【VUE复习·9】v-for 基础用法(循环渲染也叫列表渲染)

总览 1.v-for 都能循环什么 2.用法 一、v-for 都能遍历什么 能循环的东西包括:数组、对象、字符串(和java里面的3个引用数据类型一样)、纯粹循环数量(少用) 二、用法 1.用法1:简单循环(遍历…

开源协作开发者内容平台Vrite

什么是 Vrite ? Vrite 是一个开源协作空间,用于创建、管理和部署产品文档、技术博客和知识库。它旨在提供高质量、集成的用户和开发人员体验。 Vrite 具有以下功能: 内置管理仪表板,用于使用看板或列表视图管理内容生产和交付&am…

亘古难题:前端开发 or 后端开发

目录 一、引言二、两者的对比分析1. 技能要求和专业知识前端开发后端开发 2. 职责和工作内容前端开发后端开发 3. 项目类型和应用领域前端开发后端开发 4. 就业前景和市场需求前端开发后端开发 三、技能转换和跨领域工作四、介绍全栈开发五、结语附、开源项目微服务商城项目前后…

Java获取给定月份的前N个月份和前N个季度

描述: 在项目开发过程中,遇到这样一个需求,即:给定某一月份,得到该月份前面的几个月份以及前面的几个季度。例如:给定2023-09,获取该月份前面的前3个月,即2023-08、2023-07、2023-0…

2023/9/30 -- ARM

今日任务&#xff1a;消息队列实现进程之间通信方式代码&#xff0c;现象 msgW.c: #include <myhead.h> //消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) //…

cesium源码无法更新的解决方案

一、环境&#xff1a; 中国移动的宽带 win10操作系统 二、问题复现步骤&#xff1a; 1、开了VPN&#xff0c;设置为全局代理 2、在vscode中执行git pull命令 3、结果显示无法更新 三、解决方案&#xff1a; 1、安装Github官方开发的软件Github Desktop 下载地址&#xf…

(二)Python编程环境搭建

本章重点介绍 Python 编程环境的搭建&#xff0c;包括各个平台下 Python 的下载和安装&#xff0c;常见 IDE 的使用&#xff0c;如何运行 Python 程序等。还会亲自带着大家编写并运行第一个 Python 程序&#xff0c;让大家认识一下最简单的 Python 代码。 本章的后半部分还介绍…

【C++】C++多态——实现、重写、抽象类、原理

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C继…

百度面试题:为什么使用接口而不是直接使用具体类?

大家好&#xff0c;我是小米&#xff01;今天&#xff0c;我要和大家聊聊一个在 Java 编程中非常重要的话题&#xff1a;“百度面试题&#xff1a;为什么要使用接口而不是直接使用具体类&#xff1f;”这个问题在很多 Java 面试中都会被问到&#xff0c;因为它涉及到了面向对象…

基于Java的学校运动会信息管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

mysql的mvcc详解

一 MVCC的作用 1.1 mvcc的作用 1.MVCC&#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制&#xff0c;使得在InnoDB事务隔离级别下执行一致性读操作有了保障。 2.mysql中的InnoDB中实现了MVCC主要…

力扣146|LRU缓存淘汰算法

LRU缓存淘汰算法 leet code146: https://leetcode.cn/problems/lru-cache 一、基本思想 1.1 基本思想 LRU全名Last Recently Used&#xff0c;即当缓存空间满时&#xff0c;优先淘汰最不常使用&#xff08;访问&#xff09;的缓存。 1.2 抽象接口 1、 init() 初始化大小为…

ITSM和ITIL有什么区别?

ITIL是最广泛接受的ITSM方法&#xff0c;是用于管理组织IT运营和服务的最佳实践和建议的框架。它是由英国政府的中央计算机和电信局&#xff08;CCTA&#xff09;在1980年代中期委托创建的。基于ITIL框架构建的ITSM流程为更好的IT服务和改善业务铺平了道路。总而言之&#xff0…

【Java】关于我Debug的一些技巧

文章目录 条件断点断点回退表达式的执行直接返回 条件断点 IDEA中右击断点的时候可以看到如下的状态&#xff0c;在这里的Condition中我们可以选择进入当前断点的一个条件&#xff0c;比如我希望只有keyuser2的时候才进入断点&#xff0c;那么我就可以按照如下的方式去编写条件…

前端架构师之01_JQuery

1 jQuery快速入门 1.1 什么是jQuery 它是一个开源的JavaScript类库 。 常见的JavaScript类库&#xff1a;jQuery、Prototype、ExtJS、Mootools和YUI等。 jQuery的核心理念&#xff1a;write less&#xff0c;do more&#xff08;写的更少&#xff0c;做的更多&#xff09;。…

五、回溯(trackback)

文章目录 一、算法定义二、经典例题&#xff08;一&#xff09;排列1.[46.全排列](https://leetcode.cn/problems/permutations/description/)&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;复杂度分析 2.[LCR 083. 全排列](https://le…

优优嗨聚集团:美团代运营服务,对美团外卖商家有何促进

美团代运营服务一直是美团外卖商家成功的关键因素之一。美团代运营服务是一种专业的营销服务&#xff0c;它可以帮助商家在美团平台上更好地经营和销售&#xff0c;从而提高店铺曝光率、提升用户评价、提高营收等方面的水平。 首先&#xff0c;美团代运营服务可以帮助商家提高店…

4.canvas绘制基本图形——折线

在日常生活中&#xff0c;除了矩形与圆弧外&#xff0c;接触最多的就是折线了。甚至矩形也可以看出是一段折线&#xff0c;所以我们自然也可以使用绘制折线的方式绘制出矩形 moveTo 认识折线之前&#xff0c;我们先认识下moveTo这个方法。形象一点说这个方法就是将我们的画笔…