当前位置: 首页 > news >正文

软考中级-面向对象

面向对象基础

(1)类

类分为三种:实体类(世间万物)、接口类(又称边界类,提供用户与系统交互的方式)、控制类(前两类之间的媒介)。

对象:由对象名+数据(属性、状态)+操作(行为、函数、方法)组成。

消息:对象之间进行通信叫做消息,例如a.func(b),即对象.消息(外界信息)。

重载:方法名相同,参数数量或参数类型不同或参数类型相同排列顺序不同。

(2)面向对象三大特征

  • 封装

对象将自身内部复杂的属性和行为隐藏起来,成为一个整体,将使用者和生产者隔离。

  • 继承

在定义和实现一个类的时候,可以在某个已存在类的基础上进行,将该类中的内容为自己所用,并可以增加新内容,实现类之间数据和方法的共享。

  • 多态

不同对象收到同一消息,可能做出不同形为。用户发出一个通用消息,具体实现细节由接收对象自己决定。多态的实现受继承的支持,通用功能的消息放在较高层次,具体功能的不同实现放在较低层次。

参数多态:用途最广,最纯的多态。

包含多态:子类型化,即一个类型是另一个类型的子类型。

过载多态,同一个名字在不同上下文中含义不同。

强制多态。

动态绑定:运行时,静态绑定:编译时。

(3)面向对象五大设计原则

  • 单一设计原则

一个类只有一个职责,即一个类只有一个引起他变化的原因。

  • 开闭原则

软件实体(类、模块、函数)是可以拓展的(开放),但是不可以修改的(关闭)。

  • 里氏替换原则

子类应该可以替换父类,即父类可以出现的地方,子类也可以出现。

  • 依赖倒置原则

抽象不依赖于细节(实现),细节应依赖于抽象。即高层模块不依赖低层模块,二者都依赖于抽象。

  • 接口分离原则

依赖于抽象,不依赖于具体。

(4)两大补充设计原则

  • 共同重用原则

重用包中一个类,就要重用所有类。

  • 共同封闭原则

一个变化对一个包产生影响,整个包中的类都要被影响,该包以外没有任何影响。

(5)面向对象的分析(OOA)

目的是为了理解问题,描述软件要干什么,主要关注系统的形为。

包含五个活动:认定对象、组织对象、(描述)对象间的互相作用、(基于)确定对象的操作、认定对象的内部信息。

  • 认定对象

将实际存在的“名词”看作对象,难点在于认定其中的实质性对象。

  • 组织对象

确定对象间的关系,如汉堡由肉+菜+面包组成。

  • 对象间的相互作用

描述对象之间的交互行为。

(6)面向对象的设计(OOD)

将OOA所创建的分析模型转为设计模型,即构造蓝图。侧重理解解决方案。

包含五个活动:识别类及对象、定义属性、定义服务、识别关系、识别包。这五个活动与OOA的五个活动一一对应。

(7)面向对象测试

分为四个层次:算法层、类层、模板层、系统层。

(8)面向对象程序设计(OOP)

是一种程序设计范式,OOP实质是使用面向对象的设计语言,采用类、对象等相关概念进行程序设计,其关键是加入了类和继承来提高抽象性。

UML

又称统一建模语言,能够表达软件设计中的动态和静态信息,其中包含三部分构造块:事物,关系和UML图。

(1)事物

  • 结构事物:表示模型的静态部分(名词),有类、接口、协作、用例、主动类、构件、制品、结点。

  • 形为事物:表示模型的动态部分(动词),有交互、状态机、活动。

  • 分组事物:UML中的组织部分,是一些由模型分解成的“盒子”,最主要的分组事物是包。

  • 注释事物:是UML模型的解释部分,注解是一种主要的注释事物。

(2)关系

  • 依赖

一种语义关系,一个依赖事物A依赖独立事物B,当独立事物发生变化,依赖事物会随之改变。如学生(A)读书(B),书类型改变,学生读的这个形为也改变,读语文书变为读数学书。

画作:A--------->B

  • 关联(聚集)

一种结构关系,它是一种链,链是对象之间的连接。

重复度和角色:代表一个角色A可以对应多少个角色B

关联图可画为:A0..1<——>0..*B,数字在箭头上方,此处箭头也可省略。若将此图中A看作老板,B看作员工,可理解为老板和员工有关联关系,其中一个老板可以对应0到*(多个)员工,一个员工可对应0到1个老板。

聚合:是一种特殊的关联,表示整体和部分的关系,两者生命周期不同,整体消失了,部分仍可单独存在。

聚合画为:A——空心菱形B,表示A是部分,B是整体,如A表示学生B表示班级。

组合:一种特殊的关联,表示部分和整体,不同点是部分和整体生命周期一致,整体消失部分也消失。

组合画为:A——实心菱形B,如A表示部门,B表示公司。

  • 泛化

是一种特殊/一般关系,即特殊元素(子类)和通用元素(父类),子类可替换父类,子类共享父类的属性和行为。

画为:A——空心三角箭头B,A为子类B为父类。

  • 实现

是类元之间的语义关系,即接口和实现的关系或用例和实现的关系。

画作:A------空心三角箭头B,A是接口B是实现。

阶段补充

关系强度:依赖<关联

关联关系的线中间上方可以写关联名,解释两者关系;关联关系两个箭头下方可分别写该箭头指向的对象的角色

关联关系:当A的实例可以重复对应B的实例时,就需要在两者之间添加关联关系类。

直接对象/非直接对象:直接对象指自己本身实例化出的对象,非直接指自己的子类实例化出的对象。

(3)图

一组元素的图形表示,画为顶点(事物)和弧(关系)的连通图,其中序列图和通信图被称为交互图。

  • 类图

展现一组对象、接口、协作和它们之间的关系。包含主动类的类图给出了系统静态进程视图,主要表达系统的功能。当有对系统的词汇建模、对简单的协作建模、对逻辑数据库模式建模这三种情况时,使用类图。

类图中每个单元包含:类命、属性、方法。

  • 对象图

展现了某一时刻一组对象和他们之间的关系,描述了类图中实例的静态快照(静态进程图、静态视图),其中包含对象和链。

对象图中每个单元包含类名、对象名和属性。

  • 用例图

展现用例、参与者和它们之间的关系,用于对系统的语境建模和对系统的需求建模。

关系包括:

  • 拓展关系(用例与用例之间的关系)

一个用例执行时可能会发生一些特殊情况或可选情况,如A拓展B,箭头指向A,做A时可选做不做B,如还书这个动作(A)可能要做支付逾期款(B)这个动作,如果你还书时逾期了的话。

  • 包含关系(用例与用例之间的关系)

一个用例包含另一个用例,A中包含B,箭头指向B,如修改图书信息(A)这个动作中包含了查找图书(B),即做A时必做B。

  • 泛化关系(参与者与参与者、用例与用例之间的关系)

子类和父类之间的关系。如参与者用户(A)可泛化出商家(B1)和会员(B2),空心箭头指向A;又如用例登录(A)可泛化出手机号登陆(B1)或账号密码登录(B2)。

  • 交互图

对系统的动态方面进行建模,由一个用例中一组对象和它们之间的关系组成,包含对象、链和消息。

(1)序列图(顺序图)

强调消息时间顺序,描述按时间顺序排列的对象的交互,对象从左到右排列,发送和接受消息按时间顺序从上到下排列,消息包括同步消息(调用消息)、异步消息、返回消息。

(2)通信图(协作图)

强调发送和接受消息的对象的结构组织,用对象作为图顶点,用链连接对象,用消息修饰链,用来获取对象之间的消息流及其顺序。

阶段补充:

序列图较通信图的特点:序列图有生命线,序列图有控制焦点(动作箭头指向的矩形)。

通信图较序列图的特点:通信图有路径(链末端依附的路径构造型,有local、parameter、global、self)。消息有顺序号,表示一条消息中每条消息的序号。同一个链可能有来自不同方向的消息,且每条消息都有唯一的顺序号。

消息箭头指向的对象需要实现该消息代表的的方法。

序列图和顺序图时同构的,可以相互转换。

  • 状态图

展现了一个状态机,它由状态、活动、事件和转换

组成,关注系统的动态视图,强调对象行为的事件顺序。

  • 状态

是任何可以被观察到的系统的行为模式,既可以是一种形为,也可以是改变状态,还可以是既做行为又改变状态。包括初态(只能有一个)、终态(可以没有也可以有多个)和中间状态。

  • 活动

活动表,由多个事件名+动作表达式组成,事件名有三种标准的(入口、出口和执行)。

  • 事件

是系统在某个特定时刻发生的事情,表示系统的动作或从一个状态转换到另一个状态的抽象。活动可以在状态内执行,也可以在状态转换(迁移)中执行。

  • 活动图

特殊的状态图,表示从一个活动到另一个活动的流程,是动态视图,强调对象间的控制流程。

  • 构件图(组件图)

展示组件之间的组织和依赖。

纠正:图中半圆是需接口,整圆是供接口

  • 部署图

对面向对象系统物理层面建模的方法,物理和软件之间的关系,实施阶段使用,静态,每个节点是一个运行过程中的物理元素。

阶段总结:

设计模式

相关文章:

软考中级-面向对象

面向对象基础&#xff08;1&#xff09;类类分为三种&#xff1a;实体类&#xff08;世间万物&#xff09;、接口类&#xff08;又称边界类&#xff0c;提供用户与系统交互的方式&#xff09;、控制类&#xff08;前两类之间的媒介&#xff09;。对象&#xff1a;由对象名数据&…...

Linux 系统构成:bootloader、kernel、rootfs

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录前言bootloaderk…...

SpringCloud - Eureka注册发现

目录 提供者与消费者 Eureka原理分析 搭建Eureka服务 服务注册 服务发现 提供者与消费者 服务提供者&#xff1a; 一次业务中&#xff0c;被其它微服务调用的服务(提供接口给其它微服务)服务消费者&#xff1a; 一次业务中&#xff0c;调用其它微服务的服务(调用其它微服务…...

WampServer安装教程

文章目录简介&#xff1a;官网地址安装步骤&#xff1a;我是阿波&#xff0c;学习PHP记录一下笔记&#xff0c;如果对你有帮助&#xff0c;欢迎一键三连&#xff0c;谢谢&#xff01; 简介&#xff1a; WampServer是一个用于Windows操作系统的Web开发环境&#xff0c;其名称来…...

Go语言泛型基础

泛型 Go 并不是一种静止的、一成不变的编程语言。新的功能是在经过大量的讨论和实验后慢慢采用的。最初的 Go1.0发布以来&#xff0c;Go语言习惯的模式已经发生了重大变化1.7的context、1.11的modules、1.13 error嵌套等Go的 1.18 版本包括了类型参数的实现&#xff0c;也就是…...

基于android的中医养生app

需求信息&#xff1a; 中医健康养生APP分为四大模块&#xff0c;其中个人中心又分为4大块&#xff0c;游客用户个人中心是空白的。 上图为养生知识推广普及模块的功能结构图。 在养生知识推广普及模块界面&#xff0c;用户可以选择自己感兴趣的模块进行文章浏览&#xff0c;文章…...

2023美赛C代码思路结果【全部更新完毕】注释详尽

C题已完成全部代码&#xff0c;注释详尽&#xff0c;并增加扰动项&#xff0c;保证大家的结果不会撞 需要全部问题的可以点击&#xff1a;https://www.jdmm.cc/file/2708697/ 下面贴出核心代码&#xff1a; -- coding: utf-8 -- TODO: 入口函数 import numpy as np from…...

实现8086虚拟机(二)——模拟CPU和内存

文章目录CPU 架构EU&#xff08;执行单元&#xff09;BIU&#xff08;总线接口单元&#xff09;小结一下模拟内存模拟 BIU模拟 EU模拟 CPU总结要模拟 8086 CPU 运行&#xff0c;必须知道 CPU 的一些知识。下文的知识点都来自《Intel_8086_Family_Users_Manual 》。CPU 架构 微…...

Windows7下使用VMware11.1.1安装ubuntu-16.04.7

一、说明二、安装说明三、安装步骤详解1、先安装VMware软件2、创建虚拟机3、编辑虚拟机4、开启虚拟机&#xff0c;初始化Linux系统一、说明 虽然VMware和ubuntu最新版已经很高了&#xff0c;我这电脑由于是win7配值还低&#xff0c;所以采用低版本来安装 VMware版本&#xff1…...

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…...

华为OD机试 - 运动会 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】 华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】 华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】 华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 …...

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维&#xff1a;二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;8&#xff09;获取位置服务初环境与设备文件夹&#xff1a;文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1a;system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容&#xff1a;时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立&#xff08;setup&#xff09;时间和保持&#xff08;hold&#xff09;时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)

问题描述 想在ubuntu22.10系统上安装sogou中文输入法&#xff0c;按照sogou输入法网站给出的步骤安装后&#xff0c;发现无法输入中文字符&#xff0c;但是可以输入中文标点符号。 sogou网站&#xff1a;https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一…...

15:高级篇 - CTK 事件与监听

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程&#xff1a;6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…...

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章&#xff0c;不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么&#xff0c;可以先看一下这篇文章&#xff0c;然后再回来继续。 与ChatGPT对话很有趣&#xff0c;…...

使用HIP编写GPU 算子向量加法

HIP (Heterogeneous-compute Interface for Portability) 来编写一个 GPU 算子&#xff08;operator&#xff09;。HIP 是 AMD 推出的 GPU 编程接口&#xff0c;类似 CUDA&#xff0c;但可在 AMD 和 NVIDIA GPU 上运行。下面我给你一个完整示例&#xff0c;演示如何写一个简单算…...

构建AI智能体调度平台:从微服务架构到工程实践

1. 项目概述&#xff1a;一个面向智能体的“Airbnb”式调度平台最近在折腾AI智能体&#xff08;Agent&#xff09;相关的项目&#xff0c;发现一个挺有意思的现象&#xff1a;大家把模型、工具链、工作流都搭好了&#xff0c;但真要让多个智能体协同工作&#xff0c;或者把智能…...

Arm SystemReady ACS测试指南与硬件兼容性认证

1. SystemReady Band ACS测试概述 SystemReady Band是Arm公司推出的一套硬件兼容性认证标准&#xff0c;专门针对基于Arm架构的计算设备设计。这套标准的核心理念是确保采用Arm处理器的设备能够无缝运行主流操作系统&#xff0c;包括Linux发行版、Windows和各种BSD变体。作为硬…...

终极简单指南:如何用Seraphine英雄联盟助手快速提升排位胜率

终极简单指南&#xff1a;如何用Seraphine英雄联盟助手快速提升排位胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 想象一下这样的场景&#xff1a;排位赛开始前&#xff0c;你正手忙脚乱地查询对手战绩…...

免费电商平台批量下载图片方法,好用的让你不敢相信

pc+浏览器方法,批量快速下载淘宝、拼多多、抖音等常用电商均满足。 全程不花一分钱,所有资源都免费。 方法简单,操作方便。 只需在浏览其中增加 (downpictures) 当图扩展即可。 一、操作方法如下: 1、如使用edge浏览器,访问这个网址:当图 ,然后点击按钮“获取”,…...

接入Taotoken后感受到的API调用延迟降低与错误率改善

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 接入Taotoken后感受到的API调用延迟降低与错误率改善 1. 背景与切换契机 作为一名长期在项目中集成大模型能力的开发者&#xff0…...

Vue 3调试新利器:vibe-devtools实现运行时状态热更新与代码注入

1. 项目概述&#xff1a;一个为前端开发者量身定制的调试利器最近在折腾一个Vue 3 Vite的项目&#xff0c;调试组件状态时&#xff0c;总感觉Chrome DevTools里的Vue Devtools用起来有点“隔靴搔痒”。状态变化是能看见&#xff0c;但想快速模拟个特定数据、或者临时注入一段逻…...

地理学者必抢的AI协同时代入场券:NotebookLM+QGIS工作流搭建指南(仅限首批内测用户验证版)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM地理学研究辅助的范式革命 从静态文献到动态知识图谱 NotebookLM 通过语义切片与向量对齐技术&#xff0c;将地理学经典文献&#xff08;如《人文地理学导论》《自然地理学原理》&#xff…...

ISAC波束成形优化:通信与感知协同设计

1. ISAC波束成形优化&#xff1a;通信与感知的协同设计在自动驾驶、智能工厂等新兴应用中&#xff0c;无线通信系统不仅需要传输数据&#xff0c;还需具备环境感知能力。传统方案采用独立的通信和雷达系统&#xff0c;导致频谱利用率低下且硬件成本高昂。集成感知与通信(ISAC)技…...

硬件调试利器:全面掌握AMD Ryzen处理器系统性能优化实战技巧

硬件调试利器&#xff1a;全面掌握AMD Ryzen处理器系统性能优化实战技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...