面向对象编程
一:什么是面向对象编程?
面向对象(Object-Oriented)述语源于挪威的Kristen Nygaard在开发Simula-67程序语言时使用了对象(Object)概念。面向对象编程是以对象为基础,在对象之间传递消息来解决问题(actor theory)的编程方法。
二:为什么要使用面向对象编程?
1.相比过程化编程,使用面向对象编程方法写出来的程序更具有重用性和扩展性,而且可以大大提高开发效率。比如一个公司可以建立自己的程序框架(Application Framework)和函数库,然后可以在多个项目中使用。
2.面向对象编程方法的思维模式与人们的思维模式相同,所以更容易分析、表现和解决现实世界中的具体问题。
3.可以使用与面向对象相关的工具,比如建模工具(Rational Rose)、开发工具(Visual Studio.NET、J Builder)、形象管理工具(Rational Clear Case)。
4.面向对象编程方法的特性更适合多人合作开发(Team Development)。黑匣子(Black Box)-是面向对象编程重要特性之一。你可以使用UML建模,然后按类或组件为一个单位交给程序员。因为这些任务单位(类或组件)之间依赖性很小,所以程序员写代码时不用考虑其他问题。
5.面向对象编程方法更适合目前流行的开发工具和技术。目前流行的开发工具和技术都是以面向对象编程方法为基础的,所以你不知道面向对象编程,学习和应用它们就比较困难了。
三:面向对象编程方法的特性
1.面向对象编程方法是以对象为基础,所实现的功能是由对象之间传递消息来完成的。
2.所有对象都有自己的内存空间,而且可以包含其他对象。
3.所有对象是类的实例(Instance)
类是相同对象的集合(Set Of Objects)
类定义对象的属性和方法(Method)
1>对象(Object)
定义: An object is a software bundle of variables and related methods.
现实世界中每个物体都有自己的变量和行为,比如说手机,型号,价格等就是手机的变量,手机可以发送短消息,下载铃声等就是手机的行为。面向对象编程当中的对象是从现实世界中的物体中抽象出来的。在面向对象编程中,变量叫作属性(Property),行为叫作方法(Method)。对象所知道的(Knows)和所能做的(Can do)都是由其属性和方法来决定的。
2>消息(Message)
对象之间的交互是利用消息来完成的,每个对象收到消息之后,就执行相应的操作,然后返还结果。有时候对象需要附加的信息,来执行操作。比如你的手机对象要发送短消息,就必须知道要发给谁。这些附加信息是通过消息按参数的方式传递给对象的。需要注意的是,虽然是相同的消息,但对于不同的对象,执行后的结果是不一样的。对
3>类(Class)
定义:A class is a blueprint, or prototype, that defines the variables and the methods common to all objects of a certain kind.
类是相同对象的集合(Set Of Objects)。类定义相同对象的属性和方法。
4>封装(Encapsulation)
封装就是上面所说的黑匣子(Black Box)特性。封装特性提供外界与对象交互的控制机制,我们可以把外界所需要的服务公开,而把其他服务隐藏在对象内部。这样可以让程序简单化,而且可以避免调用不必要的服务所带来的错误。
5>抽象化(Abstraction)
抽象化是分析、过滤现实世界中的事物,导出对象的过程。抽象化是解决复杂问题的基本方法。程序员出身的分析员在做分析时常犯的错误是把具体实现考虑进来。其实分析阶段不用考虑某个功能应该怎样写成代码,只要把业务流程分析,然后导出必要的对象就可以了。
6>继承与类型的兼容性(Inheritance)
使用面向对象编程方法的最大好处之一最是可以很容易地扩展原由的程序代码。这个特性就是继承。我们可以继承一个类生成新的类,原有类叫作父类(Parent Class)新类叫作子类(Child Class)。子类不仅拥有父类的所有属性和方法(不用写额外的代码),而且可以添加别的属性和方法。大多数编程语言对数据类型的定义是严格的,就是说,你不能在两个不同类型的数据之间进行赋值。但有些例外,我们可以把子类的对象赋值给父类对象。
7>滞后联编与多态(Dynamic Binding & Ploymophism)
滞后联编是与静态联编(Static Binding)相反的一种联编方式。静态联编指的是由编译器或连接器来分析对象的方法调用,它们是通过调用函数或过程所占有的特殊内存地址(函数地址)来代替直接调用。而滞后联编是在程序运行时才确定所调用对象方法的实际地址。这种技术的优点被称作多态。如果运用好多态特性(结合继承特性),我们可以编写高重用性、高扩展性的程序。
8>Overriding & Overloading
Overriding指的是可以覆盖或重定义父类的动态方法(在子类中),Overloading 指的是在一个类或其子类中可以使用相同名称的方法,但参数必须要不同。
总 结:
1.使用面向对象编程方法我们可以写出具有高重用性和扩张性的程序,而且可以大大提高开发效率。
2.面向对象编程是以对象为基础,在对象之间传递消息来解决问题(actor theory)的编程方法(All is object)。
3.在项目初期没有很好的分析和设计,就不能写出具有重用性和扩展性的程序,而且会降低开发效率,所以在实际的项目中运用面向对象编程方法,需要慎重考虑。