类内部结构

类内部架构实际上是一个小型的状态机,成员变量是状态变量,成员函数是处理机。一般提倡一个类实现一种特定的功能,这样可以降低实现的复杂性,状态机越简单,越利于实现。

实例间通信

软件的功能是多个模块共同协作来实现的。这就需要多个模块的实例进行通信、相互调用。
相互调用和访问对类或模块来说,就是设计对外接口。这也是public、private关键字的设计思想。

对外接口数量越少,每个模块间的耦合越少,代码维护起来越简单;反之,模块间交互越多,耦合性越高,软件维护难度越高。

对于开发人员来说,类或者模块实例间的相互访问,要求程序员控制好实例的可见性。如果控制不好,软件后期的维护难度会增加。

实例可见性管理

实例可见性管理分为实例生命周期管理和实例访问路径管理两个方面。

实例生命周期管理

每个实例都有生命周期,生命周期是软件开发人员可以控制的。例如基本类型的变量只能存在于作用域内,超出作用域其保存的数据就会失效。实例也一样,实例只有在生存期内才可以被访问。这是一切访问的前提。
生命周期管理,即要求软件开发人员正确分配实例存活时间。

  • 如果实例存活时间太短,会导致找不到此实例,无法实现预期功能。
  • 如果实例存活时间太长,会持续占用内存等资源,造成资源利用率低。例如将所有实例采用全局变量保存,优点是此实例在整个软件运行时间,任何模块都能访问,缺点是这样的软件资源消耗会很严重。

实例访问路径管理

访问途径和实例的嵌套程度有关。
例如,全局实例、可全局访问的单例、位于全局实例内的实例(半全局)可以通过最多一次函数调用获取到实例地址。而对于嵌套的类来说,嵌套的层数即获取实例地址需要间接寻址或函数调用的次数。显然,访问路径越简单,需要编写的代码越少,开发和运行效率也越高。
所以最简单的路径还是全局的或半全局的,并且在软件设计中,减少类嵌套,简化访问路径。

例如,你现在参与一个已在开发中的项目后,为了添加一个需求,你需要访问一些已有的实例数据。你可能会遇到暂时获取不到目标实例指针的问题,这就需要你自己添加获取目标实例指针的代码,或者调整代码结构,这无疑是不少的工作量。但是对客户来说,明明窗口都在那摆着,直接一句话访问不就行了吗?而客户却不知道你为了修改一个功能,要考虑如何更好的管理实例生命周期。最后的结果是加班或者拖延项目进度。
从上面的例子可知,已有的代码可以帮助你,也可以让你发疯。

实例可见性管理是会随着需求的改变而需要动态调整的。例如有的变量本来只需要在内部访问,在需求改变后,需要在几个模块间共享,这就需要对其可见性进行修改。

正因为可见性管理是会随需求改变而改变的,所以在实际开发中,可以将其生命周期设置得灵活一点,或者留有一些余量,以便于对未来的改变做较少的调整。

有一种比较松散的实例管理方式。每种实例设置一个全局的管理器,多个相关实例具有相同的id。根据其中一种数据,查找相关数据时,只需要用同一个id去查找。一个实例销毁,不影响其他实例,可以自由控制实例的生存时间。

量化

如果将实例的访问管理交给软件开发者管理,会增加软件开发者的负担,同时也因为软件开发者能力或项目预算等因素导致软件的开发、维护工作量不稳定,降低软件质量。

所以如果可以将实例的访问管理进行量化,让所有的需要交互的实例(即相对非内部的实例或数据)均为全局、半全局实例,在开发完成后进行自动优化,及时释放资源未被使用的资源,这就会减轻软件开发者的负担,提高开发效率,最终有更多的时间去减少bug,优化交互等等,从而提升软件质量。

总结

本文主要介绍了使用面向对象的方法开发软件时,程序中对象协作方式与实例管理相关内容,为了写出更好的软件,可以参考上述内容考虑代码的组织结构。

面向对象软件开发代码结构(1)相关推荐

  1. 面向对象软件开发代码结构(2)

    使用封装降低信息的复杂度 封装是面向对象编程的核心思想之一. 封装的过程,是将大量的信息(过程.数据),凝缩成满足特定需求的接口的过程. 从数量上来说,好的封装必然是将大量的.与业务交互无关的实现细节 ...

  2. 测试驱动的面向对象软件开发(china-pub首发)

    测试驱动的面向对象软件开发(china-pub首发) 基本信息 作者: (美)Steve FreemanNat Pryce  译者: 王海鹏 丛书名: 开发人员专业技术丛书 出版社:机械工业出版社 I ...

  3. tb6612电机驱动软件开发(代码pid实现,调试,控制实现)

    tb6612电机驱动软件开发(代码pid实现,调试,控制实现) 文章目录 tb6612电机驱动软件开发(代码pid实现,调试,控制实现) PID算法实现 pid_algo.c pid_algo.h 代 ...

  4. 软件开发代码防泄密管理

    通过创建安全空间的思路,实现对软件开发源代码的管理. 基本措施 在普通 PC终端,通过虚拟底层驱动技术创建 安全区 .并以安全区为基础,形成内部 加密子网/安全区 域,阻断数据泄露通道-磁盘.网络.外 ...

  5. 实战python设计模式_实战Python设计模式:可复用面向对象软件开发实践

    书名页 内容简介 版权页 前言 第1章 示例软件介绍 1.1 准备工作 1.1.1 相关资源下载 1.1.2 安装开发环境 1.2 启动 1.3 功能说明 1.4 功能概要 1.4.1 编辑 1.4. ...

  6. 面向对象软件开发实战

    http://www.cnblogs.com/linhaifeng/articles/7341318.html#_label4   面向对象实战

  7. 软件开发代码中各国语言对应的缩写

    资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写 先列几个常用的 中文 zh_CN 中文 (香港) zh_HK 中文 (台湾) zh_TW 英文 en_US 英文 en_US 英文 (美国) ...

  8. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  9. “软件开发教父” Martin Fowler 从业 40 年最想说这两个字!

    作者 | 异步社区 本文经授权转载自异步社区(ID:epubit) Martin Fowler,世界级软件开发大师,敏捷开发的开拓者和创始人全球知名的面向对象分析设计.UML.模式等专业领域的领头羊, ...

最新文章

  1. 事件监听器 java_Java实现一个简单的事件监听器
  2. 化解三大错误晚餐方式。
  3. 利用mvc 模型绑定验证方法验证普通类对象数据是否合法
  4. 前端开发必备的1个CSS框架
  5. RIP协议及距离向量算法(详解)
  6. 做系统ghost步骤图解_u盘装系统步骤
  7. java statemachine_StateMachine 状态机机制深入解析
  8. 计算机上没有信任的用户,服务器上的安全数据库没有此工作站信任关系的计算机帐户 解决办法...
  9. 每天一道剑指offer-二叉搜索树与双向链表
  10. 模拟PspTerminateProcess结束进程-学习笔记
  11. python 读取地震道头数据_通过计算机编程快速读取地震数据的方法
  12. macOS Monterey/BigSur 安装HP打印机驱动
  13. 日拱一卒,“功不唐捐
  14. 十年开发技术 Bug 总结,程序员经验分享
  15. Python实例:七段数码管
  16. RK G87机械键盘使用指南
  17. MySQL_12_ShardingJDBC实现读写分离与分布式事务
  18. tensorflow频域操作及梯度求取
  19. 在这个大数据时代,如何保护好自己的隐私?
  20. 笔记-GPS设备定位方式

热门文章

  1. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
  2. MyEclipse配色字体等配置的解决方案
  3. JavaScript快速入门(四)——JavaScript函数
  4. Bringing up interface eth0: Device eth0 does not seem to be presen
  5. 【数据结构与算法】【算法思想】回溯算法
  6. [Leedcode][JAVA][第470题][Ran7()实现Rand10()]
  7. 语言求圆周率近似值改错_新证明解决了如何求无理数的近似值
  8. python爬虫高级项目管理师培训学校_推荐一条高效的Python爬虫学习路径!
  9. button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思
  10. Spring AOP原理浅析及入门实例