面向对象的本质是什么?

简介:   什么是面向对象的本质呢?     万物皆对象?No  抽象?No  复用?No     那到底是什么呢?     万物皆对象。问了几位网友,这是答复之一。看到了某个事物就来一个class?显然没有那么简单。


  什么是面向对象的本质呢?

 

  万物皆对象?No
  抽象?No
  复用?No

 

  那到底是什么呢?

 

  万物皆对象。问了几位网友,这是答复之一。看到了某个事物就来一个class?显然没有那么简单。至少也要抽象一下呀。

 

  抽象。比如一些文章里说,可以根据猫猫、狗狗抽象出来一个Animal出来,然后定义Cat,继承Animal,在定义Dog,也是继承Animal。抽象就是本质了吗?那么为什么要抽象,而不直接定义Cat、Dog呢?这么“折腾”一下的目的是什么呢?或者说有什么好处?

 

  复用。Cat可以复用Animal里的属性、方法等,Dog也可以复用Animal里的属性方法。这样看来复用好像就是本质了。

 

  哎,说道复用我就比较郁闷。我是从面向过程学过来的,经过漫长艰苦的学习,现在还没有完全转到面向对象。好像跑题了。

 

  面向过程里就解决了复用的问题,定义一个过程(过程、函数)就可以达到复用的目的。别人有的,你也有,那不算什么优势。别人没有的你有,那就是优势了。既然面向过程已经可以服用了,那么在面向对象里面也谈复用,那还有什么优势呢?

 

  面向过程可以达到复用的目的,但是有一个致命的缺点:混乱。定义出来的函数没有层次,没有管理。假设一个项目里有一万个函数,那么这些个函数就会杂乱无章的出现。要管理的话也只能按照页面、窗体等来划分。总之呢,想要管理好面向过程里的众多函数是一件头痛的事情。

 

  我觉得面向对象是有面向过程“进化”过来的,但是有人说面向对象是直接“蹦”出来的,不管他是怎么出来的了,总之他是很好的解决了“管理复用”的问题。

封装(Class):把相关的属性、方法、事件放在一起,化零为整,统一管理。该隐藏的隐藏,该暴露的暴露。这是管理的第一步。

 

====================

 

 

  继承:都封装起来了,那么就失去了灵活性。如何保证灵活性呢?继承(还有函数重载等)。也就是多态了。相同的放在父类,不同的放在子类。这是我的理解,当然你可以说这种理解是错误的。Class就好比一个大的家族,父类是根基,子类各有各的特点。正所谓:龙生九子各有不同。

 

  子类可以复用父类里的属性、方法、事件,这就是一种复用的管理方法。

 

  组合(合成):父类、子类、抽象基类,这些都是一个家族里的关系,那么两个家族有如何呢?组合。Has A,一个类里包含另一个类,通过这种方式来实现复用。这又是复用的一种管理方法。

 

  接口:抽象基类是一个很好用的东东,比如DbCommand,用过的兄弟们都会体会到他的方便吧。但是他只能管同一个家族里的,另一个家族的就不行了。如果哪个数据库(比如PostgreSQL)没有继承DbCommand怎么办呢?接口就可以跨越不同的家族。当然接口也有一个致命的弱点,本身不能有任何的实现部分,他只能定义。

 

  面向对象的各种特点都是为了“管理复用”,所以我觉得面向对象的本质就是“管理复用”。至于对象只是一种“表象”。

 

  在多说几句,我是不喜欢被所谓的“对象”所束缚的。以前问过,SQLHelp为什么要写成静态函数的形式,答曰:数据访问是一个对象吗?怎么实例化呢?

 

  我觉得数据库就是一个对象,数据访问也是一个对象。数据访问就是数据库的一个“代言人”。我的数据访问函数库就是以DbCommand为中心人物,用起来非常的方便。

 


 

相关文章
|
7月前
|
程序员
如何理解面向过程和面向对象?
有人说:“如果上帝是程序员,他怎么创造世界上的所有动物。”,理解这个问题就理解了面向对像。
|
2月前
|
存储 算法 程序员
从1024开始,我们漫谈编程的本质
从1024开始,我们漫谈编程的本质
20 0
什么是面向对象,如何用面向对象的思想写代码
什么是面向对象,如何用面向对象的思想写代码
|
4月前
|
Java 开发者
Java面向对象编程的4个主要概念
Java面向对象编程的4个主要概念
43 3
|
9月前
|
Linux C语言 C++
面向对象与面向过程最本质的区别
面向对象与面向过程最本质的区别
51 0
|
9月前
|
C++
C++面向对象的概念和特点
C++面向对象的概念和特点
|
9月前
面向对象概念
1. Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通信 2. 如果一个软件系统使用这样4个概念设计和实现,则我们认为这个软件系统是面向对象的 什么是对象(object)
48 0
|
存储 算法 C语言
怎么理解面向对象和面向过程到底的本质区别? .
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
1432 0
|
前端开发 PHP
如何理解面向对象OOP设计理念
将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
189 0
|
Java 编译器 开发者

热门文章

最新文章