目录
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)。软件能够被复用的程度。