一、《软件工程》之面向对象分析与设计(Object-Oriented Analysis, OOA)
1. 面向对象分析
面向对象分析关注应用领域中的实体,并将其建模为对象,主要基于分类、泛化、聚合关系在对象集合之间建立结构,对象的行为是执行预定的动作(服务/活动),对象通过执行动作来完成状态变迁>
- 面向对象分析的起源
- 面向对象设计: 将OOP中的概念上推到分析和设计阶段 ;
- 数据库设计:将数据语义建模概念,如实体-关系、泛化、聚合、和分类⽤用于系统分析和设计;
- 结构化设计:将结构化分析方法与技术,如SADT⽅方法等用于系统分析与建模 ;
- 知识表示:采用基于问题框架和语义网络的知识表示方法。
- 软件系统建模原则:
• 支持修改和重用:有经验的工程师重用已有的设计(模型组件重用、模型结构重用);有智慧的工程师规划未来
(建立可重用的模型组件、建立易于修改的模型结构);
• 五大有力武器: • 抽象:关注重点,暂忘细节; • 分解:将问题切分,分而治之 ;• 多视角映射:切换关注点,分别讨论; • 模块化:建立稳定结构、缩小变化影响范围 ; • 模式:多次成功应用的模型结构:继承/一般-特殊结构、整体-部分结构(Whole-Part Structures)。 - 建模步骤:
• 识别对象和类(类是对象的抽象定义)
• 识别类之间的关系,建立由继承和组合关系组成的类层次结构
• 定义主题,通过主题将对象模型组织成多个抽象层次或视角,一般说来通过继承关系或整体部分关系联系起来的类同属于一个主题
• 识别各个对象内部的属性信息,并将其赋予相应抽象层次的类
• 为每个类定义服务 - 识别类的方法:
• 根据用例描述中的名词确定类的候选者
• 使用CRC分析法寻找类:CRC是类(Class)、责任(Responsibility)和协作(Collaboration)的简称,CRC分析法根据类所要扮演的职责来确定类
• 根据边界类、控制类和实体类的划分来帮助发现系统中的类
• 对领域进行分析,或利用已有的领域分析结果得到类
• 参考分析、设计模式来确定类 - 常用面向对象的等价术语:
2. CRC卡片分拣法的分析过程:识别对象类、定义每个类的职责、确定类之间的交互关系
- 设计抽象的接口:向用户暴露尽可能少的实现细节;让⽤用户知道的关于类的内部实现细节越少越好:• 只给看必须的 • 只看公开的 • 只为⽤用户的业务需求考虑 。(最小用户负担原则)
- 开闭原则(Open/Closed Principle, OCP):软件实体在扩展性方面应该是开放的,而在更改性方面是封闭的。(要尽可能多地使用接口进行封装,利用多态技术,扩展时不需修改源代码)
- Liskov替换原则 :子类可以替换父类出现在父类能出现的任何地方。(LSP:采用契约式设计)
- 依赖倒置原则:指的是依赖关系应该是尽量依赖接口(或抽象类),而不是依赖于具体类。
二、《编译原理》之 编译过程总框架
名词注释:
(1) 语法制导翻译(Syntax Directed Translation),是指在源语言语法分析阶段,分析句子结构的同时,结合语义规则,直接进行语义分析。在这种情况下,语法分析、语义分析和中间代码生成三个阶段,可以放在一起实现。>
- 词法分析:确定程序中每个单词的类型,转换成机内表示形式,即词法单元token,格式是token:<种别码,属性值>,每一个token对应程序中的一个单词(包括各种符号)。
- 程序中单词的类型: 一词一码的单词,token的第二个分量是空的,只有标志符是多词一码
三、OJ基础
四、测验题
- 取消订单用例与查询订单用例建模为以下哪种关系最合适?
ans:关联关系