软工概念
面向对象特征
- 封装 Encapsulation 封装:限制对某些信息的访问
- 交互 Interaction 交互:通过过程调用或类似的协议
- 多态 Polymorphism 多态:在运行时选择具体的操作
- 继承 Inheritance 继承:对共享的功能保持唯一的接口
面向对象的缺点
- 操作太多对象
- 操作太多交互
- 与表现有关的职责被严重分开,使系统难以理解
- 难以捕捉相关设计所属的族(仅仅类型经常不足以,需要设计模式介入)
- 纯 oo 设计导致系统巨大且扁平
- 需要额外的 structure 和 discipline
解决方法
利用额外的结构和准则
C/S
- 进程即对象
- Asymmetric 客户端知道服务器,服务器不知道客户端
优点
- 高效利用网络系统,硬件成本可能变低
- 易于新增和更新现存服务器
- 允许多个用户共享数据
- 可扩展:增加新客户
缺点
- 每个 sever 拥有大量管理
- 难以找到什么服务器和服务是可用的,缺少一个中心来注册服务和服务器
- 难以改变服务器和客户的功能,改变 cs 架构的应用逻辑很困难
- 应用扩展被服务器和网络容量限制
两层 cs:重客户,轻服务 用户系统界面层 数据库管理服务层
限制
- 对客户端软件和硬件要求高
- 复杂的客户端程序设计
- 数据安全性差,客户端能直接访问服务端数据
- 相同的信息内容和格式
- UI 不同而且复杂
- 系统维护和升级复杂,所有客户端都需要维护
三层 cs 客户层的逻辑拆分到逻辑层,只保留表达层
BS 是三层 cs 的特例 但是限制了服务端资源和客户端资源的应用 安全性难以保证 在数据请求和速度上 BS 慢于 cs
分层
- CS 模式的扩展(Elaboration)
- 运行时层的结合 Aggregation into run-time strata
- 通常只有少量层
优点
- 每一层包含相关服务,内聚高
- 每一层对其他层隐藏了信息
- 每一层可能只会用到比它低的层,内聚高
- 易于复用,替换和交换
缺点
- 可能造成性能问题
- 清晰的层关系难以构建
框架
- 框架是对具体问题的可复用基础设施
- 包括为具体问题准备的必要基础组件
- 交互策略和组件依赖相结合
- 被开发应用的上下文和环境基于提供的框架
通常情况下,框架代表一个类库
非功能性需求
即质量属性(Quality Attributes)
常见的有
- Availability 可利用性
- Modifiability 可修改性
- Performance 性能
- Security 安全
- Testability 可测试性
- Usability 可用性
表述质量需求时,要定量而不是定性
使用这样的模版
- 刺激源(Source of Stimulus/Source):谁触发了刺激
- 刺激(Stimulus): 影响系统的 situation
- 制品(Artifact):被影响的那部分系统
- 环境(Environment):当刺激发生时,系统的状态
- 响应(Response):刺激的结果
- 响应衡量指标(Response Measure):如何衡量回应
可访问性 Availability
当用户使用系统时,系统可用的概率(系统故障所致)
(提前确定的停机维护不计入)