收藏
0有用+1
0

上帝对象

编程术语
面向对象编程领域,一个上帝对象(God object)是一个了解过多或者负责过多的对象。上帝对象是反面模式的一个例子。结构化编程背后的基本概念是一个大型的问题应该被分解成为多个较小的问题中并且针对每个较小的问题提出解决方案。当每个小问题都得到解决后,大问题本体就得到了解决。因此对象应该知道的一切就是它本身。类似的,对象应该解决的问题是它所属的问题。基于上帝对象编写的代码并不遵从上述的方式。在程序设计中,避免出现上帝对象的方法有模块化和继承。
中文名
上帝对象
外文名
God object)
领    域
面向对象编程
定    义
了解过多或者负责过多的对象
有关术语
对象
影    响
程序维护困难

简介

播报
编辑
面向对象程序设计中,对象是榜定汗一个逻辑实体,它含有数据及处理该数据的代码,是糊希厦程序的基本单元在一个对象中,有些代码和数据可能是私有于该对象的,且不得由想泪匪旬纹该对象外的任意成份存取 [1]。上帝对象是程序船鸦再戒中一个对象拥有很多功能或方法,即程序的整体功能都被编程到一个单一的"了解全部"的对象当中,这个对象维护了整个程序的大部分信息并且提供了操作数据的大部分方法。所以这个对象持有过多的数据以及负责过多的方法,它在程序中的角色就如同上帝一般。不同于编写直接在彼此之间进行交互的对象,其他程序中的对象都依赖于这个上帝对象获得信息以及交互。由于上帝对象被过多的其他代码所引用,相比一个进行了均匀切分的程序而言维护变得更加的困难。
在过程化编程语言中没有使用子程序或者过多的使用了全局变量舟享进行信息存储都照精葛是在面向对象编程编程中的上帝对象的一个类似物。创造一个上帝对象通常都被认为是一个不好的编程实现,这种技术偶尔会在紧耦合的编程环境中(如微处理器)被使用,在这些环境中微小的性能提升以及控制集中相比于维护以及编程的优霸寻汽雅而言是更加重要的。与上帝对象相反的是馄饨式代码,是指程序中是由许多小的、松散连接的部分所构成。

反面模式

播报
编辑
在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。
Andrew Koenig在1995年造了anti-pattern这个词,灵感来自于GoF的《设计模式》一书。而这本书则在软件领域引入了“设计模式”(design pattern)的概念。三年后antipattern因《AntiPatterns》这本书而获得普及,而它的使用也从软件设计领域扩展到了日常的社会互动中。按《AntiPatterns》作者的说法,可以用至少两个关键因素来把反面模式和不良习惯、错误的实践或糟糕的想法区分开来:
  • 行动、过程和结构中的一些重复出现的乍一看是有益的,但最终得不偿失的模式
  • 在实践中证明且可重复的清晰记录的重构方案
很多反面模式只相当于是错误、咆哮、不可解的问题、或是可能可以避免的糟糕的实践,它们的名字通常都是一些用反话构成的词语。有些时候陷阱(pitfalls)或黑色模式(dark patterns)这些不正式的说法会被用来指代各类反复出现的糟糕的解决方法。因此,一些有争议的候选的反面模式不会被正式承认。这个概念很容易推广到工程学以及工程以外需要人们付出努力去争取的领域。尽管在工程学以外很少用到这个术语,但其概念是通用的。

解决方法

播报
编辑
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。模块具有以下几种基本属性:接口、功能、逻辑、状态,功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。在系统的结构中,模块是可组合、分解和更换的单元。模块化是一种处理复杂系统分解成为更好的可管理模块的方式。它可以通过在不同组件设定不同的功能,把一个问题分解成多个小的独立、互相作用的组件,来处理复杂、大型的软件。
继承(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。继承可以让有相同结构的类共享部分代码和数据结构。可以通过自顶向下和自底向上的方法设计基类和派生类。自顶向下设计时,先设计一个理想的最小的基类,加入各种细节得到各种派生类。自底向上设计时,从独立定义的一些类中提取出它们的公共部分构成基类。