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

类内部结构

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

实例间通信

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

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

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

实例可见性管理

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

实例生命周期管理

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

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

实例访问路径管理

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

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

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

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

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

量化

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python猜数字1001untitled_ML - Python 基础

数据类型 Numeric & String1. Python数据类型1.1 总体:numerics, sequences, mappings, classes, instances, and exceptions1.2 Numeric Types: int (包含boolean), float, complex1.3 int: unlimited length; float: 实现用double in C, 可查看 sys.float_inf…

【转】4.1触碰jQuery:AJAX异步详解

传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。它并非一种新的技术,而是以下几种原有技术的结合体。 1) 使…

QStackedWidget实现自适应紧凑布局

前言 本文提出了一种使QStackedWidget尺寸根据内容自适应调整的解决方法。 问题提出 我们知道,QStackedWidget可以包含多个可切换的子窗口。多个子窗口的高度不一样时,此时将QStackedWidget放在一个垂直布局中,所有子窗口会保持和最高的子…

linux查看tcl版本_查看Linux内核版本的方法有几个?你也是这样操作吗?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言内核是操作系统的核心组件。 它管理系统的资源,是计算机硬件和软件之间的桥梁。您可能因多种原因需要确切知道GNU / …

【转】4.2使用jQuery.form插件,实现完美的表单异步提交

传送门:异步编程系列目录…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 抓住6月份的尾巴,今天的主题是 今天我想介绍的是一款jQuery的插件:Jquery.form.js 官网。 通过该插件,我们可以非常…

python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程

Python数据挖掘教程作者 : 长行说明 : 本教程以9周的数据挖掘教程为主,每周包括5天的知识学习和2天的案例实现。以周为阶段,每周包括5天的知识内容(Day)、1天的案例实现(Example)和1天的小测验(Test);此外还可能包含选学部分(Extra)。案例的难…

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

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

什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...

概述本周,许多Facebook用户都会发现,一些用户发布图片上出现了原本应该隐藏的图像标签。由此可以证明,图像可以携带大量表面上不可见的数据。实际上,Facebook和Instagram所使用的图片元数据与恶意攻击者制作的特制图像相比显得非常…

一种类的渐进式开发写法

// 主类,一般为窗口类 class MainClass { public:FuncClass1 *a;FuncClass2 *b; }// 实现某个功能的类 class FuncClass1 { public:FuncClass1(MainClass *) }// 实现某个功能的类 class FuncClass2 { public:FuncClass2(MainClass *) }每加一个大的功能&#xff0c…

【转】SQL中where, group by, having的用法和区别

group by,where,having 是数据库查询中最常用的几个关键字。在工作中,时常用到,那么,当一个查询中使用了where ,group by ,having及聚集函数时 ,执行顺序是怎么样的?为了回答这个问题,将这个三个关键字的用…

无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...

首先需要声明的是,本篇并非COMOS实用案例,只是希望借此让大家了解,如何使用微软的WPF和C#语言开发COMOS插件。首先看下效果图功能说明:拖拽COMOS设备至定制的浏览器,自动根据设备的名称和其制造商参数值,搜…

Win10上VMware的问题汇总

装xp很卡顿的问题 卸载360,重启电脑即可。 拖拽文件/文件夹到虚拟机直接卡住 使用15.1版本的VMware即可。 资源: 链接:https://pan.baidu.com/s/1dtr_cPwzprRTznpxj-OKTw 提取码:1wpj

【转】C#与C++的发展历程第一 - 由C#3.0起

C#5.0作为第五个C#的重要版本,将异步编程的易用度推向一个新的高峰。通过新增的async和await关键字,几乎可以使用同编写同步代码一样的方式来编写异步代码。 本文将重点介绍下新版C#的异步特性以及部分其他方面的改进。同时也将介绍WinRT程序一些异步编…

python数据库实例_Python操作MySQL数据库9个实用实例

用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了32与64版本。MySQL-python-1.2.3.win32-py2.7.exeMySQL-python-1.2.3.win-amd64-py2.7.exe实例 1、取得 MYSQL 的版本实例 2、创建一个表并且插入数据实例 3、 python 使…

Win10+VMware上安装macOS过程记录

2021年更新 主要参考文章:https://blog.csdn.net/qq_40143985/article/details/104011778 参考了其他一些文章,最后会出现…not successfully错误,安装失败。建议参考这篇文章。 FAQ 安装好macOS后,电脑运行有点卡的问题&#x…

【转】5.2高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO&#xff0…

vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的

如果把VBA比作一门刀法,那么经过前面内容的操练,大家已经掌握了很多实用的招式。如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。所以今天主要和大家分享——VBA“磨刀”心法之程序调试…

VMware使用

重要功能 快照 快照就是保存当前虚拟机完整状态,相当于手动克隆一个虚拟机副本,也相当于是git中的一个提交点。在安装好一个新的虚拟机之后,一般都要创建一个快照,便于日后恢复。

【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目

# 项目交付用正版,省下一台Iphone12 # # 31款JAVA开发必备控件和工具 # 相关链接: VS TFS源码分析软件PATFS使用方法二:设置新数据检查间隔VS TFS源码分析软件PATFS使用方法三:数据附件大小限制的自定义设置VS TFS源码分析软件P…

python selenium api_Selenium2+python自动化-查看selenium API

前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就叫大家如何去查看selenium api,不求人,无需伸手找人要,在自己电脑就有。pydoc是Python自带的模块,主要用于从pytho…