【软件建模与设计】-04-软件设计和体系结构概念

目录

1、类与对象

2、信息隐藏

2.1、示例

3、继承和泛化/特化

4、并发处理

4.1、并发对象间的协作

5、设计模式

6、软件体系结构和构件

7、软件质量属性


1、类与对象

一个对象是现实世界中物理的或概念的实体。

一个对象盖了数据(data)以及作用于数据之上的过程(procedure),这些过程通常被称为操作(operation)或者方法method)。

一个操作的签名(signature)代表该操作的名字、参数以及返回值。

一个对象的接口(interface)是它提供的操作的集合,
 

一个对象的类型通过它的接口来定义,对象的实现则由它的类来定义。

属性(attribute)是由类中的对象所持有的一个数据值,每一个对象的属性都有一个特定的取值。

操作是由一个对象所执行的一项功能的规约。一个对象可拥有一个或多个操作。操作对对象所包含的属性值进行操控。操作可具有输入和输出参数。

一个对象是一个类的实例。在执行阶段,单个对象按照需求被实例化。

每一个对象都有一个独一无二的标识,该标识是将该对象与其他对象进行区分的特征。

2、信息隐藏

体现了面向对象中的封装、抽象的理念。

仅能通过对操作进行调用而被外界间接地访问(访问过程或函数)

操作的规约(即操作的名字和参数)被称为对象接口。

对象接口也被称为抽象接口、虚拟接口或外部接口。

接口表示了对象的可见部分,即对象中与用户相关的部分。其他对象则通过接口调用这个对象所提供的操作。

数据抽象:仅能通过调用对象的操作来间接地访问被封装起来的数据结构。

2.1、示例

通过将数据存储在栈/数组中,对外暴露调用接口,实现数据隐藏。

栈类的设计

以下是栈的操作流程(下图不符合标准UML构图)

以下是链表表示形式

一个对象(或类)的设计分为两步:

首先设计作为外部视图的接口,随后设计内部细节。

第一步是高层设计的一部分,而第二步则是详细设计的一部分。

3、继承和泛化/特化

继承是在不同类中分享和复用代码的机制。一个子类(childclass)继承其父类(parentclass)的特性(被封装的数据和操作)。随后它能够修改其父类的结构(被封装的数据)和行为(操作)。

父类被称为超类(superclass)或者基类(baseclass)。子类被称为子类(subclass)或者是派生类(derived class)。

将父类进行修改从而形成子类的过程被称为特化。子类可以被进一步特化,这样就创建出了类的层次结构,这也叫做泛化/特化层次结构

4、并发处理

一个对象可能是主动的(主动类,可独立运行),也可能是被动的(等待其他线程调用)。

并发对象也叫做主动对象、并发过程、并发任务或者线程。一个并发对象(主动对象)拥有自己的控制线程并能独立于其他的对象而执行。

被动对象拥有被并发对象所调用的操作。被动对象也能调用其他被动对象中的操作。被动对象没有控制线程,因此它们是被动类的实例。被动对象中的一个操作一旦被并发对象调用,就会在并发对象的控制线程中执行。

4.1、并发对象间的协作

三种协作问题:

1)访问互斥资源:多读-多写

2)互相同步数据:同步问题

3)并发对象间相互通信:生产者/消费者问题,进程间通信IPC

5、设计模式

可复用模型分类:

1)设计模式:一个小组协作的对象

2)体系结构模式:比设计模式的粒度更大, 用于定义一个系统中的主要子系统结构

3)分析模式:分析不同领域,找到共性,并用静态模型(类图)进行描述

4)特定产品线模式:关注特定应用领域

5)习惯法:最低层次,特定编程语言的设计模式

6、软件体系结构和构件

软件体系结构使用构件及其连接的方式,将系统的整体结构与单个构件的内部实现细节进行分离。

供给接口、请求接口以及连接构件的连接器

1、构件和构件接口:显示的暴露接口

2、连接器:封装构件间的交互协议,使得构件可以异步、松耦合的方式进行通信。

7、软件质量属性

非功能性需求,评价最终软件产品的质量

性能(performance)。系统满足其性能目标的程度,例如吞吐量和响应时间。


安全性(security)。系统抵御安全威胁的程度。


可用性(availability)。系统能够解决系统失效问题的程度

可维护性(maintainability)。在软件部署之后它能够被更改的程度。


可修改性(modifability)。在最初开发期间和最初开发之后软件能够被修改的程度

可测试性(testability)。软件能够被测试的程度。


可追踪性(traceability)。每一个阶段的产品能够被追踪到上一个阶段产品的程度


可伸缩性(scalability)。在最初部署之后系统能够成长的程度。


可复用性(reusability)。软件能够被复用的程度。

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

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

相关文章

Sentinel规则持久化Push模式两种实现方式

文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…

liunx面试题目

如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 查看物理cup: cat /proc/cpuinfo|grep -c ‘physical id’ 查看每颗cup核数 cat /proc/cpuinfo|grep -c ‘processor’ 若希望自动实现软件包的更新,可以使用yum-cron并启动该服务 yum -y …

解决一下git clone失败的问题

1).不开梯子,我们用https克隆 git clone https://github.com 报错: Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法: 开梯子,然后# 注意修改成自己的IP和端口号 gi…

[HDCTF2019]MFC

[HDCTF2019]MFC-CSDN博客 不会写 完全画瓢 我还以为win32什么系统逆向 原来是小瘪三! VM保护 下载xspy(看雪上有) 打开32位的 再打开 这个窗口 把这个放大镜托到这个大窗口(里面有个小窗口,不要托错了) 下面这个 onmeg 就她不正常,是什么0464 #include <stdio.h&g…

简易ELK搭建

ELK搭建 1. elasticsearch1.1 下载1.2 ES配置1.3 启动ES1.4 开启权限认证1.5 IK分词器配置&#xff08;非必须&#xff09; 2. kibana2.1 下载2.2 配置2.3 启动kibana 3. logstash3.1 下载3.2 配置3.3 启动logstash 4. springboot推送数据 ELK包括elasticsearch、logstash、kib…

自然语言处理(NLP)——法国工程师IMT联盟 期末考试题

1. 问题1 &#xff08;法语&#xff09;En langue arabe lcrasante majorit des mots sont forms par des combinaisons de racines et de schmes. Dans ce mcanisme... &#xff08;英语&#xff09;In Arabic language the vast majority&#xff08;十之八九&#xff09; of…

《昇思25天学习打卡营第23天|onereal》

第23天学习内容简介&#xff1a; ----------------------------------------------------------------------------- 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 配置网络线路 2 代码开发 下载权重大约需要10分钟 ------------------------------- 运…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

基于Java的在线考试系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java MySQL B/S架构 SpringBoot框架 工具&#xff1a;Eclipse、MySQL环境配置工具 系统展示 首…

ArkUI状态管理

State装饰器 在声明式UI中&#xff0c;是以状态驱动试图更新 状态 (State) 指驱动视图更新的数据(被装饰器标记的变量) 试图(View) 基于UI描述渲染得到用户界面 说明 1.State装饰器标记的变量必须初始化&#xff0c;不能为空 2.State支持Object、classstring、number、b…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Pythonselenium自动化测试实战项目详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 …

SSE(Server Sent Event)实战(3)- Spring Web Flux 实现

上篇博客 SSE&#xff08;Server Sent Event&#xff09;实战&#xff08;2&#xff09;- Spring MVC 实现&#xff0c;我们用 Spring MVC 实现了简单的消息推送&#xff0c;并且留下了两个问题&#xff0c;这篇博客&#xff0c;我们用 Spring Web Flux 实现&#xff0c;并且看…

Unity动画系统(3)---融合树

6.1 动画系统基础2-6_哔哩哔哩_bilibili Animator类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class EthanController : MonoBehaviour { private Animator ani; private void Awake() { ani GetComponen…

【ECharts】使用 ECharts 处理不同时间节点的数据系列展示

使用 ECharts 处理不同时间节点的数据系列展示 在数据可视化中&#xff0c;我们经常遇到这样的问题&#xff1a;不同数据系列的数据点在时间轴上并不对齐。这种情况下&#xff0c;如果直接在 ECharts 中展示&#xff0c;图表可能会出现混乱或不准确。本文将通过一个示例代码&a…

解决VSCode自动识别文件编码

在VScode 的 设置界面 输入 autoGuess 关键字 &#xff0c;勾选启用即可自动识别&#xff01;&#xff01;&#xff01;

【Python与GUI开发】事件处理与打包分发

文章目录 前言 一、高级事件处理 1.自定义事件 2.拖放操作 3.复杂控件的事件处理 二、打包和分发 Tkinter 应用 1.PyInstaller 2.cx_Freeze 3.spec 文件 4.分发注意事项 三、实战示例&#xff1a;文件浏览器 总结 前言 在前面的讨论中&#xff0c;我们深入理解了 T…

Qt MV架构-委托类

一、基本概念 与MVC模式不同&#xff0c;MV视图架构中没有包含一个完全分离的组件来处理与用户的交互。 一般地&#xff0c;视图用来将模型中的数据显示给用户&#xff0c;也用来处理用户的输入。为了获得更高的灵活性&#xff0c;交互可以由委托来执行。 这些组件提供了输入…

每日一 练,java

目录 题目分析代码 题目 选自牛客网 1.小美的平衡矩阵 小美拿到了一个&#x1d45b;∗&#x1d45b;的矩阵&#xff0c;其中每个元素是 0 或者 1。 小美认为一个矩形区域是完美的&#xff0c;当且仅当该区域内 0 的数量恰好等于 1 的数量。现在&#xff0c;小美希望你回答有多…

电瓶车检测AI算法:视频智能分析技术助力电瓶车规范与安全管理

随着电瓶车&#xff08;电动自行车&#xff09;的普及&#xff0c;其在城市交通中扮演着越来越重要的角色。然而&#xff0c;电瓶车的管理、安全监控以及维护等方面也面临着诸多挑战。近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的发展为解决这些问题提供了新的…