再谈面向对象

    面向对象这个话题,已经有些老生常谈了,我从事软件行业时间不是很长,所以对这东西的理解也停留在一个不是很深的层面,并把自己的感悟分享一下,一来可以加强自己自身的理解程度,二来,也希望摆出来可能和更多人探讨学习,所以希望大家多提意见。

    就我个人理解而言,面向对象其更像是一种思考的方法,代码为了实现面向对象而作如此形状,无论是面向对象分析、面向对象设计、面向对象编程等等,最后都会落到代码上,敏捷开发推崇一句话叫做:源代码就是设计!原因在于,我们最终的代码实现可能是会与最初脱离代码时的设计有差别的,所以面向对象涉及到了从分析、设计到最后实施代码的整个过程。

    没有代码,我们也可以面向对象。软件的抽象思维,源自现实生活,所谓:形而上者谓之道,形而下者谓之质!一切事物表现只上的都为其抽象,那么就是说,我们遇到一个需要梳理的项目是,就可以采用面向对象的思维去处理和分析,然后找出事物的共同点,来用共同的方法解决这些点。

    落实到软件中也一样,无论你使用C#还是JAVA,他们是面向对象的语言,他们的语言特点决定,无论你设计时是否使用了很好的面向对象思想,但是实现出来的代码都算是面向对象。因为“面向对象的代码”和“体现了面向对象的代码(或者好的面向对象代码)”是不同的两个概念,也就是说,如果你并不了解面向对象的实质内容,那么你用C#和JAVA编写出来的也是面向对象的,但是并不是好的面向对象,即无法体现出面向对象的优点。虽然各方面的特性都是面向对象的,但是却感觉适得其反,用着反而更加的麻烦。

关键点

一、对象与类

    既然要面向对象,就要知道什么是对象,面向对象曰:一切万物皆是对象。简单来说:整个世界是由不同类型的事物组成,人、动物、建筑等等,这些东西都具有相同的特性,比如一般人有双手双脚,直立行走,用嘴吃饭,等等。人具有这些公共的特性和行为,那么人就是一个对象。反过来,没有双手双脚,或者不会直立行走的,即它不具备人的特性,那么它就不是人,是属于另外的一种对象

    在实现面向对象过程中,软件引入了“类(Class)”的概念,了解其概念先了解其作用,类是描述了一组具有相同的特性(属性)和行为(方法)的对象。类描述的是一个抽象行为,是一类事物的公共特点,所以,类描述的是对象。比如定义一个人,那么就要在类中描述清楚其手、脚、身体这些特性,以及走路、吃饭、奔跑这些行为。那么以后在使用这个对象的时候就可以方便的使用其特性和行为。同时需要注意的是:这些特性和行为是公共,如果一个特性只是个别人有,比如短发、长发,那么这些都是个别现象,不算公共特性,所以不能在人这个类中,定义一个短发或长发的特性,而只能提取定义他们的公共部分:头发。

   所以一个类要严格保护自己的职责所在,是自己的责任,就要做到底,不是自己的,也不能为别人背黑锅。

二、封装,继承和多态

   面向对象中,有三大特性:封装、继承、多态。这三个特性其实是对象,或者说是类的三大特性。

  •   封装 

      封装,主要是说:对象隐藏属性和内部实现,而只对外公布接口,让外部对象来访问和控制其内部改变。其实很好理解,比如一个人和你交往,你不能看透他所有的特点,而对于有些特点,你知道他能达到你的要求,而不知道他是怎么做的。

  •   继承

      继承,字面意思就是说继承自己的上一层对象,说白了就是自己的父,那么这时候,父对象可以控制哪些东西是传给你的,那么你继承,然后你就不需要怎么努力,就有了他的东西。在编程中,一个类继承自自己的父类,那么子类就可以直接调用父类公开的特性和方法,可以方便的达到一个重用的功能,同时,对于你父亲的一些做法有意见,那么你可以在你这里进行自己的实现,来实现一个个性化或者更高效的实现

  •   多态

     多态,刚开始学习时,人们总会与变态联系在一起,然后师长们会特意强调,不是变态,不是变态,可是我觉得,从某个角度而言,可以理解为变态。

     多态,即多种状态,在编程中,意思是说一个接口的多种不同实现,这还不算变态?!你给了我一个公共的接口,却给了我好几个不同的实现。但是,这个是有好处的,好处在于,事务是不断的变化的,那么为了适应各种不同的变化,那么我做一件事情就要给你准备好几个方案,那么到时候你需要哪个就用哪个咯。

三、好的面向对象

    我们说,在使用一些面向对象语言时,我们不用自己设计都会用到上述特点,那么就是说我们的代码是面向对象的,可是有些人也感觉到了,编程中并感觉不到面向对象所说的好处或者特点,什么重用,有事情改变之后还不是重新写,什么方便扩展,每次还不是写个新的重新编译一大堆。呵呵,这里就有问题了。

    直接来说:面向对象语言部分(OOPL)并不是面向对象的全部,面向对象语言可以帮助我们完成如下功能:

    1、封装:隐藏内部实现,稳定外部结构。

    2、继承:复用先有代码。

    3、多态:改写对象的行为。

    4、使用面向对象语言,有利于推动我们从面向对象的思维来思考设计程序的结构。

    这些基本方面,面向对象语言都做到了,但是除此之外,面向对象就没有内容给我们了吗?答案是否定的,一种良好的面向对象设计,需要不断的总结修复得来,那么这些实战经验,总结出了面向对象的内功中的不同心法,构成其不同招式,这就是今天依旧热门的话题,程序员竞相追逐的设计模式。

四、设计模式和面向对象

    设计模式是前人们总结出的编程经验,每一个模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案的核心

    而软件是不断变化的,需求、流程、喜好等等,都可能诱发软件的开发转向,那么,之前的工作就白费了吗?答案当然是NO。这时候,设计模式,这种更为明显的招式,可以有助于我们修炼面向对象的内容。

    那么设计模型+面向对象合作向往达到的目标如下:

    1、更好的应对变化,提高复用;

    2、更好的描述软件设计,当然,这个要依赖于语言的实现;

    3、设计模式不是一种直白技巧,可以照搬照用,它其实更像太极,重意不重力,重在理解,当然,理解的前提是要掌握面向对象的核心内容。

    以后的博客中,我会同希望了解设计模式的朋友一起修行这门诱人的学科,希望帮助大家和我在编程的道路中走的踏实,详尽一点。

五、总结

   面向对象的构建方式能够更好的适应软件的变化,可以尽量把变化所带来的影响减到最小,更加强调各个类的责任,其实,我觉得,他把编程更加的“人性化”,更接地气,能让我们用一种常规的思考方式去思考软件的结构和开发,希望大家能慢慢领悟面向对象的妙不可言。

   

   

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值