道理简单理解很难 面向对象的本质是什么?
来源:学生作业帮助网 编辑:作业帮 时间:2024/10/23 03:29:37
![道理简单理解很难 面向对象的本质是什么?](/uploads/image/z/3399793-25-3.jpg?t=%E9%81%93%E7%90%86%E7%AE%80%E5%8D%95%E7%90%86%E8%A7%A3%E5%BE%88%E9%9A%BE+%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%9C%AC%E8%B4%A8%E6%98%AF%E4%BB%80%E4%B9%88%3F)
道理简单理解很难 面向对象的本质是什么?
道理简单理解很难 面向对象的本质是什么?
道理简单理解很难 面向对象的本质是什么?
什么是面向对象的本质呢? 万物皆对象?No 抽象?No 复用?No 那到底是什么呢? 万物皆对象.问了几位网友,这是答复之一.看到了某个事物就来一个class?显然没有那么简单.至少也要抽象一下呀. 抽象.比如一些文章里说,可以根据猫猫、狗狗抽象出来一个Animal出来,然后定义Cat,继承Animal,在定义Dog,也是继承Animal.抽象就是本质了吗?那么为什么要抽象,而不直接定义Cat、Dog呢?这么“折腾”一下的目的是什么呢?或者说有什么好处? 复用.Cat可以复用Animal里的属性、方法等,Dog也可以复用Animal里的属性方法.这样看来复用好像就是本质了. 哎,说道复用我就比较郁闷.我是从面向过程学过来的,经过漫长艰苦的学习,现在还没有完全转到面向对象.好像跑题了. 面向过程里就解决了复用的问题,定义一个过程(过程、函数)就可以达到复用的目的.别人有的,你也有,那不算什么优势.别人没有的你有,那就是优势了.既然面向过程已经可以服用了,那么在面向对象里面也谈复用,那还有什么优势呢? 面向过程可以达到复用的目的,但是有一个致命的缺点:混乱.定义出来的函数没有层次,没有管理.假设一个项目里有一万个函数,那么这些个函数就会杂乱无章的出现.要管理的话也只能按照页面、窗体等来划分.总之呢,想要管理好面向过程里的众多函数是一件头痛的事情. 我觉得面向对象是有面向过程“进化”过来的,但是有人说面向对象是直接“蹦”出来的,不管他是怎么出来的了,总之他是很好的解决了“管理复用”的问题. 封装(Class):把相关的属性、方法、事件放在一起,化零为整,统一管理.该隐藏的隐藏,该暴露的暴露.这是管理的第一步. 继承:都封装起来了,那么就失去了灵活性.如何保证灵活性呢?继承(还有函数重载等).也就是多态了.相同的放在父类,不同的放在子类.这是我的理解,当然你可以说这种理解是错误的.Class就好比一个大的家族,父类是根基,子类各有各的特点.正所谓:龙生九子各有不同. 子类可以复用父类里的属性、方法、事件,这就是一种复用的管理方法. 组合(合成):父类、子类、抽象基类,这些都是一个家族里的关系,那么两个家族有如何呢?组合.Has A,一个类里包含另一个类,通过这种方式来实现复用.这又是复用的一种管理方法. 接口:抽象基类是一个很好用的东东,比如DbCommand,用过的兄弟们都会体会到他的方便吧.但是他只能管同一个家族里的,另一个家族的就不行了.如果哪个数据库(比如PostgreSQL)没有继承DbCommand怎么办呢?接口就可以跨越不同的家族.当然接口也有一个致命的弱点,本身不能有任何的实现部分,他只能定义. 面向对象的各种特点都是为了“管理复用”,所以我觉得面向对象的本质就是“管理复用”.至于对象只是一种“表象”. 在多说几句,我是不喜欢被所谓的“对象”所束缚的.以前问过,SQLHelp为什么要写成静态函数的形式,答曰:数据访问是一个对象吗?怎么实例化呢? 我觉得数据库就是一个对象,数据访问也是一个对象.数据访问就是数据库的一个“代言人”.