文档章节

面向对象解决了全局变量问题?

小郭一号
 小郭一号
发布于 2014/08/03 13:49
字数 602
阅读 83
收藏 0

全局变量的应用场景

程序中的某些资源之多能有一个,比如计数器、配置信息、程序运行状态等,而且许多地方需要访问他,那么这个资源就应该,也只能设置成全局变量。在稍微大点的软件中,全局变量基本是不可避免的。

全局变量的问题

  1. 因为到处都可以访问,无形中增加了程序模块之间的耦合度,增大出错概率。

  2. 多线程环境下非常容易出问题。

  3. 变量命名冲突。

  4. 请补充。

面向对象中解决问题了吗?

正因为全局变量不可避免,面向对象语言(如无说明特指c++/java/c#)也提供了全局变量功能——static变量。这个static变量是哪个class也好,属于哪个namespace的也好,你再弄点弯弯绕封装成单例模式也好,他都是全局变量,任何有权限的地方都可以访问。上面所列的三条问题中,前两条,也就是问题最大的两条,根本没有解决。而即使非面向对象语言(C)中,人们也知道把全局变量开头放个g_ 的标记,第三条可以说不是问题。

我的实在是想不出面向对象解决了全局变量的什么问题,因此放了”请补充“这么一条。不过我估计,再怎么补充也无非证明我的观点:面向对象根本无法避免全局变量,全局变量带来的问题也一丁点没有解决。

C语言为了保护全局变量,可以把它生命成static,因此也别拿private说事儿。另外private是个很扯淡的关键字,它对程序健壮性的提高基本为0——C语言没有private也没见哪个变量被不小心修改导致问题。

相信“面向对象能解决全局变量问题“的,往往是新手。因为新手写的程序都很短,看起来所有变量都在一个类中,就以为没有了全局变量。再不就是没思考能力的,别人说什么都信。

© 著作权归作者所有

小郭一号
粉丝 5
博文 14
码字总数 10128
作品 0
杨浦
私信 提问
NDK开发---C++学习(一):基础知识

前言 C++是从C语言发展演变而来的,它在C语言的基础上引入了类(class)的概念,并增加了抽象与封装、继承、重载和多态等面向对象的语言处理机制。C++向前兼容了C语言程序设计,使得绝大部分C...

浮生若梦zp
2017/11/20
0
0
理解构造函数与原型对象

前言 在Es6之前,由于javascript没有对类的支持,也就是说它并不具备如传统后台语言(比如java)拥有类的功能,所谓类就是用来描述事物中的属性和行为的,类的特征是由成员组成的,而属性对应的就是...

itclanCoder
2017/09/04
0
0
传智播客学习笔记 网络多线程

主线程处理UI,避免耗时操作 iOS多线程技术有4种 pthread,通用技术,跨平台 c语言,程序员管理生命周期,几乎不用 NSThread 面向对象,可以直接操作线程 OC语言 程序员 管理生命周期,偶尔使...

云飞扬v5
2015/08/11
0
0
【原】PHP从入门到精通2小时【图文并茂】

原创内容,转载请注明。 主要内容: 搭建PHP开发环境 第一个helloworld程序 变量 全局变量 循环结构 函数 数组 面向对象编程 继承 接口 多态 日志 文件的读写 时间格式和时区 创建图形 从远程...

乌云上
2018/09/16
0
0
JavaScript 中 this 的工作原理以及注意事项

在JavaScript中,this 的概念比较复杂。除了在面向对象编程中,this 还是随处可用的。这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子。 要根据this 所在的位置来理...

oschina
2014/05/16
5.3K
14

没有更多内容

加载失败,请刷新页面

加载更多

蚂蚁区块链BaaS:开放在云端,落地于实体

自 2018 年 6 月上线以来,蚂蚁区块链 BaaS 不断在技术上实现突破,形成自身独特的优势,并做为行业领军者在不同领域的几十个场景实现落地。在区块链的商用时代加速到来之际,通过开放自身的...

阿里云官方博客
30分钟前
3
0
Idea cannot access【好使】

Idea中无法访问类中public方法。。 解决: idea点击左下角电脑图标,打开右边栏各种功能键 右边栏Maven Projects中点一下刷新,就是那个两个蓝的箭头组成的环 ----------------------------...

Airship
30分钟前
3
0
Spark内置图像数据源初探

作者:林武康,花名知瑕, 阿里巴巴计算平台事业部EMR团队的高级开发工程师,Apache HUE Contributor, 参与了多个开源项目的研发工作,对于分布式系统设计应用有较丰富的经验,目前主要专注于...

阿里云云栖社区
31分钟前
1
0
【面试被虐】游戏中的敏感词过滤是如何实现的?

小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了以下事情的发生….. 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过...

爱编程的浪子
34分钟前
4
0
springboot之maven属性引入

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><delimiters><delimite......

Online_Reus
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部