1、5.1面向对象程序设计的基本思想( 一) 教学设计思想与理论依据: 算法与程序设计模块的教学强调经过该模块的学习, 学生应该体验客观世界的计算机对象化表征和算法思维, 掌握几种基本算法; 能运用面向对象的方法, 设计解决简单问题的算法, 并能初步使用一种面向对象的程序设计语言, 编制程序实现算法解决该问题。( 二) 教学内容分析教材以广东教育出版社出版的信息技术( 选修一) 算法与程序设计第五章第一节内容为结构框架, 本节主要介绍面向对象思想产生的必然性和面向对象思想的机制, 以及经过对同一个问题采取面向过程和面向对象两种不同思想解决的区别, 让学生感受到面向对象程序设计的优越性。( 三) 学
2、生情况分析: 学生已学完教材前四章内容, 基本掌握了传统的面向过程结构化程序设计方法, 有一定的程序设计基础。( 四) 教学策略与模式: 采用讲解、 任务驱动、 实践和学生自主学习相结合的教学方式( 五) 教学资源: 硬件: 多媒体电脑教室, 投影仪, 广播系统 软件: 学生机安装vb6.0( 六) 教学目标: 知识与技能1.了解面向对象程序设计的基本思想和面向对象思想的由来, 并能够举例说明现实世界与面向对象系统之间的对应关系。2.了解面向对象程序设计的优越性并初步理解其实现的机制。过程与方法经历分析、 调试解决同一问题的两种不同实现思想的程序, 初步理解面向对象程序设计的优势及面向过程程序
3、设计的缺陷。情感态度和价值观( 1) 关注传统结构化程序设计存在的问题。( 2) 产生学习面向对象程序设计技术的愿望。( 3) 关注面向对象技术是当前程序设计的重要发展方向。( 七) 重点难点 教学重点( 1) 传统结构化程序设计存在的问题( 2) 面向对象程序设计所具有的优点。教学难点( 1) 面向对象思想的产生。( 2) 传统结构化程序设计与面向对象程序设计的基本点比较。( 3) 实现面向对象程序设计的基本机制。教学过程: 引入: 请同学们阅读本节课文最前面的引导文字段, 一分钟后请同学发言。经过引导抛出结论: ”结构化程序设计存在固有的缺陷: 以功能为核心, 数据和函数分开, 使得后期维
4、护难, 安全性差等且不适合解决复杂问题。”新课讲解: 一.面向对象思想的产生: 1.教师讲解介绍面向对象技术是程序设计发展的必然趋势2. 讲解面向对象技术的思想( 1) 面向对象程序设计( Object Oriented Programming,简称OOP) , 是基于一种很自然和朴素的思想。计算机软件开发的过程就是人们使用各种计算机语言将现实世界映射到计算机世界的过程。( 2) 举例说明现实世界与面向对象系统之间的对应关系: 面向对象系统求解空间具体事物; 一个对象 学生的实例抽象概念: 学生类现实问题空间物质: 一个学生张三意识: 学生 二.面向对象程序设计: 活动一: 以下是处理学生成绩
5、的两个程序, 学生成绩1.vbp用面向过程的方法设计, 学生成绩2.vbp用面向对象的方法编写, 试比较它们。1、 打开学生成绩1.vbp;阅读并运行该程序( 见程序一) 。程序一Private Sub Form_click()Dim i As Integer, n As Integer n为学生数Dim StName As StringDim sc1 As IntegerDim sc2 As IntegerDim sc3 As IntegerDim total As SingleDim prompt As Stringn = Val(InputBox(输入学生数)Print 姓名 & vbT
6、ab & 成绩1 & vbTab & 成绩2 & vbTab & 成绩3 & vbTab & 加权总分 & vbTab & 证书类型For i = 1 To nStName = InputBox(输入第 & i & 位同学的姓名)sc1 = Val(InputBox(输入该同学的软硬件基础成绩)sc2 = Val(InputBox(输入该同学的文字处理技巧成绩)sc3 = Val(InputBox(输入该同学的网络技术应用成绩)total = sc1 * 0.2 + sc2 * 0.5 + sc3 * 0.3输出表头prompt = StName & vbTab & Str(sc1) & vb
7、Tab & Str(sc2) & vbTab & Str(sc3) & vbTab & Str(total) & vbTabIf (sc1 = 85 And sc2 = 85 And sc3 = 85) Then Print prompt & 优秀Else If (total 70 And sc1 = 60 And sc2 = 60 And sc3 = 60) Then Print prompt & 合格 Else Print prompt & 不合格 End IfEnd IfNext iEnd Sub马上行动: 阅读本程序请问答( 1) 找出程序中计算总分的语句。 ( 2) 找出程序中判断证
8、书类型的语句。2、 打开学用面向对象方法生成的学生成绩2.vbp。运行该程序后界面如下图所示: 讨论: 两个程序的执行过程有什么不同? 3、 观察”学生成绩2.vbp”的程序( 见程序二) 。程序二定义学生类Dim stu As New StudentDim n As Integer n为学生数窗体启动Private Sub Form_Load()labN.Caption = 1 学生序号标签显示1End Sub单击”处理”按钮事件Private Sub Command1_Click()Dim StuRec As StringDim StName As StringDim sc1 As Int
9、egerDim sc2 As IntegerDim sc3 As IntegerStName = TxtName.Textsc1 = Val(TxtScore1.Text)sc2 = Val(TxtScore2.Text)sc3 = Val(TxtScore3.Text)将学生的信息赋给对象 用红色标出的语句全部是stu对象的方法调用。提示Call stu.SetInf(StName, sc1, sc2, sc3)输出结果StuRec = stu.GetName() & vbTabStuRec = StuRec & stu.GetScore(1) & vbTab & stu.GetScore(
10、2) & vbTab & stu.GetScore(3)StuRec = StuRec & vbTab & stu.GetTotal() & vbTab & stu.Judge()List1.AddItem StuRecn = n + 1labN.Caption = n + 1文本框清零TxtName = TxtScore1 = 0: TxtScore2 = 0: TxtScore3 = 0TxtName.SetFocusEnd Sub马上行动: 阅读本程序问答( 1) 找出程序中计算总分的语句。 ( 2) 找出程序中判断证书类型的语句。4、 分别在程序一和程序二的计算总分和判断证书类型的语句
11、之间添加语句”SC1=0”, 再次运行两个程序, 看结果有什么不同。小提示: 由于中途改变了软硬件基础成绩数据, 使得程序一的运行结果受到了影响, 而程序二不会受任何影响。活动二 从VB的类模块中认识类、 对象和实体1、 双击”学生成绩2.vbp”程序的工程资源管理窗口中类模块下的”student”,打开类模块代码窗口, 如下图所示2、 阅读其中的程序, 如下图所示: 定义存放学生姓名的变量和存放三门课成绩的数组Private m_name As StringPrivate m_score(3) As Integer实现获得学生姓名的方法Public Sub SetInf(name As St
12、ring, s1 As Integer, s2 As Integer, s3 As Integer)m_name = namem_score(1) = s1m_score(2) = s2m_score(3) = s3End Sub实现输出学生信息的方法Public Function GetName() As StringGetName = m_nameEnd FunctionPublic Function GetScore(index As Integer) As IntegerGetScore = m_score(index)End Function实现计算总分的方法Public Funct
13、ion GetTotal() As SingleGetTotal = m_score(1) * 0.2 + m_score(2) * 0.5 + m_score(3) * 0.3End Function实现判断证书类型的方法Public Function Judge() As StringIf m_score(1) = 85 And m_score(2) = 85 And m_score(3) = 85 Then Judge = 优秀ElseIf GetTotal() 70 And m_score(1) = 60 And m_score(2) = 60 And m_score(3) = 60
14、Then Judge = 合格 Else Judge = 无End IfEnd Function马上行动: 阅读以上学生类定义程序段后( 1) 写出Student类中定义学生属性的部分m_name用于表示 m_score(3)用于表示 ( 2) 写出Student类中定义方法的部分。子过程SetInf的作用是获取学生对象的姓名和三门课成绩; 函数GetScore的作用是输出学生对象的姓名和三门课成绩; 函数GetName的作用是 函数Judge的作用是 如果要计算四门课的成绩,该如何修改程序一和程序二,两者的修改方法有什么不同? 归纳总结: 两种程序设计方法的异同1、 运行机制不同程序一的运行
15、过程完全由程序控制, 什么时候输入数据, 什么时候计算得出结果, 都是由程序员预先设计好的, 不能中途予以改变。若某用户在输入完第一个学生成绩的硬件基础成绩, 开始输入文字出理技巧成绩时, 发觉先前输入的成绩错了, 需要修改, 这时只能结束程序, 重新运行后再次输入, 而无法回到上一步修改输入。程序二则不同, 用户可随时根据自己的意愿与应用程序进行交互。2、 安全性不同前面的活动一, 在两个程序中仅仅添加了改变软硬件基础成绩数据这一语句, 程序一的运行结果受到了影响, 和用户预期的结果相差甚远, 而程序二则没有受到任何影响。试想一下, 如果在一个由数十人甚至数百人合作开发的大型软件系统中, 万
16、一需要修改某一数据, 对于使用面向过程方法设计编写的程序来说, 其后果是不可预计的。而对于使用面向对象的程序设计方法编写的程序则相对安全得多。另外, 在程序二中不能使用变量赋值语句改变Student类模块中的变量值, 如m_name=”冯海”, 也就是说不能随意改变某一学生对象的姓名等数据。原因是类里的m_name等变量的定义语句使用了Private限定词, 只允许在类里使用这些变量, 而对于主程序, 必须经过调用类中的方法( 操作接口) , 如SetInf为其赋值。这样安全性更强了。3、 实现具体功能的方法相同两种方法设计的程序, 也有其共同之处, 如程序一中有实现”判断证书类型”的程序段, 程序二的Student类模块中也有实现”判断证书类型”的功能程序段, 两个程序都使用了结构化的方法来设计算法, 即都采用了选择结构。也就是说, 无论面向过程的程序, 还是面向对象的程序, 其实现具体功能的代码都采用了结构化程序设计方法来设计。三.课外拓展初步总结面向对象程序设计与面向过程程序设计的异同。课外练习: 初步总结面向对象程序设计与面向过程程序设计的异同。