`
找不着北
  • 浏览: 315315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面向对象并不是目的

阅读更多

我经常会读到或听到有人说一些“这个和那个不是正确的面向对象”,或“… 面向函数”,或诸如此类的言论。我以前也会发表这样的言论——当我刚从大学出来的时候。这种的观点在昨天这里发表的一篇名为”what we don’t need in object oriented programming“里也体现了出来。

后来,在现实世界中,我知道了这真正的事实:

我们开发软件并不是为了让它面向对象化,或遵循其它的模式。

我们开发软件是为了解决问题。

每一种编程模式(OO, FOP, AOP 等)都擅长于解决某一特定类型的问题,但没有一个——我个人认为——是全能的。所以,我觉得很幸运能有那么多的工具和语言概念来供我们选择,而不是限定于一种。用什么样的工具和什么样的思想,这依赖于我们要解决的问题的类型。

例如,现在已经是2010年了,为什么Java里仍然没有无符号基本数据类型?如果我必须对字节进行操作,那就麻烦了。为什么我们对使用什么样的基本类型的没有选择余地呢?

相同的思路,为什么Scala里只有对象类型?如果我要开发的某种软件是用来操作二进制数据的,我可不希望Scala在屏幕后面为我做什么优化。我 希望自己能掌控它。如果我需要在大量的二进制数据上进行字节操作,这就有问题了,Scala的基本类型是常量化的吗?于是,每一次操作我都要创建一个类型 实例?汗颜。

通常,当有些很精明的程序员对我的做法说三道四,却又根本不知道我是在解决什么问题时,我很苦恼。这就像是在说“我比你更知道你需要什么,所以我们 不能用这个、那个工具/风格/架构”。但事实却是,这些精明的思想家并不是更知道对于每个开发人员,什么样的工具或思路才是他们解决相应的问题所需要的。 做个类比,这个极其类似那些精明的政治家宣传自己最知道人们究竟应该怎么活着…

总结一下:我们开发软件是来解决问题的,只要能把问题正确的解决,它就是“正确”的方式。目前,看起来真正能够做到这一点的编程语言阵营只有C#团 队。我是个有11年Java编程史的Java迷,这样说我也很受伤。但他们对于我来说就是这样,这些C#的语言设计者真正的懂得这样的事实:我们没必要一 定强迫自己使用某种模式,我们要自己给出选择。

 

 

 

翻译来源:外刊IT评论

 

 

:-)

分享到:
评论
33 楼 gtssgtss 2011-05-09  
C++和C,证明了面向对象有用,同时也证明了面向对象也不是银弹
32 楼 yjp0501 2011-05-06  
我从来没有想过写程序是需不需要写成面向对象的模式,我只看那个使用方便,能更加简单的得到我想要的结果
31 楼 redhat 2011-04-23  
呵呵,不在想讨论面向对象的好处了!
面向对象不是编程的目的,但是现在很多领域使用OOP构建软件,绝对是一个不错的选择。大家往往在解决问题是,不理解OOP,而是用了PP/FP把问题解决了,却系统丧失了扩展性等各方面的好处。
面向对象不是目的,但是对于复杂领域来说,使你的程序面向对象,这是解决复杂领域问题的目前的唯一出路。
30 楼 kkking000 2010-11-30  
kkking000 写道
xiaobing 写道
是的,用面向对象解决一些问题,当然也有面向对象解决不了的问题

难道要考虑的性能问题就不是为了解决问题么?

。。。网速问题,你们懂的。。。 
29 楼 kkking000 2010-11-30  
xiaobing 写道
是的,用面向对象解决一些问题,当然也有面向对象解决不了的问题

难道要考虑的性能问题就不是为了解决问题么?
28 楼 taolei0628 2010-11-26  
说的没错,我看到题目,首先想到的就是为了解决问题。
27 楼 xu_zh_h 2010-11-26  
是手段,可是这个手段有几个人掌握了。
26 楼 gddzmr 2010-11-22  
面向对象当然不是目的,不过现在很多人都不知道面向对象是什么,现在很多人就是为了解决问题而解决问题,根本不考虑系统的可维护性,以及扩展性!面向对象是一种设计思想,不是一种手段,面向对象是为了更好的解决问题,所以面向对象不可能成为目的...
25 楼 seawater216 2010-11-04  
能解决问题才是硬道理
24 楼 javamonkey 2010-11-01  
面向对象,应该是个很自然的过程,譬如对“人”进行描述,很容易得出人有眼睛,鼻子属性。如果超出这个自然的过程,那就是有问题了,让你去描述外星人,你怎么面向对象?

当然是没有办法面向对象,那就有一类人出来解决,一类是抽象,即使不知道外星人啥样,那好呆总有器官吧,那先得出一个“器官类”

这样就没有必要了。
所以我以为面向对象并不是什么复杂技术和理论,是个自然的过程,随着项目进展,自然能得出最佳结果。基于此的开发,维护也是最合适当时的情况,这就够了。不要做自己做不到的事情
23 楼 calvinlyc 2010-10-29  
我觉的面向对象的优势是在于实现之前的设计和规划以及实现之后的维护和测试.....
22 楼 池中物 2010-10-28  
支持,无论用什么方式,

先保证实现业务目的,再能达到一定的可扩展性,可维护性就非常不错了
21 楼 mouge 2010-10-28  
我觉得楼主没有理解每个语言概念约束和表达能力之间的关系。语言中的范式和类型,都是为了更准确地概念表达,减少语言使用上的复杂性。一个什么特征都有的大杂烩式的语言不仅难以理解和使用,而且设计和性能都是个大问题。
如果真的需要解决问题的万能的语言,C#也不怎么样,只有能够设计“域语言的元语言的元语言。。。”才能解决问题,这种想法确实会使人“找不着北”。
说得现实一点,更加通用的语言应该是C或者汇编,任你怎么整。如果觉得二进制也解决不了问题的话,干脆用一进制,什么问题都没了。
20 楼 javamonkey 2010-10-28  
lyw985 写道
有了锤子,什么东西看上去都像钉子


精辟
19 楼 lyw985 2010-10-27  
有了锤子,什么东西看上去都像钉子
18 楼 linliangyi2007 2010-10-27  
一个好系统的OO过程是自然而然的,不需要为OO而OO,特别在Java,C#这类语言中更是这样。
一切是水到渠成的事情,但千万不要打着“最终目的”的幌子,放弃OO带来的好处,这种通常是不懂设计的人需要的借口而已。
17 楼 ironsabre 2010-10-27  
gtssgtss 写道
到处都是OO?我觉得到处都没有OO,那么多用spring的,怎么OO


你告诉我什么叫oo先?
16 楼 悠游键客 2010-10-27  
OO不是目的,只是手段而已。

如果能够通过其他的方式,到底OO的效果,那么何乐而不为呢?只是我们通常发现,当我们通过其他手段,到达与OO相同目的的时候(系统容易扩展、容易维护、复用率高),我们的系统已经不自觉的OO了。就像通过OO的预先设计和对代码的重构,你认为那个更OO?这里的目的是相同的,只是道不同而已。
15 楼 夜神月 2010-10-27  
同意楼主观点,每种思路都有其针对的使用范围,面向对象的开发模式是经典的,主要在于它适用于大部分问题,但这不是全部。开发语言也一样都有他解决问题的领域c、汇编主要侧重核心和硬件方面的领域,我们只在乎他运行的有多快。java主要作用域高端与业务相关的领域,我们关注的是他开发周期,移植性和健壮性。
14 楼 kala888 2010-10-27  
linliangyi2007 写道
认为面向对象是目的的,那是知其然不知其所以然!!

楼主的使用主义有的可怕啊,不能说错,但很容易误导人哦!!

不要觉得能把功能实现就ok了,这样太危险。。。

需要考虑系统设计的耦合度,扩展性,程序的易维护性,易读性等等。



其实,我觉得lz的是深入了解了oo以后的总结。
“统设计的耦合度,扩展性,程序的易维护性,易读性等等”这是目标。
对于一个不是很了解,或不深入了解oo的人,来说遵守规定是必然的,为了完成目标,oo是一个实用的方法论。
如果作为一个深入了解oo和其他模式的人,他知道,他实现目标是有多种选择的,没必要非得oo,
“实用主意”=“条条大路通北京”


相关推荐

    面向对象七大原则

    面向对象七大原则 面向对象编程是一种编程范式,它强调模块化、抽象化、封装性、继承性和多态性等特点。面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一...

    经典面向对象思想 经典面向对象思想

    封装是面向对象编程的一个基本特性,其主要目的是隐藏对象内部的实现细节,并对外提供一组清晰的操作接口。通过封装,我们可以限制外部对对象内部状态的访问,从而增强代码的安全性。例如,在Java中,可以通过...

    面向对象设计原则.ppt

    例如,对于计算员工工资的问题,传统的结构化做法可能会导致大量重复代码,而采用面向对象设计,我们可以通过创建不同的员工类并让它们继承自抽象的`Employee`类,将薪金计算的责任分配给各自对应的类。这样,当需求...

    c++面向对象程序设计语言重点难点复习题及答案.doc

    面向对象程序设计是C++的核心特性之一,它包括类、对象、封装、继承、多态等概念。在C++中,面向对象编程提供了强大的抽象能力,使得程序员可以更有效地管理和组织代码。 首先,我们来看看一些关于C++面向对象的...

    面向对象学习笔记

    ### 面向对象学习笔记 #### PHP5面向对象基础 **1.1 类和对象** 面向对象编程(Object-Oriented Programming, OOP)是一种软件开发范式,其核心思想是将现实世界中的事物抽象成类(Class),然后根据类创建具体的...

    《C#面向对象设计模式纵横谈》.pdf

    ### C#面向对象设计模式知识点解析 #### 面向对象设计模式与原则 ...然而,设计模式并不是万能的,它们不是简单地可以套用的模板,而是需要在理解面向对象基本原理的基础上,根据具体问题灵活运用的工具。

    面向对象程序与设计作业 实验二实验报告.doc

    【实验报告】 实验题目:面向对象程序设计——继承性实现 实验目的: 1. 理解并掌握C++中的...以上就是本次面向对象程序设计实验的报告,涵盖了实验的目的、内容、调试和总结,展示了C++中面向对象编程的基本实践。

    面向对象软件工程(使用UML,模式与Java)全套课后习题

    在面向对象软件工程的学习和实践中,理解建模的目的、编程语言在软件开发中的作用、知识获取的非顺序性以及设计决策背后的合理性是至关重要的知识点。 建模的目的是通过构建一个简化的现实世界的表示,以减少复杂性...

    面向对象的程序设计心得.pdf

    封装(Encapsulation)是面向对象程序设计的一个原则,它指的是将数据(属性)和行为(方法)捆绑在一起,形成一个独立的单元,并通过对外提供的接口与外界进行交互。封装的目的是隐藏对象的内部状态,只能通过指定...

    南京理工大学Java面向对象编程作业源码

    这个文档可能涵盖了实验目的、步骤、代码分析或问题解答等内容,对于理解Java面向对象编程的概念和实践非常有帮助。不过,具体的文件内容无法在此处提供,需要下载后查看。对于学习者来说,通过分析和理解这些源码,...

    面向对象核心技术.pdf

    面向对象编程(OOP)是目前软件开发中广泛使用的一种编程范式,它具有封装、继承和多态三个核心特性。在OOP中,类是创建对象的模板,继承则是实现类之间关系的一种机制。多态则提供了使用相同方法名调用不同方法的...

    面向对象的一些基本概念

    本文将深入探讨面向对象编程的一些基本概念,包括类、对象、继承、属性、方法、静态、重载、隐藏、重构、声明、定义、初始化、赋值等,并通过 Java 语言进行阐述,同时也会简要提及 C++ 中的相关概念。 #### 二、...

    面向对象设计原则

    本文将详细介绍面向对象设计的七大原则,并结合具体案例进行解析。 ### 面向对象设计原则概述 面向对象设计原则是在软件设计阶段必须遵守的一套规则,它们能够帮助开发者构建出更易于理解、修改和扩展的系统。这些...

    面向对象c++题库 答案

    ### 面向对象C++知识点详解 #### 第一章:面向对象基本概念 ##### 1. 面向对象程序设计方法的基本特征 - **抽象性**:指从现实世界中提取出对象的主要特征,忽略不必要的细节。例如,当我们讨论汽车时,关注的是...

    c#开发模式-面向对象

    ### C#开发模式—面向对象:深入探讨Strategy策略设计模式 #### 一、引言 在软件开发领域,面向对象编程(OOP)是一种广泛采用的方法论,它通过将数据和处理数据的方法组织在一起,形成对象,来提高代码的可重用性、...

    BREW与面向对象的比较.pdf

    本文将详细探讨BREW与面向对象编程之间的差异,并着重于它们在类与接口支持、封装性、继承性以及多态性等方面的比较。 #### 二、详细比较 ##### 1. 类与接口的支持 - **面向对象语言**:C++、C#和Java等语言提供...

    面向对象设计原则.pdf

    ### 面向对象设计原则详解 面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和...

Global site tag (gtag.js) - Google Analytics