《面向对象相关概述-我学院网唐旭东.ppt》由会员分享,可在线阅读,更多相关《面向对象相关概述-我学院网唐旭东.ppt(45页珍藏版)》请在三一办公上搜索。
1、面向对象的思想,1,面向对象程序设计的基本概念类和对象属性、方法与事件封装继承多态性,类和对象,在C#中,class为类的关键字。把属于类的对象称为类的实例,可以把类看成是对象的模板,把对象看成是类的实例。,1、类的声明【格式】:类修饰符 class 类名:基类类名 成员定义列表;【功能】:定义一个由“类名”指定的类。,3,1)支持的类修饰符,4,2)如果缺省类修饰符,默认为private。3)“基类类名”指定派生该类的基类,如果该类没有从任何类继承,则不需要该选项。4)“成员定义列表”类成员有两部分组成:一个是新声明的类成员;另一个则是直接从它的基类继承而来的成员。类成员声明主要包括:常数、
2、字段、方法、属性、事件、索引器、运算符、构造函数、析构函数等。类成员声明中的访问修饰符:public、private、protected、internal中。默认访问修饰符为private。,5,字段:字段是与类相关的变量,相当于C+中的变量。常量:用来定义与类相关的常量值。事件:是类的成员,它可以让对象通知调用者某些特定的行为发生时间。方法:完成类中各种计算或功能的操作,类似函数。属性:定义类的特征,并对他们提供读、写操作。,类成员的组成:,6,索引器:允许编程人员在访问数组时,通过索引器访问类的多个实例。又称下标指示器。运算符:定义类的实例能使用的运算符。构造函数:在类被实例化时首先执行的
3、函数,主要完成对象初始化操作。析构函数:在对象被销毁之前最后执行的函数,主要是完成对象结束时的收尾操作。,7,例:成员常量的声明关键字const用于声明常量,后跟数据类型的声明。类的常量可以加上new、public、protected、internal或private修饰。Class A public const double A=1.0;public const double X=1.0,Y=2.0,Z=3.0;,8,2、类的静态成员和实例成员静态成员:有static,属于类所有,只能通过类名来访问。实例成员:没有static,属于类的实例所有,又称实例成员,只能通过类的实例对象来访问。,9
4、,using System;class Example1 static public int a;/静态成员 public int b;/实例成员 void Meth1()/实例方法 a=10;/实例方法中可以访问本类的静态成员 b=20;/实例方法中可以访问本类的实例成员 static void Meth2()a=30;/静态方法能够访问本类的静态成员/b=40;/静态方法不能访问本类的实例成员,10,【格式】:类名 实例名=new 类名(参数);【功能】:生成一个由“类名”指定的类的名为“实例名”的实例,如果有参数则将参数传递给构造函数。【说明】:1)、new关键字实际上是调用构造函数来完
5、成实例的初始化工作。,3、对象的声明,对象相当于现实世界中的实体在指定一个类后,往往把属于这个类的对象称为类的实例,可以把类看成是对象的模板,把对象看成是类的实例。比如:人和张三;int和10,11,2)、创建实例也可以分为两步:先定义实例变量,然后用new关键字创建实例。类名 实例名;/定义类的实例变量 实例名=new 类名(参数);/创建类的实例。如:Student Stu1=new Student();等价于:Student Stu1;Stu1=new Student();,类的构造函数和析构函数,12,C#中有两个特殊的函数:构造函数、析构函数。构造函数:是在创建类的实例(也就是对象)
6、时首先执行的函数。析构函数:是当实例(对象)从内存中销毁前最后执行的函数。这两个函数的执行是无条件的,系统会自动在创建对象时调用构造函数,在销毁对象时调用析构函数,而不需要程序员通过代码调试。,13,构造函数作用:为对象分配存储空间,完成初始化操作(给类的成员变量赋值等)。构造函数有如下规则:1)构造函数的函数名和类的名称一样。2)当某个类没有构造函数时,系统将自动为其创建默认构造函数。example1();,3)构造函数的访问修饰符总是public。如果是private,则表示这个类不能被实例化,这通常用于只含有静态成员的类中。4)构造函数不用声明返回类型。5)构造函数可以带参数也可以不带参
7、数。,析构函数,析构函数用于析构类的实例。不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。,声明方法,15,访问修饰符(可选),默认情况下为 private,访问修饰符 返回类型(参数列表)/方法主体,如果不需要返回任何值,方法需定义为void 数据类型,方法头不是一条语句,其后不能跟分号“;”,“形式参数说明列表”是一个由逗号分隔开的列表,16,方法的调用:有三种格式:【格式1】:方法名(实际参数类表)【格式2】:对象名.方法名(实际参数类表)【格式3】:类名.方法名(实
8、际参数类表)格式三只能调用非本类的另一个类的静态方法。,17,【说明】:1)调用方法时,如果方法有形式参数,在调用时应在“()”中使用实际参数。2)没有返回值的方法作为一条语句;有返回值的方法方法的调用相当于一个同类型的数据,可以作为表达式或表达式的一部分参与运算。,18,静态方法和非静态方法:定义静态时用static修饰不能用virtual、abstract或override修饰符。非静态方法可以访问类中包括静态成员在内的所有成员,而静态方法只能访问类中的静态成员。,19,方法重载与覆盖(同类重载,继承覆盖)1)重载 重载是面向对象的一个重要特征,通过重载可以使多个具有相同功能但是参数不同的
9、方法共享同一个方法名。方法重载的实现:在一个类中两次或多次定义同名的方法(包括从基类继承而来的方法),但每个方法的参数类型或个数不同;用户调用方法时,系统能够自动识别应调用的方法。,20,2)覆盖(new或者virtual+override)在一个有继承关系的类层次结构中,类中的方法由两部分组成,一个是类体中声明的方法,另一个则是直接从它的基类继承而来的方法。但派生类很少会一成不变的继承基类中所有的方法,如果需要对基类的方法作出修改,就要在派生类中对基类方法进行覆盖。(编译时实现多态)有两种覆盖方式:一种是用关键字new修饰派生类中与基类同名的方法,这样基类中的同名方法会被隐藏;另一种更为灵活
10、和有效的途径是首先将基类的方法用关键字virtual修饰为虚拟方法,再由派生类用关键字override修饰同名的方法,表明是对基类的虚拟方法重载。(运行时多态,动态绑定),21,虚方法使用注意事项:1)不能将虚方法声明为静态的,因为多态性是针对对象的,不是针对类的。2)不能将虚方法声明为私有的,因为私有方法不能被派生类覆盖。3)覆盖方法必须与它相关的虚方法匹配,也就是说,它们的方法签名(方法名称、参数个数、参数类型)、返回类型以及访问属性都应该完全一致。,运算符重载:,22,系统对大部分运算符都给出了常规定义但可以根据需要给这些运算符赋予一个新的含义,这就是运算符的重载。,23,【格式】:返回
11、类型值 operator 运算符(运算对象列表)重载的实现部分;【说明】:1)、返回类型可以是任意合法的C#类型修饰符,或自定义类型,在方法实现部分通过return语句返回该数据类型的数据。2)、在C#中,可以重载的运算符主要有:+,-,!,+,-,true,false,*,/,%,&,|,=,!=,=。3)、不能重载的运算符有:=,&,|,?:,new,typeof,sizeof,is。,24,属性 属性是对现实世界中实体特征的抽象,它提供了一种对类或对象特征进行访问的机制。如:一个窗口的标题、一个控件的尺寸。与域相比,属性具有良好的封装性。属性不允许直接操作类的数据内容,而是通过访问器进行
12、访问(使用get和set对属性的值进行读写)。,25,【格式】:属性修饰符 类型说明符 属性名 访问声明【说明】:1)属性修饰符有new,public,protected,internal,private,static,virtual,override和abstract 9种。2)访问声明用来声明属性访问器。set给属性赋值 get获取属性值 如果只有get访问器,表示属性只读;如果只有set访问器,表示只写属性;两个都有,表示读写属性。3)get访问函数是一个不带参数的方法,它用于向外部返回属性成员的值。通常访问函数的语句或语句块主要由return或throw语句返回某个变量成员的值。,26
13、,set访问函数Set访问函数是一个带有简单值类型参数的方法,用于处理类外部的写入值。set函数带有一个特殊的关键字value,在set函数中通过value将外部的输入传递进来,然后赋值给类中的某个变量成员。,C#封装:,封装的概念:可以把程序按某种规则分成很多“块“,块与块之间可能会有联系,每个块都有一个可变部分和一个稳定的部分。我们需要把可变的部分和稳定的部分分离出来,将稳定的部分暴露给其他块,而将可变的部分隐藏起来,以便于随时可以让它修改。这项工作就是封装。例如:在用类实现某个逻辑的时候,类就是以上所说的块,实现功能的具体代码就是可变的部分,而public的方法或者属性则是稳定的部分,封
14、装的意义,封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据 被看作是一个中心的原素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程 序中定义为公用的(public)我们将它们定义为私有的(private)在很多方面会更好。,C#继承,继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需
15、要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。,例如:public class A public A()public class B:A public B(),C#多态,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。C#多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是
16、通过覆写虚成员实现。,C#多态性之重载和覆写的区别:,重载publicintCalculate(intx,inty)publicdoubleCalculate(doublex,doubley)特点(两必须一可以)方法名必须相同参数列表必须不相同返回值类型可以不相同,覆写子类中为满足自己的需要来重复定义某个方法的不同实现。通过使用override关键字来实现覆写。只有虚方法和抽象方法才能被覆写。要求(三相同)(1)相同的方法名称(2)相同的参数列表(3)相同的返回值类型,C#多态性之虚方法和抽象方法:,虚方法:声明使用virtual关键字。调用虚方法,运行时将确定调用对象是什么类的实例,并调用适
17、当的覆写的方法。虚方法可以有实现体。抽象方法:必须被派生类覆写的方法。可以看成是没有实现体的虚方法。如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。,抽象类和接口,抽象类(1)抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法(2)抽象类不能被实例化(3)抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类(4)具体派生类必须覆盖基类的抽象方法(5)抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。,接 口(1)接口不能被实例化(2)接口只能包含方法声明(3)接口的成员包括方法、
18、属性、索引器、事件(4)接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。(5)接口中的所有成员默认为public,因此接口中不能有private修饰符(6)派生类必须实现接口的所有成员(7)一个类可以直接实现多个接口,接口之间用逗号隔开(8)一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员,抽象类和接口的异同点,相同点:(1)都可以被继承(2)都不能被实例化(3)都可以包含方法声明(4)派生类必须实现未实现的方法区 别:(1)抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。(2)抽象类是一个不完整的类,需要进一
19、步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。”(3)接口可以被多重实现,抽象类只能被单一继承(4)抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中(5)抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性(6)接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法(7)接口可以用于支持回调,而继承并不具备这个特点(8)抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
20、(9)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法,C/S 和 B/S 架构,C/S架构C/S架构是一种比较早的软件架构,主要应用于局域网内。在这之前经历了集中计算模式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层C/S架构,不过一直很流行也比较经典的是我们所要研究的两层C/S架构。C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连,这两个
21、组成部分都承担着重要的角色,第一层的客户机并不是只有输入输出,运算等能力,它可以处理一些计算,数据存储等方面的业务逻辑事务;第二层的服务器主要承担事务逻辑的处理,本来事务很重,但是由于客户机可以分担一些逻辑事务,所以减轻了服务器的负担,使得网络流量增多。想要使用C/S架构的软件需要下载一个客户端,安装后就可以使用。,C/S架构的优点C/S架构既然能在计算机历史的长河中长盛不衰就必然有其闪光之处。下面将从各个角度分析C/S架构的优点。1)客户端和服务器直接相连a)点对点的模式使得更安全。b)可以直接操作本地文本,减少获取文本的时间和精力。c)由于直接相连,减少了通信流量,这对于客户来说可以节约一
22、大笔费用。d)直接相连,中间没有什么阻隔或岔路,所以响应速度快。当通信量少的时候没什么感觉,但是如果通信量庞大,就不会出现拥堵的现象。2)客户端可以处理一些逻辑事务a)充分利用两者的硬件设施,避免资源的浪费。b)为服务器分担一些逻辑事务,可以进行数据处理和数据存储。可以处理复杂的事务流程。c)客户端有一套完整应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。3)客户端操作界面a)可以提高客户的视觉体验,满足客户需求。b)客户端操作界面可以随意排列,充分满足客户的需要,展现特点与个性。,C/S架构的缺点经过长期的时间检验,人们也发现了C/S存在的不足,下面将前人的观
23、点整理总结一下。1)客户端a)只能处理一些功能单一的多系统。b)C/S架构适用于局域网,对网速的要求比较高。c)由于需要安装客户端,安装部署困难,所以不易扩展。d)若客户端使用的系统不同,就要针对这些系统分别编写程序。e)客户端界面缺乏通用性,且当业务更改时就需要更改界面,重新编写。f)客户端需要专门的客户端程序,比较麻烦,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置。2)服务器a)用户数增多会出现通信拥堵,服务器响应速度慢等情况。b)当服务器难当大任时,只能将其废弃,使用更强大的服务器。c)当客户端用户增多时,服务器难以承担重负,是名副其实的“胖”客户端。d)用户是通
24、过ODBC连接到数据库的,且每个连接到数据库的用户都会保持一个ODBC连接,会一直占用中央服务器的资源,对服务器的要求很高。3)用户a)没有安装客户端的外部用户不能访问。b)只有安装了客户端才能访问服务器,所以用户不能随时随地的访问。c)用户是通过ODBC连接到数据库的,所以用户数受限,不易扩张。d)由于针对小范围的客户,所以不能实现真正大范围的信息共享,信息传达和发布。4)开发成本a)需要聘用高素质的人员,对其培训,费用高。b)初次开发就需要配备好客户端,服务器,需要有专业水准的技术人员,所以成本高。5)后期成本a)系统升级维护麻烦,需要更改大量程序,投入大量精力和金钱。b)业务扩展或变更时
25、,需要更改程序,客户端的界面也需要重新更改。c)初次投入成本后不能一劳永逸,后期需要很多成本,比如服务器的更换,客户端的更变等。,B/S架构随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放、互连、信息随处可见和信息共享的新要求,于是就出现了B/S型模式,即浏览器/服务器结构。它是C/S架构的一种改进,可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部分的事务逻辑。由于客户不
26、需要安装客户端,只要有浏览器就能上网浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通用。第二层是WEB服务器,扮演着信息传送的角色。当用户想要访问数据库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的。第三层是数据库服务器,他扮演着重要的角色,因为它存放着大量的数据。当数据库服务器收到了WEB服务器的请求后,会对SQL语句进行处理,并将返回的结果发送给WEB服务器,接下来,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器,也就是我们打开浏览器看到的界面。,B/S架构和C/S架构不同,浏览器不是
27、直接和数据库服务器相连,所以是多对多的结构。因此在此结构下,很适合在广域网里实现巨大的互联网,甚至是全球网。有着很强大的信息共享性。在B/S出现的早期,浏览器只能显示静态页面,得不到良好的交互,不能进行大量的逻辑处理,当时浏览器主要用来实现信息的发布,是一种单向的应用。后来出现了动态网页,这里的动态有三个方面,一是交互,二是动画,三是数据。这样,浏览器的交互性能得到极大提高。页面也越来越丰富多彩。浏览器也能处理部分逻辑事务,所以浏览器成为了客户端,但由于处理的内容较少,所以叫“瘦”客户端。,B/S架构的优点B/S架构是应WEB技术的飞速发展而从传统的C/S架构发展而来,并且一举成为当今主要的网
28、络架构。目前主要的网站,尤其是商务网站都是基于B/S架构建立的。那么我们就来细数一下B/S架构的优点,它到底为什么受到大家的青睐。1)浏览器a)能面对广大的用户实现信息传播共享。b)浏览器只处理一些简单的逻辑事务,负担小。c)页面的更新能实现同步,所有用户都能看到。d)界面设计开发简单,对程序员的要求较低,不需要大量的培训。e)业务扩展方便,只需要增加几个业务扩展的页面即可,不需要大量的编程。f)界面不需要太多的编写,比较通用,更改界面也比较简单,所以几乎不需要维护。g)由于Web的平台无关性,可以从一台服务器、几个用户的工作组级扩展成为拥有成上万用户的大型系统。2)服务器a)数据都集中存放在
29、数据库服务器,所以不存在数据不一致现象。b)能有效地保护数据平台和管理访问权限,服务器数据库也很安全。c)在数据库服务器上不一定使用WINDOWS系统,选择更多,成本更少。d)如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。e)在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。f)数据存放在数据库服务器,客户端并不存放任何业务数据或者数据库连接信息,所以数据比较安全。g)随着服务器负载的增加,可以平滑地增加服务器的个数并建立集群服务器系统,然后在各个服务器之间做负载均衡。,3)用户a)B/S建立在广域网上,所需的网速不高。b)外部的用户也可以对浏览器
30、进行访问。c)界面人性化,通用化,不需要多少培训就能掌握。d)不需要安装客户端,只要能连上网,就能随时随地的浏览页面。e)借助Internet强大的信息发布与信息传送能力可以有效地解决企业内部的大量不规则的信息交流。f)所有的用户都是通过一个JDBC连接缓冲池连接到数据库的,用户并不保持对数据库的连接,用户数基本上是无限的。4)成本a)软件重用性强,节省了大量的成本。b)不需要安装特殊的软件,客户端几乎零维护。c)开发简单,升级便捷,人员不需要太多培训,节省了大量的资金。d)客户端几乎不需要维护,只要盯紧服务器就可以了,所以成本较小。e)一般只有初期一次性投入成本,有利于软件项目控制和避免IT
31、黑洞。f)建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备等,成本较小。,B/S架构的缺点虽说B/S架构有很多优越性,但是也不可避免有些缺陷,不然也不会暴发究竟使用哪种架构的口水战。不过,在理论上,既然B/S是C/S的改进版,应该克服了C/S的很多缺陷,所以缺点应该不是很多。下面我们来看看实际上是什么情况。1)客户端a)面通用化,不突出个性。b)页面需要不断地动态刷新,尤其是用户增多,网速慢得情况,很费时。c)由于不需要安装客户端,客户端易扩展,还有就是外部用户也可以访问,所以B/S面对大量的不可知用户。2)服务器a)用户增多时,服务器响应速度慢。b)功能虽然多样化,但是不能专门化,不能实现复杂的功能。c)服务器承担着重要的责任,数据负荷较重。一旦发生服务器“崩溃”等问题,后果不堪设想。,