软考中级-面向对象

news2024/9/24 7:14:33

面向对象基础

(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)。消息有顺序号,表示一条消息中每条消息的序号。同一个链可能有来自不同方向的消息,且每条消息都有唯一的顺序号。

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

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

  • 状态图

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

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

  • 状态

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

  • 活动

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

  • 事件

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

  • 活动图

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

  • 构件图(组件图)

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

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

  • 部署图

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

阶段总结:

设计模式

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

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

相关文章

【jumpServer 功能梳理】

用户管理 1.1 用户列表 创建jumpServe 账号 ;角色分为用户 管理员&#xff1b;更新账号信息&#xff1b;查看用户详情以及授权的资产&#xff1b; 1.2 用户组 用户组&#xff0c;这个组的意义在于用一个统称对接资源&#xff1b;用户组包含多个用户&#xff0c;可以操作增加删除…

LeetCode初级算法题:两数之和+斐波拉契数列多种java解法

目录7 两数之和题目描述&#xff1a;解题思路与代码暴力解法&#xff1a;解法一&#xff1a;二分查找解法二&#xff1a;双指针2 斐波那契数列题目描述&#xff1a;解题思路与代码![请添加图片描述](https://img-blog.csdnimg.cn/d06a95d7989b4794bd7f5f02fbd6f87e.png)解法一&…

spring之使用Spring的AOP

文章目录前言一、准备工作1、添加相应的依赖2、添加相应的命名空间3、创建目标类4、创建切面二、使用AOP1.在切面类中编写增强代码以及切点表达式2、开启aspectj的自动代理3、测试类4、测试结果前言 Spring对AOP的实现包括以下三种方式 1、Spring框架结合AspectJ框架实现的AOP…

自抗扰控制ADRC之反馈控制律(NLSEF)

目录 前言 1.非线性状态误差反馈控制律(NLSEF) 1.1 控制律形式 1.2 控制量的生成(或者说扰动的补偿) 1.2.1补偿形式① 1.2.1补偿形式② 2.仿真分析 2.1仿真模型 2.2仿真结果 前言 前面的两篇博客依次介绍了TD微分跟踪器安排过渡过程、扩张观测器&#xff1a; 自抗扰…

用腾讯云同步Obsidian笔记

介绍 之前用gitee同步OB笔记&#xff0c;同时做图床。但由于git系产品设置起来相对复杂&#xff0c;且后续可能有外链过审等问题。周五被同事小姐姐安利了用腾讯云COS&#xff0c;试了一下&#xff0c;果然不错。其主要优点如下&#xff1a; 设置简单&#xff0c;学习成本低&…

WSL(Windows Subsystem for Linux)

一、WSL优势 •传统方式&#xff1a;获取Linux操作系统环境&#xff0c;必须安装完整的虚拟机&#xff0c;如VMware•WSL&#xff1a;以非常轻量化的方式&#xff0c;得到Linux系统环境总结&#xff1a;WSL更方便&#xff0c;简单、好用、轻量化、省内存 二、什么是WSL ①不…

Go语言基础(十五):垃圾回收机制(三色标记)

文章目录一、标记清除&#xff08;三色标记&#xff09;大致原理1、标记细节2、root对象二、垃圾回收触发机制垃圾回收&#xff08;Garbage Collection&#xff09;&#xff0c;是一种自动管理内存的机制。传统编程语言&#xff08;如C/C&#xff09;需要开发者对无用内存资源进…

Android实例仿真之三

目录 四 Android架构探究 五 大骨架仿真 六 Android实例分析思路拓展 四 Android架构探究 首先&#xff0c;Android系统所带来的好处&#xff0c;就在于它本身代码的开放性&#xff0c;这提供了一个学习、借鉴的平台。这对分析仿真而言&#xff0c;本身就是一大利好&#xf…

[JAVA安全]Spring Messaging之CVE-2018-1270

漏洞简介 Spring 框架中通过spring-messaging 模块来实现 STOMP &#xff08;Simple Text-Orientated Messaging Protocol&#xff09;,STOMP是一种封装 WebSocket的简单消息协议。攻击者可以通过建立WebSocket连接并发送一条消息造成远程代码执行&#xff0c; spring-messagin…

C++笔记 模板的进阶知识

目录 1. 非类型模板参数 2.模板的特化 2.1 函数模板的特化 2.2 类模板的特化 2.2.1 全特化 2.2.2 偏特化 3.模板的分离编译 3.1 什么是分离编译&#xff1f; 3.2 模板的分离编译 4.模板的总结 模板的初阶内容&#xff1a;(594条消息) C模板的原理和使用_全貌的博客-CSD…

【干货】如何打造HR无法拒绝的简历?测试开发大牛带手把手你写简历!

通过率90%&#xff0c;优秀的软件测试简历长什么样&#xff1f; 也许口才好的人会觉得简历不重要&#xff0c;能说就行了&#xff0c;那是因为你没有体会过石沉大海的感觉&#xff01; 很多人觉得疑惑&#xff0c;为什么我投了那么多简历&#xff0c;都没有接到面试通知&…

加油站会员管理小程序实战开发教程15 完结篇

这篇是本次实战课程的最后一篇,我们在上篇还有两个问题没解决。一个是会员卡类型显示不对,一个是不同的会员卡我们希望背景色显示不同。我们先处理一下这两个问题 1 显示会员卡类型 在列表上直接显示会员卡类型,目前显示的是数字,这个是因为枚举类型导致的。枚举类型在数…

关于vb6无边框的窗体开发遇到的部分问题的解决方案

为了美化或自定义窗体&#xff0c;通常会把窗体做成无边框形式&#xff0c;使用无边框窗体会存在一些问题的&#xff0c;以vb为例&#xff0c;当窗体borderstyle设置为0时&#xff0c;会出现以下问题:1.任务栏不再出现程序图标 2.窗体无法拖行移动 3.窗体无法拖动缩放&#…

WampServer安装教程

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

10- 天猫用户复购预测 (机器学习集成算法) (项目十) *

项目难点 merchant: 商人重命名列名: user_log.rename(columns{seller_id:merchant_id}, inplaceTrue)数据类型转换: user_log[item_id] user_log[item_id].astype(int32)主要使用方法: xgboost, lightbm竞赛地址: 天猫复购预测之挑战Baseline_学习赛_天池大赛-阿里云天池…

java并发编程原理1(原子性,可见行,有序性,volatile,synchronized)

一、原子性&#xff1a; 1.1 Java中如何实现线程安全? 多线程操作共享数据出现的问题。 锁&#xff1a; 悲观锁&#xff1a;synchronized&#xff0c;lock乐观锁&#xff1a;CAS 可以根据业务情况&#xff0c;选择ThreadLocal&#xff0c;让每个线程玩自己的数据。 1.2 C…

内大-oj练习题(2期)

内大oj2期 1. 输出一个数的质数因子2. 寻找完数3. 圆的面积4. 求同存异5. 2的k进制数6. 输出排序序列6. DNA算法1. 输出一个数的质数因子 介绍 因子,例如 33=9 (3就是因子); 19=9(1,9就是因子) 质数, 只能被1和本身整除的数 题目 代码 #include <iostream>

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

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

C++Primer15.5节练习

练习15.18&#xff1a; Base* p &d1&#xff1a;合法 p &d2&#xff1a;不合法&#xff0c;只有当派生类公有地继承基类时&#xff0c;用户代码才能使用派生类向基类的转换 p &d3&#xff1a;不合法&#xff0c;只有当派生类公有地继承基类时&#xff0…

ChatGpt与Google 谁能给出最好的回答

ChatGPT由于其先进的会话和技术功能而越来越受欢迎。你可以问聊天机器人任何你想问的问题&#xff0c;它会在几秒钟内输出答案。虽然它不是一个搜索引擎&#xff0c;你应该使用ChatGPT作为你的信息来源而不是谷歌&#xff0c;百度吗? 我们来根据国外的一场测试来看一下 ChatG…