面向对象深入了解

1.面向对象到底什么?

        面向对象是一种编程思想。这种对象严格的说应该是面向对象编程思想(OOP)中的对象,对象的定义是人们对要进行研究的任何事物,从最简单的整数到复杂的飞机等都可以看作对象,它不仅仅能表示具体的事物,还能表示抽象的规则、计划或事件。当然面向对象也不能简单的等价理解成面对任何事物编程,面对一切编程。
        因此面向对象的这个对象,指的是 客体。所谓客体就是指客观存在的对象实体和主观抽象的概念。

2.为什么要面向对象呢?

        面向对象是为了解决系统的可维护性,可扩展性,可重用性。那么面向对象为什么能解决系统的可维护性,可扩展性,可重用性呢?

        面向对象的产生的历史原因有下面两点:
        1.计算机是帮助人们解决问题,但是计算机终究是个机器,它只会按照人们的所写的代码一步步的执行下去,最终得到结果,因此无论程序多么的复杂,计算机总是能轻松的应对。结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和发展了。
        2.结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体构成的现实世界映射到有模块组成的空间中,这种转换的过程,背离了人们观察和解决问题的基本思路。

        由此可见,结构化的设计在设计系统的时候,无法解决重用、维护和扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路、西嘎云、步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要将现实世界和程序世界进行来回转换。
        与此同时,人们发现,在现实世界汇总存在的客体是问题域中的主角。所谓客体就是指客观存在的对象实体和主管抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为是不稳定的,同时客体之间,具有各种联系,因此面向客体编程,比面向行为编程,系统会更加稳定。在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变的时候,只需要改变行为即可,主架构则保持了稳定。

        于是面向对象就产生了,那么人们追求的系统的可维护性,可扩展性,可重用性又是怎么在面向对象中体现出来的呢?
        这个时候肯定就要说到面向对象的三大特征了:
        封装:找到变化并且把它封装起来,你就可以在不影响其它部分的情况下修改或扩展被封装的变化的部分,这是所有设计模式的基础,就是封装变化,因此封装的作用,就解决了程序的可扩展性。
        继承:子类继承父类,可以继承父类的方法和属性,实现了多态以及代码的重用,因此也解决了系统的重用性和扩展性。但是继承破坏了封装,因为它是对子类开放的,修改父类会导致所有的子类的改变,因此继承一定程度上又破坏了系统的可扩展性,所以继承要慎用。只有明确了is-a的关系才能使用,同时继承在程序开发过程中重构得到,而不是程序设计之初就使用继承,如果滥用继承,结果可能会造成后期的代码解决不了需求的变化。因此优先使用组合,而不是继承,这是面向对象开发的过程中的一个重要经验。
        多态:接口的多种不同的实现方式即为多态。接口是对行为的抽象,刚才在封装中提到,找到变化部分并封装起来,但是封装起来之后怎么适应接下来的变化呢?这正是接口的作用,接口的主要目的是为不相关的类提供 通用 的处理服务,我们可以想象一下,比如鸟会飞,但是超人也会飞,通过飞这个接口,我们可以让鸟和超人 ,都实现这个接口,这就实现了系统的可维护性,可 扩展性。

        因此,面向对象能实现人们追求的系统的可维护性、可扩展性、可重用性。面向对象是一种思想,起初面向对象是专指程序设计中采用封装、继承、多态等设计方法,但是面向对象的思想已经涉及到软件开发的各个方面,比如现在细分的面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)

3.怎么使用面向对象编程呢?

        面向对象编程是一种思想,他让我们在分析问题的时候,把思维和重点转向现实中的客体中来,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)这三个大的步骤。
        1.首先分析需求,先不要思考怎么用程序实现它,先分析需求中稳定不变的客体都是些什么,这些客体之间的关系是什么。
        2.把第一步分析出来的需求,通过进一步扩充模型,变成可实现的、符合成本的、模块化的、低耦合高内聚的模型。
        3.使用面向对象的实现模型

4.面向对象和面向过程的区别

        读完上面的内容,对面向对象的理解应该是很透彻了。与面向过程进行对比我们可知:
        1.面向过程是从细节出发,将问题的解决步骤分析出来,然后根据步骤一步步的实现,然后再依次调用就可以了。
        优点:
        (1)流程化使得程序任务明确,在开发前基本考虑了实现方式和最终结果,具体步骤清楚,便于结点分析。
        (2)效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。
        缺点:
        需要深入的思考,耗费经历,代码的耦合性较高,重用性差,扩展能力差,后期的维护难度比较大
        2.面向对象是从宏观出发,将构成问题的事物分析成一个一个的对象,建立对象的目的不是为了完成一个步骤,而是来描述某个对象在整个解决问题的步骤中的属性和行为,实现更好的高内聚低耦合
        优点:
        (1)程序是模块化和结构话,结构清晰,更加符合人类的思维方式。
        (2)易扩展,代码的复用性高,可以设计出低耦合的系统
        (3)易维护
        缺点:
        (1)开销大,当腰修改对象内部时候,对象的属性不允许外部直接存取,所以要给外部提供读写的方法。增加了编程的负担,并且使程序显得臃肿
        (2)性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listen·Rain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值