第十一章 面向对象的设计与实现

2023-05-16

今天第一天上机学习前端,故影响了读书时间,今天更新的内容会少一点。听老公说此章内容很重要,务必要学懂呢,开始吧。

面向对象分析OOA针对实现世界中的问题域与系统职责,用面向对象的方法建立起针对问题域(被开发系统的应用领域,即在现实世界中由这个系统进行处理的业务范围)和系统职责(所开发的系统应该具备的职能)的模型,作为系统的结果。

面向对象设计OOD则是把分析阶段得到的对目标系统的需求转变成符合成本和质量要求的。抽象的系统实现方案的过程。设计的目的是为了确定如何构件系统,获得足够的信息,以便驱动系统的真正实现。设计时应反映实现环境的特征,设计概念的特征和设计模式应用的特征等。

设计时还需要考虑这些问题

选择纯对象方法还是基于构件的方法;是否遵循公共业务体系结构;是否遵循公共技术体系结构;在什么程度上支持为系统定义的功能需求和约束等。

一般地设计工作包括两方面:一是根据实现条件对OOA模型做某些必要的调整和修改,使其称为OOD模型的一部分;二是针对具体实现条件,建立人机界面、数据存储和控制驱动模型等。

面向对象设计就是利用面向对象观点建立求解域模型的过程。模型对象的实现就是选择一种面向对象的程序设计语言进行编码、测试、调试和优化的过程,面向对象分析、设计和实现是一个多次反复迭代的过程,这是面向对象方法的一大优点。

11.1面向对象的设计准则和启发式规则

11.1.1面向对象设计准则

面向对象的设计准则包括以下6个方面

1、模块化

对象是面向对象软件系统中的模块,它把数据结构和操作这些数据的方法紧密地结合在一起构成模块。

2、抽象

面向对象程序设计语言支持过程抽象、数据抽象、对象类实际上就是具有继承机制的抽象数据类型,某些面向对象的程序设计语言还支持参数抽象化。

3、信息隐藏

具体体系类的封装性,类是良好的可重用构件,类的定义结构将接口与实现分开,软件外部对内部的房间,通过接口实现,从而支持信息隐藏。

4、弱耦合

按照抽象与封装性,弱耦合是指子系统之间的联系应该尽可能少,面向对象系统中的耦合包括:交互耦合和继承耦合两种类型

(1)交互耦合:是对象之间的关联关系的一种形式,是通过消息连接来实现。一应尽量降低消息连接的复杂程度,二应尽量减少消息中的参数个数降低参数的复杂程度,三应减少对象发送或接收的消息数。

(2)继承耦合:是一般化类与特殊类之间耦合的一种形式或继承耦合程度应该尽可能提高,从本质上看通过继承关系结合起来的父类和子类,构成了系统中粒度更大的模块,应该结合得越紧密越好。

5、强内聚

强内聚指子系统内部各构成元素对完成一个定义明确的目的所做出的贡献程度,强内聚包括:服务内聚、类内聚和一般-特殊内聚

(1)服务内聚:指一个服务应该完成一个且仅完成一个功能

(2)类内聚:指一个类应该只有一个用途,它的属性和服务应该是高内聚的,最佳的内聚是通信内聚,,即一个模块可以完成许多相关的操作,每个操作都有各自的入口点)它们的代码相对独立,而且所有操作都在相同的数据结构上完成。

(3)一般-特殊内聚:指设计出的一般=特殊结构应该是对相应的领域知识的正确抽取。

6、可重用

重用有两个方面的含义:一是尽快使用已有的类(包括来访环境提供的类库及以往开发类似系统时创建的类)二是如果确定需要创建新类、则在设计这些新类的协议时,应考虑将来的可重用性。

11.1.2启发式规则

1、设计结果应该清晰易读

(1)用词一致:使名字与它所代表的事物一致,不同类中相似服务名字应该相同。

(2)使用已有的协议:如有其他设计人员已建立了相应的协议,则可以使用这些已有的协议。

(3)减少消息模式的数目:如已有标准的消息协议,应遵守这些协议,如需自己建立消息协议,则应该尽量减少消息模式的数目。只要可能就使消息具有一致的模式,以利于读者理解。

(4)避免模糊的定义:一个类的用途应该是有限的,应该从类名可以较容易地推导出它的作用。

2、一般-特殊结构的深度应适当

应该使类等级中包含的层次数适当,不应仅仅从方面编码的角度出发随意创建子类,应该使一般-特殊结构与领域知识或常识保持一致。

3、设计简单的类

如果一个类的定义不超过一页纸(或两屏)则这类比较容易使用,为使类保持简单,应该做到以下几点:不要包含过多的属性;类有明确的定义;即分配给每个类的任务应该简单;尽量简化对象之间的合作关系,不要提供太多的服务。

4、使用简单的协议

一般说来,消息中的参数不要超过3个,通过复杂消息相互关联的对象是紧耦合的,对一个对象的修改往往导致其他对象的变化。

5、使用简单的服务

面向对象设计的类中的服务都很小,可用仅含一个动词和一个宾语的简单句子描述它的功能。

6、把设计变动减至最小

通常设计的质量越高,设计结果保持不变的时间就越长,即使出现必须修改设计的情况,也应该使修改的范围尽可能小,理想的设计变动曲线如图11.1所示

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第十一章 面向对象的设计与实现 的相关文章

  • spring整合ehcache找不到org.springframework.cache.ehcache.EhCacheCacheManager的解决方案

    一般org springframework cache ehcache EhCacheCacheManager和org springframework cache ehcache EhCacheManagerFactoryBean会同时找不
  • CC3200之GPIO引脚分析

    预备知识 xff1a xff08 1 xff09 volatile关键字 xff1a volatile定义的变量一般为无需开发者自己赋值 xff0c 会自动改变的变量 在普通的程序中 xff0c 编译器都具有优化功能 xff0c 为了避免浪
  • OpenStack 之 OVS介绍

    一 概述 Open vSwitch的官方定义 xff1a Open vSwitch是一个具有工业级质量的多层虚拟交换机 通过可编程扩展 xff0c 可以实现大规模网络的自动化 xff08 配置 管理 维护 xff09 它支持现有标准管理接口
  • OVN是OVS 5倍的性能--性能测试报告

    我们已经对OVN做了许多次的性能测试 xff0c 但是缺少一个OVN和 xff08 ML2 43 OVS xff09 的性能对比测试 我和许多人一起对比了这2种后端 本文是第一部分 xff1a 控制平面的性能对比 后面会另外发文公布数据平面
  • OpenStack 中的5种分配IPv6地址的方式

    在OpenStack Pike版本中创建IPv6子网时 xff0c 有五种设置地址方式供选择 上图中这五种方式显示不全 xff0c 现将其全部展示 No options specified xff08 Default xff09 xff0c
  • STM32 | TCP通信实例分析

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 前言 关于socket的笔记 xff0c 之前已经
  • RT-Thread和Freertos的区别?

    关注 嵌入式大杂烩 xff0c 选择 星标公众号 一起进步 xff01 Freertos是一个国外推出的一个迷你的实时操作系统内核 xff0c 开源 xff0c 功能包括 xff1a 任务管理 时间管理 信号量 消息队列 内存管理 记录功能
  • C语言 | 函数指针作为函数的参数

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 函数指针有两种常用的用法 xff0c 一种是作为结
  • 解析I2C通信协议

    一 I2C的概念 1 I2C总线是PHLIPS公司推出的一种串行总线 xff0c I2C总线只有两根双向信号线 其中一根是数据线SDA xff0c 另一根是时钟线SCL 2 每个接到I2C总线上的器件都有唯一的地址 发送数据到总线上的称为发
  • uCOS-II任务间通信之信号量 [转载]

    uCOS II任务间通信之信号量 信号量是什么 xff1f 信号量有什么用 xff1f 信号量是可以用来表示一个或多个事件的发生 xff0c 还可以用来对共享资源的访问 uCOS II提供了5个对信号量进行操作的函数 如下所示 xff1a
  • 关于STM32串口3的使用,接收并解析一帧数据

    关于STM32串口3的使用 xff0c 接收并解析一帧数据 当stm32的串口1被使用时 xff0c 我们可以使用其他串口来使用 步骤 xff1a 串口3定义 初始化 xff1b 串口3中断服务函数 接收的一帧数据并判断是否正确 xff1b
  • Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法

    之前有一次 docker 启动到一半的时候电脑蓝屏了 xff0c 电脑重启之后 docker 就无法启动了 xff0c 一直报错 Docker Desktop is shutting down 网上查了一下 xff0c 发现一个可能的解决办
  • ESP8266的开发环境搭建、解决编译[Makefile:xxx: .subdirs] Error 2错误问题

    ESP8266的开发环境搭建 解决编译错误问题 ESP8266的开发环境搭建链接如下 ESP8266的开发环境搭建 在最后工程加载完毕后右击该工程 xff0c 在弹出的列表中选择 Build Project 编译工程 xff0c 如果在Co
  • 【数字图像处理】YUV420转RGB并BMP存储<纯C++实现>

    1 读取akiyo qcif yuv YUV420文件 xff0c 按帧读取 xff0c 转RGB xff0c 并存储到BMP文件 2 暂时实现读取一帧并存储一张BMP图片 若要读取YUV序列 xff0c 写成循环方式即可 3 生成的BMP
  • Unable to connect to the remote server 问题(已经解决)

    Unable to connect to the remote server 问题 xff08 已经解决 xff09 参考文章 xff1a xff08 1 xff09 Unable to connect to the remote serv
  • 【Android 源码学习】 init启动

    目录 Android 源码学习 init启动从main cpp开始init cpp 部分逻辑init启动zygote属性服务总结 Android 源码学习 init启动 Android 11 init 启动流程学习 主要是学习刘望舒腾讯课堂
  • Linux面试题 系统启动流程

    BIOS 基本输入输出系统 xff0c 帮助我们初始化硬件 硬盘分区有两类 xff1a MBR和GPT MBR单块硬盘不能大于2T xff0c 主分区的数量不能超过4个 xff1b MBR方案存储在第一个扇区的前446个字节 xff08 共
  • C语言中十进制转换十六进制(细解)

    十进制转换十六进制 span class token macro property span class token directive keyword include span span class token string lt std
  • 关于strtok的使用

    1功能 xff1a strtok是一个比较特殊的 xff0c 用于切割字符串的函数 2 使用我们先来看一下strtok的使用 strtok C 43 43 Reference char strtok xff08 char str xff0c
  • STL简介

    目录 一 STL是什么 二 STL怎么产生的 三 STL的六大组件 一 STL是什么 STL是c 43 43 标准库的重要组成部分 包含数据结构和算法的框架 比如 xff1a vector list sort STL Istream ost

随机推荐