51面向对象程序设计的基本思想Word格式.docx
- 文档编号:19347085
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:10
- 大小:118.66KB
51面向对象程序设计的基本思想Word格式.docx
《51面向对象程序设计的基本思想Word格式.docx》由会员分享,可在线阅读,更多相关《51面向对象程序设计的基本思想Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
3、硬件要求
建议本节课在多媒体电脑教室中完成,最好有广播教学系统或投影仪,为拓展学习,学生机应允许上互联网。
4、所需软件:
学生机要安装VB6.0或以上版本。
5、所需课时:
1个课时,如无预习,课程将较为紧凑。
四、教学过程
导入:
1、简要介绍本节课的教学目标:
认识面向对象思想的由来及其基本思想,通过阅读或调试用两种不同思想实现解决同一问题的两段程序,认清面向对象程序设计的优点和结构化程序设计的缺陷。
2、问题导入。
请同学们阅读本节课文最前面的引导文字段,一分钟后请同学发言。
通过引导抛出结论:
“结构化程序设计存在固有的缺陷:
以功能为核心,数据和函数分开,使得后期维护难,安全性差等且不适合解决复杂问题。
”
(一)面向对象思想的产生
1、面向对象技术是程序设计发展的必然趋势
通过前面的学习我们知道,程序设计语言发展到现在经历了机器语言、汇编语言再到高级语言。
高级语言可分为=1\*GB3①面向过程的程序设计语言=2\*GB3②面向对象的程序设计语言。
高级语言的出现为计算机的应用开辟了广阔的前景。
计算机能解决的问题从纯计算问题开始发展到现在能处理现实世界方方面面的问题。
面向过程的程序设计方法以算法(即程序功能)为中心,把过程和数据作为互相对立的部分,即“程序=算法+数据结构”。
因此当描述事物的数据结构发生了改变,所有与该数据结构相关的语句、过程和函数都要重新设计。
要使数据与程序始终保持相容,已成为程序员开发的一个沉重负担。
还有面向过程程序设计方法存在着安全性差、代码可重用性差等缺陷,随着软件开发规模的不断扩大,结构化的方法已不能驾驭软件开发的过程。
人们从编程解决问题的实践中逐渐总结出:
以接近人们思维方式来编程解决问题的面向对象技术代表了程序设计发展的方向。
因为它能做到高效率、易维护、安全性强、代码可重用率高。
2、面向对象技术的思想
面向对象程序设计(ObjectOrientedProgramming,简称OOP),是基于一种很自然和朴素的思想。
计算机软件开发的过程就是人们使用各种计算机语言将现实世界映射到计算机世界的过程。
计算机系统通常是在一定对象上执行一定行为的操作,要获得灵便和可重用的系统,最好的办法就是将软件结构建立在对象上,而不是行为之上,使计算机求解问题更加类似于人类的逻辑思维活动,让程序设计按照我们平时认识客观世界的方式进行。
客观世界是由物质与意识构成的。
现实生活中,“一个学生张三”表达的是具体的事物,而“学生”是一种意识。
物质表达具体的事物,意识是对客观存在的事物的一种抽象概括。
在面向对象系统的求解空间中,有对象和类,若把现实事物直接映射到面向对象的软件系统求解空间,那么物质对应于对象,而意识对应于类(Class)。
客观世界中,学生是人们对所有具体的学生的抽象概括,在面向对象系统中可用学生类来表达,而学生张三是学生的一个具体的实例。
在面向对象系统中可表示为一个对象,这个对象就是学生类中的一个实例,如下图所示。
面向对象更接近于计算机世界的物理实现;
面向对象思想则符合人们的认识习惯。
面向对象作为一种思想和编程语言,为程序从分析、设计到编码整个过程提供了一个完整的解决方案。
(二)面向对象程序设计
活动一:
以下是处理学生成绩的两个程序,学生成绩1.vbp用面向过程的方法设计,学生成绩2.vbp用面向对象的方法编写,试比较它们。
1、开学生成绩1.vbp;
阅读并运行该程序(见程序一)。
'
程序一
PrivateSubForm_click()
DimiAsInteger,nAsInteger
‘n为学生数
DimStNameAsString
Dimsc1AsInteger
Dimsc2AsInteger
Dimsc3AsInteger
DimtotalAsSingle
DimpromptAsString
n=Val(InputBox("
输入学生数"
))
Print"
姓名"
&
vbTab&
"
成绩1"
成绩2"
成绩3"
加权总分"
证书类型"
Fori=1Ton
StName=InputBox("
输入第"
i&
位同学的姓名"
)
sc1=Val(InputBox("
输入该同学的软硬件基础成绩"
sc2=Val(InputBox("
输入该同学的文字处理技巧成绩"
sc3=Val(InputBox("
输入该同学的网络技术应用成绩"
total=sc1*0.2+sc2*0.5+sc3*0.3
输出表头
prompt=StName&
Str(sc1)&
Str(sc2)&
Str(sc3)&
Str(total)&
vbTab
If(sc1>
=85Andsc2>
=85Andsc3>
=85)Then
Printprompt&
优秀"
Else
If(total>
70Andsc1>
=60Andsc2>
=60Andsc3>
=60)Then
合格"
Else
不合格"
EndIf
EndIf
Nexti
EndSub
马上行动:
阅读本程序请问答
(1)找出程序中计算总分的语句。
(2)找出程序中判断证书类型的语句。
2、打开学用面向对象方法生成的学生成绩2.vbp。
运行该程序后界面如下图所示:
讨论:
两个程序的执行过程有什么不同?
3、观察“学生成绩2.vbp”的程序(见程序二)。
示
提_
这段代码定义了一个“学生类”。
类定义中包含了同类对象共同的属性,这个“学生类”的属性有姓名和三门课成绩,以及“行为(方法)”,如计算总分方法、判断证书类型方法等。
VB中,上述属性和方法都是封装在类模块中的。
示_
与前一个程序相比可以发现程序一中实现计算总分的表达式和判断证书类型等功能的选择结构语句在程序二的代码窗口中已经找不到了,取而代之的是对象方法的调用语句.
用红色标出的语句全部是stu对象的方法调用。
程序二
定义学生类
DimstuAsNewStudent
DimnAsInteger
窗体启动
PrivateSubForm_Load()
labN.Caption=1
‘学生序号标签显示1
单击“处理”按钮事件
PrivateSubCommand1_Click()
DimStuRecAsString
StName=TxtName.Text
sc1=Val(TxtScore1.Text)
sc2=Val(TxtScore2.Text)
sc3=Val(TxtScore3.Text)
将学生的信息赋给对象
Callstu.SetInf(StName,sc1,sc2,sc3)
输出结果
StuRec=stu.GetName()&
StuRec=StuRec&
stu.GetScore
(1)&
stu.GetScore
(2)&
stu.GetScore(3)
stu.GetTotal()&
stu.Judge()
List1.AddItemStuRec
n=n+1
labN.Caption=n+1
文本框清零
TxtName="
"
TxtScore1=0:
TxtScore2=0:
TxtScore3=0
TxtName.SetFocus
阅读本程序问答
(1)找出程序中计算总分的语句。
(2)找出程序中判断证书类型的语句。
4、分别在程序一和程序二的计算总分和判断证书类型的语句之间添加语
句“SC1=0”,再次运行两个程序,看结果有什么不同。
小提示:
由于中途改变了软硬件基础成绩数据,使得程序一的运行结果受到了影响,而程序二不会受任何影响。
活动二
从VB的类模块中认识类、对象和实体
1、双击“学生成绩2.vbp”程序的工程资源管理窗口中类模块下的“student”,打开类模块代码窗口,如下图所示
2、阅读其中的程序,如下图所示:
定义存放学生姓名的变量和存放三门课成绩的数组
Privatem_nameAsString
Privatem_score(3)AsInteger
实现获得学生姓名的方法
PublicSubSetInf(nameAsString,s1AsInteger,s2AsInteger,s3AsInteger)
m_name=name
m_score
(1)=s1
m_score
(2)=s2
m_score(3)=s3
实现输出学生信息的方法
PublicFunctionGetName()AsString
GetName=m_name
EndFunction
PublicFunctionGetScore(indexAsInteger)AsInteger
GetScore=m_score(index)
实现计算总分的方法
PublicFunctionGetTotal()AsSingle
GetTotal=m_score
(1)*0.2+m_score
(2)*0.5+m_score(3)*0.3
实现判断证书类型的方法
PublicFunctionJudge()AsString
Ifm_score
(1)>
=85Andm_score
(2)>
=85Andm_score(3)>
=85Then
Judge="
ElseIfGetTotal()>
70Andm_score
(1)>
=60Andm_score
(2)>
=60Andm_score(3)>
=60Then
无"
阅读以上学生类定义程序段后
(1)写出Student类中定义学生属性的部分
m_name用于表示
m_score(3)用于表示
(2)写出Student类中定义方法的部分。
子过程SetInf的作用是获取学生对象的姓名和三门课成绩;
函数GetScore的作用是输出学生对象的姓名和三门课成绩;
函数GetName的作用是
函数Judge的作用是
在程序二中的语句“Callstu.SetInf(StName,sc1,sc2,sc3)”后,添加语句“m_name="
冯海"
”,调试运行程序,看结果有何影响.原因是什么?
如果要计算四门课的成绩,该如何修改程序一和程序二,两者的修改方法有什么不同?
归纳总结:
两种程序设计方法的异同
1、运行机制不同
程序一的运行过程完全由程序控制,什么时候输入数据,什么时候计算得出结果,都是由程序员预先设计好的,不能中途予以改变。
若某用户在输入完第一个学生成绩的硬件基础成绩,开始输入文字出理技巧成绩时,发觉先前输入的成绩错了,需要修改,这时只能结束程序,重新运行后再次输入,而无法回到上一步修改输入。
程序二则不同,用户可随时根据自己的意愿与应用程序进行交互。
2、安全性不同
前面的活动一,在两个程序中仅仅添加了改变软硬件基础成绩数据这一语句,程序一的运行结果受到了影响,和用户预期的结果相差甚远,而程序二则没有受到任何影响。
试想一下,如果在一个由数十人甚至数百人合作开发的大型软件系统中,万一需要修改某一数据,对于使用面向过程方法设计编写的程序来说,其后果是不可预计的。
而对于使用面向对象的程序设计方法编写的程序则相对安全得多。
另外,在程序二中不能使用变量赋值语句改变Student类模块中的变量值,如m_name=”冯海”,也就是说不能随意改变某一学生对象的姓名等数据。
原因是类里的m_name等变量的定义语句使用了Private限定词,只允许在类里使用这些变量,而对于主程序,必须通过调用类中的方法(操作接口),如SetInf为其赋值。
这样安全性更强了。
3、实现具体功能的方法相同
两种方法设计的程序,也有其共同之处,如程序一中有实现“判断证书类型”的程序段,程序二的Student类模块中也有实现“判断证书类型”的功能程序段,两个程序都使用了结构化的方法来设计算法,即都采用了选择结构。
也就是说,无论面向过程的程序,还是面向对象的程序,其实现具体功能的代码都采用了结构化程序设计方法来设计。
(注:
本节部分内容引自上海科教出版社出版的普通高中信息技术课程实验教材《算法与程序设计》)
五、课外拓展
课外练习:
初步总结面向对象程序设计与面向过程程序设计的异同。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 面向 对象 程序设计 基本 思想