面向对象程序设计(一种计算机编程架构)

基本概念
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。经过这些概念面向对象的思想获得了具体的体现。
1)对象(Object) 能够对其作事情的一些东西。一个对象有状态、行为和标识三种属性。
2)类(class) 一个共享相同结构和行为的对象的集合。
3)封装(encapsulation): 第一层意思:将数据和操做捆绑在一块儿,创造出一个新的类型的过程。第二层意思:将接口与实现分离的过程。
4)继承 类之间的关系,在这种关系中,一个类共享了一个或多个其余类定义的结构和行为。继承描述了类之间的“是一种”关系。子类能够对基类的行为进行扩展、覆盖、重定义。
5)组合 既是类之间的关系也是对象之间的关系。在这种关系中一个对象或者类包含了其余的对象和类。
组合描述了“有”关系。
6)多态 类型理论中的一个概念,一个名称能够表示不少不一样类的对象,这些类和一个共同超类有关。所以,这个名称表示的任何对象能够以不一样的方式响应一些共同的操做集合。
7)动态绑定 也称动态类型,指的是一个对象或者表达式的类型直到运行时才肯定。一般由编译器插入特殊代码来实现。与之对立的是静态类型。
8)静态绑定 也称静态类型,指的是一个对象或者表达式的类型在编译时肯定。
9)消息传递 指的是一个对象调用了另外一个对象的方法(或者称为成员函数)。算法

10)方法 也称为成员函数,是指对象上的操做,做为类声明的一部分来定义。方法定义了能够对一个对象执行那些操做。数据库

语言
一种语言要称为面向对象语言,必须支持面向对象几个主要的概念。根据支持程度的不一样,一般所说的面向对象语言能够分红两类:基于对象的语言和面向对象的语言。
基于对象的语言
基于对象的语言仅支持类和对象,举例来讲,Ada就是一个典型的基于对象的语言,由于它不支持继承、多态,此外其余基于对象的语言还有Alphard、CLU、Euclid、Modula。
面向对象的语言
面向对象的语言支持的概念包括:类与对象、继承、多态。
面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言自己每每吸收了其余语言的精华,而又尽可能剔除他们的不足,所以面向对象的特征特别明显,充满了蓬勃的生机;另一些则是对现有的语言进行改造,增长面向对象的特征演化而来的。如由Pascal发展而来的Object Pascal,由C发展而来的Objective-C,C++ ,由Ada发展而来的Ada95等,这些语言保留着对原有语言的兼容,并非纯粹的面向对象语言,但因为其前身每每是有必定影响的语言,所以这些语言依然宝刀不老,在程序设计语言中占有十分重要的地位。编程

优势
面向对象出现之前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。在面向过程程序设计中,问题被看做一系列须要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们能够被全部的函数访问。每一个函数均可以具备它们本身的局部数据。
这种结构很容易形成全局数据在无心中被其余函数改动,于是程序的正确性不易保证。面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操做紧密地连结在一块儿,并保护数据不会被外界的函数意外地改变。
比较面向对象程序设计和面向过程程序设计,还能够获得面向对象程序设计的其余优势:
1)数据抽象的概念能够在保持外部接口不变的状况下改变内部实现,从而减小甚至避免对外界的干扰;
2)经过继承大幅减小冗余的代码,并能够方便地扩展示有代码,提升编码效率,也减低了出错几率,下降软件维护的难度;
3)结合面向对象分析、面向对象设计,容许将问题域中的对象直接映射到程序中,减小软件开发过程当中中间环节的转换过程;
4)经过对对象的辨别、划分能够将软件系统分割为若干相对为独立的部分,在必定程度上更便于控制软件复杂度;
5)以对象为中心的设计能够帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;
6)经过对象的聚合、联合能够在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。函数

设计方法
对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机均可看做对象,它不只能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和做用于数据的操做(体现事物的行为)构成一独立总体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所但愿的行为。在对内的操做一般称为方法。
类:类是对象的模板。即类是对一组有相同数据和相同操做的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,造成类层次结构。
消息:消息是对象之间进行通讯的一种规格说明。通常它由三部分组成:接收消息的对象、消息名及实际变元。
面向对象主要特征:
封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个总体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具备那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者没必要知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的所有描述,同时可修改和扩充。继承具备传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,若是没继承性机制,则类对象中数据、方法就会出现大量重复。继承不只支持系统的可重用性,并且还促进系统的可扩充性。
多态性:对象根据所接收的消息而作出动做。同一消息为不一样的对象接受时可产生彻底不一样的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将全部的实现细节都留给接受消息的对象自行决定,如是,同一消息便可调用不一样的方法。例如:Print消息被发送给一图或表时调用的打印方法与将一样的Print消息发送给一正文文件而调用的打印方法会彻底不一样。多态性的实现受到继承性的支持,利用类继承的层次关系,把具备通用功能的协议存放在类层次中尽量高的地方,而将实现这一功能的不一样方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不一样的响应。在OOPL中可经过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们通常思惟方式的描述范式。方法是容许做用于该类对象上的各类操做。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。经过封装能将对象的定义和对象的实现分开,经过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
面向对象设计是一种把面向对象的思想应用于软件开发过程当中,指导开发活动的系统方法,是创建在“对象”概念基础上的方法学。对象是由数据和允许的操做组成的封装体,与客观实体有直接对应关系,一个对象类定义了具备类似性质的一组对象。而每继承性是对具备层次关系的类的属性和操做进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。。按照Bjarne STroustRUP的说法,面向对象的编程范式:
l 决定你要的类;
2 给每一个类提供完整的一组操做;
3 明确地使用继承来表现共同点。
由这个定义,咱们能够看出:面向对象设计就是“根据需求决定所需的类、类的操做以及类之间关联的过程”。工具

特色
面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是面向对象设计方法最主要的特色和成就。面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间屡次转换映射的繁杂过程,是一种颇有发展前途的系统开发方法。
可是同原型方法同样, 面向对象设计方法须要必定的软件基础支持才能够应用,另外在大型的MIS开发中若是不经自顶向下的总体划分,而是一开始就自底向上的采用面向对象设计方法开发系统,一样也会形成系统结构不合理、各部分关系失调等问题。因此面向对象设计方法和结构化方法目前还是两种在系统开发领域相互依存的、不可替代的方法。编码

相关文章
相关标签/搜索