11.面向对象设计笔记
面向对象分析-问题域精确模型
面向对象设计-求解问题域模型,得到系统实现方案
文章目录
- 面向对象设计六准则
- 弱耦合
- 强内聚
- 六个启发规则
- 软件重用(软件成分重用)
- 可重用类构件的特点
- 三种重用方式
- 系统分解
- 设计问题域子系统
- 设计人机交互子系统
- 设计任务管理子系统
- 设计数据管理子系统
- 设计数据格式
- 设计相应的服务
- 设计类中的服务
- 设计关联
- 设计优化
面向对象设计六准则
模块化、抽象、信息隐藏、弱耦合、强内聚、可重用
抽象: 过程抽象、数据抽象(规格说明抽象)、参数化抽象
信息隐藏: 类结构分离接口和实现,从而对于类的用户,属性的表示方法和操作的实现算法都是隐藏的。
可重用: 尽量使用已有的类,而且在创建新类时考虑将来的可重用性。
弱耦合
耦合: 不同对象之间相互关联的紧密程度。
两类耦合:交互耦合、继承耦合
交互耦合: 对象之间的耦合通过消息来实现。为了使交互耦合更松散,应该:
- 减少消息包含的参数个数和复杂程度
- 减少对象发送的消息数。
继承耦合: 一般化类和特殊类之间的耦合。应该提升继承耦合程度。为此:
- 派生类应该确实是对其一般化类的具体化。
- 特殊类尽可能多使用一般化类的属性和服务。.
结构化范型中的耦合要求,从低到高排序:
数据耦合(尽量使用)
控制耦合、特征耦合(少用)
公共环境耦合(限制其范围)
内容耦合(完全不用)
强内聚
内聚: 衡量一个模块内各个元素彼此结合的紧密程度。三种不同层级的内聚要求:服务内聚、类内聚、一般-特殊内聚。
服务内聚: 一个服务应该仅完成一个功能。(服务层面)
类内聚: 一个类应该只有一个用途。
一般-特殊内聚: 设计出的一般-特殊结构(继承结构)应该符合对应领域知识的概念。一般来说,紧密的继承耦合和高度一般特殊内聚是一致的。
信息化内聚: 面向对象泛型中内聚的最高形式。类中的操作完全以数据为中心,不存在和数据无关的操作。一般满足信息化内聚的模块也满足结构化泛型中的功能内聚。
结构化泛型中的内聚要求:
高内聚:功能内聚和顺序内聚
中内聚:通信内聚和过程内聚
低内聚:偶然内聚、逻辑内聚和时间内聚
六个启发规则
- 设计结果清晰易懂
- 一般-特殊结构的深度适当。中等规模系统(100个左右类)中,类等级层次数保持在7±2
- 设计简单的类
- 使用简单的协议
- 使用简单的服务
- 尽量减小设计变动
软件重用(软件成分重用)
代码重用包括:剪贴、包含(include)和继承。
10种可重用的典型成分:项目计划、成本估计、体系结构、需求模型和规格说明、设计结果、源代码、用户文档和技术文档、用户界面、数据、测试用例。总结一下就是没啥不可以重用的。以下主要讨论类构件的重用。
可重用类构件的特点
- 模块独立性强、可靠性高。
- 高度可塑性–提供简单方便的用以扩充和修改已有构件的机制。
- 接口清晰简明可靠,而且有详尽的文档说明。
三种重用方式
实例重用、继承重用、多态重用。
系统分解
五层次:主题、类、结构、属性、服务
OOD模型的四个子系统:问题域子系统、人机交互子系统、任务管理子系统、数据管理子系统。
子系统之间的交互方式
客户-供应商关系–客户调用供应商完成任务,后者无需了解前者接口。
平等伙伴关系–每个子系统都可能调用其他子系统。
尽量使用客户-供应商关系。
组织系统的两种方案:
层次组织–垂直分解成若干弱耦合子模块,每个模块提供一种类型服务。
块组织–水平分层,上下层之间往往存在客户-供应商关系。
此两种方案可以任意组合。
拓扑结构–管道装、树状、星状等。
设计问题域子系统
只要可能,就应该保持OOA所建立的问题与结构,因此该过程只是从实现角度对问题域模型进行一些补充和修改。如下:
调整需求
重用已有的类
将问题域类组合在一起
添加一般化类以建立协议:一些具体类需要一个公共的协议,通过定义根类来实现。
调整继承层次:根据所使用语言是否支持多继承来调整继承层次便于实现。
支持多继承:窄菱形模式-容易出现属性和服务的命名冲突、阔菱形模式-冲突可能性较小,但需要更多的类才能完成设计。
支持单继承:将多继承结构,简化为单继承结构,可能需要在各个具体类中重复定义某些属性和服务。
设计人机交互子系统
详细见6.2
过程:分类用户–描述用户–设计迷你高龄层次-设计人机交互类
设计任务管理子系统
以动态模型作为分析并发性的主要依据。分析哪些哪些是必须同时动作的对象,哪些是相互排斥的对象,然后划分任务。用任务(task)实现控制线。
确定事件驱动型任务:睡眠-接收消息激活-完成任务睡眠
确定时钟驱动型任务:每隔一定时间触发处理。
确定优先任务:将特殊优先级(高优先级/低优先级)的服务分离成独立(背景)任务处理
确定关键任务:关系系统成败的关键处理,分离成独立任务
确定协调任务:系统中存在三个以上任务时,加一个协调任务
尽量减少任务数–
确定资源需求–
设计数据管理子系统
系统存储或检索对象的基本设施。
设计数据格式
(依赖于数据存储管理模式,下三种)
文件系统
- 定义第一范式表:列出每个类的属性表,规范成第一范式。
- 为每个第一范式表定义一个文件
- 测量性能和需要的存储容量
- 修改原设计的第一范式以满足性能和存储要求
关系型数据库管理系统
- 定义第三范式表:列出每个类的属性表,规范成第三范式。
- 为每个第一范式表定义一个数据库表
- 测量性能和需要的存储容量
- 修改原设计的第三范式以满足性能和存储要求
面向对象数据库管理系统,有两种途径:
- 扩展的关系数据库途径:同关系数据库
- 扩展的面向对象程序设计途径:无需规范化,非关可以直接存储对象。
数据库三范式
1NF:每一列属性都是不可再分的属性值,确保每一列的原子性
2NF:全部属性完全依赖于主键整体,而不是主键的一部分。
3NF:属性和主键有直接关系而不是间接关系(间接关系指,通过其他非主键和主键产生联系)。
比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)
这样一个表结构,就存在上述关系。 学号–> 所在院校 --> (院校地址,院校电话)
这样的表结构,我们应该拆开来,如下。
(学号,姓名,年龄,性别,所在院校)–(所在院校,院校地址,院校电话)
三范式的文章
https://zhuanlan.zhihu.com/p/63146817
设计相应的服务
设计对象内部用来保存对象自身的服务,和外部用来通知对象保存自身的服务。
设计类中的服务
设计算法、选择恰当的数据结构,定义内部类和内部操作等。
设计关联
关联的遍历:单向遍历/双向遍历,或称单向/双向关联。
单向:属性中添加指针
实现双向关联有三种方式:
- 用属性实现一个方向,反向遍历时执行一次正向查找
- 两个方向的遍历都用属性实现
- 用独立的关联对象实现
总结一下,就是属性和关联对象两种关联方式。
设计关联对象的方法-取决于关联重数
- 一对一关联-可以和参与关联的任一对象合并
- 一对多关联-可以和“多”端合并
- 多对多关联-独立的关联类
设计优化
确定优先级(各种质量指标的优先级)
提高效率的几项技术:增加冗余关联、调整查询次序、保留派生属性。
调整继承关系/委托关系。
11.面向对象设计笔记相关推荐
- 《设计模式:可复用面向对象软件的基础》——面向对象设计原则、创建型模式(笔记)
文章目录 二.面向对象设计原则(补充) 2.1 重新认识面向对象 2.2 面向对象设计原则 2.2.1 依赖倒置原则(DIP) 2.2.2 开放封闭原则(OCP) 2.2.3 单一职责原则(SRP) ...
- uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
- python笔记11面向对象
python笔记11面向对象思想 先声明一下 各位大佬,这是我的笔记. 如有错误,恳请指正. 另外,感谢您的观看,谢谢啦! 面向对象 :将数据与函数绑定在一起,进行封装,减少重复代码的重写过程 面向过 ...
- 面向对象设计原则 (快速记忆11个原则)
(1)单一责任原则(Single Responsily Pinciple, SRP). 就个类而言, 应该仅有个引起它变化的原因.即,当需要修改某个类的时候原因有且只有一个,让一个类只做种类型责任. ...
- 面向对象设计的11项原则
主要5大原则 (1)单一责任原则.就一个类而言,应该仅有一个引起它变化的原因.即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任. (2)开放一封闭原则.软件实体(类.模块.函数等) ...
- 笔记整理-信息系统开发基础-面向对象分析与设计-面向对象设计的基本任务
面向对象设计的基本任务,把面向对象分析模型转化为面向对象的设计模型,具体包括以下任务:设计人员必须完成以下任务:设计用例实现方案.设计技术支撑设施.设计用户界面.精化设计模型. 面向对象的分析模型主要 ...
- php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程
面向对象设计是php程序开发中一个很重要的内容块,如果你想成为高级php程序员我们必须知道面向对象设计具体用法与写法. 维护简单 模块化是面向对象编程中的一个特征.实体被表示为类和同一名字空间中具有相 ...
- 深入PHP面向对象、模式与实践读书笔记:面向对象设计和过程式编程
注:本文内容来<<深入PHP面向对象.模式与实践>>中6.2节. 6.2 面向对象设计与过程式编程 面向对象设计和过程式编程有什么不同呢?可能有些人认为最大的不同在于面向对 ...
- 7.11 其他面向对象设计原则2:能用组合的地方,不要用继承
其他面向对象设计原则2 能用组合的地方,不要用继承 Favor object composition over class inheritance 6.1 代码重用的两种方式 能用组合的地方不 ...
最新文章
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
- Android CameraSurfaceView在SurfaceView上实现拍照,视频录像
- 判断一个变量是不是数组
- 实用正则表达式(实用篇)
- Windows常用命令行命令
- 【Android】Apk安装和删除
- udf、utaf、udtf进出数量规律
- 运行时库例程-acc_get_num_devices
- mySQL 数据库错误
- MySQL 事物隔离级别
- 前端学习(3236):react生命周期3
- 中文验证码 php_还在苦恼验证码怎么实现?看看这个验证码组件合集,你想要的都有...
- 使用switch case语句来显示月份的对应天数
- 代码控制树视图 c# 1614262980
- JSK-23223 数字反转【进制】
- IE7 下载EXCEL注意地方
- python桌面程序臃肿_为Python应用构建最精简Docker
- H53D旋转-遁地龙卷风
- redis缓存数据库技术
- 测试思维:正向思维和逆向思维
热门文章
- 安卓模拟器安装教程_安卓终端模拟器-安卓命令行入门教程系列(新手的福利)
- Windows 蓝屏代码大全,Bug检查代码参考
- 抖音旅游号视频文案技巧
- RCode对比RStudio使用体验
- UESTC--ICODING数组与广义表-----矩阵加法
- ASP动态网站建设之连接数据库相关操作
- Ubuntu 安装nginx
- township android,township无限绿钞最新版-township无限绿钞安卓版下载-西西安卓游戏...
- Android 获取音频MP3文件的专辑缩略图
- linux系统ata1.00,Linux : ata: failed command: READ FPDMA QUEUED