首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >软件设计师笔记

软件设计师笔记

原创
作者头像
黄啊码
发布2022-06-20 09:41:49
发布2022-06-20 09:41:49
1.6K0
举报

名词

  • 数据的表示-原/反/补
    • 原码:最高位是符号位,其余低位表示数值的绝对值。(-0、+0) −(2n−1−1)~+(2n−1−1)-(2^{n-1}-1) ~ +(2^{n-1}-1)−(2n−1−1)~+(2n−1−1)
    • 反码:正数的反码与原码相同,负数的反码是其绝对值按位取反(符号位不变)(-0、+0) −(2n−1−1)~+(2n−1−1)-(2^{n-1}-1) ~ +(2^{n-1}-1)−(2n−1−1)~+(2n−1−1)
    • 补码:正数的补码与原码相同,负数的补码使其反码末位加1(符号位不变)(+0、人为定义最小值) −2n−1~+(2n−1−1)-2^{n-1} ~ +(2^{n-1}-1)−2n−1~+(2n−1−1)
  • 浮点数:N=尾数*2^{指数}
    • 尾数:有效精度
    • 阶码:数的有效范围
    • 浮点数的运算过程:对阶(小数向大数看齐,较小数的尾数算术右移) > 尾数计算 > 结果格式化
  • 校验码 校验码校验码位置检错纠错校验方式奇偶校验1一般拼接在头部可检奇数位错不可纠错奇校验、偶校验CRC循环冗余校验生成多项式是高次幂决定拼接在尾部可检错不可纠错模二除法求余数,拼接作为校验位海明校验2^r>=m+r+1插入在信息位中间可检错可纠错分组奇偶校验
  • 程序计数器:用于存放下一条指令所在单元地址
  • 控制器的组成部分:程序计数器PC(提供指令地址)、指令寄存器IR、指令译码器ID、时许产生器、操作控制器
  • RISC:精简指令集计算机。采用流水线技术。采用很多通用寄存器
  • CISC:复杂指令集计算机。采用很少的通用寄存器
  • 闪存:U盘
  • 对称加密:DES、AES、IDEA、RC4
  • 非对称加密(公开密钥和私有密钥):RSA、DSA、ECC
  • 消息摘要算法:MD5、SHA
  • IPSec:对IP数据进行加密
  • PPTP:用于封装点对点协议(PPP)的数据包以发生数据
  • HTTPS:实现传输安全保护
  • TLS:用于在两个通信的应用程序之间提供保密性和数据完整性
  • ARP:广播发,单点回(仅回复发给源主机)
  • URL格式:协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名
  • 磁盘数据读取(单缓冲区):
    • 顺序处理时间=(转+读)*(n-1)+(读+处理)
    • 优化后时间=(读+处理)*n
  • 预测风险只能提前做好应对风险的预案,但不一定能避免起发生。如天气预报。
  • 风险曝光度 = 错误出现率(风险出现率)× 错误造成损失(风险损失)
  • 稀疏矩阵的压缩方法:三元组顺序表、行逻辑连接的顺序表、十字链表
  • 哈希值:对于两个不同的关键字,如果其哈希值相同(产生了哈希冲突),则这两个关键字为同义词。对于任意一个关键字,在根据哈希计算的结果插入哈希表时,都可能面临该位置已被占用的情况,那么此时这个关键字只能从该位置开始向后探查,知道遇到空位置时把其插入。因此,在查找关键字时,与哈希值匹配的第一个位置上,可能并未是该关键字或者同义词,甚至第2个、第3个也不是
  • 加密:用于确保数据的保密性阻止对手被动攻击,如截取、窃听等
  • 认证:用于确保报文发送者和接受者的真实性以及报文的完整性阻止对手的主动攻击,如冒充、篡改等
  • 完整性:所有资源只能有授权方或以授权的方式进行修改。
  • 保密性:防止信息泄漏给非授权个人或实体信息只为授权用户使用的特性
  • 可用性:信息可被授权实体访问并按需求使用的特性
  • 不可抵赖性:一个操作或事件已经发生且无法抵赖的机制
  • 计算机系统安全机制:主要目的是访问控制,包括:授权、确定访问权限(读/写/删除/追加等)、实施访问权限
  • 内部网关协议:RIP、OSPF
  • 外部网关协议:BGP
  • 用于远程登录的指令
    • SSH:远程登录安全协议
    • Telnet:远程控制
    • RFB:远程访问桌面
  • 对象图:展示了某一个时刻一组对象以及它们之间的关系
  • 类图:展现了一组对象、接口、协作和他们的关系
  • 用例图:展现了一组用例、参与者以及它们之间的关系
  • 序列图:是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动

数据结构

  • 顺序存储:通过元素在存储空间中的相对位置来表示数据元素之间的逻辑关系,元素的逻辑相对位置与物理相对位置上一致的
  • 链表存储:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的
  • 索引存储:分别存放数据元素和元素间关系的存储方式
  • 哈希存储:以关键字 Key 为自变量,通过一定的函数关系,计算出对于的函数值,以这个值作为数据元素的地址,并将数据元素存入到相应的存储单元中

著作权

作者的署名权、修改权、保护作品的完整权的保护期不受限制。 《中华人民共和国著作权法》和《计算机软件保护条例》是构成我国保护计算机软件著作权的两个基本法。

  • 发表权:也称公开作品权。值作者对其尚未发表的作品享有决定是否公之于众的权利,发表权只能行使一次,且只能为作者享有
  • 发行权:著作权人许可他人想公众传播作品的权利,发行权可以行使多次,并且不仅仅为作者享有
  • 传播权:包含表演权、播放权、发行权、出租权
  • 署名权:是作者表明其身份,在作品上署名的权利,它是作者最基本的人身权利
  • 软件著作权:自软件开发完成之日起自动产生。开发者在单位或组织中任职期间所开发的软件的著作权,如无特别约定,应归于单位或组织所有。无书面合同或者合同未约定的,著作权由受委托人享有。
  • 专利权:先申请原则

软件开发

  • 需求分析:确定软件要完成的功能及非功能性要求
  • 概要设计:将需求转化为软件的模块划分,确定模块之间的调用关系
  • 详细设计:将模块进行细化,得到详细的数据结构及算法
  • 编码:根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试
  • 词法分析:是在输入源程序时对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,并报告分析出来的错误
  • 语法分析:在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类别语法单位。通过语法分析确定整个输入串是否构成一个语法上正确的程序
  • 语义分析:检查源程序是否存在语义错误,并收集类型信息工后面的代码生成阶段使用
  • 编译型语言处理过程:预处理-编译-汇编-链接
    • 预处理:展开引入文件、替换、移出注释、条件编译
    • 编译产物:目标程序。将代码专程汇编代码
    • 汇编:汇编代码转换成机器码
    • 链接:将多个.o文件链接到一起生成一个可执行.exe文件
    • 解释产物:中间代码
  • 线程共享:进程代码段、进程的公有数据、进程打开的文件、信号的处理器、进程当前目录、进程用户ID与进程组ID

软件开发模型

  • 瀑布模型:软件生存周期的各项活动规定为固定顺序而连接的若干阶段工作。 特点是:各个活动按线性方式进行
    • 优点
      • 为项目提供各阶段的检查点
      • 当前一阶段完成后,您只需去关注后续阶段
      • 可在迭代模型中应用瀑布模型
    • 缺点
      • 各阶段比较固定,阶段之间会产生大量文档、增大工作量
      • 由于开发模型为线性的,客户只能等到过程末期才能见到效果,增大开发风险
      • 通过过多的强制完成日期和里程碑来跟踪各个项目阶段
      • 无法适应用户需求的变化
  • 原型模型:又称快速原型发,基本思想是-在限定的时间内,用最经济的方法开发出一个可运行的系统模型,用户在这基础上,提出改进意见,逐步完善。特点:实际可行;具有最终系统的基本特征;构造方便、快速、造价低
    • 优点
      • 增加用户与开发人员的交流
      • 用户在项目开发中占主导作用
      • 满足用户的动态需求
      • 降低开发风险
    • 缺点
      • 因为用户的参与,会忽视圆形对实际环境的适应性等技术问题,所以不适合大型、复杂性项目开发
      • 对于技术层面远大于分析层面的问题不宜使用原型法
  • 增量模型:把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
    • 优点
      • 第一个可交付版本所需的成本和时间很少
      • 开发由增量表示的小系统所承担的风险不大
      • 由于很快发布了第一个版本,因此可以减少用户需求的变更
      • 允许增量投资,即项目开始时,可以仅对一个或两个增量投资
    • 缺点
      • 没有对用户的变更需求进行规划,那么产生的增量可能会造成后来增量的不稳定
      • 如需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布
      • 管理产生的成本、进度和配置的复杂性可能会超过组织的能力
  • 喷泉模型:面向对象的开发模型。特点是:迭代无间隙,以用户需求为动力
  • 螺旋模型:是瀑布模型与原先模型的结合,将风险分析加入到了瀑布模型中,将开发划分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符。适合于大规模、复杂且具有高风险的项目

软件质量模型

软件质量模型固定的质量特征如下:

  • 功能性:适合性、准确性、互操作性、功能性的依从性、安全保密性
  • 可靠性:容错性、易恢复性、成熟性、可靠性的依从性
  • 易用性:易学性、易理解性、易用性的依从性
  • 效率:时间特性、资源利用特性、效率依从性
  • 维护性:易测试性、易改变性、稳定性、易分析性、维护性的依从性
  • 可移植性:适应性、易安装性、共存性、易替换性、可移植性的依从性

系统的可维护性是指维护人员理解、改正、改动和改进一个软件的难易程度。可理解、可测试性、可修改性。

CMMI

CMMI 的全称为 Capability Maturity Model Integration,即能力成熟度模型集成。

CMMI阶段式模式

  • 初始的:过程不可预测且缺乏控制
  • 已管理的:过程为项目服务。
  • 已定义的:过程为组织服务。
  • 定量管理的:过程已度量和控制。
  • 优化的:集中于过程改进

CMMI连续式模式

连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级(Capability Level,CL)。CMMI中包括6个过程域等级,等级号为0-5。

能力等级包括共性目标及相关的共性实践,这些实践在过程域内被添加到特定目标和实践中。当组织满足过程域的特定目标和共性目标时,就说该组织达到了那个过程域的能力等级。

能力等级可以独立的应用于任何单独的过程域,任何一个能力等级都必须满足比它等级低的能力等级的所有准则。对各能力等级的含义简述如下:

  • CL0(未完成的):过程域未执行或未得到 CL1 中定义的所有目标。
  • CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
  • CL2(已管理的):其共性目标是集中于已管理的过程的制度化。
  • CL3(已定义级的):其共性目标集中于已定义的过程的制度化。
  • CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。
  • CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效。

工作量/成本估算模型

模型层次结构中有3种不同规模估算选择,即:对象点、功能点和代码行。

  • 应用组装模型使用的是对象点
  • 早期设计阶段模型使用的是功能点,功能点可以转换为代码行
  • 体系结构模型把工作量表示为代码行数

Python

Python 时一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用模型。也是一种脚本语言,支持对操作系统的底层访问,也可以翻译成字节码在Python虚拟机上运行。

  • 语言特点:
    • 跨平台、开源
    • 支持面对象程序设计
    • 动态编程

关键字:

  • 列表(list):有序的数据集合,list
  • 元组(tuple):元素不可修改的list。const
  • 集合(set):元素不能重复的list,set
  • 字符串(str):字符串中的元素不可修改。 const

面向对象

  • 面向对象分析:认定(识别)对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息
  • 面向对象设计:识别类及对象、定义属性、定义服务、识别关系、识别包
  • 面向对象设计原则--SOLID 原则:
    • 单一职责:类的功能应该是尽量单一的
    • 开放封闭原则:类对于功能扩展应该是开放的,对对于修改应该是封闭的
    • 里氏替换原则:一个模块中如果使用了一个基类,那么这个基类应该可以被其子类替换,同时不会改变程序的正确性。要求子类可以在基类的基础上扩展新的功能,但不能改变基类原有的功能
    • 接口分离原则:接口要尽量独立,不要把很多接口抱在一个模块中,否者,当用户只需要某个接口十,就需要把很多不相关的接口导入进来,也就是 “强迫”了用户依赖于人家不需要的接口
    • 依赖倒置原则:一是高级模块不应该依赖于低级模块,但都应该依赖于抽象;二是抽象不应该还依赖于具体,但具体应该依赖于抽象
  • 面向对象设计原则:
    • 共同封闭原则:包中的所有类对于同一种性质的变化应该是共同封闭的。一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响。而对其他的包不产生影响。
    • 共同重用原则:一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么也就相当于重用了包中的所有类。
    • 开放-封闭原则:对扩展开发,对修改封闭
    • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好

类可以分为三类:实体类、边界类和控制类

  • 实体类:描述系统中的每个实体,如学生、用户、商品等,他们通常需要永久存储,一般使用数据库表或者文件来记录,实体类既包含存储和传递数据类,还包含操作数据的类
  • 控制类:用于实现应用程序的执行逻辑,将控制类抽象出来可以降低界面和数据库之间的耦合,身份验证属于控制类
  • 边界类:用于描述外部参与者与系统之间的交互,位于系统与外界的交接处,包括所有窗体、报表、打印机和扫描仪等硬件的接口,以及与其它系统的接口

设计模式

  • 命令模式:将一个请求封装成一个对象,从而把不同的请求进行了参数化,对客户来讲就可以通过不同的参数(下达不同的命令)来达成不同的目标。可以用来实现多个请求的排队、记录请求日志、命令撤销等功能。属于行为型对象模式
  • 观察者模式:定义对象间的一种一对多依赖关系,使用的每当一个对象改变状态,这所有依赖于它的对象都会得到通知并被自动更新
  • 状态模式:对于对象内部的状态,允许其在不同的状态下,拥有不同的行为,对状态单独封装成类
  • 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象需要显式地相互引用,从而使其耦合更加松散,而且可以独立地改变他们之间的交互。属于行为型对象模式。使用下列情况:
    • 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解
    • 一个对象应用其他很多对象并且直接与这些对象通信,导致难以腹痛该对象
    • 想定制一个分布在多个类中的行为,而不想生成太多的子类
  • 行为型对象模式:可以将行为封装在一个对象中并将请求指派给它。
  • 策略模式:定义了一系列算法,并将每个算法封装起来,而且使用它们可以可以相互替换。策略模式让算法独立于使用它们的客户而变化。适用于需要在不同情况下使用不同的策略(算法),或者策略还可以能在未来用其他方式来实现。
  • 桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。属于结构型对象模式
  • 工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决主要解决接口选择的问题
  • 数据耦合:两个模块之间通过简单的数据传递而形成的耦合
  • 内容耦合:值一个模块通过直接使用另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,从而和另一个模块之间形成耦合。危险
  • 尾部耦合:模块间未直接关联,而是通过模块的外部数据环境中的简单全局变量产生的关联
  • 公共耦合:模块通过公共数据环境中的复杂全局变量(全局数据结构)、共享的通信区、内存的公共区等产生的耦合

MTTF:平均无故障时间 MTTR:平均修复时间 MTBF:平均故障间隔时间 MTBF=MTTF+MTTR

  • 可靠性 = MTTF/(1+MTTF)MTTF/(1+MTTF)MTTF/(1+MTTF) 反映务实效运行的概率
  • 可用性 = MTBF/(1+MTBF)MTBF/(1+MTBF)MTBF/(1+MTBF) 反映正确运作的概率
  • 可维护性 = 1/(1+MTTR)1/(1+MTTR)1/(1+MTTR) 反映完成维护的概率
  • 软件工程的内聚性

类型

描述

功能内聚

完成一个单一功能,各个部分协同工作,缺一不可

顺序内聚

处理元素相关,而且必须顺序执行

通信内聚

所有处理元素集中在一个数据结构的区域上

过程内聚

处理元素相关,而且必须按特定的次序执行

瞬时内聚(时间内聚)

所包含的任务必须在同一时间间隔内执行

逻辑内聚

完成逻辑上相关的一组任务

偶然内聚(巧合内聚)

完成一组没有关系或松散关系的任务

二叉树

  • 二叉排序树:如果树不为空,那么对于根节点来说它的左子树上的所有节点均比它小,右子树上的节点均比它大,这样可能产生单枝树(每层只有一个节点)的情况。不能保证书的高度最小
  • 完全二叉树:每层都将节点尽量排满,如果有空结点则只在最后一层树上。因此树的高度相对于其它二叉树一定是最小。高度: log2n+1log_2{n} +1log2​n+1
  • 线索二叉树:通过增设指针去保存结点的前驱后继关系。无法保证树的高度最小
  • 最优二叉树(哈夫曼树):带权路径长度最短的一种二叉树。跟树的高度没有必然联系。
    • 权值越大的叶子离根越近
    • 每次构造都会选择两个权值,一定是满树
    • 结点总数一定为奇数
    • 权值相同的结点到根路径长度不一定相同

哈夫曼树构造过程(大的路径为1,小的为0):

  • 将给定的序列的频率(权重)从小到大进行排列
  • 选取最小的两个数作为左右节点构造一颗二叉树,结点为两者和
  • 将得到结点放入原序列中,删除用到的最小的两个
  • 重复上述步骤,得出完整的哈夫曼树

压缩比

  1. 根据字符个数计算每位需要的二进制数 n。 2n−12^{n-1}2n−1 < 位数 <2n2^n2n
  2. 计算哈夫曼树字符编码实际长度。 m
  3. 压缩比 = (m−n)/m(m-n)/m(m−n)/m

排序

  • 直接插入排序:第一趟排序将第一个和第二个关键字进行比较,若为逆序,则交换位置。第二趟排序时,将第三个关键字与前面已经排好序的两个关键字比较,这个过程可能会交换关键字的位置,以此类推,知道所有关键字都排好序。不能在第一趟排序就确认某个关键字的最终位置。最小范围先有序 。时间复杂度:O(n2)O(n^2)O(n2)
  • 冒泡排序:第一趟排序先将第一个关键字和第二个关键字进行比较,若为逆序,则交换两者的位置,然后比较第二个关键字和第三个关键字,以此类推,知道将第n个和第n-1个关键字比较过为止。其结果是最大的那个关键字被交换到第n个关键字上。第一趟,最大范围找最大。时间复杂度:O(n2)O(n^2)O(n2)
  • 堆排序:第一趟会建立一个初始大顶堆(结点大于左右结节点)或小顶堆,从而可以输出堆顶的最大(最小)关键字,然后选择最后一个非叶子节点,与其两个子节点分别进行比较,如果比子节点小,则与子节点交换位置;重复上述过程知道所有父节点比其左右子节点都大为止。因此,堆排序的第一趟可以将最大(最小)关键字在最终有序序列中的位置确定下来。时间复杂度:O(nlogn)O(nlog^n)O(nlogn)
  • 归并排序:一种先分后治的递归思想,即把无序数组分为两部分,如果两部分都无序则把每一部分再继续分割,直到有序或不能再分,然后再把有序的两部分并为有序的一部分,直至全部有序。无法在第一趟就确定某个元素的最终位置。时间复杂度:O(nlogn)O(nlog^n)O(nlogn)
  • 快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。。时间复杂度:平均 O(nlogn)O(nlog^n)O(nlogn),最差: O(n2)O(n^2)O(n2)

算法

  • 分治算法:分而治之,先解决子问题,再将子问题的解合并求出原问题。求出的子问题是相互独立的。 稳定,时间复杂度:O(nlogn)O(nlog^n)O(nlogn)
  • 贪心算法:一条路走到黑,选择当下局部最优的路线,没有后悔药。不最求最优解,只求可行解,不具备最有子结构的特性。 时间复杂度:O(nlogn)O(nlog^n)O(nlogn)
  • 动态规划:上帝视角,手握无数平行宇宙的历史存档,同时发展出无数个未来。具有最优子结构和重叠子问题性质。 时间复杂度:O(n)O(n)O(n)
  • 回溯算法:一条路走到黑,手握后悔药,可以无数次重来。把问题的解空间转化成图或者树结构,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻求所有可行解或最优解。 时间复杂度:O(3n∗4m)O(3^n*4^m)O(3n∗4m)
  • 分支限界法:广度优先策略遍历问题的解空间树,在遍历过程中对已经处理的每一个节点根据衔接函数估算目标函数的可能取值,从中选取使目标函数取得极值(极大或极小)的节点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。

常见关键字:

  • 分治:递归、二分法(要求数据顺序存储,且有序)、快速排序、先解决子问题。O(nlogn)O(nlog^n)O(nlogn)
  • 贪心:局部最优解。O(nlogn)O(nlog^n)O(nlogn)
  • 动态规划:记录中间解、子问题最优解。O(n)O(n)O(n)
  • 回溯:回退、迷宫问题、N皇后问题、深度遍历。O(3n∗4m)O(3^n*4^m)O(3n∗4m)
  • 分支界限:广度遍历

下午答题

数据流

概念

数据流图是结构化开发方法的一种工具,它描述了系统的输入数据流如何通过一系列的加工,逐步变成系统的输出数据流。

数据流图的基本成分是:外部实体、加工、数据存储、数据流。

  • 数据流由一组固定成分的数据组成,表示数据的流向,每一个数据流都有一个定义明确的名字
  • 加工描述了输入数据流到输出数据流之间的变换,即输入数据流经过什么处理后变成输出数据流,每个加工都有一个名字和编号
  • 数据存储用来存储数据,每个数据存储都有一个定义明确的名字标识
  • 外部实体指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生的数据的归宿地,每个外部实体都有一个定义明确的名字标识。

数据流图表现的是数据流图而不是控制流

顶层数据流图:只包含了一个表示整个系统的 “加工”,输入数据流和输出数据流为系统的输入数据和输出数据,表明系统的范围及系统与外部环境的数据交换关系

补齐缺失的数据流及其起点、终点

对比父子图是否平衡,关系是否缺失,通过题干描述补齐

#

起点

终点

缺失数据流

1

D3

P1

基础信息

数据流图过程进一步分解时常见错误

需要注意黑洞、奇迹、灰洞这三种常见错误。

  • 黑洞:只有数据输入没有数据输出的数据加工
  • 奇迹:只有数据输出没有数据输入的数据加工
  • 灰洞:加工不出数据流的数据加工,参数不够
父子图(图1、图2)如何保持数据流图平衡

即保持父图与子图的平衡:父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量上和名字上相同。

父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流

使用结构化语言对xx进行描述

注重格式,while do

代码语言:javascript
复制
WHILE(接受图像)
  DO{
    检测所收到的所有图像;
    IF(出现一张图像检测不合格)
    THEN{
      返回产品不合格;
      不合格产品检测结果=产品型号+不合格类型;
    }
    ELSE xxxxx
    ENDIF
  }ENDDO
复制代码

数据库

操作符
  • σ(大写Σ,小写σ,读“西格玛”):关系代数中的选择操作符。如 σ3='销售部1'(E),选择表E中第3列的值为 ‘销售部1’ 的行或者基类
  • π(π 或 ∏ ):投影,类似于左连接或右连接,字段会去重
  • ⋈ (θ,读作"join"):(自然)连接。属性列是二者之和减去重复属性列
  • ∪/∨:并/或
  • ∩/∧:交/与
  • ×:笛卡尔积。无条件连接,直接拼接,属性之和
  • ¬:非
模式

数据库采用三级模式的结构:概念模式、外模式、内模式

  • 概念模式:是数据库中全部数据的整体逻辑结构的描述,如基础表
  • 外模式:也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述
  • 内模式:也称存储模式,是数据库在物理存储方面的描述,定义所有记录类型、索引和文件的组织方式,以及数据控制方面的细节
数据库数据冗余

xx关系模式会产生大量冗余记录,造成数据库数据的插入、修改、删除、更新等异常问题。

解决方式是建立xx中间表或者拆分xx关系模式

冲突
  • 属性冲突:同一属性可能会不同的E-R图,由于设计人员不同或出发点不同,对属性的类型、取值范围和数据单位等可能会不一致
  • 命名冲突:相同意义的属性在不同的E-R图中有着不同的命名,或是名词相同的属性在不同的E-R图中代表着不同的意义
  • 结构冲突:同一实体在不同的E-R图中有不同的属性,同一对象在某一E-R图中被抽象为实体,而在另一E-R图中又被抽象为属性,需要统一

UML

UML图区分

一般为类图。对象图的对象名会有“标识” ,并且对象图的关联关系一般不会出现多重度。

缺失名称
  • 系统的参与者一般为 人员、机构或第三方系统
  • 用例名一般为 动词+名词 或者 名词+动词,是对系统功能的概括和描述
  • 常见的实体类名一般为名词形式,也会有特殊的边界类/接口类和协调类。
类关系
依赖

使用虚线加箭头表示

类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B

如:学生在学习生活中经常使用电脑,于是对电脑产生了依赖。

关联

关联关系使用实线加箭头表示

如:学生与老师是关联的,学生可以不用电脑,但是学生不能没有老师。

关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系

区别:

  1. 发生依赖关系的两个类都不会增加属性
  2. 从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束

关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。

聚合

聚合关系使用实线加空心菱形表示。

表示集体与个体之间的关联关系。例如:班级与学生之间存在聚合关系

组合

复合关系使用实线加实心菱形表示。组合又叫复合。

用来表示个体与组成部分之间的关联关系。例如:学生与心脏之间存在复合关系

聚合的成员可独立,组合的成员必须依赖于整体才有意义。

泛化

泛化指的是类与类之间的继承关系和类与接口之间的实现关系。

  • 继承关系使用直线加空心三角形表示
  • 类接口的实现关系使用虚线加空心三角形表示

依赖、关联、聚合、组合与泛化代表类与类之间的耦合度依次递增。

依赖关系比较好区分,它是耦合度最弱的一种,在编码中表现为类成员函数的局部变量、形参、返回值或对静态方法的调用。

关联、聚合与组合在编码形式上都以类成员变量的形式来表示,所以只给出一段代码我们很难判断出是关联、聚合还是组合关系,我们需要从上下文语境中来判别。

关联表示类之间存在联系,不存在集体与个体、个体与组成部分之间的关系。聚合表示类之间存在集体与个体的关系。

组合表示个体与组成部分之间的关系。

在 UML用例图中用例之间的关系:

  • include(包含) : 包含关系。当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来 作为一个独立的子用例,供多个基用例共享。因为子用例被抽出,基用例并非一个完整的用例,所以 include 关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include 关系在用例图 中使用带箭头的虚线表示(在线上标注<>),箭头从基用例指向子用例。
  • extend(扩展) : 扩展关系,表示对基用例的扩展。基用例是一个完整的用例,即使没有子用例的参与,也 可以完成一个完整的功能。extend 的基用例中存在一个扩展点,只有当扩展点被激活时,子用例才会被 执行。extend 关系在用例图中也使用带箭头的虚线表示(在线上标注<>),但箭头是从子用例 指向基用例。
  • generalize(泛化) : 泛化关系,是一种继承关系。子用例将继承基用例的所有行为关系和通信关系,也就 是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用实线空心節头表示,篮 头方向从子用例指向基用例。
状态图

状态图展现了一个状态机,它由状态、转换、时间和活动组成,通常包括简单状态和组合状态、转换(时间和动作)。

由于状态可以是单一的,也可以是嵌套的(嵌套在另一个状态中的状态称为子状态,含有子状态的状态称为组合状态),所以活动可以在状态内执行,也可以在状态迁移时执行。

转换(迁移)是两个状态之间的关系,表示对象将在原状态执行一定的事件或动作,并在某个特定事件发生而且某个特定的监护条件满足时离开当前状态而进入目标状态,时间出发没有特定监护条件的迁移,对象也会离开当前状态。

转换(迁移)是从源状态和目的状态之间的一种关系,可以包含出发事件、监护条件、状态(源状态和目的状态)、动作。

当某个事件发生后,对象的状态将发生变化,事件可以触发迁移。

面向程序设计

  • import:引入包中的类
  • 类修饰符:public、abstract(抽象) 、final、private、project
    • abstract使用场景:
      • 若类里面存在 abstract 函数,则该 class 需使用 abstract 修饰
      • 若 class 使用 abstract 修饰,则内部成员中必然有一个 abstract 函数
  • extends:继承类
  • interface:接口定义
  • implements:实现接口

作者:vueTmp 链接:https://juejin.cn/post/7100874839157637151 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 名词
    • 数据结构
    • 著作权
    • 软件开发
      • 软件开发模型
      • 软件质量模型
    • CMMI
      • CMMI阶段式模式
      • CMMI连续式模式
      • 工作量/成本估算模型
    • Python
    • 面向对象
    • 设计模式
    • 二叉树
    • 排序
    • 算法
    • 下午答题
      • 数据流
      • 数据库
      • UML
      • 面向程序设计
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档