您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 7 面向对象程序设计方法和思想
第7章面向对象程序设计方法和思想华南师范大学计算机学院庞雄文**学校高级班学生成绩表学号姓名性别入学时间计算机原理英语数学音乐1乔峰男1999908372822段誉男1999789288783虚竹男1999897298664张无忌男1999789587905小师妹女1999929057826黄蓉女199960909595如何用计算机程序实现上述表格的管理?华南师范大学计算机学院庞雄文数组的解决方法intstudentId[30];/*最多可以管理30个学生,每个学生的学号用数组的下标表示*/charstudentName[10][30];char*/intscoreMusic[30];/*音乐课的成绩*/华南师范大学计算机学院庞雄文数组的解决方法intstudentId[30]={1,2,3,4,5,6};charstudentName[10][30]={{“乔峰”},{“段誉”},{“虚竹”},{“张无忌”},{“小师妹”},{“黄蓉}};charstudentSex[2][30]={{男},{男},{女},{女}};inttimeOfEnter[30]={1999,1999,1999,1999};intscoreComputer[30]={90,78,89,78};intscoreEnglish[30]={83,92,72,95};intscoreMath[30]={72,88,98,87};intscoreMusic[30]={82,78,66,90};华南师范大学计算机学院庞雄文数组的解决方法数组方式存在的问题(1)分配内存不集中,寻址效率不高(2)对数组进行赋初值时,容易发生错位(3)结构显得比较零散,不容易管理1乔峰男1999908372822段誉男1999789288783小师妹女1999897298664黄蓉女199978958790华南师范大学计算机学院庞雄文结构的表示方法在成绩管理系统中,每个人均有各门课程的成绩,同时还有名字、学号等信息,因此在系统中,每位同学应作为一个整体这就是面向对象的启蒙看法:面向对象,是为了让我们把程序写得更“自然”。越是支持面向对象的编程语言,我们就越能以接近人类自然逻辑的思路来设计程序;而越不支持面向对象的编程语言,也许它初看起来似乎很浅显易用,但当用它来解决实际问题时,程序员就不得不受限于这门语言特有的解决问题的思路华南师范大学计算机学院庞雄文结构的表示方法把同属于一个整体的“数据”,归成一个新的类型去考虑,而不是分割成每一部分。“结构”提供一种能力,允许程序员把多个数据类型,归属成一个完整的,新的数据类型华南师范大学计算机学院庞雄文structstudentGrade{intstudentId;//学号charstudentName[10];//姓名charstudentSex[2];//性别inttimeOfEnter;//入学时间intscoreComputer;/计算机原理课的成绩*/intscoreEnglish;//英语课的成绩*/intscoreMath;//数学课的成绩*/intscoreMusic;//音乐课的成绩*/};结构的表示方法华南师范大学计算机学院庞雄文假设还想掌握*学生(结构中那个表格)的练武情况,这我们需要定义函数:引入面向对象的思想练武(***人,***功)如果需要调用练功函数,则:练武(张无忌,九阳神功)这种编程方式自然吗?有没有自然一点的写法?比如张无忌.练功(九阳神功)华南师范大学计算机学院庞雄文练武当然还有武功秘籍呢,所以:引入面向对象的思想structstudentGrade{intstudentId;//学号charstudentName[10];//姓名charstudentSex[2];//性别inttimeOfEnter;//入学时间intscoreComputer;/计算机原理课的成绩*/intscoreEnglish;//英语课的成绩*/intscoreMath;//数学课的成绩*/intscoreMusic;//音乐课的成绩*/charMiJi[1024];//看家本领的武功秘籍};华南师范大学计算机学院庞雄文再来看练武的那个函数,修改成:引入面向对象的思想练武(***人,***功,***秘籍)练武过程是根据武功秘籍来的,但**秘籍改变了,练武的函数却不知道,结果是什么呢?张无忌练九阳神功的时候,周芷若将这个秘籍换成了九阴真经的秘籍,结果可就麻烦了……由于数据和函数分离,修改数据或者修改函数均可能引起程序员错误?有没有办法有的数据只能通过某个东东来访问,其他未途径一律无法访问呢?华南师范大学计算机学院庞雄文某一天,该班插班进来一个人,自称是张无忌传人,得到了无忌的真传,并且还有很对师傅不会的他也会…..于是我们又要修改函数…….再招收到了他的传人的传人……第N代传人…引入面向对象的思想有没有可能在程序中,张无忌有的东西,他的传人也自动会用呢?华南师范大学计算机学院庞雄文结构化编程的缺点(个人观点,无统一的表述):–写法不自然,不符合高级语言的特点–无法强制进行初始化–数据和操作数据的函数分离,修改数据或者修改函数容易导致错误–软件无法方便地重用…..引入面向对象的思想于是引入了面向对象的思想,但结构化方法并没有被抛弃….华南师范大学计算机学院庞雄文面向对象的基本概念–对象•现实中存在的一个事物,可以是实际存在的也可以是无形的–类•对象的归类,描述这些对象的共同特征,面向对象的基本概念武林学校中的学生都是对象这些学生有共同的特点,要学英语、学数学…….还要练习武功华南师范大学计算机学院庞雄文对象和类的概念解析面向对象的基本概念类是对象的抽象,对象是类的实例对象实例:旭日阳刚、西单女孩、凤凰组合….这些对象有什么共同的特点:草根明星概念定义好像很纠结,究竟是先有类呢还是先有对象?华南师范大学计算机学院庞雄文先有对象还是先有类面向对象的基本概念系统进行分析和设计时,先分析对象,看它们有哪些共同的特征,将这些共同的特征抽象为类-----泛化编写程序时,先定义类,将类作为一种自定义的数据类型,然后产生对象华南师范大学计算机学院庞雄文类的定义方式面向对象的基本概念classstudentGrade{intstudentId;//学号…..intscoreMusic;//音乐课的成绩*/};Struct关键字也可以用来定义类,但是其中成员的访问属性全部是public类中的成员可以是变量(属性),也可以是函数(方法)华南师范大学计算机学院庞雄文封装(信息隐藏)–将数据和操作这些数据的函数”包装”在一起,并且可以设置这些数据的访问权限。面向对象的基石classstudentGrade{intstudentId;//学号…..intscoreMusic;//音乐课的成绩*/private:charMiJi[1024];//看家本领的武功秘籍public:练武(MiJi);};设置只有通过练武这个函数才能访问武功秘籍,其他途径一概拒绝华南师范大学计算机学院庞雄文继承面向对象的基石基因:老爸有什么样的基因,儿子一定有什么样的基因。*****继承了父亲的*****天赋打游戏:魔兽世界。版本升级时向增加一种无敌魔兽,拥有现有魔兽的全部功能,并且会飞……在程序设计时就可以使用继承继承(泛化IS-A):B继承自A,则B自动拥有A的全部东东(有些特殊的内容出外,比如构造函数….),并且B可以修改继承自A的东东….华南师范大学计算机学院庞雄文多态面向对象的基石classstudent{private:charMiJi[1024];//看家本领的武功秘籍public:练武(MiJi);绝招();};不同学生的绝招不同出绝招(student*p){p-绝招()}//(1)***.出绝招(张无忌)(2)***.出绝招(赵敏)九阳神功搞定张无忌华南师范大学计算机学院庞雄文多态面向对象的基石polymorphismmeansthatsomecodeoroperationsorobjectsbehavedifferentlyindifferentcontexts().Forexample,the+(plus)operatorinC++:4+5--integeraddition3.14+2.0--floatingpointadditions1+bar--stringconcatenation!相同的代码或函数会根据不同的上下文环境表现出不同的行为华南师范大学计算机学院庞雄文面向对象程序设计语言–C++、JAVA–Ada、Smalltalk–…..面向对象是一种思想,一种程序设计方法面向对象程序设计语言
本文标题:7 面向对象程序设计方法和思想
链接地址:https://www.777doc.com/doc-3465649 .html