《Python程序设计基础》课件-第8章 面向对象程序设计(OOP)_第1页
《Python程序设计基础》课件-第8章 面向对象程序设计(OOP)_第2页
《Python程序设计基础》课件-第8章 面向对象程序设计(OOP)_第3页
《Python程序设计基础》课件-第8章 面向对象程序设计(OOP)_第4页
《Python程序设计基础》课件-第8章 面向对象程序设计(OOP)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录CONTENT8.18.28.38.4OOP概述类的定义和使用类的成员及其访问控制应用实例:学生成绩的处理8.1OOP概述

面向对象程序设计(ObjectOrientedProgramming,简称OOP)出现于20世纪80年代末期,是90年代以来主流程序设计技术。OOP主要是针对大型软件的设计而提出的。使用OOP技术设计的软件,代码的可读性、可维护性和重用性(复用性)都非常好。OOP技术比较符合人的思维方式,使软件设计更加灵活,大大提高了软件设计的效率。当今主流的程序设计语言都支持OOP,包括Python语言。

MORETHENTEMPLATE对象所谓对象就是任意存在的事物,是可以控制和操作的实体。在现实世界中,任何事物都是对象。它可以是人,也可以是物,还可以是一件事。同样的,用OOP设计出来的程序,也是由各种各样的对象组成的,对象之间互相关联、互相影响推动程序向前运行。对象通常由两部分组成,静态部分和动态部分。类在现实世界中,类是对一组具有相同的属性和行为(功能)的对象的抽象。比如,张三是一个教师,教师是一个类,张三是教师这个类的一个具体对象。类和对象之间的关系是抽象和具体的关系,类是对多个对象进行抽象的结果。一个对象是类的一个实例。在OOP中,类就是具有相同的属性(通常称为类的数据成员)和相同的行为或功能(通常称为类的方法成员)的一组对象的模板。用OOP设计程序时,通常是先设计类,然后再创建对象,这一点与现实世界不一样。浙江财经大学东方学院信息分院38.1.1OOP基本概念

MORETHENTEMPLATE消息和方法在现实世界中,对象之间是通过发送消息进行交流的。在OOP中,向一个对象发出请求称为消息,这个消息要求对象实现某一行为(功能)。而对象所能实现的行为(功能),在OOP中称之为方法(就是类的方法成员),它是通过函数来实现的。因此,向对象发送消息,实际上就是调用实现对应功能的函数。换句话说,对象根据接收到的消息,调用相应的方法(函数);反过来,有了方法(函数),对象才能响应相应的消息。事件事件是外部发生在对象上的动作。在OOP中,事件的发生不是随意的,某些事件仅发生在某些对象上,对象仅对这些事件做出反应,这在OOP中都是事先定义好的。OOP应用程序通常是事件驱动的。事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发、也可以由来自操作系统或其它应用程序的消息触发、甚至由应用程序本身的消息触发。浙江财经大学东方学院信息分院48.1.1OOP基本概念

MORETHENTEMPLATE封装在现实世界中,所谓封装就是把某个事物包围起来,外界是看不到内部的,甚至是不可知的。比如一台电视机,使用外壳封装起来的。OOP的封装与电视机的设计思想是一致的。在OOP中,封装是指把数据和实现操作的方法集中起来放在对象内部,并尽可能隐蔽对象的内部细节,只给外部留下少量接口,便于联系。封装使各个对象相对独立、相不干扰。封装使对象的使用者与设计者分开。这样,大大降低了人们操作的复杂程度,还有利于数据安全,从而减轻了开发一个软件糸统的难度。浙江财经大学东方学院信息分院58.1.2OOP特点

MORETHENTEMPLATE继承现代工业高效的重要原因:重用性。一件工业产品的生产通常都不是从零开始的,总是尽可能利用前有的成果。在OOP中,重用性主要通过继承机制来实现。所谓继承,是指在设计新类(称之为子类)的时候,直接把现有的类(称之为父类)拿过来用。也就是在父类的基础上设计子类,父类有的直接拿过来用,父类没有的可以新增。通过继承,使得类间具有共享特性,避免公用代码的重复开发,减少代码和数据冗余。浙江财经大学东方学院信息分院68.1.2OOP特点

MORETHENTEMPLATE多态多态性是指不同的对象收到相同的的消息时,执行不同的操作。比如,学校网站发布了有关开学的通知,学校里不同的人员看到这个相同的消息,所做出的的反应是不一样的。OOP中的多态是指由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。每个对象对消息做什么操作,在类中都是事先规定好的。多态使程序设计更加简单。浙江财经大学东方学院信息分院78.1.2OOP特点8.2类的定义和使用Python中定义类相当于先设计一个对象模板,规定每个对象的属性(数据成员),以及方法(函数成员)。

MORETHENTEMPLATE定义类的一般格式浙江财经大学东方学院信息分院98.2.1定义类

MORETHENTEMPLATE浙江财经大学东方学院信息分院108.2.1定义类【例8‑1】定义1个圆类(Circle),包含圆心坐标(x,y)和半径r属性,并设计具有计算面积、放大缩小、移动位置和显示信息4个方法。

MORETHENTEMPLATE创建对象格式Python创建对象的格式非常简单:

对象名=类名(参数)比如对于前面的Circle类,语句c1=Circle(7,8,9)表示创建创建一个圆心坐标为(7,8)半径为9的对象c1。对象属性的访问Python访问对象属性的格式比较简单:

对象名.属性名比如在前面的例子里,可以用c1.r去访问圆c1的半径,但是必须要求访问的权限才行浙江财经大学东方学院信息分院118.2.2对象的创建与使用

MORETHENTEMPLATE向对象发送消息Python向对象发送消息的格式也非常简单:

对象名.函数(参数)比如对于前面创建的对象c1,语句c1.zoom(1)表示向对象发送一条消息对对象进行放大缩小,该对象接受到这个消息以后,调用函数zoom,将对象的半径加1,完成放大功能。这里要特别说明的是,每当向对象发送消息调用相应的函数时,都会自动传递一个self对象作为参数,这个self对象就是该对象本身。浙江财经大学东方学院信息分院128.2.2对象的创建与使用

MORETHENTEMPLATE浙江财经大学东方学院信息分院138.2.2对象的创建与使用【例8‑2】对于前面定义的圆类(Circle),创建两个对象,计算面积,并调用其他的成员函数进行测试。8.3类的成员及其访问控制

MORETHENTEMPLATE__init__函数__init__函数是一个特殊的函数,它主要用于创建对象时给对象初始化,它相当于C++中的构造函数,有的Python教材也称之为构造函数,它有如下特点:__init__函数名是固定的,改成其它名字就不具备特殊性。带有两个下划线开头的函数是声明该属性为私有(有关访问控制后面会介绍),不能在类的外部被使用或直接访问,在创建对象时自动调用。__init__函数(方法)的第一个参数必须是self(self为习惯用法,也可以用别的名字),后面的参数则可以自由定义,和定义函数没有任何区别。类的数据成员(指实例变量,8.3.2节会介绍)在__init__函数中定义并初始化。浙江财经大学东方学院信息分院158.3.1__init__函数和__del__函数

MORETHENTEMPLATE__del__函数__del__函数也是一个特殊的函数,它主要用于撤销对象时做善后清理工作,它相当于C++中的析构函数,有的Python教材也称之为析构函数,它有如下特点:__del__函数名是固定的,改成其它名字就不具备特殊性。带有两个下划线开头的函数是声明该属性为私有(有关访问控制后面会介绍),不能在类的外部被使用或直接访问,在撤销对象时自动调用。__del__函数(方法)的第一个参数必须是self(self为习惯用法,也可以用别的名字),后面的参数则可以自由定义,和定义函数没有任何区别。浙江财经大学东方学院信息分院168.3.1__init__函数和__del__函数

MORETHENTEMPLATE浙江财经大学东方学院信息分院178.3.1__init__函数和__del__函数【例8‑3】给【例8-2】添加__del__函数

MORETHENTEMPLATE浙江财经大学东方学院信息分院188.3.1__init__函数和__del__函数【例8‑3】给【例8-2】添加__del__函数

MORETHENTEMPLATE数据成员之实例变量实例变量是在__init__函数中定义并初始化的,实例变量最大的特点是每个对象的实例变量值可以不同,前面定义的Circle类中,x、y、r就是实例变量。数据成员之类变量类变量是在类中函数的外部定义并初始化的,类变量的特点是对于所有对象,类变量的值是相同的,所以类变量通常用于表示所有对象属性值相同的属性,也就是共享属性。类变量的访问采用如下格式:

类名.属性名浙江财经大学东方学院信息分院198.3.2数据成员及其访问控制

MORETHENTEMPLATE浙江财经大学东方学院信息分院208.3.2数据成员及其访问控制【例8‑4】修改【例8-3】,使其能方便表示同心圆对象。

MORETHENTEMPLATE浙江财经大学东方学院信息分院218.3.2数据成员及其访问控制【例8‑4】修改【例8-3】,使其能方便表示同心圆对象。

MORETHENTEMPLATE数据成员之公有属性是指对数据成员的访问不做严格限制,用“对象名.变量名”可以直接访问的。Python默认的属性都是公有的。数据成员之私有属性是指数据成员名前加上"__"两个下划线,只能被本类的函数访问,不能被类外部函数访问的数据成员,即私有属性在类外部不能以“对象名.变量名”的方式访问。浙江财经大学东方学院信息分院228.3.2数据成员及其访问控制

MORETHENTEMPLATE浙江财经大学东方学院信息分院238.3.2数据成员及其访问控制【例8‑5】修改【例8-3】,将数据成员x,y改为私有属性。

MORETHENTEMPLATE浙江财经大学东方学院信息分院248.3.2数据成员及其访问控制【例8‑5】修改【例8-3】,将数据成员x,y改为私有属性。

MORETHENTEMPLATE函数成员之实例函数是指跟具体对象有关,调用时第1个参数必须是self的函数,我们前面例子中看到的函数都是实例函数函数成员之静态函数静态函数是指与具体对象无关的函数,通常静态函数用于访问类变量,但不能访问实例变量。在静态函数中访问类变量,要通过类名来引用。在定义静态函数时,函数头之前要用@staticmethod进行修饰。我们可以通过类名或对象名访问静态函数,格式如下:

类名(对象名).静态函数名(参数)浙江财经大学东方学院信息分院258.3.3函数成员及其访问控制

MORETHENTEMPLATE浙江财经大学东方学院信息分院268.3.3函数成员及其访问控制【例8‑6】修改【例8-4】,将move函数修改为静态函数

MORETHENTEMPLATE浙江财经大学东方学院信息分院278.3.3函数成员及其访问控制【例8‑6】修改【例8-4】,将move函数修改为静态函数

MORETHENTEMPLATE函数成员之公有属性与数据成员的公有属性用法相同。是指对函数成员的访问不做严格限制,用“对象名.函数名”可以直接访问的。Python默认的的函数成员属性都是公有的。函数成员之私有属性与数据成员的私有属性用法相同。是指函数成员名前加上"__"两个下划线,只能被本类的函数访问,不能被类外部函数访问的函数成员,即私有属性在类外部不能以“对象名.函数名”的方式访问。一般私有属性的函数作为本类的工具函数,不对外使用。浙江财经大学东方学院信息分院288.3.3函数成员及其访问控制

MORETHENTEMPLATE浙江财经大学东方学院信息分院298.3.3函数成员及其访问控制【例8‑7】修改【例8-6】,将dispinfo改为私有属性,使程序运行仍然能显示圆的相关信息。

MORETHENTEMPLATE浙江财经大学东方学院信息分院308.3.3函数成员及其访问控制【例8‑7】修改【例8-6】,将dispinfo改为私有属性,使程序运行仍然能显示圆的相关信息。8.4学生成绩处理实例1,35926778%浙江财经大学东方学院信息分院328.4学生成绩处理实例【例8-8】将第7章中学生成绩处理的案例,用OOP的设计方法加以实现

思路:设计学生类studengt,包含学号、姓名、各科成绩、排名等属性,设计初始化函数和学生信息格式化显示函数。设计班级类oneclass,包含若干学生对象(用列表表示),同时包含各门课的最高分、最低分和平均分属性,设计初始化函数、排名函数和成绩表显示函数。1,35926778%浙江财经大学东方学院信息分院338.4学生成绩处理实例【例8-8】将第7章中学生成绩处理的案例,用OOP的设计方法加以实现

思路:设计学生类studengt,包含学号、姓名、各科成绩、排名等属性,设计初始化函数和学生信息格式化显示函数。设计班级类oneclass,包含若干学生对象(用列表表示),同时包含各门课的最高分、最低分和平均分属性,设计初始化函数、排名函数和成绩表显示函数。1,35926778%浙江财经大学东方学院信息分院348.4学生成绩处理实例【例8-8】将第7章中学生成绩处理的案例,用OOP的设计方法加以实现

思路:设计学生类studengt,包含学号、姓名、各科成绩、排名等属性,设计初始化函数和学生信息格式化显示函数。设计班级类oneclass,包含若干学生对象(用列表表示),同时包含各门课的最高分、最低分和平均分属性,设计初始化函数、排名函数和成绩表显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论