面向对象的由来
OO方法起源于面向对象的编程语言(简称为OOPL)。
50年代,用ORTRAN编写大型程序是,常出现变量名在程序不同部分发生冲突问题
于是ALGOL语言的设计师在ALGOL60中采用了以Begin......End为标识的程序块,让块内变量名是局部的以避免它们于程序中块外的同名变量相冲突。
60年代Simuls语言在ALGOL基础上研制开发,它将ALGOL的块结构概念向前发展一步,提出了对象的概念,并使用了类也支持类继承。
70年代Smalltalk语言诞生,它取Simula的类为核心概念,它的很多内容鉴于Lisp
从80年代起人们提出有关信息隐蔽和抽象数据类型等概念,以及由Modula2、Ada和Smalltalk等语言所奠定的基础,在加上客观的需求的推动,进行了大量的理论研究和实践探索,不同类型的面向对象语言(如:Object-c、Eiffel、c++、Java、Object-Pascal等)逐步的发展和建立起比较完整且开发出来的,OO方法的概念理论体系和使用的软件系统。
正是通过Smalltalk80的研制和广泛应用,使人们注意到OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径
后来面向对象被广泛应用于程序设计语言、形式定义、设计方法学、操作系统、分布系统、人工智能、实时系统、数据库、人机接口、计算机体系结构以及(OOPSLA“86”)国际会议,使面向对象受到世人瞩目,其后每年都举行一次,这进一步标志OO方法的研究已经普及到全世界了。
面向对象:就是一种计算机程序的一种设计方法,或者是一种计算机程序设计范式,其中的基本思想是利用对象、类、继承、封装、多态等的基本感念来进行程序设计。从现实生活中客观存在的事物(对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。
对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象是由一组属性和对这组对象的属性进行操作的一组服务组成。比如:一条狗是一个对象,它的状态有颜色、名字、品种;行为有:摇尾巴、叫、吃、跑、咬人等。
类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。
类:类是具有相同属性和方法的一组对象的集合,它是属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在程序中,类是一个独立的程序单位,它应该有一个类并包括属性和方法两个主要部分。
面向对象的三大主要特征
封装:就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,
形成一个有机的整体,也就是将数据与操作数据的源代码进行有机结合,形成“类”,其中数据和函数都是类的成员。
封装的优点:
良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。
类内部的结构可以自由修改。
可以对成员变量进行更精准的控制。
隐藏信息实现细节。
继承:继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,
使得子类具有父类相同的行为。
继承的特征:
子类拥有父类非private的属性、方法。
子类可以拥有自己的属性的方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法,即重写父类方法。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
多态:多态是同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同清醒有不同表现形式。
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这就意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,
那些操作可以通过相同的方式予以调用。
多态的优点:
消除类型之间的耦合关系
可替换性
可扩充性
接口性
灵活性
简化性
多态存在的三个必要条件
继承
重写(子类继承父类后对父类方法进行重新定义)
父类引用指向子类对象