李际军老师“面向对象程序设计”课程第一课笔记整理
20世纪90年代以来面向对象程序设计(object oriented programming, 简称oop) 迅速地在全世界流行, 并一跃成为程序设计的主流技术。
现在,面向对象程序设计的思想已经被越来越多的软件设计人员所接受,不仅因为它是一种最先进的新颖的计算机程序设计思想,更主要的是这种新的思想更接近人的思维活动, 人们利用这种思想进行程序设计时,可以很大程度地提高编程能力, 减少软件维护的开销。
面向对象程序设计方法是通过增加软件的可扩充性和可重用性来提高程序员的编程能力的。这种思想与我们以前使用的方法有很大的不同,并且在理解上有一些难点。
程序设计范型是指设计程序的规范、 模型和风格, 它是一类程序设计语言的基础。
程序=算法+数据结构
如c、 pascal、 ada
函数式程序设计范型:程序被看作“描述输入与输出之间关系” 的数学函数。
如lisp
在现实世界中,任何事物都是对象。可以是有形的具体存在的事物, 也可以是无形的抽象的事件。
现实世界中的对象,具有以下特性:
在面向对象程序设计中,对象是描述其属性的属性及对这些数据施加的一组操作封装在一起构成的统一体。
对象一般可以表示为: 属性+操作(方法)
d 对象的属性是对象的静态特征,服务是动态特征,并且对象的属性只能由本对象的服务来操作
a
在实现世界中,“类”是一组具有相同属性和行为的对象的抽象。
类和对象之间的关系是抽象和具体的关系。 类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中, 类就是具有相同数据和相同操作的一组对象的集合。 是对具有相同数据结构和相同操作的一类对象的描述。
在面向对象程序设计中, 总是先声明类, 再由类生成其对象。
- 如:颜色与鲜花联系在一起只是鲜花的一种状态,因为表示颜色的是一些值:红、黄、紫、白等, ++不是一个类++;
- 而颜色同包括复杂颜色计算机的图形处理系统联系在一起,这时的颜色是基于颜色三元素(红、绿、蓝)的成分比例和色度的变量,可以附带很多行为,所以++是一个类++。
可以看出,一次能正确划分类是不可能的,所以需要不断的对实际问题进行分析和整理。
如例,定义类mathhelper
:
class mathhelper{ public: double sqrt(double anumber); double power(double anumber,int raiseto); double inverse(double anumber); private: };
分析有何不妥!没有需要管理的私有数据!
类是()的集合,分类的依据是()
具有相同属性和服务的一组对象 抽象
面向对象设计技术必须提供一种机制允许一个对象与另一个对象的交互,这种机制叫消息传递。
在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。当对象收到消息时,就调用有关的方法,执行相应的操作。消息是一个对象要求另一个对象执行某个操作的的规格说明,通过消息传递才能完成对象之间的相互请求或相互协作。
方法就是对象所能执行的操作。方法包括界面和方法体两部分。
在c++语言中方法是通过函数来实现的,称为成员函数
对象根据接收到的消息,调用相应的方法;反过来, 有了方法,对象才能响应相应的消息。
抽象是人类认识问题的最基本的手段之一。
抽象是通过特定的实例(对象)抽取共同性质以后形成概念的过程。抽象是对系统的简化描述和规范说明,他强调了系统中的一部分细节和特性,而忽略了其他部分。
抽象包括两个方面:数据抽象和代码抽象(或称行为抽象)。前者描述某类对象的属性和状况,也就是此类对象区别于彼类对象的特征物理量;后者描述了某类对象的共同行为特征或具有的共同操作。
在面向对象的程序设计方法中,对一个具体问题的抽象分析结果,是通过类来描述和实现的。
在现实世界中,封装就是把某个事物包围起来,使外界不知道该事物的具体内容。
在面向对象程序设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节。
封装应该具有如下几个条件:
d 封装只是抽象的封装,外界可以直接干预
c
d 子类可以全部继承父类的属性和服务,也可部分继承父类的属性和服务
c
继承是在一个已经建立的类的基础上再接着声明一个新类的扩展机制,原先已经建立的类称为基类,在基类之下扩展的类称为派生类,派生类又可以向下充当继续扩展的基类,因此构成层层派生的一个动态扩展过程。
派生类享有基类的数据结构和算法,而本身又具有增加的行为和特性,因此继承的机制促进了程序代码的可重用性。
一个基类可以有多个派生类,一个派生类反过来可以具有多个基类,形成复杂的继承树层次体系。
基类是一个简单的类,描述相对简单的事物,派生类是一个复杂些的类,处理相对复杂的现象。
这样一种简单到复杂的关系正是人们认识自然过程的线性映射,软件的可扩充性建立在这样一种对自然的正确回归上便拥有了坚实的基础。
多态性是指不同的对象收到相同的消息时产生多种不同的行为方式。
c++支持两种多态性:编译时的多态性(重载)和运行时的多态性(虚函数)。
如对本文有疑问, 点击进行留言回复!!
现在动物乐园有3个动物,袋鼠(花花、2岁、2条腿)、河马(憨憨、1岁、3条腿)、草泥马(草草、3岁、4条腿),分别使用面向对象学习前的知识和对象的知识完成对该数组的增删改查
网友评论