版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/12任务5.1隐藏对象的信息21知识目标能力目标封装性访问区分符
利用封装性实现信息隐藏2/125.1.1情境描述Jack在承接了Jam运动商场销售收银系统设计之后,决定到现场去实地调研软件需求,Jack在需求调研的过程中,Jam在给Jack介绍系统的时候,老是在强调商品信息、客户信息、客户销售积分规则及收银销售记录等,Jack在后来对需求进行整理时,意外发现商场销售收银系统居然是现实社会的一系列存在对象及存在对象之间的联系构成的。Jack希望能够采取面向对象及分析对象之间的联系的方法来进行程序设计,在运用C#进行面向对象程序设计之前,他需要先完成以下任务:1)使用访问区分符2)利用封装性隐藏数据第1章目录在现实社会中,信息属于一个对象的私有属性,具有保密性及隐藏信息,因此对于信息的隐藏相当重要。封装性是面向对象的基本特性,在C#面向对象编程中,利用其访问区分符可以有效的控制数据成员的访问,例如private访问区分符则表示不允许其他类对象访问等。Jack要实现商品信息的封装,需要对商品的字段进行private访问区分符限定,然后利用get和set属性进行字段的访问封装操作。第1章目录5.1.2问题分析1、利用VisualStudio2010打开任务5.3项目2、打开Model下面的Goods类,针对Goods类的成员变量进行private访问区分符的封装操作。3、利用C#的属性进行字段的get及set操作封装,在VisualStudio2010中,可以利用快捷Ctrl+R,Ctrl+E进行选定字段的get及set封装第1章目录5.1.3解决方案5/124、利用VisualStudio2010中的快捷实现快速的文件字段封装,封装后的代码Goods类如下所示:5、修改直接访问Goods类中字段的代码。6、针对Cashier类、CashRegisterGoods类及CashRegister的数据成员进行private限定。7、利用get和set对Cashier类、CashRegisterGoods类及CashRegister的数据成员进行访问封装操作。
第1章目录5.1.3解决方案6/125.1.4知识总结1、访问区分符C#中有一些指定声明的成员或类型的可访问性的关键字,叫做访问区分符,C#中的访问修饰符有public、private、protected、internal。(1)public全局访问修饰符public可以声明所有类和成员,并且对这些类或成员的的访问不受限制,任何代码都可以访问该类或成员。如大学图书馆是public的,来自任何学校的学生可以参观图书馆和阅读书籍。(2)private私有成员修饰符private声明的成员是私有的,只能在类的内部访问。不能用private声明顶级类,如果将一个类声明为private,那么在命名空间中是没有意义的,只能在类的内部才能访问私有成员。一个类的派生类也不能对该类中由private修饰符修饰的成员进行访问.第1章目录7/125.1.4知识总结(3)protected保护成员修饰符protected声明的成员,只能从所在类和该类派生的派生类可以访问该类的保护成员。(4)internal内部访问修饰符internal声明的成员只能在包含它的程序集中访问。
上述四种访问修饰符是基本的访问修饰符.由protected和internal组合在一起可以形成一种新的访问修饰符,即内部保护成员修饰符protectedinternal,用protectedinternal修饰的成员在同一个程序集的任何代码中都可见,在派生类中也可以见,甚至在其他程序集中也可见.第1章目录8/125.1.4知识总结2、封装类的封装将方法和数据包含在一起形成一个独立的单元,通过设定单元内各个成员的特性来控制对成员的访问,简单来讲,封装指的是隐藏类中成员,及方法实现细节的过程。(1)通过封装隐藏成员在现实生活中,一个类的属性和方法并不是完全对外公开的,常常有部分属性方法公开,其他代码都可以访问,有部分属性方法部分代码才能访问,有部分属性方法只有对自身类才能访问。在定义类的时候通过对成员使用访问修饰符修饰就可以达到目的。(2)通过封装隐藏方法实现细节第1章目录9/125.1.4知识总结多态多态指的是同一个操作作用域不同的对象,可以有不同的解释,产生不同的执行结果,可以有静态多态和动态多态两种类型。静态多态
静态多态又叫编译时多态,就是系统在编译时,根据传递的参数,返回的类型等信息决定选择哪种函数。这种多态性是通过重载来实现的。一般有函数重载,操作符重载。动态多态动态多态又叫运行时的多态,指系统在编译时还不能够确定选择哪个重载函数,而是在系统运行的时候,才能根据实际情况决定采用哪个重载函数,第1章目录10/125.1.5应用实践针对Book类的成员变量进行private访问区分符的封装操作。第1章目录11/12任务5.2实现代码复用21知识目标能力目标继承性基类子类利用继承性实习代码复用12/125.2.1情境描述Jack前期设计的运动商城的系统,遗忘掉了商品顾客信息尤其是会员信息的存储及操作。为此,他需要在现有系统中扩展顾客的管理。Jam的运动商城主要维护2种类型的顾客,一种是普通顾客,另外一种是会员。针对普通顾客,Jam往往关注顾客的姓名、性别、年龄等基本信息;针对会员顾客,Jam还需要关注会员的等级及会员联系方式等信息。Jack利用抽象与封装的特性可以顺利创建出普通顾客类及会员类,然而,这2个类之间重复书写了许多代码。为了实现代码的复用,Jack需要完成以下任务:1)理解继承2)创建抽象类3)创建子类第1章目录13/125.2.2问题分析代码复用是编程需要解决的问题之一,它有助于提高软件系统的代码维护,减少软件开发的工作量。在面向对象程序设计中,采用继承来实现代码的复用。运动商城的两类顾客信息,可以通过定义顾客基类,提取普通顾客和会员的共同属性及方法,之后在利用顾客基类派生出普通顾客类及会员顾客类。第1章目录14/125.2.3解决方案1、利用VisualStudio2010打开任务5.1。2、在当前项目的Model目录下新建顾客基类Customer。3、在Customer类中添加属性及行为,主要属性包含姓名,性别,年龄等。4、利用顾客基类派生出普通顾客子类NormalCustomer,并重新定义积分管理方法。5、利用顾客基类派生出会员类VIPCustomer,并重新实现派生类6、在BLL目录下定义CustomerBLL操作类7、定义普通顾客及会员的操作菜单,代码略8、在CMainMenu类中增加顾客操作项,代码略。9、运行测试程序。第1章目录15/125.2.4知识总结1、抽象类用abstract修饰的类是抽象的类,抽象类的特征是模糊地、广泛的,只是一个抽象的概念,所以抽象类不能作为其他类的基类,也不能创建抽象类的对象,即抽象类不能使用new操作符。publicabstractclassCustomer{publicabstractvoidpay();}第1章目录16/125.2.4知识总结抽象类包含抽象方法,从一个抽象类派生一个非抽象类时,派生类必须实现所有继承的抽象成员。抽象类的特征:不能创建抽象类的对象,即不能使用new关键字实例化抽象类既可以有抽象方法,也可以有非抽象方法,如果派生类没有实现所有的抽象方法,则派生类也必须声明为抽象类。抽象类不能声明为封装,用abstract关键字修饰的类,不能再用sealed关键字修饰,抽象类不能被实例化,需要派生类实现其抽象方法,而用sealed修饰的封装类不能被继承,引起矛盾。抽象方法的特征:抽象方法只能声明在抽象类中,不能在抽象类的外部声明抽象方法抽象方法的声明没有方法体抽象方法在派生类中实现
第1章目录17/125.2.4知识总结2、封装类如果不想某个类被派生,就用sealed修饰符修饰成封装类。封装类不允许被继承。publicsealedclassGood{intcode;}封装类的主要作用就是为了防止被继承,所以封装类不能用作基类,也不能是抽象类.
第1章目录18/125.2.5应用实践在定义书籍类Book的基础上,派生出子类BestSellerBook,并书籍销售册数计算方法。子类复用基类的代码。第1章目录19/12任务5.3使用接口实现行为统一21知识目标能力目标接口定义接口方法实现利用接口创建对象实现行为统一20/125.3.1情境描述Jack完成了运动商场的收银系统的部分功能,然而目前,他只是成功的实现了系统数据在内存中的存储,Jack无法预知将来他的信息是存储到文件还是存储到数据中,为了将来适应将来可能面临的不同存储对象操作,他需要完成一下的任务:1)创建接口2)实现接口第1章目录21/125.3.2问题分析当前的程序设计中,数据的存储是相当重要的,可能数据输出存储到文件中,可能输出到数据库中,同样也可以输出到打印机进行打印输出等。但针对数据输出的概念来时是相同的,不同的介质输出表明他们具备相同的行为。利用接口可以实现相同的行为不同的实现,规范系统的访问,降低类与类之间的耦合程度。Jack的数据存储问题可以定义统一的输出接口,之后再针对不同的目标进而实现接口中的统一行为即可。第1章目录22/125.3.3解决方案1、利用VisualStudio2010打开任务5.2的案例。2、新建文件文件Operation,用于保存定义的统一接口。3、针对商品信息,定义通过的存储接口IGoodsOperation。如图所示:4、针对统一的数据操作方法,进行规范定义,定义后的代码如5、新建MemoryOperation文件夹,用于操作内存数据。6、新建商品信息的内存操作类GoodsOperation,并让当前类实现IGoodsOperation接口。7、在GoodsOperation类中添加静态存储对象List<Goods>,用于保存内数据。并重新定义操作的方法8、定义FileOperation文件,用于保存文件操作类的组织。并在FileOperation下定义GoodsOperation,并实现IGoodsOperation。9、修改BLL下的GoodsBLL.cs类,先实现内存数据的操作处理。10、运行测试内存数据操作第1章目录23/124.5.3知识总结1、接口的含义接口是引用类型,它定义了所有派生类应该遵守的语法协议或者一组约定,它只包含抽象成员,如事件、方法、属性而不能包含常量、域、构造函数、析构函数和静态成员。而且接口只能包含这些抽象成员的声明。这些抽象成员具体的实现必须在实现该接口的类中。实现接口的类或者结构要与接口的定义严格一致.一个接口定义一个协议。一个实现了某个接口的类或结构必须符合它的协议。一个接口可以从一个或多个接口继承,而一个类或结构也可以实现一个或者多个接口.接口在使用的时候和抽象类一样不能被实例化,而由需要实现接口的类来实例化.第1章目录24/124.5.3知识总结2、接口的声明我们用interface关键字声明接口。接口的声明与类的声明类似。接口的定义默认是公有的。语法格式如下:[访问区分符]interface接口名{
接口成员列表}访问区分符有以下几种类型:(1)public接口是公共可访问的。(2)protected只有定义类或派生的类型才能访问该接口(3)internal只有当前程序才能访问该接口(4)private只有包含该接口的类型才能访问该接口第1章目录25/124.5.3知识总结(3)字符串比较比较两个字符串的最简单方法是使用==和!=运算符,执行区分大小写的比较。(4)更改大小写若要将字符串中的字母更改为大写或小写,可以使用ToUpper()方法把一个字符串的所有字符都变成大写字符,或使用ToLower()方法将一个字符串的所有字符都变成小写字符(5)求子串可以使用SubString()访问字符串中所包含的单个或多个字符。SubString()有两个参数,第一个参数指出开始截取的位置,位置从0开始,第二个参数指的是从截取位置开始计算要截取字符的个数。第1章目录26/124.5.3知识总结3、接口的实现接口的定义不包括方法的实现部分,接口是通过类来实现的,实现接口的类必须实现接口中的所有方法.如下例MyClass类实现了接口example,必须实现接口example声明的两个方法,如果只实现一个,则编译的时候会报错。第1章目录classMyClass:example{ publicvoidfunc1() { //方法的实现代码 } publicvoidfunc2() { //方法的实现代码 } }27/125.3.5应用实践定义一个接口IBook,包含一个方法的声明,在Book类中继承此接口,实现接口中的方法.第1章目录28/12任务5.4利用函数重载实现多态21知识目标能力目标函数重载重载函数访问掌握函数重载方法29/125.4.1情境描述针对运动商场的顾客信息,有的时候在收集时可能只有收集到顾客的姓名、有的时候可能收集到了该顾客的所在地区等信息,Jack在对顾客进行构造时,他所设计的顾客类及顾客类的派生类能够适应不同场景下的顾客对象初始化操作,为此他需要完成以下任务:1)理解静态多态性;2)利用函数重载完成构造函数的不同初始化操作。第1章目录30/125.4.2问题分析在现实社会中,同一个行为,根据输入的信息不同,处理的过程可能也不一样。这种特性就是多态,多态是面向对象编程的基本特性之一,它通过函数名称相同,参数不同的方式实现的多态叫做静态多态性。顾客类的初始化过程中,存储不同的输入数据,但都是构造方法初始化,得到的结果肯定也有所不同,为了实现这个操作,可以定义多个构造方法,但各个构造方法的参数个数不能相同或者参数类型不同,当然也可以采取参数的顺序不同的方式实现。第1章目录31/125.4.3解决方案1、利用VisualStudio2010打开任务5.3案例2、修改Model文件夹下的Customer类,为其添加不同的构造方法。3、在NormalCustomer类中添加构造方法。代码如下:4、修改顾客对象的创建方法,分别调用不同的构造方法进行构造。代码略。第1章目录32/125.4.4知识总结1、函数重载大家考虑我们经常使用的方式Console.WriteLine()的多种形式.如下所示:
Console.WriteLine(boolvalue);
Console.WriteLine(charvalue);Console.WriteLine(doublevalue);Console.WriteLine(intvalue);这些方法定义有这样一个特点,函数名相同,函数的参数不同,这就是我们要学习的函数重载。所谓函数重载,就是一个方法可以有多种实现形式,即在一个类中有两个或两个以上的方法名称相同,但参数不同(指的是参数的个数不同,或者参数的类型不同,又或者参数的顺序不同有一个成立就是参数不同),在使用的时候,系统会根据参数的信息选择合适的方法进行实现。函数重载是实现多态的常用方法,我们可以在类中定义两个或更多的名称相同,参数不同的函数来实现函数重载。第1章目录33/125.4.4知识总结重载函数的概念也可以用于运算符重载,它针对对象关系中的多元关系、四则运算和关系运算等常规运算提供了重载支持。在面向对象程序设计中,用户定义的类也相当于是数据类型,可以创建此类的对象,也就是变量,那么类的对象和简单数据类型如int等的变量一样,也可以作为运算符的操作对象来处理,为了对类的对象使用运算符,就需要对操作符进行重载来实现。运算符重载的规则:并不是所有的运算符都能够被重载,声明运算符重载的关键字为operator,可以重载的运算符如下表所示。第1章目录34/125.4.5应用实践
定义Book的构造方法,并其重载构造方法。代码如下所示:第1章目录35/12任务5.5利用抽象方法和虚函数函数重写实现多态21知识目标能力目标方法重写动态多态性利用多态多态性实现多态36/125.5.1情境描述运动商场的顾客不论是一般顾客还是会员顾客都能够进行消费积分,但是两种不同的顾客积分的方式却有所区别,对于普通顾客,消费10员积分1分;而针对会员顾客则是消费5元积分1分。Jack为了实现两种不同会员的积分操作,他需要完成以下任务:1)抽象方法2)虚函数3)方法重写第1章目录37/125.5.2问题分析在任务5.2中,两种类型的顾客都允许进行会员积分,但是由于会员积分的方式及策略不同,因此,在基类中未能编写积分方法,而只是方法的声明。这个方法就是抽象方法,在其类的派生类中需要重新编写该方法的实现过程,这种在派生类中实现基类的方法策略就称为动态多态性。第1章目录38/125.5.3解决方案1、利用VisualStudio2010中打开任务5.4.2、打开Customer类,在类中添加积分属性及增加积分抽象方法,并将当前Customer类修改为抽象类。3、修改NormalCustomer类,利用Override技术重写增加积分方法。4、修改VIPCustomer类,并实现基类中抽象方法。5、调用计算积分增加测试方法。测试积分功能,第1章目录39/125.5.4知识总结1、抽象方法抽象方法前面有abstract修饰,是一个没有方法体的方法。抽象方法只是从逻辑上对操作进行描述,没有方法体,所以不对操作进行具体实现。抽象方法的声明必须在抽象类中声明,它的实现由抽象类的派生类实现。使用抽象方法的语法规则是:访问修饰符abstract返回类型方法名(参数列表);在方法声明部分直接写分号,没有方法体。举例分析:定义一个抽象类,在抽象类中定义一个抽象方法,由抽象类的派生类来实现抽象方法。第1章目录40/125.5.4知识总结2、虚函数在方法前面使用virtual修饰符,那么该方法为虚方法或者虚函数。一般在一个类中定义一个函数,不想实现,而让派生类实现的时候,就可以使用虚函数。虚方法可以有方法体,也可以在派生类中重新定义方法体,用来实现虚方法不同的功能.派生类中对虚方法的重新定义,必须保证和基类的虚方法在名称、参数类型、参数个数、参数的排列顺序、返回类型都相同。注意虚函数修饰符virtual不能和static、abstract、override三个修饰符同时出现,即虚函数不能同时为静态函数。虚函数既可以在抽象类中定义,也可以在非抽象类中定义。第1章目录41/125.5.4知识总结2、虚函数在方法前面使用virtual修饰符,那么该方法为虚方法或者虚函数。一般在一个类中定义一个函数,不想实现,而让派生类实现的时候,就可以使用虚函数。虚方法可以有方法体,也可以在派生类中重新定义方法体,用来实现虚方法不同的功能.派生类中对虚方法的重新定义,必须保证和基类的虚方法在名称、参数类型、参数个数、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿物加工工程师考试试卷及答案
- 物业公共区域深度保洁服务协议
- 译林版英语三年级下册Unit 5 Fruit (复习课件)
- 健身俱乐部会员服务标准流程(标准版)
- 类风湿因子在自身免疫疾病中的角色探讨
- 企业品牌管理制度规范
- 印刷企业生产流程与质量控制指南
- 项目风险管理指南与工具集
- 企业财务管理与财务风险管理指南
- 企业内部沟通协作技巧指南手册
- 2025-2026学年第二学期高三年级历史备课组中外历史纲要复习计划
- 输电线路建设成本控制方案
- 2026年长沙商贸旅游职业技术学院单招职业技能测试题库及答案详解1套
- 全国畜禽养殖污染防治“十五五”规划发布
- 尾矿库隐蔽工程专项检查报告总结范文
- 多模态信息环境下虚假新闻智能检测技术研究
- 软枣猕猴桃的深度加工技术及市场应用
- 2025年天津市高考语文 文言文核心知识清单(实词+句式+虚词)
- 三大从句课件
- 福建福州市2025-2026学年物理高三第一学期期末监测试题
- 七下21古代诗歌五首《己亥杂诗》(其五)公开课一等奖创新教案
评论
0/150
提交评论