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

软件工程第十一周

面向对象

面向对象编程(Object-Oriented Programming, OOP)不仅仅是一种程序设计方法,它更是一种深刻的软件工程开发思想。这种思想的核心在于通过抽象和封装来模拟现实世界中的对象和概念,以便更好地管理和解决复杂的软件工程问题。

面向对象编程的主要特点包括:

  1. 封装:将数据(属性)和操作数据的方法(行为)封装成一个整体(对象),隐藏内部实现的细节,只暴露有限的接口给外部使用。
  2. 继承:允许新创建的对象继承现有对象的属性和方法。这不仅简化了代码,而且增强了代码的可复用性。
  3. 多态:同一个行为具有多个不同表现形式或形态。它允许不同的对象对同一消息做出响应。
  4. 抽象:抽象是将复杂的现实世界简化为模型的过程,它只关注对象的必要特性,并忽略那些不重要的细节。

面向对象的这些特点使得它非常适合用于处理复杂的软件系统。通过面向对象的方法,可以更容易地对系统进行分解、组织和管理,增加代码的可读性、可维护性和可扩展性。此外,面向对象编程也有助于团队协作和代码重用,是现代软件开发中不可或缺的一部分。 


处理现有软件系统的方法

维护

维护是软件生命周期中的一个重要阶段,它涉及到对软件产品进行必要的更新和改进,以应对环境变化、修复存在的缺陷、改善性能或增加新的功能。软件维护确保了软件产品能够持续有效地服务于其用户和业务需求。软件产品在开发完成并投入使用后,所进行的变更通常被称为维护

软件再工程(C. Software Reengineering)

  • 定义:软件再工程是指对现有软件系统进行分析、理解和修改的过程,目的是重构和更新软件,使其更容易理解、更易于维护。
  • 应用场景通常用于老旧的软件系统,这些系统可能由于技术陈旧、文档缺失或结构混乱而难以维护和扩展
  • 与维护的关系:软件再工程通常是一种更为深入和彻底的过程,可能包括重写代码、重构数据库或更新系统架构。这超出了日常维护的范畴,目的是彻底改善软件的结构和未来的可维护性。不仅涉及到分析理解,还涉及到了实操!

逆向工程(D. Reverse Engineering)

  • 定义:逆向工程是指对一个软件系统的内部结构、功能和工作原理进行分析,而这一切通常是在没有它的源代码的情况下进行的。
  • 应用场景:它常用于理解旧系统的工作方式,特别是在缺乏文档或源代码不可用的情况下。这有助于在重构或迁移到新系统时保留原有系统的功能
  • 与维护的关系:逆向工程更多地关注于理解现有软件系统的行为和结构,而不直接涉及日常维护活动。它可以作为软件维护、重构或再工程之前的一项重要分析活动。

总的来说,软件维护主要关注于日常的更新、修复和小范围的改进。软件再工程逆向工程则通常用于更大范围、更深层次的软件系统重构和理解,它们往往是在软件需要重大改变或完全理解时才采用的策略。

是否可以将逆向工程看作软件再工程必要的的前置操作?

在某些特定情况下,尤其是面对遗留系统、缺少文档或源代码不明确的场景时,逆向工程确实可以作为软件再工程的一个重要步骤。通过先理解现有系统的内部结构和功能,再工程的过程可以更加高效和目标明确。

但是,如果软件的源代码和文档齐全、清晰,那么直接进行重构和改进可能就足够了,无需进行逆向工程。


主动类

在面向对象的编程中,术语“主动类”(Active Class)通常指的是那些在系统中承担主要功能和责任的类。这些类之所以被称为“主动”,是因为它们通常包含了触发和控制系统行为的关键逻辑。下面是为什么这些类完成了系统中的主要功能,以及它们为什么被称为“主动类”的原因:

完成主要功能

  1. 关键逻辑和操作:主动类通常包含系统的核心业务逻辑和操作。它们负责实现系统的主要功能,如数据处理、决策制定、事件触发等。

  2. 控制流程:这些类往往在软件的控制流程中扮演重要角色,负责协调和管理其他类的行为,以及系统与外界的交互。

  3. 主动发起行为与被动响应系统事件或请求不同,主动类能够自发地触发行为和过程,推动系统向前发展。

被称为“主动类”的原因

  1. 主动性:它们不仅响应外部请求,还可能自发地开始活动,例如,定时检查、主动更新数据等。

  2. 动力源:在软件架构中,主动类像是动力源一样,推动整个系统的运作,使系统能够完成其旨在实现的目标。

  3. 独立性:这些类往往具有较高的独立性,它们能够在没有外部干预的情况下执行任务和维护自身状态。

因此,主动类在软件系统中的重要性和它们的主动性质决定了它们在设计和实现中的关键角色。它们是软件功能和逻辑的主要承载者,同时也是系统活动的主要推动者。


软件可维护性

软件文档与可维护性

软件文档是软件的重要组成部分,它是软件开发阶段的基础,并且还影响着软件的可维护性。详细解释如下:

  • 软件文档通常包括需求说明、设计文档、用户手册、测试文档等,这些文档提供了对软件项目的详细描述,帮助开发人员、测试人员和最终用户理解软件。
  • 良好的文档使得软件的维护(如错误修复、功能更新、性能优化等)更加容易和高效,因为开发人员可以快速理解软件的设计和功能,从而更有效地进行修改和扩展。
  • 软件的可重用性、可扩展性和可移植性也是重要的考虑因素,但它们并不像可维护性那样直接受到软件文档质量的影响。

例题

下面的叙述中,与可维护性关系最密切的是( ) A. 软件从一个计算机系统和环境转移到另一个计算机系统和环境的容易程度 B. 尽管有不合法的输入,软件依然能继续正常工作的能力 C. 软件能够被理解、校正、适应及增强功能的容易程度 D. 在规定的条件下和规定的一段时间内,实现所指定的功能的能力

与可维护性关系最密切的描述是软件能够被理解、校正、适应及增强功能的容易程度。因此,在这个选择题中,正确的选项是:

C. 软件能够被理解、校正、适应及增强功能的容易程度

解释如下:

  • 可维护性是指软件在其生命周期内容易进行修改的特性。这包括对软件进行修复、更新、扩展和优化的能力。
  • 一个易于维护的软件系统应当能够被开发人员轻松理解,以便于在需要时进行有效的校正(修复缺陷)、适应(修改以适应新环境或需求)和增强(添加新功能或改善性能)。

其他选项与软件的其他质量属性相关,但不是直接指向可维护性:

  • A项描述的是软件的可移植性
  • B项描述的是软件的健壮性或容错性
  • D项描述的是软件的可靠性

动态模型

动态模型是理解和设计软件系统的关键组成部分,是属性值状态变化的集合,我们通过动态模型察看建立的对象是否完整,因为其中触发事件对应的是方法建立完动态模型和用例才能完整地确定对象的属性和方法(服务)

以下是对这一过程的进一步阐述:

动态模型的作用

  1. 状态变化追踪:动态模型关注于对象的行为和状态变化。它帮助开发者理解对象在系统中如何响应不同事件和操作。

  2. 对象完整性验证:通过动态模型,可以验证建立的对象是否完整和符合预期。这包括确认对象拥有正确的属性和响应机制

  3. 方法与事件关联:动态模型强调触发事件和相应方法之间的关联。每个事件通常对应一个或多个方法,这些方法定义了对象如何响应特定的事件。

动态模型在对象设计中的应用

  1. 确定对象属性:动态模型通过分析对象在不同状态下的行为,帮助识别必要的属性。这些属性是对象在生命周期中存储状态信息的关键。

  2. 定义对象方法(服务):动态模型揭示了对象需要响应的事件,从而帮助确定必须实现的方法。这些方法是对象提供服务的方式。

  3. 用例与动态模型:用例分析通常与动态模型相结合使用。用例提供了系统功能的高层视图,而动态模型提供了更细粒度的行为和状态变化信息。二者共同工作,确保了对象设计的全面性和准确性。

在软件开发过程中,动态模型是理解和设计系统中对象的关键步骤。它不仅帮助确定对象的属性和方法,还确保这些元素在整个系统中协同工作,满足用例和业务需求。因此,在动态模型的帮助下,可以更有效地设计出反应迅速、功能完备的软件系统。

相关文章:

软件工程第十一周

面向对象 面向对象编程(Object-Oriented Programming, OOP)不仅仅是一种程序设计方法,它更是一种深刻的软件工程开发思想。这种思想的核心在于通过抽象和封装来模拟现实世界中的对象和概念,以便更好地管理和解决复杂的软件工程问…...

【从入门到起飞】JavaSE—带你了解Map,HashMap,TreeMap的使用方法

🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 🥰欢迎并且感谢大家指出我的问题 文章目录 🌺双列集合的特点🎄Map🍔Ma…...

[Docker]六.Docker自动部署nodejs以及golang项目

一.自动部署nodejs 1.创建node项目相关文件 app.js代码如下: var express require(express);var appexpress();app.get(/,function(req,res){res.send(首页update); }) app.get(/news,function(req,res){res.send(首页); })//docker做端口映射的时候不要指定ip app.listen(30…...

FPC焊点剥离失效分析

一、案例背景 FPC在后续组装过程中,连接器发生脱落。在对同批次的样品进行推力测试后,发现连接器推力有偏小的现象。据此进行失效分析,明确FPC连接器脱落原因。 #1、#2样品连接器脱落连接器脱落;#3样品连接器未脱落;…...

Java爬虫框架下代理使用中的TCP连接池问题及解决方案

引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…...

PostgreSQL 数据定义语言 DDL

文章目录 表创建主键约束非空唯一约束检查约束外键约束默认值约束 触发器表空间构建表空间 视图索引索引的基本概念索引的分类创建索引 物化视图 表创建 PostgreSQL表的构建语句与所有数据库都一样,结构如下,其核心在于构建表时,要指定上一些…...

设计模式-行为型模式-策略模式

一、什么是策略模式 策略模式是一种行为设计模式,它允许在运行时选择算法或行为,并将其封装成独立的对象,使得这些算法或行为可以相互替换,而不影响使用它们的客户端。(ChatGPT生成) 主要组成部分&#xff…...

ResizeObserver观察元素宽度的变化

ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象,它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…...

斐波那契数列,剑指offer,力扣

目录 题目地址: 我们直接看题解吧: 解题方法: 难度分析: 审题目事例提示: 解题思路(动态规划): 代码实现: 补充说明: 代码(优化)&…...

Mac安装CocoaPods

安装HomeBrew 安装 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装失败 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"curl: (28) F…...

APP专项测试方法和工具的使用(测试新手必看)

APP专项测试 1、网络测试 可使用抓包工具辅助网格测试推荐:fiddler,Charles (1)网络切换2G-3G-4G-wifi-网络信号差--无网(2)网络信号弱关注是否出现ANR、crash 2、中断测试 (1)…...

WordPress网站迁移实战经验

前几日,网站服务器到期,换了服务商,就把我的WordPress的网站迁移到本地电脑了。方便以后文章迁移。 本次迁移网站主要经历以下几个步骤。 1.域名转出。 2.备份数据库及网站文件下载。 3.重新搭建WordPress网站。 4.网站文件及数据库导入。 下面详细介绍下每个步骤的操作…...

3D全景视角,足不出户感知真实场景的魅力

近年来,随着科技的快速发展,普通的平面静态视角已经无法满足我们了,不管是视角框架的限制还是片面的环境展示,都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟,3D全景技术的出现为我们提供了全新的视觉体验…...

C编译环境和预处理(非常详细,建议收藏)

C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…...

LeetCode669. Trim a Binary Search Tree

文章目录 一、题目二、题解 一、题目 Given the root of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in [low, high]. Trimming the tree should not change the relative structure of the …...

YOLOv8优化策略:轻量级Backbone改进 | VanillaNet极简神经网络模型 | 华为诺亚2023

🚀🚀🚀本文改进:一种极简的神经网络模型 VanillaNet,支持vanillanet_5, vanillanet_6, vanillanet_7, vanillanet_8, vanillanet_9, vanillanet_10, vanillanet_11等版本 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,…...

【数据结构(二)】稀疏 sparsearray 数组(1)

文章目录 1. 稀疏数组的应用场景1.1. 一个实际的需求1.2. 基本介绍 2. 稀疏数组转换的思路分析3. 稀疏数组的代码实现3.1. 二维数组转稀疏数组3.2. 稀疏数组转二维数组 4. 课后练习 1. 稀疏数组的应用场景 1.1. 一个实际的需求 问题:     编写的五子棋程序中&…...

MySQL的执行器是怎么工作的

作为优化器后的真正执行语句的层,执行器有三种方式和存储引擎(一般是innoDB)交互 主键索引查询 查询的条件用到了主键,这个是全表唯一的,优化器会选择const类型来查询,然后while循环去根据主键索引的B树结…...

【目标测距】雷达投影测距

文章目录 前言一、读取点云二、点云投影图片三、读取检测信息四、点云投影测距五、学习交流 前言 雷达点云投影相机。图片目标检测,通过检测框约束等等对目标赋予距离。计算消耗较大,适合离线验证操作。在线操作可以只投影雷达检测框。 一、读取点云 py…...

uniapp、小程序canvas相关

1、圆形or圆形头像 //示例 const ctx uni.createCanvasContext(myCanvas); //canvas const round uni.upx2px(72) / 2; // 半径 const x uni.upx2px(92); //目标x轴位置 const y uni.upx2px(236); //目标y轴位置//if 图片是不是静态资源 async > const imgSrc https:/…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...