面向对象笔记

来源:互联网 发布:php k图 编辑:程序博客网 时间:2024/06/04 19:01

1、面向对象的由来:

        在未出现面向对象的编程思想的时候,结构化设计(面向过程)方法出现了很多的问题和不足,使得在实际开发过程中捉襟见肘。结构化设计方法从功能的角度去解决问题,它致力于实现某些特定任务的功能模块,每一个模块都实现具体的某一操作,这种操作往往是通过一定的数据结构组织的,它具体的描述是算法。然而随着系统复杂程度的加深、问题规模和复杂度的增大,结构化设计方法已经无法满足需求。

2、什么是面向对象:

        面向对象,Object Oriented(OO),狭义的面向对象是是一种软件设计方法,或者说一种软件设计的思路;而广义的面向对象是一种对现实世界万事万物的理解和抽象方法,他不仅仅能应用于软件开发,也可以用于数据库系统设计、交互式界面、应用结构、分布式系统等领域。

3、面向对象包含什么:

        (1)对象:

        对象就是要研究的、要解决的任何事、物,他可以是客观存在的某一物质体,例如人、动物、植物、房屋、工具等;它也可以是抽象的某一概念,例如天气、算术规则、自然语言,或者是由编码记录的某一事件。

          (2)对象的行为(方法)和状态(属性):

        既然对象可以表示万事万物,那么对象就必然有状态(属性)和行为(方法),用以表述对象的性质。状态,即用一组特定的数据描述对象本身的性质。行为,用于对于状态的修改、改变。

        (3)类:

         据有相同性质和行为的对象,经过去特殊化、抽象化得到的数据类型。也就是说,类是对象的抽象化数据类型,对象是类的特殊化个体。

         类和类之间也有结构,比如在类的基础上继续进行抽象化、去特殊化,就能得到更加抽象的数据类型,被抽象出来的新类和原类的关系就是“一般——特殊”关系,比如,在飞机、轮船、汽车之间进行抽象化,所得到的新类就是“交通工具”。

         另外,也可以通过另一种方式产生新类,那就是将具有某种链接、耦合关系的多个类,组装起来,成为一个新的类,这就是“整体——局部(部分)”关系,比如,手机这个类就是由屏幕、主板、小板、显示屏、电池、框架组装而成。

         当然,该如何处理类与类之间的关系,就牵涉到另一个问题,设计模式,这里先跳过。

         还有,类之间除了逻辑关系,它们之间也是有交流的,也就是信息的传递,类与类之间的交流通过方法、参数和返回值进行。

4、面向对象的特性:

          (1)唯一性:

         这种唯一性体现在对象的唯一性上,也就是说,世界上不存在完全一样的两片树叶,就是这个道理,但是在面向对象的思想中,并没有这么绝对,对象的唯一性只限在对象的生命周期中,也就是说,在生命周期内,对象的标识是唯一的(很多时候体现在对象名不重复)。

        (2)抽象性:

         抽象性体现在类上,我们知道,类是由具有相同的数据结构(属性)和行为(方法)的对象通过去特殊化、抽象化而得到的,类的本质就是一种数据类型。但是类的划分往往是主观的、非唯一的,一般会根据问题本身去具体抽象。

        (3)继承性(泛化性):

         继承,是指子类能COPY,或者说共享父类(基类)的数据结构和行为(方法)的机制,也就是上面提到的类的“一般——特殊”关系,也就是说,在定义一个新类的时候,可以使用已存在的某一合适的父类为基础,添加新的内容。

         继承也是有限制的,在某些语言中,允许一个类继承自多个基类,例如C++;但是有的语言完全摒弃了这种做法,例如Visual Basic,.NET,Java(但是也可以通过继承的同时去实现某一接口的方式实现类似多继承的效果)。

        (4)多态性:

         顾名思义就是多状态性,指同一个实体具有多种形式,对于对对象的操作,对象可以根据自身特性,使用合适的方法,或者说同一操作作用于不同的对象,就有不同的过程、不同的结果;例如可以使用指向基类的指针,来调用子类的方法,里氏替换原则,正是基于这一特性。

5、面向对象的三大特点:

          (1)封装:

         封装,是指类将属性和方法通过不同的方式组合成一个逻辑实体,在这个实体中,私有的、不可访问的内容将对外界隐藏,从而不能被外界访问(直接访问);公有的、可访问资源将可以被外界访问和使用,也可以通过这种公有内容来访问私有内容,通常,私有内容都是可以被公有内容访问修改的,也就是说,定义了私有内容,就必须定义可以使用该私有资源的公有方法,否则,这种私有内容就是没有意义的,是浪费资源的。

         通过封装,类可以很好的提供了不同级别的数据保护,这种保护,往往能防止由于访问太过自由而导致的数据错误,防止与业务逻辑无关的部分意外的修改了业务内的内容,也能防止对私有内容的错误访问。

        (2)继承(泛化):

         上面讲过,不赘述,现做补充。继承可以在不修改原类的基础上,进行功能的扩展和修改。继承还有两种继承方式,实现继承和接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。

        (3)多态:

         不再赘述。