上帝对象
外观
在面向对象编程领域, 一个上帝对象是一个了解过多或者负责过多的对象。 上帝对象是反面模式的一个例子。
结构化编程背后的基本概念是一个大型的问题应该被分解成为多个较小的问题中(分而治的策略)并且针对每个较小的问题提出解决方案。当每个小问题都得到解决后,大问题本体就得到了解决。因此对象应该知道的一切就是它本身。类似的,对象应该解决的问题是它所属的问题。
基于上帝对象编写的代码并不遵从上述的方式。取而代之的是程序的整体功能都被编程到一个单一的"了解全部"的对象当中,这个对象维护了整个程序的大部分信息并且提供了操作数据的大部分方法。所以这个对象持有过多的数据以及负责过多的方法,它在程序中的角色就如同上帝一般。不同于编写直接在彼此之间进行交互的对象,其他程序中的对象都依赖于这个上帝对象获得信息以及交互。由于上帝对象被过多的其他代码所引用,相比一个进行了均匀切分的程序而言维护变得更加的困难。
在过程化编程语言中没有使用子程序或者过多的使用了全局变量进行信息存储都是在面向对象编程编程中的上帝对象的一个类似物。
创造一个上帝对象通常都被认为是一个不好的编程实现,这种技术偶尔会在紧耦合的编程环境中(如微处理器)被使用,在这些环境中微小的性能提升以及控制集中相比于维护以及编程的优雅而言是更加重要的。
参考文献
深度阅读
- Riel, Arthur J. Chapter 3: Topologies of Action-Oriented Vs. Object-Oriented Applications. Object-Oriented Design Heuristics. Boston, MA: Addison-Wesley. 1996. ISBN 020163385X.
3.2: Do not create god classes/objects in your system. Be very suspicious of an abstraction whose name contains Driver, Manager, System, or Subsystem.
- Anti-Patterns and Worst Practices – Monster Objects
参见
- 餛飩式代碼:和上帝对象恰好相反的反模式
这是一篇電腦科學小作品。您可以通过编辑或修订扩充其内容。 |