【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录

六、面向对象方法

6.1 基本概念

6.2 面向对象的分析

6.2.1 用例关系 

6.2.2 类之间的关系

6.3 面向对象的设计

 6.4 面向对象设计原则与设计模式

6.5 面向对象软件的测试

七、逆向工程

历年真题练习


六、面向对象方法

        面向对象的分析方法 (Object-Oriented Analysis,OOA), 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。 OOA 与结构化分析有较大的区别。OOA 所强调的是在系统调查资料的基础上,针对O O 方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
        OOA 模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构;另一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。

6.1 基本概念

        对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的一个实体,是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成。

        类:现实世界中实体的形式化描述,类将该实体的属性(数据)和操作(函数)封装在一起。对象是类的实例,类是对象的模板。类可以分为三种:实体类、接口类(边界类)和控制类

                实体类的对象表示现实世界中真实的实体,如人、物等。
                接口类(边界类)的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏窗口、Web 窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法。系统接口涉及到把数据发送到其他系统,或者从其他系统接收数据。
                控制类的对象用来控制活动流,充当协调者

        抽象:通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象,抽象是一种单一化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。

        封装:是一种信息隐蔽技术,将相关的概念组成一个单元模块,并通过一个名称来引用。面向对象封装是将数据和基于数据的操作封装成一个整体对象对数据的访问或修改只能通过对象对外提供的接口进行。

        继承:表示类之间的层次关系(父类与子类),这种关系使得某类对象可以继承另外一类对象的特征,又可分为单继承和多继承。

        多态:不同的对象收到同一个消息时产生完全不同的结果。包括参数多态(不同类型参数多种结构类型)、包含多态(父子类型关系)、过载多态(类多态似于重载,一个名字不同含义)、强制多态(强制类型转换)四种类型。由继承机制支持,将通用消息放在抽象层,具体不同的功能实现放在低层。

        接口:描述对操作规范的说明,其只说明操作应该做什么并没有定义操作如何做

        消息:体现对象间的交互,通过它向目标对象发送操作请求。

        覆盖:子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。即在子类中重定义一个与父类同名同参的方法。

        函数重载:与覆盖要区分开,函数重载与子类父类无关,且函数是同名不同参数

    public int add(int x){
        return x+10;
    }
    public int add(int x,int y){
        return x+y;
    }

        绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫作静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。

6.2 面向对象的分析

        面向对象的分析是为了确定问题域理解问题。包含五个活动:认定对象组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息

        面向对象需求建模:

6.2.1 用例关系 

        泛化代表一般与特殊的关系。在用例泛化中,子用例表示父用例的特殊形式。子用例从父用例处继承行为和属性,还可以添加行为或覆盖、改变已继承的行为。当系统中具有一个或多个用例是较一般用例的特化时,就使用用例泛化。泛化用带空心箭头的实线表示,箭头的方向由子用例指向父用例

        包含(include)关系是一种依赖联系,是指一个基本用例的行为包括了另一个用例。用一条从基本用例指向被包含的用例的虚箭头线表示,并在箭头上标识<<include>>。包含关系典型的应用就是复用,有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例

        扩展关系(Extension)就是将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。

6.2.2 类之间的关系

        依赖一个事物的语义依赖于另一个事物的语义的变化而变化

        关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。

                组合是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。例如鸟是整体,翅膀是部分->鸟死了,翅膀也就没用了。

                聚合是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。例如茶具,杯子和茶壶可以聚合成一套茶具,杯子也可以单独拿出来喝水。

        泛化一般/特殊的关系,子类和父类之间的关系。

        实现一个类元指定了另一个类元保证执行的契约

6.3 面向对象的设计

        面向对象的设计是设计分析模型和实现相应源代码,设计问题域的解决方案,与技术相关。OOD同样应遵循抽象、信息隐蔽、功能独立、模块化等设计准则。

        面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图

 6.4 面向对象设计原则与设计模式

设计模式之设计原则_设计模式 四大原则是什么-CSDN博客文章浏览阅读361次。开放-封闭原则(开闭原则)、单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则(最少知道原则)、合成复用原则!_设计模式 四大原则是什么https://shuaici.blog.csdn.net/article/details/116494494设计模式之创建型模式_创建型模式主要有哪些?主要应用场景是什么?-CSDN博客文章浏览阅读1.8k次,点赞3次,收藏4次。抽象工厂模式、构建器模式、工厂方法模式、原型模式、单例模式!_创建型模式主要有哪些?主要应用场景是什么?https://shuaici.blog.csdn.net/article/details/116521002设计模式之结构型模式_设计模式结构型模式-CSDN博客文章浏览阅读412次。代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式!_设计模式结构型模式https://shuaici.blog.csdn.net/article/details/116799072设计模式之行为型模式_类行为模式 对象行为模式-CSDN博客文章浏览阅读883次。模板模式、策略模式、责任链模式、迭代器模式、命令模式、状态模式、备忘录模式、中介者模式、解释器模式、观察者模式、访问者模式、委派模式!_类行为模式 对象行为模式https://shuaici.blog.csdn.net/article/details/117027040        

6.5 面向对象软件的测试

        一般来说,对面向对象软件的测试可分为下列4个层次进行

        (1)算法层。测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试。

        (2)类层。测试封装在同一个类中的所有方法与属性之间的相互作用。在向面对象软件中类是基本模块,因此可以认为这是面向对象测试中所特有的模块测试。

        (3)模板层。测试一组协同工作的类之间的相互作用,大体上相当于传统软件测试中的集成测试,但是也有面向对象软件的特点(例如,对象之间通过发送消息相互作用)。
        (4)系统层。把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。

七、逆向工程

        软件复用将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面
        逆向工程:软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程的四个级别:

        实现级:包括程序的抽象语法树、符号表、过程的设计表示。
        结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。
        功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型。
        领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如E-R模型。

其中,实现级抽象级别最低,完备性最高领域级抽象级别最高,完备性最低

        与逆向工程相关的概念有重构、设计恢复、再工程和正向工程
                (1)重构是指在同一抽象级别上转换系统描述形式。
                (2)设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
                (3)再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
                (4)正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。

历年真题练习

        1.一个类中可以拥有多个名称相同而参数表(参数类型或参数个数或参数类型顺序)不同的方法称为()。

                A.方法标记
                B.方法调用
                C.方法重载
                D.方法覆盖

        2.在某销售系统中,客户采用扫描二维码进行支付。若采用面向对象方法开发该销售系统,则客户类属于(1)类,工维码类属于(2)类。

                (1)A.接口B.实体C.控制D.状态
                (2)A.接口B.实体C.控制D.状态

        3.面向对象的分析模型主要由顶层架构图、用例与用例图和(1)构成;设计模型则包含以(2)表示 的软件体系机构图、以交互图表示的用例实现图、完整精确的类图、描述复杂对象的(3)和用以描述流程化处理过程的活动图等。

                (1)A.数据流模型                B.领域概念模型
                    C.功能分解图                D.功能需求模型
                (2)A.模型视图控制器         B.组件图
                    C.包图                           D.2层、3层或N层
                (3)A.序列图                        B.协作图
                    C.流程图                        D.状态图

        4.在面向对象设计的原则中、()原则是指抽象不应该依赖予细节,细节应该依赖于抽象,即应针对接口编程,而不是针对实现编程。

                A.开闭         B.里氏替换
                C.最少知识  D.依赖倒置

人工分割线-答案

        1. C

        2. B、A

        3. B、C、D

        4. D

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外国程序猿是什么水平?印度/越南/泰国/菲律宾

外国程序猿是什么水平? 中国互联网企业在海外扩张中,会遇到哪些困难和问题? 文化的差异本地法律法规的问题产品定位的问题人员招聘的问题等等…… 文化的差异和法律法规只能去适应,产品定位可以做调研,参考竞争对手和竞品。 人呢?这是最不可控的因素! 这里所说的人肯定…

Snap Video:用于文本到视频合成的扩展时空变换器

图像生成模型的质量和多功能性的显著提升&#xff0c;研究界开始将其应用于视频生成领域。但是视频内容高度冗余&#xff0c;直接将图像模型技术应用于视频生成可能会降低运动的保真度和视觉质量&#xff0c;并影响可扩展性。来自 Snap 的研究团队及其合作者提出了 "Snap …

pdf只要前几页,pdf中只要前几页怎么处理

在处理pdf文件时&#xff0c;我们有时只需要其中的一页或几页&#xff0c;而不是整个文档。那么&#xff0c;如何快速且高效地从pdf中提取单独的一页呢&#xff1f;本文将为你揭示几种简单易行的方法&#xff0c;让你轻松实现这一目标。 使用 “轻云处理pdf官网” 打开 “轻云…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求&#xff0c;原本有一个下拉框&#xff0c;但是条目太多&#xff0c;不好搜索&#xff0c;所以用户要求可以输入查找 修改前 &#xff1a; 修改后&#xff1a; 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…

信息技术应用创新人才评价~信创规划管理师

信创规划管理师背景 为加速培养信息技术应用创新人才&#xff0c;为企业合理选拔和聘用信创人才&#xff0c;为其发展壮大提供强有力的人才支持&#xff0c;工信部教育与考试中心开展“信创人才考试评价认证”工作。 信创是一种以科技为核心新兴产业。这几年来&#xff0c;国…

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…

【结构性型模式-适配器模式】

定义 将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要求程序员了解现有组件库中的相关组件的内部结…

运算放大器(2)

&#xff08;1&#xff09;反向放大器 Vout(-R2/R1)*Vi 图一运放的同向端接地0V&#xff0c;反向端和同向端虚短&#xff0c;所以也是0V 反向输入端输入电阻很高&#xff0c;虚断&#xff0c;几乎没有电流注入和流出&#xff0c;那么R1和R2相当于是串联的&#xff0c;流过一个…

平分正方形

题目链接 平分正方形 题目描述 注意点 square.length 3square[2] > 0若同时有多条直线满足要求&#xff0c;则选择斜率最大的一条计算并返回&#xff08;与Y轴平行的直线视为斜率无穷大&#xff09; 解答思路 平分正方形的直线是两个正方形中间点相连的直线&#xff0…

【超音速 专利 CN117710683A】基于分类模型的轻量级工业图像关键点检测方法

申请号CN202311601629.7公开号&#xff08;公开&#xff09;CN117710683A申请日2023.11.27申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 杨培文(总); 沈俊羽; 张小村 技术领域 本发明涉及图像关键点检测…

python制作甘特图的基本知识(附Demo)

目录 前言1. matplotlib2. plotly 前言 甘特图是一种常见的项目管理工具&#xff0c;用于表示项目任务的时间进度 直观地看到项目的各个任务在时间上的分布和进度 常用的绘制甘特图的工具是 matplotlib 和 plotly 主要以Demo的形式展示 1. matplotlib 功能强大的绘图库&a…

【网络安全】APDCL:IDOR + 账户接管

未经许可&#xff0c;不得转载。 文章目录 正文漏洞1&#xff1a;IDOR漏洞2&#xff1a;账户接管 正文 APDCL &#xff0c;即印度阿萨姆邦电力分销公司&#xff08;Assam Power Distribution Company Limited&#xff09;&#xff0c;是印度阿萨姆邦政府控制的公共部门企业&am…

亚马逊IP关联是什么?要怎么解决呢?

亚马逊不仅提供了广泛的商品和服务&#xff0c;也是许多企业和个人选择的电子商务平台。然而&#xff0c;与亚马逊相关的IP关联问题&#xff0c;特别是在网络安全和运营管理方面&#xff0c;经常成为使用亚马逊服务的用户和商家关注的焦点。通过了解亚马逊IP关联的含义、可能的…

AURORA仿真

AURORA 仿真验证 定义&#xff1a;AURORA是一种高速串行通信协议&#xff0c;通常用于在数字信号处理系统和其他电子设备之间传输数据。它提供了一种高效的方式来传输大量数据&#xff0c;通常用于需要高带宽和低延迟的应用中。AURORA协议通常由Xilinx公司的FPGA器件支持&#…

ctfshow-web入门-php特性(web96-web99)

目录 1、web96 2、web97 3、web98 4、web99 1、web96 试了下通配、转义、拼接、大小写都不行 这里使用绝对路径或者当前路径绕过&#xff1a; ?u./flag.php ?u/var/www/html/flag.php 还可以使用 php 伪协议&#xff1a; ?uphp://filter/resourceflag.php 2、web97 关…

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

【低照度图像增强系列(8)】URetinex-Net算法详解与代码实现(2022|CVPR)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

中创算力公益行 | 夏日炎炎送清凉,温暖童心筑梦行

这是一个关于爱与关怀的故事&#xff0c;也是一段关于成长与责任的旅程。在这个炎炎夏日&#xff0c;喧嚣与热浪交织&#xff0c;有些孩子&#xff0c;他们生活在偏远的乡村&#xff0c;用稚嫩的双肩承载着生活的重担&#xff0c;在这个本应享受无忧无虑童年的年纪&#xff0c;…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

【python】PyQt5事件传递,鼠标动作捕获,键盘按键捕获原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…