java面向对象程序设计教案(精选15篇)
1.java面向对象程序设计教案 篇一
山东建筑大学商学院电子商务专业
《Java面向对象程序设计语言》课程设计(实验)指导书
一、对学生的基本要求:
1、理论联系实际、严肃认真、实事求是的科学态度和勇于探索的创新精神。
2、运用所学基础理论与专业知识分析和解决实际问题,培养独立思考完成任务的能力。
3、运用Java面向对象程序设计方法、标准与规范开发小型应用软件系统。
二、设计的要求及内容及要求:
应用Java面向对象程序设计语言开发小型应用软件系统。可以从给定的选题中选择一个课题或自拟课题(自拟课题需经指导教师批准),完成系统分析、设计和开发。
具体要求如下:
(1)针对你所选择的系统进行需求分析,写出系统的功能要求,设计的应用程序应具有的功能要素。
(2)程序代码应符合教学中应该具有的规范要求,类名、方法名,属性名称应与设计中实际的应用含义相符,程序中具有相应的注释。(3)程序的界面要合理、美观。
(4)每人最终提交一个可行的应用软件程序和规范的课程设计说明书。说明书应严格按照说明书的要求,格式清晰、规整。并提交所设计程序的电子文档。
三、设计进度: 1、17周周一~周二:选题,系统的需求分析。分析并规划你所设计的系统应达到的功能,满足什么样的要求。2、17周周二~周四:系统设计。分析要达到你所要求的功能需要编写什么类,规划类的层次结构,设定好类明、方法名、属性名;规划你所设计的系统应具有什么样的界面布局。查阅资料帮助自己规划好你的系统。3、17周周五~18周周二:程序设计。根据自己所规划的程序进行具体代码设计,代码设计要符合程序设计的规范要求,注意程序的编写格式。4、18周周三:程序测试。对自己所规划的程序进行测试,看是否有异常及程序Bug出现,并进行调试修正程序代码。5、18周周三:编写课程设计说明书。按照本指导书要求格式编写程序设计报告(见附件)。6、18周周四上午交所设计程序的电子文档,和课程设计说明书的电子文档。7、18周周四~周五:成绩评定。等待指导老师提问答辩。
四、选题
根据自己的爱好从以下题目中选择一个题目进行设计。
1、设计题目:学籍管理系统
设计目的:设计一个学籍管理系统,保存所有学生信息。
第1页 设计要求:学籍管理系统一般包括学生的基本信息,如,学号、姓名、班级、籍贯、联系电话、学生成绩等;能够添加、查找、删除学生信息等功能;程序执行时候,需要从文件中导入数据,程序推出后再将数据保存到文件中。
2、设计题目:出版物管理
设计目的:对出版物书籍、CD或者磁带进行管理。
设计要求:使用图形界面的方式,对书籍、CD或者磁带的基本信息进行管理。
书籍界面包括:书籍的名称、书籍的价格、书籍的出版社、书籍的作者、书籍的ISBN、及书籍的出版日期等;可以通过选择菜单来进行书籍信息的添加、修改和删除等,所有的书籍信息会显示在一个列表组件中,当某本书籍的信息改变时,列表中会相应的进行改变。CD界面包括:CD的名称、CD的价格、CD的出版社、CD的演唱者、CD的发行者、CD的ISRC等;可以通过选择菜单进行CD信息的添加、修改和删除,所有CD信息会显示在一个列表组件中,当某张CD的信息改变时,列表中会相应的进行改变。
磁带界面包括:磁带的名称、磁带的价格、磁带的出版社、磁带的演唱者、磁带的ISRC等;可以通过选择菜单进行磁带信息的添加、修改和删除,所有磁带信息会显示在一个列表组件中,某张磁带的信息改变时,列表中信息会相应的进行改变。
3、设计题目:Java程序编辑器
设计目的:设计一个Java程序编辑器,能够进行简单的文字处理。
设计要求:类似一个Windows系统的记事本,能够实现打开、保存文件;查找、替换字符串;定时自动更新文件,并创建备份文件;将Java的关键字以不同颜色或不同字体显示。
4、设计题目:设置日期时间属性
设计目的:设计类似Windows系统中“设置日期时间属性”的窗口及功能,综合运用各种组件、日期类、日历类、线程等内容。
设计要求:设计类似Windows系统中“设置日期时间属性”的窗口及功能,设计相似界面,实现日期和时间的多种运算和显示,保证运算正确性。
5、设计题目:交通信号灯的线程设计
设计目的:使用多线程设计,同步机制设计一个交通信号灯。
设计要求:设计线程;设计路口信号灯示意图界面;进一步将两个方向的信号灯分成3种车道灯:左转、直行和右转;根据车流量进行时间的模糊控制。
6、设计题目:聊天程序
设计目的:图形界面与Socket通信及输入/输出流的综合运用。
设计要求:设计一个图形界面,以Socket通信机制实现类似QQ的网络聊天程序,该聊天程序最少可以达到两个人聊天,并可以保存聊天的内容。
7、银行贷款多种还款方式的计算
设计目的:图形界面与算法设计。
设计要求:设计一个图形界面,在界面上能够实现的实际贷款和还款的一般规则(参照教材P409)。
第2页
8、日历组件
设计目的:图形界面与算法设计。
设计要求:自定义一个日历组件:显示当月日历、当前日期、上/下日历等,界面样子参照教材P409。
9、地址薄管理器
设计目的:图形界面与输入/输出流和文件操作。
设计要求:设计一个存储朋友电子邮件地址及电话号码的地址薄应用程序,界面自行设计(也可参照教材P411)。
(1)设计一个人员类,成员变量包括类别、姓名、电话号码和邮件地址等,成员方法包括插入、移动、删除、更改类别等。所有人员信息保存在以对象为单位的记录文件中,以对象流实现数据读取和保存功能。
(2)设计图形用户界面,在此界面上可实现针对朋友电子邮件和电话号码的各种操作(可参照教材P411)。
(3)添加主菜单和快捷菜单,实现插入、删除、移动等功能,快捷菜单会根据当前组件自动执行不同对象的插入、删除、移动等操作。
10、搜索文件
设计目的:图形界面与输入/输出流和文件操作。
设计要求:参照Window的资源管理器,给特定搜索文件名的部分字符,在制定的范围内搜索文件,显示搜索结果的文件名列表、文件路径及文件属性。
其他选题,需征求指导教师同意,由指导教师根据拟定的题目难度给予相应的评分标准。
五、考核内容及分值分配
1、课程设计说明书。(30分)1)正文:(手写课程设计报告4页以上)(20分)(1)、概述
包括项目背景、编写目的、软件定义、开发环境、所用的知识等内容。
(2)、功能说明
问题陈述、需完成的功能。
(3)、程序类说明
定义的类、接口等的名称,并将其在程序中起到的作用进行简要说明,并根据面向对象程序设计的原则画出类的层次关系图。(4)、软件系统测试说明
对你所设计的软件进行使用测试,列举该软件出现的问题和不完善的地方。
(5)、用户使用说明
将所设计的软件能够达到的功能进行描述。2)结束语:(5分)
第3页 写出完成本课程设计的心得,有哪些收获。软件还需要哪些改进。3)参考文献:按照要求格式写出你所参考的文献资料。(5分)
2、开发的应用软件系统(60分)1)程序代码的格式(10分)
代码格式是否规范,是否有相应的注视,程序类名、方法名、属性名是否具有可读性。2)程序界面设计(10分)
界面设计布局是否合理美观,操作是否简单方便。3)程序功能(40分)
程序功能是否达到了你所选系统的要求。基本满足可得24~28分;完全满足可得28~32分;完全满足并能够进行相应的异常处理可得32~40分;如果在此基础上还能进行相应创新可根据创新的程度进行适当加分。
3、答辩及课程设计说明书资料归档规范性(10分)
注:每个学生都要独立完成一个题目,如发现雷同者,对所有雷同学生按照不及格处理。
附件:说明书(论文)格式(可以参照论文范例)2.说明书(或论文)结构及要求
(1)封面(由商学院统一发课程设计封面纸)(2)任务书(由指导教师填写)(3)目录
以上内容由指导教师统一下发。(4)正文:(4页课程设计报告纸以上)1)、概述
2)、功能说明 3)、程序类说明
4)、软件系统测试说明 5)、用户使用说明(5)结束语
(6)参考文献(资料)
参考文献必须是学生在课程设计中真正阅读过和运用过的,文献按照在正文中的出现顺序排列。各类文献的书写格式如下: a.图书类的参考文献
序号 作者名·书名·(版次)·出版单位,出版年:引用部分起止页码。b.翻译图书类的参考文献
序号 作者名·书名·译者·(版次)出版单位,出版年:引用部分起止页码。c.期刊类的参考文献
序号 作者名·文集名·期刊名·年,卷(期):引用部分起止页码。
第4页
(7)附件
可以根据说明需要将设计界面及相关其他材料附在此处,也可以没有。
第5页
2.java面向对象程序设计教案 篇二
1 内容讲授策略
根据信息管理与信息系统专业的培养目标和该课程在专业中的地位,教学内容分为三部分:基础知识,核心知识和提高知识部分。
(1)基础知识部分
主要讲授面向对象思想的基础理论,java语言的诞生,特点,语法规则和编程运行环境。包括Java的环境、语法、面向对象思想和异常处理等内容。常言道,万事开头难,对于任何一门课程来说,第一节课是非常重要的,直接关系到学生对新课程的认识和对新课程采取的态度,在Java语言教学中,首先给学生演示一个JDK中DEMO目录中的范例程序,通过一些文字、图形、图像等多媒体信息给学生,激发学生学习这门课程的积极性,演示完实例打开范例程序源代码,让学生对Java语言有一个感官认识,然后再进行基本概念的教学。
(2),核心知识部分
讲述面向对象技术的封装性、继承性、多态性和抽象性等特性,并采用Java语言实现这些特性的设计技术。针对信管专业的特点,对此部分内容的讲述引入案例,让学生来分解各功能模块,再进一步找出对应的包和类,通过拆解过程和对类的分析,引入Java核心技术的学习。另外在此阶段,学习Java类库,为下一步的开发做好准备。Java语言的功能很强大,是因为Java类库的支持,而且这些类库可以随时查看Java API文档或利用集成开发环境下的联机帮助来获取。根据笔者的教学实践和开发经历,有必要让学生学习这些类库,以及对这些类库的整体结构了解。
(3)提高知识部分
在前面知识学习的基础上一方面讲述面向对象核心技术的一些实际应用领域,可以根据专业需要掌握多线程、数据库处理、图形处理以及JSP等内容。另一方面,学生根据所选的大作业题目进行开发和实践的过程。
2 多种理论教学方法并举
针对不同的内容,将案例教学、交互式教学、网络化教学以及多媒体等教学方法灵活使用和动态结合,改变以往单一、枯燥的模式。
(1)案例教学:将一个完整的、典型的、有一定实用价值的学生感兴趣的核心实例贯穿于教学全过程,对提高学生的编程能力和对知识的运用能力是非常有帮助的。譬如在讲授继承、封装、多态等的概念时,就可以要求学生将实例中所涉及的各个类文件(书目、书籍、预订、借阅、借阅者、系统管理员,图书馆管理员等)创建出来,然后和实例中实际创建的类文件对比,加强了对类以及面向对象特点的理解。后面讲解多线程、输入输出流、图形用户界面、数据库操作等时,把实例的各个模块分解出来,让学生来编写和开发,再分析实例中的代码,引出一个一个的知识点,从而提高教学的深度和广度。
(2)交互式教学:教师是学生学习活动的组织者和实施者,时刻关注学习者的学习过程并为其提供指导和反馈,学生在教师的帮助下学习,不断与教师进行不同形式的交流,汇报自己的成果,获得教师的反馈,提出疑难问题等。该模式中学生真正作为主体参与教学活动,由更大的自由支配空间,在学习过程中掌握主动权,使学生全身心投入学习过程中去,探索新知识,有利于培养学生的实际开发能力和创新能力。我校安装的是Lanstar多媒体网络教学系统,该系统可以进行广播教学,作业提交、学生讨论和举手提问等多种方式教学,可以帮助教师全方位的监控每个学生的学习情况。
(3)网络化教学:网络化教学是对课堂教学的有力补充,是实施教学改革的一种重要手段,也是教学网络化的趋势。一方面笔者在教师个人计算机上构建FTP服务器,将课程教学中的软件工具、源代码、教学资料等上传,以适应学生的学习需求;另一方面鼓励学生参与网上论坛、专题学习网站、专题QQ群、各大门户网站提供的免费博客系统等及时提出和解决问题,通过和编程高手的在线交流,提高编程能力。通过和教师的交流,教师能及时获得教学效果的反馈信息,掌握学生的学习情况,并用来指导更好地把握好教学进度和教学过程。
(4)合理使用多媒体:根据Java语言的特点,采用多媒体教学与传统教学方式的有机结合。多媒体教学方式呈现的信息量大,图文表直观生动,便于程序流程的动态演示,可进行程序的编辑、编译、运行与调试整个过程的演示,以合适的播放时间、速度、方式来展示信息的动态的变化过程,能加深学生对知识点的印象和记忆,也增加了学生的感性认识。但是对于一些教学重点难点内容,教师还是需要进行必要的板书来讲解,同时用自己的语言,手势和表情传达知识和信息,已达到较好的教学效果。
3 重视实践与操作
Java语言是一门实践性非常强的课程,必须通过不断的实践才能真正掌握面向对象的核心思想和编程技巧。
(1)开发环境
在开友工具和环境的选择方面,分为两个阶段:首先在基础知识学习阶段,直接使用记事本或Editplus,使用DOS命令环境,让学生一步一步学习Java的编译和运行环境以及Java的处理机制和架构;重点在实际开发上选择E-clipse或JBuilder等集成开发环境,这些环境下学习编写Java程序,界面友好,上手快,而且继承环境本身还有很多的可视化功能。
(2)实验环节
在教学过程中,要注重实验内容与教学内容的配套,选取有配套练习的教材,安排上机实践,通过上机使学生能够掌握教学中的重点和难点。要求学生根据题目要求分析问题,然后编写好程序并进行调试和测试,来检验程序的正确性,通过学生反复上机操作,也提高了学生们思考问题和解决问题的能力。
(3)作业环节
在后期的学习中,安排课程大作业,学生3-5人一组,完成一个小系统的开发。例如选择图书管理系统、学籍管理系统等进行开发,这样,可让学生理解程序整体开发和运行过程,学会如何综合利用所学的知识进行相应实际问题开发,真正把所学的内容用到实处,按照学生学习的心态,把所学的内容通过作品形式体现出来,学生才有成就感,真正明自程序设计学习的重要性与作用,以此来推动进一步的学习。
(4)课程考核
课程考核直接关系到学生是否可以获得学分的问题,是检验学生对课程掌握的程度的一个标准。如果采取传统闭卷考试形式,大部分学生会对所学内容死记硬背,不利于培养学生理论联系实际和动手编程的能力。针对该问题,笔者采用优化的课程考核方式,即理论考试、实验考核和课程大作业和相结合的方法。理论考试可以着重考察学生对基本概念的理解和对基础知识的掌握,实验可以侧重考察学生综合应用知识的能力;课程大作业主要是让学生在学好教学内容的同时完成一些实践性、应用性较强的题目,譬如Windows中的记事本、画图、扫雷等的模拟,包括从程序的编写,调试,测试和打包等环节。
结束语
信息技术发展的今天,新技术、新知识不断涌现,对人才需求的质量也会不断提高,要与时俱进,改进教学内容和教学方法,努力调动学生学习的积极性和主动性,以培养出高素质的创新性的信息系统人才。
作为从事面向对象程序设计课程的教师,探索该类课程的教学方法,提高教学质量是必须重视和思考的问题。
摘要:面向对象程序设计(Java语言)是信息管理与信息系统专业的主干课。本文结合信管专业的特点,描述了Java程序设计这门课程在教学内容、教学方法和手段、实践教学以及考核方式等方面的实践和探索。
关键词:Java语言,Java教学,教学方法
参考文献
[1]魏新军,陈嘉.基于Java程序设计的教学探究[J].文教资料.2006.5第13期
[2]吴跃,陈峥.面向对象程序设计教改探索[J].计算机教育.2010.4第8期.
[3]符蕴芳,赵英豪.面向对象程序设计教学改革与实践[J].中国成人教育2010年第11期
3.java面向对象程序设计教案 篇三
关键词:持久性对象;关系数据库;三层模型;对象标识
中图分类号:TP312文献标识码:A文章编号:1006-8937(2009)10-0025-02
持久对象需解决内存中瞬时对象与其他存储设备上持久对象的数据格式转换问题。主要的存储设备有以下的三种:
①文件系统。可以通过串行化对象来将对象保存在一个文件中。当应用程序设计中要求使用文件系统作为持久性基础设施来实现应用程序中相关对象的持久性时,我们可以自定义一个文文章件的格式,将对象的状态存储在该文件中。
②对象数据库。这是保证对象持久性的最合理的做法。但大多数公司还只是刚开始研究对象数据库,所以还不是主流的存储介质。
③关系数据库。目前大多数先进的应用程序都使用面向对象的数据结构。但在企业级的应用中大部分的数据库系统仍然是关系型数据库。虽然面向对象的数据结构对很多应用必不可少,但我们仍然要考虑很多原有系统的需要,所以关系数据库的应用还是主流。
持久性一般可以分成两类:空间上的持久性和时间上的持久性。空间上的持久性是在网络中传递对象的状态,例如:远程方法调用RMI(Remote Method Invocation, RMI是java分布式对象(EJB)的通信基础设施)将对象状态串行化后,通过socket传输串行化结果。时间上的持久性中,轻量型持久对象通常保存在本地文件系统中;重量型持久性对象通常采用:O/R映射(关系/对象映射)+RDB(关系数据库)来解决。
最简单的持久性实现方案是在应用程序启动时从文件装入相关对象的状态,在程序结束时将相关对象的状态存到该文件中。但当我们要采用可扩展性更好的持久性方案时,譬如实现对象瞬时(transient)状态的更新与其持久性是同步的的时候,O/R+RDB的解决办法就显得非常实用了。
1关系数据库的应用
企业级的应用大多数都采用三层模型来使用中间件访问数据。典型的三层模型由上到下分别是:表示层、业务逻辑层、数据层。三层结构将业务逻辑抽取出来作为一个独立的中间层。业务逻辑层是对企业所有业务逻辑的一种抽象,对上:为表示层提供了更高级的API;对下:封装了整个数据层。企业级的应用还可以是以三层结构为基础的扩展,例如:在业务逻辑层与数据层之间引入一层“持久对象层”,持久对象层可以实现对象/关系映射,数据类型转换等功能。
数据库是企业级应用的基础设施。在开发数据库应用系统时,引入对象—关系映射中间件是提高开发效率、提升软件可维护、扩展性的需要。成熟的对象—关系映射中间件产品,可以把内存中的对象持久化到数据库中,但前提是我们必须设计好自己的持久性对象、合理的对象持久性方案。持久性保存数据到一个数据库需要注意的是尽量的保持对象持久性的高度透明化。理由有以下4点:①企业应用需要实现持久性对象。②代表业务逻辑的对象可独立于使用它们的程序而存在。③多个应用程序可能需要工作在同一个对象上。④当对象与另一个对象交流时,不必了解该对象在内存还是在外存。
2O/R映射基本规则
对象范式与关系范式之间存在阻抗不匹配问题,利用已有的O/R映射模式可帮助设计人员避免实现对象持久性的陷入误区。基本的映射规则有以下的三点:
①将属性影射为列。并不是所有属性都是持久性的。通常,依赖属性都不是持久性的。例如:记帐凭证中的借、贷合计。
②将类映射为表。形式可以是多个类映射到单张表、单张表映射到多张表。多个类映射到同一张表这种情况是由于对象范式含有数据与操作,关系范式仅有数据,所有O/R映射丢失操作后,某些数据可能更适合合并。一个类映射到多张表,这种情况一般是由于要考虑程序效率才这样做。在某些情况下划分多张表会提高性能,但如果执行涉及连接的操作则通常反而降低性能。
③类间关系(继承、聚集、关联)的映射。继承关系的映射,一般有三种形式:一是整个类层次使用一张表,类层次中所有类的所有属性均存放在该表中。二是每个叶结点类使用一张表。三是每个类使用一张表,该表只保存OID(对象标识)以及对应类自己的属性(不含所继承的属性)。关联与聚类关系的映射从关系范式的角度来看,区别仅在于耦合程度不同而已。聚类耦合程度高:通常对“整体”操作都伴随着对“部分”。关联则不存在这么
高的相关度。
3对象持久性的设计方案
为了将设计阶段的工作过程清晰的表达出来,文章简单的设计一个餐馆订餐小系统来说明整个设计过程。
第一步:标志那些数据需要持久性。
对象标识(OID)唯一标识关联对象/关系,在关系范式里该标识称为关键码(key),在对象范式里就是作为持久对象标识。OID的实现既可以是一个轻量级对象,也可以是整数、字符串等,OID设计的基本要求是唯一性和不变性。OID有3种层次的唯一性:①在同一个类中具有唯一性;②在同一个类层次中具有唯一性;③在所有对象中均有唯一性。唯一性范围越大,则通常的开销也越大。
在UML中类是作为指派持久性的基本单位。因为并不是每一个类都需要持久性,所以在设计过程中用带标签的值来标志持久性,可以采用(名字、值)简写的方式来表示,名字为类名,值分别记为Persistent(持久的)和transitory(暂时的),其中默认情况下是transitory(如图1所示)。这一步的设计我们要注意的是两个持久类之间的关联也是持久的。
第二步:设计合适的数据库模式。
在数据库设计阶段,简单的设计4张表:Table(桌子) 、Customer(顾客)、Walkin(无预订散客)、Reservation(预约)。每一张表添加显式的对象标识(OID),实现链接时用这些对象标识作为外码(FK)。由于文章所设计的Booking类是一个抽象类,可以简单地将其具体之类映射为表。
第三步:解决对象与关系的同步问题。
这时要解决的问题是:哪一个对象的职责应包含往数据库存放或从数据库装入对象的功能?因为指派为已有的类会导致聚合性降低,所以引入一个新的类专门执行该职责。为每一持久类定义一个映射类(Mapper)。在设计模型中引入对象标识,从而在领域模型之外亦可实现持久性。为每一持久性类定义子类,在子类中添加对象标识。Mapper类处理具有持久性的子类。
第四步:持久性体系结构设计。
Persistent子类和Mapper类依赖于它们所支持的类。它们应出现在业务逻辑层,但Restaurant类依赖于 Mapper类。将业务逻辑层划分为两个子包。从而尽量避免了子程序包Persistency的变化对子程序包Domain带来的影响。
4结 语
实现重量型持久性对象文章推荐的解决方案是O/R+RDB。持久性对象的设计的过程为:①标识哪些数据需要持久性;②设计一个合适的数据库模式;③解决对象与关系的同步问题。最后总结自己的持久性体系结构。文章所描述的持久性对象的设计过程可以为解决同类问题的提供参考。
参考文献:
[1] 宋波,刘杰,杜庆东.UML面向对象技术与实践[M].北京:科学出版社,2005.
[2] (美)理查德森著.沈文炎译.Java高级编程:JDK5[M].北京:机械工业出版社,2006.
4.《面向对象程序设计》教学大纲 篇四
课程名称:面向对象程序设计 英文名称:Object Oriented Programming)学分:2 总学时:36 实验(上机)学时: 8 开课专业:电子商务专业
一、本课程的性质、目的和培养目标
面向对象程序设计是电子商务专业的限定选修课程。面向对象程序设计是当今最为流行的程序设计方法,本课程以C++语言为核心,全面概述面向对象程序设计的基本概念和基本技术。主要内容包括:理解和掌握面向对象程序设计的基本思想和技术,掌握C++中的引用和函数重载、类与对象、静态成员与友元、运算符重载、继承与派生类、多态与虚函数等重要概念和技术。通过教学要求学生基本掌握面向对象的程序设计方法,认识C++是如何支持面向对象程序设计的,培养、训练学生运用面向对象技术进行程序设计的能力。
二、预修课程
计算机语言与程序设计
三、课程内容及学时分配
第一章 从C语言到C++语言
1.C++语言出现的历史背景(OOP思想概述)2.C++中的注释、常量和输入输出 3.C++中的变量定义与作用域 4.C++中的函数 5.C++中的指针与引用
本章学时数:4,本章习题数:4 第二章 类与对象 1.类 2.对象
3.构造函数和析构函数 4.对象及其应用 5.对象的生存期 6.再论程序结构 7.面向对象程序设计
本章学时数:6,本章习题数:6 第三章 静态成员与友元 1.拷贝构造函数 2.静态数据成员 3.静态成员函数 4.友元函数
本章学时数:6,本章习题数:6 第四章 运算符重载 1.运算符重载的概念 2.运算符重载举例
本章学时数:4,本章习题数:4 第五章 继承与多态 1.继承的概念 2.单继承 3.多态与虚函数
4.类的分解(类的层次设计)5.抽象类与纯虚函数
本章学时数:6,本章习题数:6 第六章 I/O流库简介 1.C++流库的结构 2.输入与输出 3.格式控制 4.文件
本章学时数:2,本章习题数:2
四、实验(上机)内容和建议学时分配 实验1(4学时)
要求:定义类,该类至少应包括静态数据成员和静态成员函数,要求通过本实验掌握定义类的基本方法。实验2(4学时)
要求:通过本实验掌握函数重载、友元函数、继承、虚函数等的基本使用方法。
五、教材和参考书目
1.《C++语言基础教程》,吕凤翥编著,清华大学出版社,1999 2.《C++程序设计教程》,钱
能主编,清华大学出版社,1999 3.《The C++ Programming Language》(Third Edition),Bjarne Stroustrup,Addison-Wesley,1997
六、课外学习要求
要求课前预习下一次课的讲课内容,课后复习本次课的讲课内容并通过相应的作业加以消化。
七、考核方式
5.java面向对象程序设计教案 篇五
2014~2015学年第一学期基本结束,“面向对象的程序设计基础”课程的教学任务圆满完成。下面对本学期教学情况进行总结。
1.授课班级为14软件一班、14软件二班两个班级,平均每班授课学时96,两个班总课时量为192。
2.两个班级整体良好。积极努力、勤于思考,学习气氛比较浓厚;上课过程均未出现迟到早退现象。课堂秩序良好,和教师积极互动,发言踊跃,课堂气氛较活跃。
3.本学期两个班施行“翻转课堂”的教学模式,以任务链为载体,同学们通过完任务而掌握相关的知识点,该教学模式可以充分的锻炼同学们自主学习和结对学习的能力,教学效果很明显,教学质量得到了提高。整个学期的学习过程中,通过教师参与检查,学习内容及进度基本按照学期授课计划进行,作业按照作业计划基本完成,完成情况良好,而且部分同学的进度超前。期中考试以测试同学们的一些经典例题的基本程序思想为主,由于大部分题目同学们练习过,所以基本所有同学基本到达测试目的。
4.期末考试以测试同学们的基本知识和经典程序的设计为目的,因为面向对象的程序编写需要编译和运行,采用上机考试。考试成绩偏低,分析原因可能是因为同学们的注意力在解决问题上,对于问题相关的知识点没有系统的掌握,在以后的教学中一定要加强。
5.总评成绩的评定:出勤情况占5%,课堂表现占10%,平时作业占20%,阶段测试占20%,期末考试成绩占45%的比例完成。结果符合要求:85分以上占27%,84~75分占33%,74~60分占33%,60分以下占7%。
6.存在的问题:班风还有待进一步建立和加强。
李志芳
6.java面向对象程序设计教案 篇六
Java是Sun公司推出的新的一代面向对象程序设计语言, 它的平台无关性特别适合于Interne应用程序开发, 所以一经推出就备受青睐, “连Internet, 用Java编程”已经成为技术人员的一种时尚。许多大学也设置了Java语言的课程, 我们在教授Java语言的过程中发现, 由于在前期的课程当中, 学生并没有学习过面向对象的相关概念和知识, 因此, 对于学生学习和理解Java语言的编程带来了很大的困难。
如果学生以前从来没有使用过面向对象语言在教学当中, 我们就需要在开始编写JAVA代码之前首先要向学生讲解面向对象编程的核心概念和知识, 比如对象、消息、类和继承等等, 让他们理解什么是对象、什么是类、对象和类的关系是怎样的以及怎样使用消息在对象之间进行通讯, 给学生演示出具体的实例将这些概念编程代码实现。只有让学生理解了这些概念, 才能真正地教好这门课程。
2 对象和类
2.1 对象。
面向对象可以说是Java语言最重要的特点之一。Java语言的设计编程完全是面向对象的, 它不支持类似C语言那样的面向过程的程序设计技术。Java语言的一个程序只是一系列对象的集合, 他们的方法可以将其他的对象作为自己的变量使用, 而且将消息发给那些对象。什么是对象呢?对象是一些相关的变量和方法的软件集, 在面向对象程序设计中, 我们将问题空间中的元素以及他们在方案空间中的表示物称作对象 (object) 。这个概念很难理解, 我们可以给学生讲解一下对象的特征, 对象有五大基本特征:所有的东西都是对象;程序是一大堆对象的集合, 他们通过消息传递, 各个对象之间知道要做些什么;每个对象都分配有自己的存储空间可容纳其他对象;每个对象都有一个类型;同一类的所有对象能接收相同的消息。而所有的编程语言的最终目的是提供一种抽象方法。对象的三个主要特征:behavior———说明这个对象能做什么;State———当对象施加方法时对象的反映;Identity———与其他相似行为对象的区分标志, 每一个对象有唯一的I-dentity, 而这三者是相互影响的。
2.2 类。
面向对象中最重要的思想就是类, 类是模板是蓝图, 类实际上是对某种类型的对象定义变量和方法的原型, 即类是具有相同操作功能和相同的数据格式 (属性) 的对象的集合, 可以从类中构造一个对象, 即创建一个类的实例。类好比一个建材市场其中有许多子类———各种各样的装饰材料, 而我们装修自己的房子就要选择我们需要的材料, 同样, 为了建立我们自己的程序, 我们必须选择我们需要的类, 我们用这个比喻可以非常形象地向学生解释“类”是什么。更进一步的解释就是, 在现实世界中经常看到相同类型的许多对象, 比如, 你的自行车只是现实世界中许多自行车中的一辆。使用面向对象技术, 我们可以说你的自行车是自行车对象类的一个实例。通常, 自行车有一些状态 (当前档位、两个轮子等等) 以及行为 (改变档位、刹车等等) 。但是, 每辆自行车的状态都是独立的并且跟其它自行车不同。当厂家制造自行车的时候, 厂商利用了自行车共有的特性来根据相同的蓝图制造许多自行车。如果制造一辆自行车就要产生一个新蓝图, 效率就太低了。我们在面向对象的程序设计中, 同样地可以让相同种类的许多对象来共有一些特性, 就象自行车制造商那样, 利用相同种类的对象是相似的这一事实, 为这些对象创建一个蓝图, 也就是Java语言中的对象的软件蓝图——类。
2.3 对象和类的关系。
学生们可能会注意到对象和类看起来很相似, 在现实世界中, 类和对象之间的区别也经常是让程序员们困惑的源泉, 很明显, 类不能是它们描述的对象本身。然而, 在软件中来区分类和对象是很困难的, 有部分原因是由于软件对象只是现实世界中的电子模型或者是抽象概念, 但通常也是由于对象有时是指类和实例。类是对象集合的抽象, 它规定了这些对象的公共属性和方法, 对象是类的一个实例。比如苹果是一个类, 而放在桌上的那个苹果则是一个对象;而如果我们定义了一个水果的类, 这个时候就能够生成一个苹果对象作为水果类的一个实例。对象和类的关系相当于一般的程序设计语言中变量和变量类型的关系。
3 面向对象和基于对象
Java语言是真正的面向对象的编程语言, 很多人没有区分“面向对象”和“基于对象”这两个不同的概念, 我们应当给学生讲解一下二者的区别, 这对于学生学习和理解面向对象, 进而学好Java是很有帮助的。
现在的很多流行技术都是基于对象的, 它们使用一些封装好的对象, 调用对象的方法, 设置对象的属性, 但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。面向对象编程有三大特点, 即封装、继承和多态, 三者缺一不可, 通常“基于对象”只是使用对象, 但是无法利用现有的对象模板产生新的对象类型, 继而产生新的对象, 也就是说“基于对象”没有继承的特点, 而“多态”是表示为父类类型的子类对象实例, 没有了继承的概念也就无从谈论“多态”。所以, 当我们判断一个新的技术是否是面向对象的时候, 通常可以使用后两个特性来加以判断:“面向对象”和“基于对象”都实现了“封装”的概念, 但是面向对象实现了“继承和多态”, 而“基于对象”则没有实现这些。
4 面向对象和面向过程
一定要让学生理解“面向对象”是一种思想, 是我们考虑事情的方法。面向对象同面向过程相比最大的区别就在于:前者首先关心的是所要处理的数据, 而后者首先关心的是功能。
无论是C++还是java都有可能走上过程编程的老路, java降低了过程编写的可能性, 但是如果没有具备面向对象的编程思想, 在使用Java进行程序设计的时候还是可能走面向过程的老路的。对于一些习惯于顺序编程思维、且初涉面向对象 (OOP) 领域的学生, 往往喜欢先写一个顺序执行的程序, 再把它嵌入一个或两个巨大的对象里。根据编程原理, 对象表达的应该是应用程序的概念, 而非应用程序本身。C++是真正的面向对象编程语言, 但它也是过程编程语言。它不但考虑了面向对象的特性, 而且也更多的考虑了对C语言的向后兼容, 使得C++表现出“过程”和“对象”编程的双重性, 既可以继续用C++编译器来编写传统的C程序, 也可以使用C++的类库或者编写自己的类来作面向对象编程。这使得人们可以继续保留原有的C代码, 但是同时也阻碍了面向对象思想的推广。从事面向对象编程可以分为“类库的创建者”和“类库的使用者”两类, 通常创建类库的人才是真正懂得面向对象思想的人, 他们创建类库供给那些“客户程序员”来使用, 他们从头开始制作类库, 并进行面向对象的分析、设计和实现的全过程。如果按照类的思想来建立对象, 一旦类库建立好之后, 使用类库和派生类, 以及维护代码都将是非常舒服的事情。Java的出现迎来了面向对象的曙光。java的思想都是继承自其他的语言和技术, 它本身的很多东西也借鉴了C++语言, 也就是说java去除了C++的一些不太好的地方, 在真正推动面向对象编程思想方面是功不可末的。使用Java编程的时候无需考虑向后兼容什么语言, 因为它是重新建立的语言。我们应当告诉学生, 在掌握Java语言之前, 必须将自己的编程思想由过程编程彻底转向面向对象编程, 因为每个Java程序本身就是一个类, 编写任何java程序, 都是在不自觉的构造一个对象模板, 这里没有第二条道路, 只能是面向对象编程;使用java编写程序的时候, 必须从一个对象的角度来考虑问题, 因为程序本身就是一个类, 必须考虑把哪些东西作为成员变量, 哪些作为方法, 要生成几个类, 哪些变量是成员变量, 哪些是静态的变量和方法, 等等。之所以说Java在面向对象的贯彻方面要比C++彻底, 就是因为我们只能使用面向对象的方式来编写java程序, 而C++却可以采用另外一条非面向对象的方式来编写程序。Java语言最大的贡献就是推广了面向对象的思想。
结束语
Java教学中必须要让学生掌握面向对象 (OOP) 的主要要求, 学会面向对象的思维方式, 只有这样用Java开发的系统才能是真正的Java系统, 才能达到我们的教学目的, 使学生领会Java的灵魂所在, 学好Java语言。
参考文献
[1]王克宏, 郝建文.java技术教程 (基础篇) [M].北京:清华大学出版社, 2002.
[2]耿祥义.Java基础教程[M].北京:清华大学出版社, 2004.
7.java面向对象程序设计教案 篇七
(计算机科学与技术本科专业使用)
一、课程的地位、教学目的和基本要求
C++语言是一种高效实用的程序设计语言,既可进行过程化的程序设计,也可进行面向对象程序设计。本课程以介绍C++语言的基本语法为基础逐步向学生渗透面向对象的程序设计思想,要求学生掌握类的封装、数据隐藏、继承及多态等特性,领会面向对象程序设计,掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。
二、主要教学环节
1、理论教学 学时数:60 占全部学时数:75 %
2、实验 学时数:20 占全部学时数:25 %
3、实训 学时数:二周
三、课程内容 Ⅰ.理论部分
第一章 C++入门 2学时(1)教学目的、要求
本章要求学生掌握源程序的编辑、编译、连接和执行。了解C++程序设计语言的发展过程以及支持环境。(2)重点与难点
本章的重点和难点是源程序的编辑、编译、连接和执行。
第一节 从C到C++ 第二节 程序与语言 第三节 结构化程序设计 第四节 面向对象程序设计 第五节 程序开发过程 第六节 函数
第二章 基本数据类型与输入输出 2学时(1)教学目的、要求
本章要求学生掌握C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。了解I/O流及printf和scanf输入输出的作用。(2)重点与难点
本章的重点和难点是C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。
第一节 字符集与保留字 第二节 基本数据类型 第三节 变量定义 第四节 常量及常量定义 第五节 I/O流控制 第六节 Printf与scanf 第三章 表达式和语句 2学时(1)教学目的、要求
本章要求学生掌握C++各运算符与常用表达式内容,及if语句的应用。(2)重点与难点
C++各运算符与常用表达式内容,及if语句的应用。
第一节 表达式 第二节 算术运算和赋值 第三节 算术类型转换 第四节 增量和减量 第五节 关系与逻辑运算 第六节 if语句 第七节 条件运算符 第八节 逗号表达式 第九节 求值次序与副作用
第四章 过程化语句 2学时(1)教学目的、要求
本章要求学生掌握switch,while, do…while, for结构的应用,了解描述算法和穷举、迭代算法。(2)重点与难点
本章的重点和难点是循环型程序设计,即switch,while, do…while, for 2 结构的应用。
第一节 while 语句 第二节 do…..while 语句 第三节 for语句 第四节 switch 语句 第五节 switch 语句 第六节 过程应用: 求兀 第七节 过程应用: 判明素数 第八节 过程应用: 求积分
第五章 函数 2学时(1)教学目的、要求
本章要求学生掌握函数的概念、定义、调用机制,和递归、内联、重载函数的概念,以及全局、局部变量。(2)重点与难点
本章的重点和难点是函数的概念、定义、调用机制,以及全局、局部变量。
第一节 函数概述 第二节 函数原型
第三节 全局变量和局部变量 第四节 函数调用机制 第五节 静态局部变量 第六节 递归函数 第七节 内联函数 第八节 重载函数 第九节 默认参数的函数
第六章 程序结构 2学时(1)教学目的、要求
本章要求学生掌握变量的存储类型,作用域,可见性,生命期等概念。(2)重点与难点
本章的重点和难点是变量的存储类型,作用域,可见性,生命期。
第一节 外部存储类型 第二节 静态存储类型 第三节 作用域 第四节 可见性 第五节 生命期 第六节 头文件 第七节 多文件结构 第八节 编译预处理
第七章 数组 2学时(1)教学目的、要求
本章要求学生掌握数组的概念、元素的访问,及数组的应用。(2)重点与难点
本章的重点和难点是数组元素的访问,及数组的应用。
第一节 数组定义 第二节 访问数组元素 第三节 初始化数组 第四节 向函数传递数组 第五节 二维数组 第六节 数组应用: 排序
第七节 数组应用: Josephus问题 第八节 数组应用: 矩阵乘法
第八章 指针 2学时(1)教学目的、要求
本章要求学生掌握指针的概念、运算,以及指针与数组和函数的应用。(2)重点与难点
本章的重点和难点是指针的运算,以及指针与数组和函数的关系及应用。
第一节 指针概念 第二节 指针运算 第三节 指针与数组 第四节 堆内存分配 第五节 const指针 第六节 指针与函数 第七节 字符指针 第八节 指针数组 第九节 命令行参数 第十节 函数指针
第九章 引用 2学时(1)教学目的、要求
本章要求学生掌握引用的概念、操作,以及引用作为函数参数的应用。(2)重点与难点
本章的重点和难点是引用的操作,以及引用作为函数参数的应用。
第一节 引用的概念 第二节 引用的操作 第三节 什么能被引用 第四节 用引用传递函数参数 第五节 返回多个值 第六节 用引用返回值 第七节 函数调用作为左值 第八节 用const限定引用 第九节 返回堆中变量的引用
第十章 结构 2学时(1)教学目的、要求
本章要求学生掌握结构体概念及其定义,结构体变量和结构体数组的引用,指向结构体变量和数组的指针。(2)重点与难点
本章的重点和难点是结构体数组的引用,指向结构体变量和数组的指针。
第一节 结构 第二节 结构与指针
第三节 结构与数组 第四节 传递结构参数 第五节 返回结构 第六节 链表结构 第七节 创建与遍历链表 第八节 删除链表结点 第九节 插入链表结点
第十节 结构应用: Josephus问题
第十一章 类 4学时(1)教学目的、要求
本章要求学生掌握类的概念、类的定义,及成员函数的调用。了解保护成员和软件方法的发展必然。(2)重点与难点
本章的重点和难点是类的概念、类的定义,及成员函数的调用。
第一节 从结构到类 第二节 软件方法的发展必然 第三节 定义成员函数 第四节 调用成员函数 第五节 保护成员 第六节 屏蔽类的内部实现 第七节 再论程序结构
第十二章 构造函数 6学时(1)教学目的、要求
本章要求学生掌握构造、析构函数的使用,以及构造类成员和构造对象的顺序。了解重载和默认构造函数的概念(2)重点与难点
本章的重点和难点是构造、析构函数的使用,以及构造类成员和构造对象的顺序。
第一节 类与对象
第二节 构造函数的需要性 第三节 构造函数的使用 第四节 析构函数
第五节 带参数的构造函数 第六节 重载构造函数 第七节 默认构造函数 第八节 类成员初始化困惑 第九节 构造类成员 第十节 构造对象的顺序
第十三章 面向对象程序设计 4学时(1)教学目的、要求
本章要求学生掌握结构化和面向对象方法的实现。了解程序效率和维护。(2)重点与难点
本章的重点和难点是结构化和面向对象方法的实现。
第一节 抽象 第二节 分类 第三节 设计和效率 第四节 讨论Josephus问题 第五节 结构化方法 第六节 结构化方法的实现 第七节 第八节 第九节
面向对象方法 面向对象方法实现 程序维护
第十四章 堆与拷贝构造函数 6学时(1)教学目的、要求
本章要求学生掌握堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的应用。了解临时和无名对象。(2)重点与难点
本章的重点和难点是堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的 7 应用。
第一节 关于堆
第二节 需要new和delete的原因 第三节 分配堆对象 第四节 拷贝构造函数 第五节 默认拷贝构造函数 第六节 浅拷贝与深拷贝 第七节 临时对象 第八节 无名对象
第九节 构造函数用于类型转换
第十五章 静态成员与友员 2学时(1)教学目的、要求
本章要求学生掌握懂得怎样声明一个静态数据成员,怎样使用静态成员函数以及静态成员函数为什么与特定对象无关。(2)重点与难点
本章的重点和难点是静态数据成员和静态成员函数的使用,以及友元的概念。
第一节 静态成员的需要性 第二节 静态成员的使用 第三节 静态数据成员 第四节 静态成员函数 第五节 需要友员的原因 第六节 友员的使用
第十六章 继承 8学时(1)教学目的、要求
本章要求学生掌握继承的概念,工作方式,以及多态性和虚函数的概念。了解抽象类和类的冗余。(2)重点与难点
本章的重点和难点是继承的概念,工作方式,以及多态性和虚函数的概念。
第一节 继承的概念 第二节 继承的工作方式 第三节 派生类的构造 第四节 继承与组合 第五节 多态性
第六节 多态的思考方式 第七节 多态性如何工作 第八节 不恰当的虚函数 第九节 虚函数的限制 第十节 类的冗余
第十一节 克服冗余带来的问题 第十二节 类的分解 第十三节 抽象类
第十四节 由抽象类派生具体类 第十五节 纯虚函数的需要性
第十七章 多重继承 6学时(1)教学目的、要求
本章要求学生掌握多继承的概念,工作方式以及多继承的构造顺序和访问控制。了解虚拟继承、保护和私有继承。(2)重点与难点
本章的重点和难点是多继承的概念,工作方式以及多继承的构造顺序和访问控制。
第一节 多继承如何工作 第二节 继承的模糊性 第三节 虚拟继承
第四节 多继承的构造顺序 第五节 继承的访问控制 第六节 保护继承与私有继承
第十八章 运算符重载 4学时(1)教学目的、要求 本章要求学生掌握运算符重载的需要性和应用。了解增量运算符的重载。(2)重点与难点
本章的重点和难点是运算符重载的需要性和应用。
第一节 运算符重载的需要性 第二节 如何重载运算符 第三节 值返回与引用返回 第四节 运算符作成员函数 第五节 重载增量运算符 第六节 转换运算符 第七节 赋值运算符
四、主要教科书和参考书
1、《C++程序设计教程》
2、《C++程序设计题解与上机指导》
3、《C++语言程序设计》
4、《C++语言与面向对象程序设计》
5、《C++语言程序设计》
钱能 钱能
潭浩强 郑莉
吕凤翥清华大学出版社
清华大学出版社 清华大学出版社 清华大学出版社
清华大学出版社
8.java面向对象程序设计教案 篇八
endl 换行并刷新输出流
setw(n)设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符
setprecision 定义浮点数的精度 left,right 左对齐,右对齐
showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量:
const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。函数声明的一般形式为
函数类型 函数名(参数表)函数模板的定义
template
函数定义
例子:template
template
定义
对变量起另外一个名字(别名alias),这个名字称为该变量的引用。<类型>&<引用变量名> = <原变量名>;
其中原变量名必须是一个已定义过的变量。如:
int
max;
int &refmax=max;refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。对引用类型的变量,说明以下几点:
1、引用在定义的时候要初始化
2、对引用的操作就是对被引用的变量的操作。
3、引用类型变量的初始化值不能是一个常数。
4、一旦引用被声明,它就不能再指向其它的变量。
5、对引用的初始化,可以用一个变量名,也可以用另一个引用。
6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。
7、对常量(用const声明)的引用使用如下方式: int i=5;const int &a=i;内联函数定义的一般格式为:
inline <函数值类型><函数名>(<参数表>){ <函数体> } 作用域运算符
::a表示全局作用域中的变量a。注意:不能用::访问函数中的局部变量
new运算从堆中分配一块与<类型>相适应的大小为<元素个数>的数组存储空间,若分配成功,将这块存储空间的起始地址存入<指针变量名>,否则置<指针变量名>的值为NULL(空指针值,即0)。new的使用格式为:
<指针变量名>=new <类型>[<元素个数>];delete运算符用来释放<指针变量名>指向的动态存储空间。使用格式如下:
delete <指针变量名> 或
delete[] <指针变量名>
第2章 面向对象基本概念
面向过程编程与面向对象编程的区别:
面向过程编程先确定算法,再确定数据结构; 面向对象编程先确定数据结构,再确定运算。类定义:
class <类名> { <访问控制符>: <成员函数的声明> <访问控制符>: <数据成员的声明> };<成员函数的实现> 若在类体外实现,则需要使用作用域运算符“::”,用它来标识某个成员函数是属于哪个类的,其定义格式如下:
<函数值类型><类名>::<成员函数名>(<参数表>){ <函数体> } 类外访问对象中的成员可以有3种方法: 通过对象名和成员运算符访问对象中的成员。<对象名>.<公有成员> 通过指向对象的指针变量访问对象中的成员。<对象指针名>-><公有成员> 通过对象的引用访问对象中的成员。析构函数其定义格式如下: <类名>::~<类名>(){
<函数体> } 在一般情况下,调用构造函数与声明对象的顺序相同,而调用析构函数的次序正好与创建对象的顺序相反。三种构造函数
Box();
//无参构造函数 Box(int h,int w ,int len):height(h),width(w),length(len){}
//带参构造函数 复制构造函数定义
<类名>(<参数表>);
<类名>(const <类名>&<对象名>)Box(const Box& b);//复制构造函数
复制构造函数只有一个参数,并且是对同类对象的引用。
静态成员是类的所有对象共享的成员,而不是某个对象的成员,它在对象中不占存储空间,是属于整个类的成员。静态成员定义格式如下: static <静态成员的定义>;不能用参数初始化表对静态数据成员初始化,也不能在构造函数体内初始化,静态数据成员只能在类体外进行初始化。静态数据成员初始化格式如下:
<数据类型><类名>::<静态数据成员名>=<值>;在类的成员函数中可以直接访问该类的静态数据成员,而不必使用成员访问运算符或类名限定修饰符。
在类外必须使用成员访问运算符或类名限定修饰符访问公共静态数据成员。<对象名>.<静态成员> <类名>::<静态成员> 静态成员函数就是使用static关键字声明的成员函数。
静态成员函数可以直接访问该类的静态成员,但不能直接访问类中的非静态成员。
第3章 详解对象
对象指针就是用于存放对象数据起始地址的变量。声明对象指针的一般格式为: <类名> *<对象指针名>;对象指针的初始化一般格式为: <数据类型> *<对象指针名>=&<对象名>;<对象指针名>=&<对象名>;通过指针访问对象成员一般格式如下: <对象指针名>-><公有成员>
boxp->volumn();(*<对象指针名>).<公有成员>
(*boxp).volumn();this指针是一个特殊的隐含指针,它隐含于每一个成员函数(静态成员函数除外)中,也就是说,每个成员函数都有一个this指针参数。
this指针指向调用该函数的对象,即this指针的值是当前被调用的成员函数所在的对象的起始地址。
复制构造函数中隐含使用this指针: TAdd(const TAdd& p){
this->x=p.x;this->y=p.y;
cout<<“copy constructor.”< x this->x (*this).x this指针是一个const指针,成员函数不能对其进行赋值。 静态成员中不能访问this指针,因为静态成员函数不从属于任何对象。指向非静态数据成员的指针一般形式为: 数据类型名 *指针变量名; 定义指向公有成员函数的指针变量的一般形式为: 数据类型名(类名:: *指针变量名)(参数列表); 使指针变量指向一个公有成员函数的一般形式为: 指针变量名=&类名::成员函数名 常量定义格式如下: const <数据类型名><常量名>=<表达式>;常对象是其数据成员值在对象的整个生存期间内不能被改变的对象。const <类名> <对象名>(<初始化值>);<类名> const <对象名>(<初始化值>);常成员函数 通过常成员函数来引用本类中的常数据成员。<数据类型><函数名>(<参数表>)const; 声明一维对象数组的一般格式为: <类名><数组名>[<下标表达式>] 6 第4章 运算符重载 重载为类的成员函数格式如下: <类名> operator <运算符>(<参数表>){ 函数体 } A operator +(A &);++为前置运算符时,它的运算符重载函数的一般格式为: 运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this指针。 友元声明以关键字friend开始,只能出现在被访问类的定义中。具体格式如下: friend <函数值类型><函数名>(<参数表>);friend class <类名>; 友元函数可以访问该类中的所有成员(公有的、私有的和保护的) 通常使用友元函数来取对象中的数据成员值,而不修改对象中的成员值,保证数据安全。 重载为类的友元函数语法形式 friend <函数值类型> operator <运算符>(<参数表>){<函数体>;} ++为前置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a)++为后置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a, int) 重载提取运算符的一般格式为: friend istream & operater >>(istream &, ClassName &);istream & operater >>(istream &is, ClassName &f){„} 重载输出(插入)运算符的一般格式为: friend ostream & operater >>(ostream &, ClassName &);ostream & operater >>(ostream &is, ClassName &f){„} 重载类型转换运算符函数格式: operator〈返回基本类型名〉(){ „„ return 〈基本类型值〉 } 类类型转换函数只能是成员函数,不能是友元函数。转换函数的操作数是对象。8 第5章 继承与派生 派生是指由基类创建新类的过程。class A { int i;//基类成员};class B:public A //A派生了B,B继承了A,//B自动拥有A的成员 {int j;//定义派生类的新成员};派生类的定义格式如下: class <派生类名>:<继承方式><基类名> { <派生类新定义成员>};派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,它们在派生类中的访问属性由继承方式控制。三种继承方式下派生类中基类成员的访问控制权限 无论是哪种继承方式,基类的私有成员在派生类中都是不可被访问的。只能通过基类的成员函数访问基类的私有数据成员。 解决的办法是通过成员初始化表来完成,在成员初始化表中可以显式调用基类构造函数。 <派生类名>(<总参数表>):<基类名>(<参数表1>),<对象成员名>(<参数表2>){ <派生类数据成员的初始化> };构造函数调用顺序为:基类的构造函数→对象成员构造函数→派生类的构造函数。 析构函数调用顺序刚好相反。当基类中没有显式定义构造函数,或定义了无参构造函数时,派生类构造函数的初始化表可以省略对基类构造函数的调用,而采用隐含调用。当基类的构造函数使用一个或多个参数时,派生类必须定义构造函数,提供将参数传递给基类构造函数的途径。这时,派生类构造函数的函数体可能为空,仅起到参数传递作用。 如果在基类中既定义了无参构造函数,又定义了带参构造函数,则在定义派生类构造函数时,既可以包含基类构造函数和参数,也可以不包含基类构造函数。如果在一个派生类中要访问基类中的私有成员,可以将这个派生类声明为基类的友元。 友元关系是不能继承的。B类是A类的友元,C类是B类的派生类,则C类和A类之间没有任何友元关系,除非C类声明A类是友元。多继承派生类的定义 class <派生类名>:<继承方式><基类名1>,„,<继承方式><基类名n> {<派生类新定义成员>};多继承派生类的构造函数 <派生类名>(<总参数表>):<基类名1>(<参数表1>),„,< 基类名n>(<参数表n>){ <派生类数据成员的初始化> };<总参数表>必须包含完成所有基类初始化所需的参数 构造函数调用顺序是:先调用所有基类的构造函数,再调用对象成员类构造函数,最后调用派生类的构造函数。 处于同一层次的各基类构造函数的调用顺序取决于定义派生类时所指定的基类顺序,与派生类构造函数中所定义的成员初始化列表顺序无关。如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。 析构函数的调用顺序与构造函数的调用顺序相反。虚基类 虚基类的定义格式为: class <派生类名>:virtual <继承方式><共同基类名>;【说明】引进虚基类后,派生类对象中只存在一个虚基类成员的副本。虚基类的初始化与一般多继承的初始化在语法上相同,但构造函数的调用顺序有所不同,规则如下: 先调用虚基类的构造函数,再调用非虚基类的构造函数。若同一层次中包含多个虚基类,其调用顺序为定义时的顺序。若虚基类由非虚基类派生而来,则仍按先调用基类构造函数,再调用派生类构造函数的顺序。 如果在虚基类中定义了带参数的构造函数,则要在其所有派生类(包括直接派生类或间接派生类)中,通过构造函数的初始化表对虚基类进行初始化。 第6章 多态性与虚函数 类型兼容规则 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。 类型兼容规则中所指的替代包括以下情况: 派生类的对象可以赋值给基类的对象。派生类的对象可以初始化基类的引用。 派生类的对象的地址可以赋值给基类的指针变量。在替代之后,派生类对象就可以作为基类的对象使用,但只能访问从基类继承的成员。 只能用派生类对象对其基类对象赋值,而不能用基类对象对其派生类对象赋值。同一基类的不同派生类对象之间也不能赋值。虚函数 虚函数就是在基类中被关键字virtual说明、并在一个或多个派生类中被重新定义的成员函数。 声明虚函数的格式如下: virtual <函数值类型><函数名>(<参数表>);在派生类中重新定义虚函数时,其函数原型包括返回类型、函数名、参数个数、类型和顺序,都必须与基类中的原型相同。一个函数一旦被声明为虚函数,则无论声明它的类被继承了多少层,在每一层派生类中该函数都保持虚函数特性。因此,在派生类中重新定义该函数时,可以省略关键字virtual。实现动态的多态性时,必须使用基类类型的指针变量或对象引用,并使其指向不同的派生类对象,并通过调用指针或引用所指向的虚函数才能实现动态的多态性。可将类簇中具有共性的成员函数声明为虚函数,而具有个性的函数没有必要声明为虚函数。但是下面的情况例外: 静态成员函数不能声明为虚函数。构造函数不能是虚函数。 内联成员函数不能声明为虚函数。析构函数可以是虚函数。虚析构函数 虚析构函数的声明格式如下: virtual ~<类名>();如果一个类的析构函数是虚函数,那么,由它派生的所有子类的析构函数也是虚函数。 纯虚函数用virtual声明,没有任何实现、必须由派生类覆盖该函数提供实现 纯虚函数的声明格式为: virtual <函数值类型><函数名>(<参数表>)=0;包含一个或多个纯虚函数的类称为抽象类。 如果派生类没有实现基类中的所有纯虚函数,派生类也是抽象类。抽象类无法实例化,即不能创建抽象类的对象。第7章 输入输出 iostream:I/O流类库的最主要的头文件,包含了对输入输出流进行操作所需的基本信息,还包括cin、cout、cerr和clog共4个流对象。fstream:用于用户管理的文件的I/O操作。strstream:用于字符串流I/O。 stdiostream:用于混合使用C和C++的I/O操作。iomanip:使用格式化I/O时应包含此头文件。 用setf函数设置状态标志,其一般格式如下: long ios::setf(long flags)清除状态标志 用unsetf函数清除状态标志,其一般格式如下: long ios::unsetf(long flags)用函数flags取状态标志有两种形式,其格式分别如下: long ios::flags() //返回与流相关的当前状态标志值 long ios::flags(long flag)//将流的状态标志值设置为flag,并返回设置前的状态标志值。以上三组函数必须用流类对象(cin或cout)来调用,其格式如下: <流对象名>.<函数名>(ios::<状态标志>)cout.setf(ios::showpos);cout.setf(ios::scientific);cout.setf(ios::showpos| ios::scientific);设置输出宽度函数有两种形式,其格式分别如下: int ios::width(int len) int ios::width()第一种形式是设置输出宽度,并返回原来的输出宽度; 第二种形式是返回当前输出宽度,默认输出宽度为0。只对其后的第一个输出项有效。 填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为空格。它与width()函数配合使用,否则没有意义。设置填充字符函数有两种形式,其格式分别如下: char ios::fill(char ch) char ios::fill()第一种形式是重新设置填充字符,并返回设置前的填充字符; 第二种形式是返回当前的填充字符。 设置浮点数输出精度有两种形式,其格式分别如下: int ios::precision(int p) int ios::precision()第一种形式是重新设置输出精度,并返回设置前的输出精度; 第二种形式是返回当前的输出精度。默认输出精度为6 用get函数读入一个字符(1)不带参数的get函数 cin.get()用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。 若遇到输入流中的文件结束符,则函数返回文件结束标志EOF。(2)有一个参数的get函数 cin.get(ch)用来从输入流中读取一个字符,赋给字符变量ch。读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。3)有三个参数的get函数 cin.get(字符数组/字符指针,字符个数n,终止字符)从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n-1个字符之前遇到指定的终止字符,则提前读取结束。如果读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。用getline函数读入一行字符 cin.getline(字符数组(或字符指针),字符个数n,终止字符)从输入流中读取一行字符,其用法与带3个参数的get函数类似。eof函数 无参函数,表示文件结束。 从输入流读取数据,如果到达文件末尾(遇文件结束符),返回非零值(真),否则为0(假)。 while(!cin.eof())peek函数 无参函数,表示“观察”,观测下一个字符。 返回值是当前指针指向的当前字符,但只是观测,指针仍停留在当前位置,并不后移。 如果要访问的字符是文件结束符,则函数值是EOF。 c=cin.peek(); putback函数 将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。 控制符不属于任何类成员,定义在iomanip头文件中 设置输入/输出宽度setw(int)用整型参数来制定输入/输出域的宽度。使用时只对其后一项输入/输出有效。当用于输出时,若实际宽度小于设置宽度时,数据向右对齐,反之则按数据的实际宽度输出。 当用于输入时,若输入的数据宽度超过设置宽度时,超出的数据部分被截断而被作为下一项输入内容。 设置输出填充字符setfill(char)与ios::fill相同,常与setw(int)联合使用,从而向不满设置输出宽度的空间填入指定的字符,不设置则填空格。设置后直至下一次设置前一直有效。参数可以是字符常量或字符变量。 设置输出精度setprecision(int)指明输出实数的有效位数。 参数为0时,按默认有效位数6输出。 在以fixed形式和scientific形式输出时参数为小数位数。 setiosflags(ios::fixed)用定点方式表示实数。 setiosflags(ios::scientific)用科学记数法方式表示实数。 如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。 如果setprecision(n)与setiosflags(ios::scientific)合用,可以控制科学记数法中尾数的小数位数。 setiosflags(ios::left)输出数据左对齐 setiosflags(ios::right)输出数据右对齐 设置输入/输出整型数数制dec、hex和oct。控制换行的控制符endl 代表输出单字符“”的控制符ends open()函数的原型在fstream中定义。其原型为: void open(char *filename,int mod,int access);其中第一个参数是用来传递文件名;第二个参数的值决定文件的使用方式;第三个参数的值决定文件的访问方式。 关键词:持久性对象,关系数据库,三层模型,对象标识 持久对象需解决内存中瞬时对象与其他存储设备上持久对象的数据格式转换问题。主要的存储设备有以下的三种: 1)文件系统。可以通过串行化对象来将对象保存在一个文件中。当应用程序设计中要求使用文件系统作为持久性基础设施来实现应用程序中相关对象的持久性时,我们可以自定义一个文本文件的格式,将对象的状态存储在该文件中。 2)对象数据库。这是保证对象持久性的最合理的做法。但大多数公司还只是刚开始研究对象数据库,所以还不是主流的存储介质。 3)关系数据库。目前大多数先进的应用程序都使用面向对象的数据结构。但在企业级的应用中大部分的数据库系统仍然是关系型数据库。虽然面向对象的数据结构对很多应用必不可少,但我们仍然要考虑很多原有系统的需要,所以关系数据库的应用还是主流。 持久性一般可以分成两类:空间上的持久性和时间上的持久性。空间上的持久性是在网络中传递对象的状态,例如:远程方法调用RMI(Remote Method Invocation, RMI是java分布式对象(EJB)的通信基础设施)将对象状态串行化后,通过socket传输串行化结果。时间上的持久性中,轻量型持久对象通常保存在本地文件系统中;重量型持久性对象通常采用:O/R映射(关系/对象映射)+RDB(关系数据库)来解决。 最简单的持久性实现方案是在应用程序启动时从文件装入相关对象的状态,在程序结束时将相关对象的状态存到该文件中。但当我们要采用可扩展性更好的持久性方案时,譬如实现对象瞬时(transient)状态的更新与其持久性是同步的的时候,O/R+RDB的解决办法就显得非常实用了。 1 关系数据库的应用 企业级的应用大多数都采用三层模型来使用中间件访问数据。典型的三层模型由上到下分别是:表示层、业务逻辑层、数据层。三层结构将业务逻辑抽取出来作为一个独立的中间层。业务逻辑层是对企业所有业务逻辑的一种抽象,对上:为表示层提供了更高级的API;对下:封装了整个数据层。企业级的应用还可以是以三层结构为基础的扩展,例如:在业务逻辑层与数据层之间引入一层“持久对象层”,持久对象层可以实现对象/关系映射,数据类型转换等功能。 数据库是企业级应用的基础设施。在开发数据库应用系统时,引入对象-关系映射中间件是提高开发效率、提升软件可维护、扩展性的需要。成熟的对象-关系映射中间件产品,可以把内存中的对象持久化到数据库中,但前提是我们必须设计好自己的持久性对象、合理的对象持久性方案。持久性保存数据到一个数据库需要注意的是尽量的保持对象持久性的高度透明化。理由有以下4点:1) 企业应用需要实现持久性对象,例如:客户、供应商、货品、订单等资料都需要持久性的保存到数据库中。2) 代表业务逻辑的对象可独立于使用它们的程序而存在。3) 多个应用程序可能需要工作在同一个对象上。4) 当对象与另一个对象交流时, 不必了解该对象在内存还是在外存。 2 O/R映射基本规则 对象范式与关系范式之间存在阻抗不匹配问题,利用已有的O/R映射模式可帮助设计人员避免实现对象持久性的陷入误区。基本的映射规则有以下的三点: 1)将属性影射为列。并不是所有属性都是持久性的。通常,依赖属性都不是持久性的。例如:记帐凭证中的借、贷合计。 2)将类映射为表。形式可以是多个类映射到单张表、单张表映射到多张表。多个类映射到同一张表这种情况是由于对象范式含有数据与操作,关系范式仅有数据,所有O/R映射丢失操作后,某些数据可能更适合合并。一个类映射到多张表,这种情况一般是由于要考虑程序效率才这样做。在某些情况下划分多张表会提高性能,但如果执行涉及连接的操作则通常反而降低性能。 3)类间关系(继承、聚集、关联)的映射。继承关系的映射,一般有三种形式:①整个类层次使用一张表,类层次中所有类的所有属性均存放在该表中。②每个叶结点类使用一张表。③每个类使用一张表,该表只保存OID(对象标识)以及对应类自己的属性 (不含所继承的属性)。关联与聚类关系的映射从关系范式的角度来看,区别仅在于耦合程度不同而已。聚类耦合程度高:通常对“整体”操作都伴随着对“部分”。关联则不存在这么高的相关度。 3 对象持久性的设计方案 为了将设计阶段的工作过程清晰的表达出来,该文简单的设计一个餐馆订餐小系统来说明整个设计过程。 第一步:标志那些数据需要持久性。 对象标识(OID)唯一标识关联对象/关系,在关系范式里该标识称为关键码(key),在对象范式里就是作为持久对象标识。OID的实现既可以是一个轻量级对象,也可以是整数、字符串等。OID设计的基本要求是唯一性和不变性。OID有3种层次的唯一性: 1。在同一个类中具有唯一性。2。在同一个类层次中具有唯一性。3,在所有对象中均有唯一性。唯一性范围越大,则通常的开销也越大。例如:需要更长的计算机时间以获取OID,需要更多的存储空间以存放OID。OID的不变性是我们容易忽略的一个重要特征,因为任何业务逻辑含义都会发生变化,从而,任何对象标识不应含有任何业务逻辑含义。 在UML中类是作为指派持久性的基本单位。因为并不是每一个类都需要持久性,所以在设计过程中用带标签的值来标志持久性,可以采用(名字、值)简写的方式来表示,名字为类名,值分别记为Persistent(持久的)和transitory(暂时的),其中默认情况下是transitory(如下图所示)。这一步的设计我们要注意的是两个持久类之间的关联也是持久的。 第二步:设计合适的数据库模式。 在数据库设计阶段,简单的设计4张表:Table(桌子) 、Customer(顾客)、Walkin(无预订散客)、Reservation(预约)。每一张表添加显式的对象标识(OID),实现链接时用这些对象标识作为外码(FK)。由于本文所设计的Booking类是一个抽象类,可以简单地将其具体之类映射为表。餐馆订餐小系统数据库模式设计结果为: 第三步:解决对象与关系的同步问题 这时要解决的问题是:哪一个对象的职责应包含往数据库存放或从数据库装入对象的功能?因为指派为已有的类会导致聚合性降低,所以引入一个新的类专门执行该职责。为每一持久类定义一个映射类(Mapper)。在设计模型中引入对象标识,从而在领域模型之外亦可实现持久性。为每一持久性类定义子类,在子类中添加对象标识。Mapper类处理具有持久性的子类。 第四步:持久性体系结构设计 Persistent子类和Mapper类依赖于它们所支持的类。它们应出现在业务逻辑层,但Restaurant类依赖于Mapper类。将业务逻辑层划分为两个子包。从而尽量避免了子程序包Persistency的变化对子程序包Domain带来的影响。持久性体系结构图如图4。 4 结束语 面向对象的损伤容限分析与设计 将面向对象的程序设计方法引入到结构损伤容限分析与设计中.建立了结构剩余强度分析和裂纹扩展分析的.基本对象类,给出了基本类和辅助类的描述,并用C++语言实现.编制了相应的分析程序,给出了类的实例.结果表明用面向对象方法设计的剩余强度和裂纹扩展分析程序其性能较传统程序设计方法得到显著改善. 作 者:王生楠 作者单位:西北工业大学,飞机结构强度研究所,陕西,西安,710072刊 名:西北工业大学学报 ISTIC EI PKU英文刊名:JOURNAL OF NORTHWESTERN POLYTECHNICAL UNIVERSITY年,卷(期):20(4)分类号:V215.6关键词:面向对象方法 损伤容限分析 程序设计 C++ Artificial Intelligence Principles and Applications 课程编号:30420082 学分数:2 开课单位:计算机技术与自动化学院 课内总时数:40 任课教师姓名及职称:刘文菊副教授、郭景讲师 开课学期: 第2学期 教学方式:讲授 一、教学要求及目的 人工智能是研究智能信息处理技术、开发具有智能特性的各类应用系统的核心技术。通过本课程的学习,要求学生了解人工智能的基本概念和原理,掌握常用的知识表示、逻辑推理和问题求解的方法,熟悉人工智能的发展学派和主要理论。为智能信息分析和构建专家系统、智能决策支持系统等各类智能系统奠定基础,并培养学生提高解决复杂问题的能力。 二、课程的主要内容 1.人工智能概述 人工智能的概念; 人工智能的产生和发展; 人工智能的内容和特点; 人工智能的研究和应用领域。2.知识表示方法 知识表示的概念; 谓词逻辑表示法; 产生式表示法; 语义网络表示法; 框架表示法; 面向对象表示法。3.推理方法 推理的基本概念; 确定性推理:推理方法及其分类、推理的控制策略、推理的逻辑基础; 不确定性推理:确定性因子法、主观Bayes法、证据理论、模糊推理。4.问题求解与搜索方法 状态空间搜索,状态图问题求解; 与或树搜索,与或树问题求解; 博弈树搜索,极大极小过程,-剪枝法。5.机器学习 机器学习的概念; 机械学习; 基于经验的学习; 基于事例的学习; 基于类比的学习; 基于神经网络的学习。6.人工智能应用--专家系统 专家系统的概念; 专家系统的结构; 专家系统的应用与发展概况; 产生式系统 专家系统设计举例。 7.人工智能的争论与展望 关于人工智能的争论; 人工智能对人类的影响; 对人工智能的展望。 三、课程教材及主要参考书 1.人工智能及其应用(第三版)研究生用书,蔡自兴编著,清华大学出版社,2006年5月 2.人工智能技术导论,廉师友编著,西安电子科技大学出版社,2002年第1版 3.人工智能原理及其应用,王万森编著,电子工业出版社,2000年9月 4.Artificial Intelligence A New Synthesis Nils J.Nilsson 机械工业出版社 1999.9 四、预修课程 数理逻辑、离散数学、高级语言程序设计、数据结构与算法 五、适用专业、范围 目前,大部分企业采用Excel软件对光缆进行设计和计算,但光缆的结构复杂多变,计算较为繁琐和容易出错,一旦有些材料价格发生变化,则需要重新调整计算。在很多项目投标报价中,客户要求对每种结构从2~144芯进行报价,并提供各结构图,因此计算量相当大,需要花费长时间进行重复的工作。为此,我们基于面向对象对光缆设计系统进行了开发。 经过仔细分析和研究,我们发现光缆的结构虽然复杂多变,但光缆材料就那么十几个大类,结构形状的组成也就只有圆柱形和圆管形,而且排列有序。基于以上分析,结合面向对象程序设计方法(封装、继承、多态等),我们在计算机内构造了复杂的光缆对象,将零散的光缆设计参数、结构图和成本数据等对象进行了整合,形成关联,最终将光缆的二维结构图(截面图)、三维结构图、技术参数、制造成本、结构净重输出到Word和Excel面向客户。 2设计实例 现以GYTA型光缆为例介绍基于面向对象的光缆设计系统的设计。首先将光缆各单元模块(包括中心加强单元、层绞套管组合、中心束管套管、带状束管套管、层绞带状套管组合、阻水带、玻纤纱、阻水缆膏、铝带、钢带、撕裂绳、芳纶纱、钢丝铠装、平行钢丝护套、塑料护套、8字护套、色条等)进行对象化。各单元模块相互之间再根据直径进行关联(如图1所示),例如由中心加强件直径和套管直径可算出缆芯直径,由缆芯直径可算出铝带纵包直径,由铝带直径可算出护套直径(具体的计算公式可参见表1),各级直径具有承上启下的作用,这样就可以对光缆进行灵活多变的组合。根据客户要求,只需将各单元模块调出进行组合,不必再对各级之间的关系进行衔接,例如套管组合之后可以是芳纶,可以是内护层,可以是复合带铠装,当然也可以是阻水带或无纺布层,甚至还可以再加几层套管组合,从而形成多层绞合的大芯数光缆。 注:1)表中 N 为束管内光纤数,Rf为光纤直径,D 为套管直径,n为缆芯绞合数,p 为绞合节距,B 为套管壁厚,更多计算公式可参见文献[1]和[2]。 基于面向对象的光缆设计系统的软件设计,通常采用的设计语言是C#[3],但C# 与Direct3DX有兼容性和性能问题,因此我们建议设计语言采用C++ 或Java。设计平 台采用MicrosoftVisualStudio2010,若使用Java,建议设计 平台采用Eclipse。数据库可采用MicrosoftSQLServer2008或MYSQL,实现数据保存,权限管理。光缆二维截面图形采用GDI+ 绘制,三维图形采用Direct3DX模拟。采用NPOI导出数据到Word或Excel进行数据输出,其他相关软件还有WPF、DEV。基于面向对象的光缆设计系统的软件设计分为对象、核心运算和输出三大部分,整个系统的设计流程如图2所示。首先是根据输入的各项参数通过单元模块设计转化成 光缆的各 结构对象,将所有对 象放在ArrayList中(如图3所示);其次是核心运算部分,主要是对各对象组成的ArrayList进行分析计算;最后是数据输出部分,包括结构图输出、参数输出、成本输出等,如图4所示。 参考文献 [1]陈炳炎.光纤光缆的设计和制造[M].2版.杭州:浙江大学出版社,2011. [2]邹林森.光纤与光缆[M].武汉:武汉工业大学出版社,2000. 摘要:在项目管理中,项目客户关系管理是实现项目成功实施的重要环节。本文以交通项目为背景,把面向对象建模技术应用在其项目客户关系管理系统的建模设计过程中,使用可视化的统一建模语言UML对该系统进行了详细的分析和设计。关键词:项目;CRM;PCRM;UML;用例 Abstract:In project management,project customer relationship management acts an important role for a SUCCeSSfUl implementa‘tion of project.In this paper,the object·oriented modeling technology is used to design the project customer relationship manage‘ment system based on tragic engineering projects,and the function and components of the system are designed and described indetail by using visual unified modeling hnguag UML. Key words:pmject;CRM;PCRM;UML;use case 一、引 言 CRM(Customer Relationship Management)是指企业针对各方面信息进行实时采集和动态跟踪,然后进行综合、分析、处理、统计,进而辅助企业进行以客户为中心的全面运营管理¨。客户关系管理的理念要求企业必须完整地认识整个客户生命周期,提供与客户沟通有效的统一平台,提高员工与客户接触的效率和客户反馈率,提高客户的忠诚度、满意度以及降低企业经营成本,从而提升企业客户的价值,提高企业利润收入。项目是一个组织为实现既定的目标,在一定的时间、人员和资源约束条件下,所开展的具有一定独特性的一次性工作。项目的含义非常广泛,既可以是一个大型的工程项目,也可以是一项新产品的开发、一项科研课题的研究,或一项特定的服务。项目的客户是使用项目成果的个人或组织,任何一个项目都是为项目的客户服务的,所以在项目管理中必须认真考虑项目客户的需要、期望和要求¨J。项目客户关系管理(Project Customer Relation— ship Management,PCRM)系统是在项目管理过程中,用来捋清各种客户关系、对客户行为进行分析并提供决策支持的系统。采用传统的结构化设计方法很难满足现在大型软件系统的要求,而面向对象技术实现了软件的可重用性和可扩展性,提高了系统的稳定性,并使系统易于理解和维护,针对系统特点我们选择面向对象技术对项目客户关系管理系统进行分析、设计。 1、项目客户关系管理系统的特点 项目客户关系管理是以通过持续改进提高客户满意度为中心,不断实现对项目质量、成本、进度的控制,建立适应客户不断变化需求的灵活的组织结构,以全面客户满意为目标,最终与客户建立长期良好的 合作关系,实现双赢的管理方法 J。客户关系的管理应以项目的实施过程为主线,客户关系管理贯穿于项目管理的整个流程中,尤其要把握项目进度计划实施与客户关系管理实施的协调。项目管理是在有限的资源条件下,为实现项目目标所采取的一系列管理活动,传统的项目管理系统多是在企业内部进行进度、成本、资源、费用的管理。项目客户关系管理系统中:项目客户应该参与项目整个过程,客户提供项目;客户为项目提供主要信息,表达自己的需求;客户约束项目;客户提出项目变更并审核变更;客户接收项目交付物并使用产品。客户管理的目标和项目管理的目标是统一的,即实现客户的全面满意。’在项目全生命周期中,存在客户与项目、客户与企业的频繁的各种形式的交互,基于软件可重用性和可扩展性,开发该系统应该采用面向对象技术。 二、可视化的统一建模语言UML 2.1 UM L概述 统一建模语言UML是一种定义良好、易于表达、功能强大且普遍适用的可视化图形面向对象技术建模语言 J。它溶人了软件工程领域的新思想、新技术和新方法,它的作用域不只限于支持面向对象的分析与设计,还适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。UML采用图形化的表示法,主要包括用例图、类图、包图、状态图、活动图、序列图、协作图、组件图和部署图等。这些图为系统的分析、开发提供了多种图形表示,它们的有机结合可以分析和构造一个一致的关系,并不是每个项目都会用到所有的图,许多项目并不需要状态图或活动图,但一般项目至少产生用例图、序列图和类/协作图。在软件开发过程中,UML是软件开发人员表达设计思想、进行交流沟通的非常有效的工具。2.2 RoSE简介 Rational Rose是一种面向对象的分析建模工具,利用这个工具,我们可以建立起用UML描述的软件系统的面向对象模型,并且可以自动生成和维护VB、C++、Java等语言的代码框架。应用Rose进行系统建模的过程大概如下: (1)识别系统的用例和角色:识别出角色(Actor)与各功能用例(Use Case)O(2)系统分析:建立Sequence(序列)视图、Collaboration(协作)视图以及State(状态)视图。(3)系统设计:确定系统的类及类的属性、操作、各类之间的关系,建立起详细的Class Diagram(类图)。 (4)代码实现:在建模完成后,开发人员利用RationalRose工具可以生成程序代码框架,并对代码框架进行修改和补充,形成完整代码;而且,还可根据代码逆向生成UML模型。 三、PCRM 系统设计 3.1 PCRM 总体功能结构图 项目客户关系管理系统主要由四大功能模块组成:客户管理、项目管理、服务管理、日历管理。对每一功能模块进行分析,可得到详细的子功能,如图1所示。作为PCRM系统基础的客户管理模块,其结构形式以客户资源管理为基础,客户分析为核心,兼顾实现潜在客户和合作伙伴管理的子功能。项目管理功能模块实现项目全生命周期的各个环节进度、成本、质量以及客户关系的协调管理,包括市场分析、项目采购(招投标)、合同管理、项目进度管理、项目绩效考核等子功能。服务管理功能模块实现项目生命周期、客户生命周期内外客户服务相关内容管理,划分为客户接触管理、客户评价/投诉、需求变更管理等子功能。由于篇幅的限制,图1并不是最终细化的功能结构图,比如说客户分析子功能还应进一步划分为:客户群分析、客户满意度分析、客户价值分析、客户流失分析等,项目进度管理子功能还应进一步划分为:项目资源管理、成本控制、进度计划等。四大功能模块的子功能模块之间是有效结合,它们相互协作、相互贯穿,最终使行业中的企业运行模式从“以项目为中心”向“以客户为中心”进行转变。 3.2项目管理功能模块Use Case视图 图I表示了系统最大的功能模块的划分,对每一个功能应再创建用例图,进一步明确其功能。由于项目管理功能模块是整个系统的核心模块,我们仅对项目管理功能模块用例进行进一步细分,其它模块的建模过程与其类似。项目管理功能模块的用例图如图2所示。注:途中“通常ADU操作”,指的是“ADD、DELETE、UPDATE操作”,细化后的底层用例都应实现“通常ADU操作”,图2中并没一一标出。 项目管理功能模块中涉及的参与者包括:企业领导、项目经理、项目执行人员、合作伙伴、客户、相关厂商等。其中企业领导、项目经理、项目执行人员、合作伙伴等角色参与到项目管理的整个过程中;而角色客户与项目实施方紧密地沟通交流、协作,参与进度计划、成本控制、项目资源管理、项目绩效考核、合同管理等;相关厂商可能只参与某些项目的合作投标过程。3.3 建立Sequence图 定义出各功能模块的基本功能、建立起系统的Use Case视图以后,下一步应该针对每个Use Case的业务操作流程绘制其Sequence视图。Sequence视图反映系统中若干个对象之间的动态协作关系,分析对象之间消息的先后次序,说明对象之间的交互过程,以及系统执行过程中,在某一具体位置将会发生什么事件。我们以“对客户沟通记录”操作为例说明sequence 视图的建立过程:相关人员登录项目管理主界面,打开项目采购中的客户沟通记录界面,选择、打开记录界面,在界面上根据权限对数据库进行增删改操作(权限及输入的合法性检验过程略)。这个过程我们可以初步建立一个完全面向操作过程的se—quence视图,如图3所示。此处我们没有绘制协作图,协作图可以由所画的 Sequence视图动态生成。其它功能模块的建模过程也与此类似,这里不再说明。3.4系统类图设计 对系统的Use Case图进行分析,我们可以得到系统的类图,在分析阶段,可以找出大部分的类以及类中的大部分的属性,剩余的类和属J陛可以在详细设计阶段通过Sequence图找出。类图设计过程中,具有相似行为或属性的类应合并,以避免类的冗余、提高类的抽象性和继承性。客户沟通局部类图如图4所示。 3.5 PCRJVI系统的代码结构设计 PCRM系统我们采用如图5所示的三层软件结构,分为User Services(用户层)、Business Services(业务层)、Data Services(数据服务层),这种结构有利于类的重用和扩展,有利于提高类的抽象性和继承性,这正是面向对象设计的优势所在。三层结构中各类的功能如下:User Services层中的边界类PCRM defineform实现界面显示功能,边界类Facade运行界面中的函数和过程;Business Services层中的PRCM Man—ager集合管理类和PCRM持久实体类对界面提交的数据进行业务逻辑处理,负责数据修改的Modify类、负责数据读取的Fetch 类和DataAccess类将业务逻辑处理好的数据提交给Data Services(数据服务层)进行数据存取;Data ewices(数据服务层);OLEDB(ADO)/ODBC类通过DBMS(数据库管理系统)实现 对数据库的存取。 应用此三层软件结构,结合面向对象设计过程中设计的类图,图3所示的对客户沟通记录操作的Sequence图可以转化为如图6所示的对客户沟通记录操作的程序Sequence图。这时,在Rose中可以自动生成对客户沟通记录进行增删改的VB、C++、Java等语言的代码框架了。 四、结束语 本文对项目客户关系管理这个项目管理中的新课题作了一定研究探讨,并以交通项目为背景定义出了一个项目客户关系管理系统。在这基础上以统一建模语言UML为工具,将面向对象技术应用于项目客户关系管理系统设计中,使得系统具有更好的可重用性、可维护性,在一定程度上实现了软件开发的自动化、实现了软件设计和编码的无缝的连接,提高了软件开发的效率和质量。有关项目客户关系管理许多问题还有待于进一步研究,项目客户关系管理系统还有待进一步完善。参考文献: [1] 夏安邦,孙欣.对当前CRM研究的综述和讨论[J].中国制造业信息化,2004,33(5):13—17. [2] 戚安邦.项目论证与评估[M].北京:机械工业出版社,2004. [3] 陆菊春.浅析项目客户关系管理[J].商业时代,2003(17):22. [4] Boggs W.UML与Rational Rose 2002从入门到精通[M].北京:电子工业出版社,2002. [5] 马重明,张学旺,范时平.基于UML的软件体系结构开发方法[J].计算机工程与应用,2006,42(4):118.120. (计算机科学与技术本科专业使用) 一、教学目标 通过该实验课,学生应在熟练掌握过程化程序设计方法的基础上,领会面向对象程序设计及类的封装、数据隐藏、继承及多态等特性,逐步掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。 二、实验教学时数 三、实验内容 实验一 图形打印 1、实验目的:练习for循环 2、实验技能培训内容:打印几种特殊图形,如菱形和Z字形 3、主要仪器:计算机 4、实验方法:上机编程 实验二 判素数 1、实验目的:练习函数 2、实验技能培训内容:判断101-200之间有多少个素数,并输出所有素数。 3、主要仪器:计算机 4、实验方法:上机编程 实验三 递归函数练习 1、实验目的:练习递归函数 2、实验技能培训内容:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21....3、主要仪器:计算机 4、实验方法:上机编程 实验四 数列排序 1、实验目的:练习数组及几种基本排序方法 2、实验技能培训内容:用选择、插入、冒泡、快速等几种基本的排序方法对数列进行排序。 3、主要仪器:计算机 4、实验方法:上机编程 实验五 矩阵乘积 1、实验目的:练习数组 20学时 2、实验技能培训内容:用数组存储两个矩阵,求两个矩阵的乘积。 3、主要仪器:计算机 4、实验方法:上机编程 实验六 设计时间日期类 1、实验目的:掌握简单类的设计方法 2、实验技能培训内容:构造一个TimeDate类,类中包含一个成员函数,用来在屏幕上显示时间与日期(采用建立在标准库time.h中的标准时间与日期来寻找与显示日期)。 3、主要仪器:计算机 4、实验方法:上机编程 实验七 设计计时类 1、实验目的:掌握简单类的设计方法 2、实验技能培训内容:建立Watch类,用来仿效秒表跟踪消逝的时间。用构造函数将消逝时间的初值置为零。提供两个成员函数Start()与Stop(),分别打开与关闭计时器。 3、主要仪器:计算机 4、实验方法:上机编程 实验八 设计字符栈类 1、实验目的:掌握简单类的设计方法 2、实验技能培训内容:用Stack类,写一个函数LoadStack(),用来返回已经将字母表(a-z)入栈的堆栈。在调用函数中,将这个堆栈赋值给另一个对象,并证明它包含字母表。可以改变堆栈的尺寸,以便它大得足以支持字母表。 3、主要仪器:计算机 4、实验方法:上机编程 实验九 友元的使用方法 1、实验目的:掌握友元的使用方法 2、实验技能培训内容:求两数的平方差(友元函数说明) 3、主要仪器:计算机 4、实验方法:上机编程 实验十 访问权限 1、实验目的:掌握类成员的各种访问权限 2、实验技能培训内容:类成员的各种访问权限 3、主要仪器:计算机 4、实验方法:上机编程 实验十一 类的派生 1、实验目的: 掌握类的派生 2、实验技能培训内容:给出基类AreaClass(形状类),建立两个派生类Box(方形类)与Isosceles(等腰三角形类),让每个派生类包含一个函数Area(),分别用来返回方形与等腰三角形的面积。 3、主要仪器:计算机 4、实验方法:上机编程 实验十二 用类方法求解一元二次方程 1、实验目的: 掌握类的派生 2、实验技能培训内容:实现一个Complex类和一个Real类。将Real类定义为Complex类的子类。然后设计一个求解一元二次实系数方程的根的类Root。 3、主要仪器:计算机 4、实验方法:上机编程 实验十三 类继承中的构造 1、实验目的: 掌握类继承中的构造 2、实验技能培训内容:类继承中的构造方法 3、主要仪器:计算机 4、实验方法:上机编程 实验十四 类继承中的构造 1、实验目的: 掌握类继承中的构造 2、实验技能培训内容:类继承中的构造方法 3、主要仪器:计算机 4、实验方法:上机编程 实验十五 大学生类 1、实验目的: 掌握虚函数的使用 2、实验技能培训内容:设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一个类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。 3、主要仪器:计算机 4、实验方法:上机编程 面向对象程序设计语言C#综合了VB简单的可视化操作和C++的高运行效率, 以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。 现在各大高校都开始了各种形式的C#程序设计课程, 由于C#的独特性, 传统的教学方式与方法明显不能满足C#教学的需求, 笔者根据近几年C#教学的经验, 在C#教学上做了一些研究, 供大家参考。 2、教学内容 教学内容的选取对面向对象程序设计语言C#的教学是非常重要的, 因为它决定了教学的质量。由于C#的独特性, 在教学内容的选取上面, 采用分阶段教学的方式, 将C#的学习分为两个阶段, 第一阶段为基础知识学习阶段, 第二阶段为系统设计阶段, 课程采用4节课为一个单元的方式, 每周8节课, 总课时为128节。具体课时和内容安排如下表所示: 3、教学方法与手段 针对教学的不同内容, 设计不同的教学方法。 在第一阶段, 因为是介绍C#的基础知识, 所以采用任务驱动式教学, 每一基础知识都对应一个小的任务。第二阶段, 采用项目教学方法, 在项目中讲解相关的知识点。 在C#教学过程中, 积极采用多种现代化的教学手段是提高教学质量的有效途径, 主要的教学手段有: (1) 设计生动的教学多媒体课件。生动的课件可以营造轻松活泼的课堂气氛, 将抽象化的问题融入到学生熟悉的生活情境, 并通过动画演示等手段, 让学生通过对熟悉事物的认知来理解理论知识。 (2) 充分利用机房控制软件。由于C#教学都是采用一人一台电脑的方式教学, 所以要充分利用机房控制软件的互动功能, 让学生和老师能进行交互教学。 (3) 互联网交互学习。将课堂的教学延伸到课外, 可以建立一个C#学习QQ群, 教师与同学可以在课外进行交流, 学生之间也可以随时进行交流。还有就是建立C#学习的网站, 将学习的相关资料都放在上面, 方便学生查找资料, 自我学习。 4、考核方式 考核只是一种手段, 不是目的, 考核就是要检验一下学生的掌握情况, 针对C#教学的特殊性, 我们采用过程化考核方式, 学生的最后成绩主要由平时的程序完成情况来决定, 即总成绩=平时表现+任务完成成绩+阶段项目一成绩+阶段项目二成绩+课程设计成绩。这样, 学生改变了考试前"临时抱佛脚"的心态, 重视实验、重视平时表现。事实证明, 这种考核结果很大程度上解决了"高分低能"的问题。可以说C#成绩高的学生, 也是真正理解C#编程的学生。 5、结束语 C#作为一门面向对象编程语言, 具有很强的特殊性, 因此在教学中不能按照传统的方式进行教学, 需要不停进行教学改革, 摸索适合学生的一种模式, 这样才能真正让学生学得轻松, 教师教的轻松。 摘要:在面向对象程序设计语言C#的教学过程中, 如何选取教学内容, 采用何种教学方法和手段是非常重要的, 本文结合学生学习程序语言的特点, 根据本学院的教学情况, 对C#教学进行探讨, 交流了教学经验。 关键词:C#教学,面向对象,教学方法 参考文献 [1]谭恒松.C#程序设计与开发[M].北京:清华大学出版社, 2010. [2]沈蕴梅.《C#程序设计》教学改革之初探[J].科技信息, 2009, (33) 【java面向对象程序设计教案】推荐阅读: 面向对象课程设计任务07-22 面向对象程序设计心得体会11-18 面向对象程序设计-教学大纲-信管01-20 “面向对象的程序设计基础”课程总结01-22 《面向对象程序设计方法》课程教学大纲12-14 面向对象作业评讲07-13 《采访对象是棵树》教案设计09-20 面向社区的动态人口管控系统设计论文11-079.java面向对象程序设计教案 篇九
10.面向对象的损伤容限分析与设计 篇十
11.java面向对象程序设计教案 篇十一
12.基于面向对象的光缆设计系统 篇十二
13.java面向对象程序设计教案 篇十三
14.java面向对象程序设计教案 篇十四
15.java面向对象程序设计教案 篇十五