【系统架构师设计(9)】系统设计:结构化设计与面向对象设计

文章目录

    • 一、核心思想:模块化与对象化的设计哲学
      • 1、结构化设计的核心思想
      • 2、面向对象设计的核心思想
      • 3、两种设计方法的本质区别
    • 二、结构化设计知识点
      • 1、设计阶段
      • 2、设计原则
      • 3、 内聚类型(从低到高)
      • 耦合类型(从低到高)
      • 模块四要素
    • 三、面向对象设计知识点
      • 设计过程
      • 类分类
      • 设计原则

一、核心思想:模块化与对象化的设计哲学

系统设计的本质是"分而治之"的工程思维在软件领域的体现。 无论是结构化设计还是面向对象设计,其核心目标都是将复杂的系统分解为相对独立、易于理解和管理的组件。

1、结构化设计的核心思想

在这里插入图片描述

结构化设计基于"自顶向下、逐步求精"的思维模式。它认为复杂系统可以通过层次化的模块分解来解决,每个模块都有明确的输入、输出和处理逻辑。 这种设计的精髓在于"高内聚、低耦合"——模块内部紧密协作,模块之间松耦合连接。

想象一下建造一座大厦:结构化设计就像先设计整体框架(概要设计),然后细化每个房间的功能(详细设计)。每个房间(模块)都有明确的用途,房间之间通过走廊(接口)连接,但房间内部的设计相对独立。

 

2、面向对象设计的核心思想

在这里插入图片描述

面向对象设计基于"现实世界映射"的思维模式。它认为软件系统应该像现实世界一样,由各种对象组成,每个对象都有自己的属性和行为。 这种设计的精髓在于"封装、继承、多态"——对象内部细节隐藏,对象间通过消息传递协作。

继续用大厦的比喻:面向对象设计就像设计一个智能大厦,每个房间(对象)都有自己的智能系统(属性和方法),房间之间可以相互通信(消息传递),而且不同类型的房间可以继承共同的特征(继承)。

 

3、两种设计方法的本质区别

结构化设计关注"功能分解",面向对象设计关注"对象协作"。 结构化设计问的是"这个系统要做什么功能?“,面向对象设计问的是"这个系统有哪些对象?它们如何协作?”

在实际应用中,两种方法往往结合使用:用结构化设计构建系统架构,用面向对象设计实现具体功能。

 

二、结构化设计知识点

1、设计阶段

阶段定义与作用示例
概要设计将功能需求分配给软件模块,形成模块结构图
从宏观角度规划软件架构,确定模块功能和调用关系
学生管理系统中,将学生信息录入、成绩管理、考勤管理分配到不同模块
详细设计针对每个模块选择技术手段和处理方法
细化软件设计,指导程序员进行代码编写
确定数据存储格式、选择验证算法、设计处理流程

 

2、设计原则

原则定义与具体要求作用
模块独立性高内聚、低耦合
高内聚:模块内部元素联系紧密,功能单一明确
低耦合:模块间依赖程度低,修改影响小
提高模块的可理解性和可维护性
模块大小适中避免过大或过小
过大:代码复杂难以理解和维护
过小:功能零碎,增加模块间交互成本
平衡模块的复杂度和交互成本
多扇入、少扇出提高模块复用性,降低复杂度
扇入:模块被其他模块调用的次数,多扇入提高复用性
扇出:模块调用其他模块的数量,少扇出降低复杂度
提高模块复用性,降低系统复杂度
控制深度和宽度避免层次过深或过宽
深度:模块结构层次数,过深增加理解和维护难度
宽度:同一层次模块数,过宽增加横向复杂度
保持系统结构的清晰性

 

3、 内聚类型(从低到高)

在这里插入图片描述

类型定义与特点示例
偶然内聚模块内任务无关联
最差的内聚形式,任务随意组合
模块包含文件读取、界面显示、数据加密等无关联操作
逻辑内聚完成逻辑相关但联系不紧密的任务
任务逻辑相关但协同性不强
处理各种类型数据校验(数字、字符串等)
时间内聚必须在同一时间执行的任务
任务在同一时间间隔内执行
系统启动时的初始化操作(数据库连接、配置文件加载)
过程内聚按特定次序执行的相关任务
任务相关且必须按特定顺序执行
订单处理流程(验证→扣库存→更新状态)
通信内聚操作同一数据结构
所有处理元素集中在同一数据结构上
学生信息的增删改查操作
顺序内聚必须顺序执行的相关任务
比过程内聚更强调顺序关联性
文件处理(打开→读取→关闭)
功能内聚完成单一功能,各部分协同工作
最高程度的内聚,各部分缺一不可
加密模块专门负责数据加密处理

 

耦合类型(从低到高)

在这里插入图片描述

类型定义与特点示例
非直接耦合通过主模块控制,无直接联系
耦合程度最低,模块间无直接交互
模块A和B通过主模块调用,A和B无直接联系
数据耦合通过参数传递简单数据
耦合度较低,传递简单数据
计算模块接收数值参数进行运算
标记耦合通过参数传递数据结构
比数据耦合稍高,传递复杂数据
传递学生信息结构体(姓名、年龄等字段)
控制耦合传递控制信息
传递的信息控制模块内部逻辑
传递标志位决定采用何种算法
外部耦合访问同一全局变量
多个模块访问同一全局变量
多个模块直接访问全局计数器变量
公共耦合访问同一公共数据环境
多个模块访问共享数据环境
访问共享数据库或内存区域
内容耦合直接访问模块内部数据
耦合程度最高,破坏模块独立性
直接访问模块内部数据或不经正常入口进入

 

模块四要素

要素定义与作用示例
输入和输出模块与外部交互的接口
定义模块的对外接口
计算模块接收两个数字,返回计算结果
处理功能模块的核心操作
实现模块的特定功能
图像识别模块的特征提取、模式匹配操作
内部数据模块内部使用的数据
支持模块内部处理功能的实现
文件管理模块记录当前打开文件列表
程序代码实现模块功能的具体代码
定义模块的逻辑和操作流程
用Python编写的排序函数代码

 

三、面向对象设计知识点

设计过程

在这里插入图片描述

分析模型构建

内容与定义示例
用例模型:描述系统功能及参与者与系统交互电商系统中"用户下单""商家发货"等用例及参与者交互
领域模型:描述系统问题域中的概念、实体及其关系电商系统中"用户"“商品”"订单"类及关联关系

 

设计阶段

内容与定义示例
用例实现方案:确定用例的实现方式和流程"用户下单"用例:库存检查→订单生成→支付处理
技术支撑:选择技术框架、工具和平台电商系统选用Spring Boot + MySQL技术栈
用户界面:设计用户与系统交互界面商品展示页面、购物车界面等设计
细化设计模型:对类和对象进一步细化"订单"类细化订单状态属性、订单操作方法

 
设计模型产出

内容与定义示例
架构图:展现系统整体架构和模块划分用户管理、商品管理、订单管理等包
用例实现图:展示用例实现中对象交互过程"用户下单"用例的顺序图展示对象交互
类图:完整精确描述系统中类、对象、属性、方法及关系电商系统完整类图涵盖"用户"“商品”"订单"类
其他设计图:状态图、活动图等"订单"类状态图展示从创建到完成的状态变迁

 

类分类

在这里插入图片描述

类型定义与作用示例
边界类负责系统与外部环境交互
实现系统与外部设备、系统或用户之间的数据传输和交互
显示屏、API接口、用户界面
控制类处理应用逻辑、业务逻辑和数据访问逻辑
协调和控制系统内部的操作流程
身份验证器、订单处理控制类
实体类表示系统中的数据实体
存储相关数据信息,是系统数据的载体
学员类、课程类

 

设计原则

在这里插入图片描述

原则定义与作用示例
单一职责原则设计目的单一的类
降低类的复杂度,提高可读性和可维护性
用户信息类只负责存储和管理用户基本信息
开放-封闭原则对扩展开放,对修改封闭
通过扩展满足需求变化,保证系统稳定性
通过扩展促销类实现新促销策略,不修改原有代码
李氏替换原则子类可以替换父类
确保继承体系中子类能无缝替换父类
正方形类作为矩形类的子类,应满足矩形类的所有行为
依赖倒置原则依赖抽象而非具体实现
降低模块间耦合度,提高系统灵活性
业务逻辑层依赖数据访问接口,而非具体实现类
接口隔离原则使用多个专门接口而非单一总接口
避免接口臃肿,提高系统可维护性
分别定义绘制圆形、矩形等图形的接口
组合重用原则优先使用组合而非继承
组合比继承更灵活,降低类间耦合度
通过组合"移动""攻击"等行为类构建角色
迪米特原则对象间耦合应尽量松散
降低系统耦合度,提高系统稳定性
员工类只需了解直接交互的对象,如上级领导

记住:系统设计的核心是平衡——在功能、性能、可维护性、可扩展性之间找到最佳平衡点。

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

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

相关文章

还在从零开发AI应用?这个项目直接给你500个现成方案!!!

大家好,我是顾北,一名AI应用探索者,也是GitHub开源项目收集者。昨晚又在GitHub上瞎逛...咦,碰到了一个特别有意思的项目。说实话吧,作为一个天天折腾AI工具的人,见过的项目没有一千也有八百了,但…

react+taro的使用整理

前言: 本文主要整理下我们跨段工具taro的具体使用方法与相关资料。 taro官网: 安装及使用 | Taro 文档 安装: 全局脚手架安装: npm install -g tarojs/cli 使用脚手架安装我们的taro项目 taro init myApp 运行到不同小程序教…

从 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目录 开头专业总结 一、先搞懂:K8s 到底是什么?能解决什么痛点? 1. K8s 的本质 2. 核心用处(解决的痛点) 二、K8s 核心知识点:组件与概念(标重点!) (一…

03.《交换的底层逻辑:从基础到应用》

交换基础 文章目录交换基础MAC 地址:设备的 “全球唯一身份证”MAC 地址的基本属性MAC 地址的三类类型(按通信范围划分)以太帧以太帧的两个标准格式1. Ethernet_II 格式(常用)2. IEEE 802.3 格式(少用&…

火语言 RPA 界面应用生成:轻量化开发核心优势

火语言 RPA 界面应用生成功能,主打 “低门槛、快落地”,无需复杂开发环境与专业技术,就能快速实现需求验证与工具搭建,尤其适配中小团队与个人,核心优势如下:​一、1 小时搞定需求验证:3 步落地…

第三方软件测试机构【多语言开发(PHP/Java/Python)WEB 应用的安全专业测试流程】

PHP应用测试安全 文件包含漏洞:检测include/require函数参数未过滤场景(如?page../../../etc/passwd) 命令注入:检查system()/exec()函数输入验证(如| cat /etc/passwd) 会话安全:验证session …

C++条件变量学习

1、概述你知道条件变量"虚假唤醒"问题么&#xff0c;下面代码有问题么void CFileTaskThread::Run() {while (!m_bStop){CFileItemRequest* pFileItem;{std::unique_lock<std::mutex> guard(m_mtItems);if (m_Filelist.empty()){if (m_bStop)return;// 等待条件…

React Native系统组件(一)

1&#xff0c;View&#xff0c;UI的构建基石 四个方向&#xff0c;水平&#xff0c;水平倒序&#xff0c;垂直&#xff0c;垂直倒序 flexGrow与flex的区别&#xff0c;flexgrow是分父布局剩余的空间&#xff0c;flex是分父布局全部的空间上面的是flexgrow 123 下面的是flex 123…

Git 代码提交管理指南

目录 1. 初始设置&#xff08;首次使用 Git 时&#xff09; 2. 日常提交工作流程 场景一&#xff1a;已有本地项目&#xff0c;首次连接到远程仓库 场景二&#xff1a;已有远程仓库&#xff0c;克隆到本地 3. 更精细的文件管理 4. 提交信息规范 5. 分支管理策略 6. 高级…

go-mapus最简单的离线瓦片地图协作

基于leaflet.jsleaflet-geoman.jsgolangbeegogormsqlitewebsocket等实现一个最简单的地图协作。绘制图元&#xff0c;其他用户浏览器上实施显示绘制和修改结果&#xff0c;大家可同步进行绘制和修改。设置线型和颜色&#xff0c;粗细和透明度。保存到sqlite数据库。动画演示地图…

调式记录之八位机软件串口

现在在上班&#xff0c;做的项目几乎都是关于八位机的&#xff0c;八位机有个挺CD的点硬件资源少&#xff0c;打印之类的需要软件串口&#xff0c;有时候调的刚到很玄学&#xff0c;也有可能是我知识没有学得恨透。首先我得需要发送这句话并在代码里面设置我的延时时间&#xf…

嵌入式学习day40-硬件(1)

嵌入式&#xff1a;以应用为中心&#xff1a;消费电子(手机、蓝牙耳机、智能音响&#xff09;、医疗电子(心率脉搏、呼吸机&#xff09;、无人机&#xff08;大疆DJ&#xff09;、机器人&#xff08;人形四足机器人)计算机技术&#xff1a;计算机五大组成&#xff1a;运算器(数…

管理中心理学问:面试中教你识别他人需求动机

“我工作是为了钱&#xff0c;为了吃,住&#xff0c;和用钱买东西。”“我工作是为了地位和认可。”“我工作是为了有所归属&#xff0c;为了成为一个团体的成员。”“我工作是想高升。”“我工作是因为人应该工作&#xff0c;这是唯一的权利。”“我工作为了获取知识和认识世界…

【JavaScript】读取商品页面中的结构化数据(JSON-LD),在不改动服务端情况下,实现一对一跳转

前端实践&#xff1a;从商品页面读取 mpn 并实现一对一跳转 在实际开发中&#xff0c;我们经常会遇到这样一种需求&#xff1a; 用户浏览 A 网站的商品页面后&#xff0c;点击按钮能够直接跳转到 B 网站的对应商品。 表面看似只是一个按钮跳转&#xff0c;但如果不同商品需要精…

HTML5实现好看的邀请函网页源码

HTML5实现好看的邀请函网页源码 前言一、设计来源1.1 邀请函主页1.2 邀请函活动信息1.3 邀请函内容1.4 邀请函活动地址1.5 邀请函活动流程1.6 邀请函活动奖励1.7 邀请函联系我们 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现好看的邀请函网页源码&#xff0c;酷炫的…

传输层TCP 与 安全层SSL/TLS

本章节主要探讨三个问题&#xff1a;1. SSL/TSL 的区别和联系是什么&#xff1f;2. 我们常说的 “三次握手” 发生在哪个阶段&#xff0c;SSL/TSL层有参与吗?3. HTTPS混合加密发生在哪个层?一、SSL 和 TLS 联系继承关系&#xff1a;TLS 直接基于 SSL 3.0 设计&#xff0c;可以…

【数学建模学习笔记】时间序列分析:ARIMA

零基础看懂 ARIMA 模型&#xff1a;从原理到实战如果你完全没接触过 “时间序列预测”&#xff0c;也不懂复杂公式&#xff0c;这篇会用 “说人话” 的方式帮你搞懂 ARIMA 模型&#xff0c;以及文中代码到底在做什么。一、先搞懂&#xff1a;ARIMA 是用来干嘛的&#xff1f;简单…

【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法

【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法文件名包含特殊字符&#xff08;如空格、中文符号等&#xff09;导致终端无法正确识别文件路径。 可以尝试以下解决方法&#xff1a;使用文件路径自动补全输入 rm &#xff08;注意 rm 后有空格&#xff09;&#xf…

​​​​​​​Blender 重拓扑修改器实战指南:从基础操作到细节优化​

在 Blender 建模中&#xff0c;重拓扑是解决 “高模难编辑、低模细节差” 的关键。传统手动重拓扑效率低&#xff0c;重拓扑修改器能自动生成规整拓扑&#xff0c;保留模型外形&#xff0c;适合游戏资产、动画角色等场景。 一、核心作用与适用场景​ 重拓扑修改器并非 “一键完…

C/C++哆啦A梦

写在前面 用代码绘制童年记忆中的那个蓝胖子——哆啦A梦&#xff0c;是我对经典角色的一次深情致敬。这段程序不仅是一幅静态图像的生成&#xff0c;更是一次对童年幻想世界的数字重建。通过精确的几何控制与色彩搭配&#xff0c;我将那个圆润可爱、温暖可靠的机器人重新带回眼…