VC.NET数据库应用程序设计第7章 多态性

上传人:w****i 文档编号:92379438 上传时间:2019-07-09 格式:PPT 页数:61 大小:1.46MB
返回 下载 相关 举报
VC.NET数据库应用程序设计第7章 多态性_第1页
第1页 / 共61页
VC.NET数据库应用程序设计第7章 多态性_第2页
第2页 / 共61页
VC.NET数据库应用程序设计第7章 多态性_第3页
第3页 / 共61页
VC.NET数据库应用程序设计第7章 多态性_第4页
第4页 / 共61页
VC.NET数据库应用程序设计第7章 多态性_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《VC.NET数据库应用程序设计第7章 多态性》由会员分享,可在线阅读,更多相关《VC.NET数据库应用程序设计第7章 多态性(61页珍藏版)》请在金锄头文库上搜索。

1、VC#.NET数据库应用程序设计,7.1员工工资 7.2基础知识讲解 7.3 考勤打铃提示管理 7.4基础知识讲解 7.5 习题,第7章 多态性,7.1 员工工资,7.1.1系统业务 7.1.2设计测试用例 7.1.3员工工资计算业务流图,7.1 员工工资,7.1.1系统业务 我们即将开发或正在开发或已经有了一个为A公司编制的员工工资管理系统,假设这个系统很适合A公司的工资计算统筹体系,因此我们交付给A公司使用。当A公司付给我们合同款项后,我们是把我们编写的原系统丢弃,或等到下次A公司需要时再升级,但任何程序员和公司都不会希望自己的系统只使用一次。可能会把自己的系统再推销给B公司、C公司,把希

2、望所有的公司都能够使用自己的系统作为自己编写系统的最高境界,但不同的公司、不同的地区员工工资计算、工资发放情况都不同,难道每实施一个公司,都要对系统进行一次代码修改编译打包发布吗?,一两个公司使用,系统管理比较方便,假如业务好,有成千上万个单位使用我们的系统,那我们要落实哪个单位使用的哪个安装包,或要对其中的哪一个公共bug进行修改,那样的工作量都是灾难性的,也不是我们愿意看到的情况。我们希望我们开发的程序,由实施人员到客户处,对配置文件稍加配置,源程序不动就能够满足用户的要求,或修改了源程序,不会对当前正在使用的用户产生影响,这就要用到我们这一章要讨论的一些面向对象高级概念。,7.1 员工工

3、资,7.1 员工工资,7.1.2设计测试用例 根据上述的系统业务,我们明确了开发要达成的目的是:开发的员工工资管理系统要有很好的扩展性,能够推广适应所有公司的工资管理,我们这里假设这个系统的客户有3个:一个为中国A公司、一个为中国B公司,还有一个为美国A公司,让他们都能够使用这个系统,现在分别为他们设计一个测试用例。,7.1 员工工资,7.1.2设计测试用例 7.1.2.1 对中国A公司的测试用例 假如中国公司A的实发工资=(基本工资+考勤工资)-(基本工资 +考勤工资-个人所得税起征点)*10%个人所得税税率 7.1.2.2对公司B的测试用例 假如中国公司B的实发工资=(基本工资+考勤工资+

4、工龄工资+交通补贴)-(基本工资+考勤工资+工龄工资+交通补贴-个人所得税起征点)*10%个人所得税税率 7.1.2.3对美国A公司的测试用例 假如美国公司A的实发工资=基本工资-联邦税-州税,7.1 员工工资,7.1.3员工工资计算业务流图 不同公司员工的工资组成和计算方式方法不同,本系统计算员工工资的业务流图如下图7-1所示。,7.2 基础知识讲解,7.2.1 抽象类与抽象方法 7.2.2 多态性 7.2.3 接口 7.2.4 委托,7.2 基础知识讲解基础知识讲解,要实现上面的业务,我们有很多方法可以达到。比如用ifelse、switch和继承都可以实现。 我们建立个工资计算的类 。注:

5、我们这里是模拟实现,计算过程都用文字描述,返回值也使用字符串 第一种方法:使用ifelse 第二种方法:使用 switch,在调用的时候我们还是要先判断是哪个公司使用,然后才调用相应的方法计算完成。当使用公司少的时候我们还可以忍受,添加ifelse 或switch,但是使用的公司多了,比如有一百个公司、一千个公司要使用该系统,我们难以想象,要增加好多ifelse 或switch,假如我们要去寻找针对某个公司的代码,我们都会非常头疼,是不是? 有没有一种方法,让我们不使用ifelse 或switch呢?答案是肯定的。就是用我们下面学习的抽象类和抽象方法来实现。,7.2 基础知识讲解基础知识讲解,

6、7.2.1 抽象类与抽象方法与抽象方法,抽象类:又叫抽象基类,主要用在类的定义和部分实现这方面,去共享一些公用的特性,在定义的时候使用 abstract 关键字标记的一般类。格式如下: public abstract class A /抽象类成员 抽象类可包含一般类所包含的所有特性,例如:字段,属性,方法, 如定义一个一般类 public class A private string sFiled; ,定义 一个抽象的类 public abstract class B 但对于普通类 可以通过 new关键字进行实例化,如:A a=new A(); 如果我们想用下面代码实例化B: B b=new

7、B();那系统就会报错,因为抽象类是不能进行实例化的,只有抽象类的派生实现类才能够实例化。如下: public class C:B /实现代码 C c=new C();/这样就可以的。,7.2.1 抽象类与抽象方法1,抽象方法: 当类中的方法在声明的时候加上 abstract 关键字的时候,他就被我们称为抽象方法。抽象方法在声明的时候不需要可执行的代码,具体实现交给他的派生类实现。 /对于抽象类A public abstract class A . /抽象方法 public abstract void Method1(); /这样是可以的 public abstract void Method

8、2(); . / 对于一般类B public class B . public abstract void Method1(); /这样是不行的 . ,7.2.1 抽象类与抽象方法,抽象类中的抽象方法,必须再其实现类中全部实现 假如上面的抽象类只有两个抽象方法,现在要用类C实现它 /正确的 public class C :A public override void Method1() /实现代码Method1方法 public override void Method2() /实现Method2方法 ,/ /错误的 一个抽象方法都不实现 public class C :A / /错误的 只实

9、现一个抽象方法 public class C :A public override void Method1() /实现代码Method1方法 注意抽象方法再实现的时候,要加关键字override,现在我们再来看我们之前的工资管理,我们提取它们的共性,不管中国A公司,中国B公司、还是美国A公司和其他公司在工资管理中都是需要在员工工作一个阶段后,都需要给员工发放相应金额的薪水,但是各个公司的工资体系又不完全相同,具体使用哪种工资体系,只有落实到具体的公司才知道,想想这是不是跟我们上面说的抽象类和抽象实现类非常相似。我们是不是可以把所有公司都要给员工工资作为一个抽象类,把各个具体的公司工资的具体计

10、算体系放在抽象类的实现类中来实现。改造我们的代码如下:,7.2.1 抽象类与抽象方法,public abstract class SalaryBase public abstract string GetSalary(string code ,int month); /实现中国A公司工资计算 public class ChinaCompanyA:SalaryBase Public override string Getsalary(string code ,int month) return “按中国A公司的体系计算员工”+code+”的”+month.tostring()+”月份的实发工资”

11、; /实现中国B公司工资计算 public class ChinaCompanyB:SalaryBase, Public override string Getsalary(string code ,int month) return “按中国B公司的体系计算员工”+code+”的”+month.tostring()+”月份的实发工资”; /实现美国A公司工资计算 public class USACompanyA:SalaryBase public override string Getsalary(string code ,int month) return “按 美国A公司的体系计算员工”

12、+code+”的”+month.tostring()+”月份的实发工资”; ,7.2.1 抽象类与抽象方法,7.2.2多态性,多态性,是面向对象编程的一个重要的概念,它表示一个对象在不同条件下具有不同的形态。也就是可以把派生类实例赋给他的基类变量,通过基类变量可以访问派生类上实现的方法。基类可以是一般的普通类,也可以是抽象类,通过基类变量调用的方法可以是在基类中定义的方法,也可以是在派生类中定义的方法,但是符合多态性的方法只有在基类中定义的抽象方法,和在基类中定义的又在派生类中重写的虚方法。,7.2.1 抽象类与抽象方法,/ 定义一个抽象基类 public abstract class A p

13、ublic virtual void AA() Console.WriteLine(“AA of A“); public abstract void BB(); / 派生一个子类B public class B : A / 重写虚方法 public override void AA() Console.WriteLine(“AA of B“); / 实现抽象方法 public override void BB() Console.WriteLine(“BB of B“); ,/ 派生一个子类C public class C : A / 重写虚方法 public override void AA

14、() Console.WriteLine(“AA of C“); / 实现抽象方法 public override void BB() Console.WriteLine(“BB of C“); / 类C中自己的方法 public void CC() Console.WriteLine(“CC of C“); ,7.2.1 抽象类与抽象方法,7.2.2多态性,调用的时候 /声明一个基类变量 A a; /实例化一个B的对象 B b=new B(); /实例化一个C的对象 C c=new C(); /把派生类实例赋给基类变量 a = b; / 通过基类变量访问派生类中的实现方法 a.AA(); /

15、将会输出“AA of B” a.BB(); /将会输出 “BB of B” a = c; a.AA(); /将会输出“AA of C” a.BB(); /将会输出 “BB of C”,我们是不是可以将它们封装到一个函数中。 public void CallBC(A a) a.AA(); a.BB(); 通过 CallBC(new C(),就可以调用C中的AA()和BB()的实现。 有了上面的认识,我们再来考虑在工资管理系统中现在是不是可以定义一个调用各个公司工资计算的方法了。,7.2.1 抽象类与抽象方法,7.2.2 多态性,/员工工资管理 public class EmployeeSalar

16、yManage private string employCode; private int imonth; /初始化要计算工资的员工和月份 public EmployeeSalaryManage( string code, int month) employCode=code; imonth =month; /计算员工工资 public string Salary(SalaryBase slb) return slb.GetSalary(employeecode,imonth); ,7.2.2 多态性,这样我们要计算中国A公司工号为0001员工的11份工资的话我们只需要执行下面的代码即可 Employe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号