欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPTX文档下载  

    第8章 类.pptx

    • 资源ID:9228330       资源大小:830.69KB        全文页数:58页
    • 资源格式: PPTX        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第8章 类.pptx

    面向对象程序设计,金小峰 延边大学 工学院 计算机科学与技术系 2011,第8章 类(classes),8.1 从结构到类(from structure to class) 8.2 成员函数(member functions) 8.3 操作符(operators) 8.4 再论程序结构(program structure restatement) 8.5 屏蔽类的实现(shield class implementations) 8.6 静态成员(static members) 8.7 友元(friends),面向对象方法概论,1. 传统软件开发方法中存在的问题,早期:崇尚程序员个人技能软件复杂性增长,代码难以维护,人们认为软件开发是一项很强的依赖个人技巧和技术能力的艺术性劳动。,需要一种新的软件开发方法,后来:出现了两种典型的软件开发方法,即结构化方法和面向对象方法,结构化方法(structural method),结构化方法是结构化分析、结构化设计和结构化编程的总称。 强调开发方法的结构合理性以及所开发软件的结构合理性; 目的是提供一种有序的机制,通过抽象来理解待开发的系统,试图产生结构良好的软件系统。,特点: 分析和设计过程注重处理功能,在数据与对数据的操作上结合得不紧密; 仍未解决软件危机问题; 不容易实现模块的高内聚,低耦合,致使系统缺乏灵活性和可维护性。,面向对象的方法,1970年代末,Peter Chen提出了实体-关系法,试图使用现实世界中的实体(entity)与实体之间的关系来描述问题空间,并将此空间映射到计算机空间,同时将实体关系映射为类之间的关系。 它仍然使用抽象和模块化等概念。 它所建立的模型对问题域进行了完整与直接的映射。,面向对象的基本思想,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学。,思路:从现实世界中的客观对象(如人、事物、概念等)入手,尽量运用人类的自然思维方式从多方面来构造软件系统,这与传统的结构化方法注重用功能构造系统不同。,人们普遍地认为面向对象方法是一种运用对象(object)、类(class)、继承(inherit)、封装(encapsulation)、聚合(aggregation)、关联(relevance)、消息(message)和多态性(polymorphism)等概念和原则来构造系统的软件开发方法。,基本思想,客观世界中的事物都是对象,对象间存在着一定的关系,且复杂对象由简单对象构成; 具有相同属性和操作的对象属于一个类,对象是类的一个实例; 类之间可以有层次结构,即类可以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作; 类具有封装性。(私有和公有成员) 强调充分运用人类在日常逻辑思维中经常采用的思想方法和原则。,主要概念,对象:来描述客观事物的一个实体,是构成系统的一个基本单位。 由一组属性和对这些属性进行操纵的一组操作构成; 属性:描述对象静态特征的一个数据项;数据 操作:描述对象动态特征的一个动作序列;函数 对象、及其属性和操作都有自己的名字。 类:具有相同属性和操作的一组对象的集合对象的抽象结果 用于创建对象; 同一个类产生的不同对象其属性值存在差别。 继承:指子类(派生类)自动地拥有或隐含地复制其父类的全部属性与操作,这种机制也称为类的泛化。 一子多父称为多继承 继承可实现软件复用,关联:类之间的静态联系 聚合:一个较复杂的对象其他若干个较简单的对象作为其构成部分,把这种对象间的关系称为聚合。,面向对象的基本原则,抽象: 从事物中舍弃个别的、非本质的特征,而抽取共同的、本质特征的做法; 只有与问题域有关的角色才在系统中予以考虑。,2. 分类: 按照某种原则划分事物的类别。 有助于对复杂世界的认识; OO中,将具有相同属性和操作的对象划分为一类。,3. 封装 将描述一个事物的属性和操作行为结合在一起,对外形成该事物的一个界面(接口)。 通过封装体现了事物的独立性; 实现了信息隐蔽; 信息隐蔽可能带来编程麻烦、执行效率低等缺点。,4. 消息通信 对象之间的操作请求称为消息。 对象之间通过消息进行通信,实现了对象之间的动态联系。,5. 多态性 继承形成的类之间的层次关系中,子类继承了父类的属性和操作,另外还拥有自己的属性和操作。 多态性是指在子类中定义与父类同名的操作或(和)属性,但这些操作或属性具有不同的含义。如此,相应的对象可以以不同的行为响应同一个消息。,面向对象方法的主要优点,从认识论的角度,面向对象的方法改变了人们认识世界的方式 面向对象方法使得从问题域到计算机之间的鸿沟变窄 易于维护和复用 有助于提高软件的质量和生产效率(可提高20%),8.1 从结构到类,关系密切,但是C中的结构体不允许两者整合。即不能整合为“实体”,f0801a,改造一下,数据成员,函数成员,f0801b,还是不太完美,结构体成员在外界可以不受任何限制地访问,能够保护某些成员就好了!,然后将这些日期打印出来。,f0801c,Example: f0801,定义类,格式: class 类名 访问属性: 数据成员1; 数据成员2; 数据成员N; 访问属性: 函数成员1声明或定义; 函数成员2声明或定义; 函数成员N声明或定义; ; 返回值 类名:函数成员名i(形参表) 函数体 ,private: 私有成员(默认),只能类内访问 protected: 保护成员,类内及派生类访问 public: 公有成员,类内外均可访问,成员函数的类体外定义形式,作用同语句标号(如switch语句中的case标号) 作用域直到遇见另一个访问属性截至,Example: f0802,类成员的访问属性定义,子类可以直接访问父类的保护乘员,在学习C+阶段,为了掌握类的封装特性,建议将数据成员定义为private或protected,1. 常成员函数(Const member functions),成员函数如果只对对象进行读(read)操作,则可将该函数定义为常(const)成员函数。 好处:该函数对对象的任何写(write)操作均被编译器识别为错误,有效地保护对象成员数据被改写。 建议:尽可能使用常成员函数。,定义格式:,返回值 函数名(形参表) const 函数体语句; ,表明该函数是常成员函数 函数的声明和定义均需要const关键字,否则视为函数重载 非成员函数不能定义为常函数,如:f0803a,8.2 成员函数,Example: f0803b,2. 重载成员函数(Overloading member functions),与普通函数相同,成员函数也可以重载,Example:f0804,书中代码(pp.262)有误。字符串常量转换为一般引用类型错误。改正方法:1)参见main函数;或2) void Date:set(string (+a)+; / 表达式结果是2,a=3 (b+)+; /VC+中编译错误(最右侧的+运算符缺少左值),Example:f0806,注意避免VC+6.0的BUG,成员操作符重载,操作符也可以作为成员函数进行重载。,Example:f0807,作业:将增量操作符的重载用成员函数的方式实现。,8.4 再论程序结构,1. 访问控制,private: 只供类内成员以及friend访问,其余均被禁止(包括派生类); 如果未指定访问属性,类内成员默认具有private访问属性; 通过private实现类内成员对外屏蔽,如果类外需要访问private成员,则需通过公有成员函数或friend进行间接地访问。,protected: 只供类内成员、friend以及派生类(子类)访问,其余均被禁止; 通过protected也可以实现类内成员对外屏蔽(派生类除外),如果类外需要访问protected成员,则需通过公有成员函数或friend进行间接地访问。,public: 对外对内公开,通常函数成员需要设置成public,除非有些成员函数仅供类内其他函数成员使用,2. 类的程序结构,类定义,类体= 数据成员+函数成员的声明或定义,类的实现(类体外成员函数的定义),头文件(.h),源文件(.cpp),应用文件(.cpp),VC+ 6.0 IDE新增类,Example: f0809,8.5 屏蔽类的实现,类的封装特性:将类与其他类隔离开来,形成界面(接口); 对外隐藏了类定义细节,只保留公有成员与外界通信; 使用该类的程序员一般无需关心类的细节,只需要掌握类的功能及其接口函数; 有些时候类的提供者只提供类的编译代码(动态连接库或静态连接库文件)。,8.6 静态成员(static members),所有该类的对象共同拥有的同一个内存实体类成员,称为静态成员。 与函数内的局部静态变量相似,静态成员只被创建(初始化)一次,存放在全局数据区,生命周期同进程。,1. 静态数据成员,定义方式:,class 类名 static 类型 变量名; . ; 类型 类名:变量名 = 初始值;,静态数据成员声明,分配空间并初始化,Example:f0812,试图记录该类对象创建的个数,即本题中为学生总数,用静态数据,思路正确,但是局部静态数据限制了它的访问能力,即一个对象访问不了另一个对象静态数据,怎么办?,Example:f0813,静态数据成员,类外分配空间和初始化,Example:f0813a,对象没有创建也可以访问,也可以用对象名去访问,如果是私有静态成员,如何去访问?,2. 静态成员函数,定义方式:,class class_name private: static type varible_name; public: static type function_name( ); ; type class_name:varible_name =Initial_value; type class_name:function_name( ) / access to static data varibles ,只能访问静态数据成员,Example: f0814,8.7 友元(Friends),友元是类的朋友,它可以访问类内的所有成员。 友元不是类的成员,因此不受访问属性的限制。 友元可能降低类的封装性,故不能滥用。 友元一般是函数,也可以是其他的类。,方法:,class className friend type functionName( ); ; type functionName( ) / could access class members ,友元声明,友元函数定义,Example:f0815a,作业讲评,练习8,ex0801,ex0802,ex0803,ex0804,

    注意事项

    本文(第8章 类.pptx)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开