欢迎来到天天文库
浏览记录
ID:14865770
大小:224.50 KB
页数:10页
时间:2018-07-30
《第三讲 面向对象程序设计思想(1)——类和封装》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章面向对象程序设计思想(1)——类和封装3.1面向对象设计方法的由来(1)提高软件的可维护性和可复用性l如何同时提高软件的可维护性和可复用性是现代软件工程的核心问题l一个好的软件设计,必须能够允许新的设计要求以较为容易和平和的方式加入到已有的系统中去,从而使这个系统能够不断的焕发青春。l复用的重要性:提高生产效率、提高软件质量、改善软件可维护性l传统的复用方法:代码粘贴、算法复用、数据结构复用(2)问题抽象的进步l所有编程语言都是对目标问题的“抽象”。l汇编语言用机器的思维去考虑问题,是面向机器的抽象l高级语言以接近自然语言的思维去考虑问题,是面向问题
2、的抽象l面向对象语言以自然界“物质”的思维去考虑问题,认为程序是由一堆对象相互作用的结果(3)机器性能的提高l思维的抽象越来越接近自然,也就意味着要用越来越多的“额外”代码来做支撑。l软件执行速度和复用型、可维护性常常是一对矛盾3.2“纯粹”的面向对象程序设计方法是什么样的(1)所有东西都是对象可将对象想象成一种新的类型;同一类的对象具有相同的属性名称和方法;(2)程序是一堆对象相互作用的结果。它们通过相互发送消息来彼此作用为了告诉对象做什么,需向那个对象“发送一条消息”。具体地讲,可将消息想象为一个调用,它调用的是从属于目标对象的一个子例程或函数。(3)
3、每个对象是独立的,也就是拥有独立的存储空间(4)每个对象都有一种类型(5)同一类型的各个对象,它们能接收的消息是相同的(6)程序通过引用访问对象103.3对象和类3.3.1类人们对事物的抽象描述,概括出该事物所具有的属性和方法,并将其进行封装,以供使用。用class定义类,声明类的形式为:[附加声明][访问修饰符]class类名称[extends[基类]{[属性][方法]}例3.1每位学生每学期最多有15门课程,课程有考试课和考查课两种。课程成绩的原始分按正常考试/考查实际得分计算。考试课的原始分使用百分制形式,考查课的原始分采用等第形式(优秀、良好、中等
4、、及格、不及格)。在进行测评成绩计算时,考查课程成绩中的优秀、良好、中等、及格、不及格的,分别换算成为95、85、75、65和50分。测评计算公式为:分析:从上面描述中可以得到以下有效关键字:学生、课程、考试课、考查课、原始分、评测成绩、学分因此,得到下面几个类:学生类、课程类、考试课类、考查课类。进一步考虑,我们可以发现,考试课类和考查课类都是课程类的子类型。这种现象在面向对象的设计中称为“继承”,在UML的类图中使用空心三角的箭头()表示继承,箭头指向父类。我们可以把相同的东西合并到父类里。10注意,为了“统一”起见,我们将考试课的原始分也定义为了St
5、ring类型(字符串),这样,考试课的“转换成绩”要做的事是将字符串的数值还原成百分制(具体的实现后面会讲到),而考查课的“转换成绩”要做的事是将等第进行转换。于是,我们就可以写出这四个类的结构:(1)学生类class学生类{publicString姓名;publicString学号;public课程类[]课程列表;publicvoid添加课程(课程类课程){//将课程添加到课程列表中}publicdouble计算评测成绩(){return0.0;}}说明:lpublic关键字是用来设定访问权限的,表示任何程序都能够访问。与它相对应还有protected(
6、保护)、private(私有);l课程列表我们使用了数组。关于数组,我们要过一段时间再介绍。(2)课程类class课程类{publicString课程名;publicString原始分;publicdouble学分;publicdouble转换成绩(){return0.0;}}10(3)考试课类class考试课类extends课程类{publicdouble转换成绩(){//将数值型的字符串转换为百分制return0.0}}说明:lextends关键字表示继承,这说明考试课类是课程类的子类,它继承考试类中的内容。(4)考查课类class考试课类extend
7、s课程类{publicdouble转换成绩(){//将等第转换为百分制return0.0;}}3.3.2对象对象(实例):类的实例化。客观的。对象在建立时分配了内存,创建对象实际上作了两个方面的工作:(1)使用new关键字分配内存;(2)使用构造函数初始化数据(构造函数是与类名同名的函数)。内存空间栈内存堆内存学生对象姓名学号……st学生类st=new学生类();103.3.3使用对象1、不直接使用对象,而是使用“引用”“引用”指该类型的变量并不直接存储所包含的实际数据,而是存储实际数据的地址。2、引用间赋值时传递的是存放对象的地址3、当一个对象不被任何句
8、柄引用时,视作“垃圾”。由JAVA的垃圾回收机制自动销毁不再使用的
此文档下载收益归作者所有