




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象的思想 1 面向对象程序设计的基本概念 类和对象 属性、方法与事件 封装 继承 多态性 类和对象 在C#中,class为类的关键字。 把属于类的对象称为类的实例,可以把类看成是 对象的模板,把对象看成是类的实例。 1、类的声明 【格式】: 类修饰符 class 类名:基类类名 成员定义列表; 【功能】:定义一个由“类名”指定的类。 修饰符作用说明 new只能用于嵌套的类,表明隐藏了由基类中继承而来的、与基类中同名的 成员 public公有类,表示外界可以不受限制的访问该类 protected保护类,表示该类只能被这个类的成员或派生类成员访问 internal表示该类能够由程序集中的所有文件使用,而不能由程序集以外的对象 使用 private该类只能被这个类的成员访问 abstract抽象类,该类含有抽象成员,因此不能被实例化,只能作为基类 sealed密封类,不能从这个类再派生出其他类 3 1)支持的类修饰符 4 2)如果缺省类修饰符,默认为private。 3)“基类类名”指定派生该类的基类,如果该类没 有从任何类继承,则不需要该选项。 4)“成员定义列表”类成员有两部分组成:一个是 新声明的类成员;另一个则是直接从它的基类继承 而来的成员。 类成员声明主要包括:常数、字段、方法、属性 、事件、索引器、运算符、构造函数、析构函数等 。 类成员声明中的访问修饰符:public、private、 protected、internal中。默认访问修饰符为private。 5 字段:字段是与类相关的变量,相当于C+中的变量 。 常量:用来定义与类相关的常量值。 事件:是类的成员,它可以让对象通知调用者某些特 定的行为发生时间。 方法:完成类中各种计算或功能的操作,类似函数。 属性:定义类的特征,并对他们提供读、写操作。 类成员的组成: 6 索引器:允许编程人员在访问数组时,通过索引 器访问类的多个实例。又称下标指示器。 运算符:定义类的实例能使用的运算符。 构造函数:在类被实例化时首先执行的函数,主 要完成对象初始化操作。 析构函数:在对象被销毁之前最后执行的函数, 主要是完成对象结束时的收尾操作。 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、类的静态成员和实例成员 u静态成员:有static,属于类所有,只能通过类名 来访问。 u实例成员:没有static,属于类的实例所有,又称 实例成员,只能通过类的实例对象来访问。 9 1.using System; 2.class Example1 3. 4. static public int a;/静态成员 5. public int b; /实例成员 6. void Meth1() /实例方法 7. 8. a = 10; /实例方法中可以访问本类的静态成员 9. b = 20; /实例方法中可以访问本类的实例成员 10. 11. static void Meth2() 12. 13. a = 30; /静态方法能够访问本类的静态成员 14. /b=40; /静态方法不能访问本类的实例成员 15. 10 【格式】: 类名 实例名=new 类名(参数); 【功能】:生成一个由“类名”指定的类的名为“实例名”的实 例,如果有参数则将参数传递给构造函数。 【说明】: 1)、new关键字实际上是调用构造函数来完成实例的初始化 工作。 3、对象的声明 对象相当于现实世界中的实体 在指定一个类后,往往把属于这个类的对象称为类的实例,可以 把类看成是对象的模板,把对象看成是类的实例。 比如:人和张三;int和10 112)、创建实例也可以分为两步:先定义实例变量, 然后用new关键字创建实例。 类名 实例名; /定义类的实例变量 实例名=new 类名(参数);/创建类的实例。 如:Student Stu1=new Student(); 等价于:Student Stu1; Stu1=new Student(); 类的构造函数和析构函数 12 C#中有两个特殊的函数:构造函数、析构函数。 构造函数:是在创建类的实例(也就是对象)时首先执行 的函数。 析构函数:是当实例(对象)从内存中销毁前最后执行的 函数。 这两个函数的执行是无条件的,系统会自动在创建对象时 调用构造函数,在销毁对象时调用析构函数,而不需要程 序员通过代码调试。 13 构造函数 作用:为对象分配存储空间,完成初始化操作(给类的成员变量赋值等)。 构造函数有如下规则: 1)构造函数的函数名和类的名称一样。 2)当某个类没有构造函数时,系统将自动为其创建默认构造函数默认构造函数。 example1() ; 3)构造函数的访问修饰符总是public。如果是private,则表示这个类不 能被实例化,这通常用于只含有静态成员的类中。 4)构造函数不用声明返回类型。 5)构造函数可以带参数也可以不带参数。 析构函数 析构函数用于析构类的实例。 不能在结构中定义析构函数。只能对类使用析 构函数。 一个类只能有一个析构函数。 无法继承或重载析构函数。 无法调用析构函数。它们是被自动调用的。 析构函数既没有修饰符,也没有参数。 声明方法 15 访问修饰符(可选),默认情况下为 private 访问修饰符 返回类型 (参数列表) / 方法主体 如果不需要返回任何值,方法需定义为void 数据类型 方法头不是一条语句,其后不能跟分号“;” “形式参数说明列表”是一个由逗号分隔开的列表 16 方法的调用: 有三种格式: 【格式1】: 方法名(实际参数类表) 【格式2】: 对象名.方法名(实际参数类表) 【格式3】: 类名.方法名(实际参数类表) 格式三只能调用非本类的另一个类的静态方法。 17【说明】: 1)调用方法时,如果方法有形式参数,在调用时应 在“()”中使用实际参数。 2)没有返回值的方法作为一条语句; 有返回值的方法方法的调用相当于一个同类 型的数据,可以作为表达式或表达式的一部分参 与运算。 18 静态方法和非静态方法: 定义静态时用static修饰 不能用virtual、abstract或override修饰符。 非静态方法可以访问类中包括静态成员在内的所有成员, 而静态方法只能访问类中的静态成员。 19 方法重载与覆盖(同类重载,继承覆盖) 1)重载 重载是面向对象的一个重要特征,通过重载可以使多个具有相同 功能但是参数不同的方法共享同一个方法名。 方法重载的实现: 在一个类中两次或多次定义同名的方法(包括从基类继承而来的方法 ),但每个方法的参数类型或个数不同; 用户调用方法时,系统能够自动识别应调用的方法。 202)覆盖(new或者virtual+override) 在一个有继承关系的类层次结构中,类中的方法由两部 分组成,一个是类体中声明的方法,另一个则是直接从它的 基类继承而来的方法。 但派生类很少会一成不变的继承基类中所有的方法,如 果需要对基类的方法作出修改,就要在派生类中对基类方法 进行覆盖。(编译时实现多态) 有两种覆盖方式: 一种是用关键字new修饰派生类中与基类同名的方法,这 样基类中的同名方法会被隐藏; 另一种更为灵活和有效的途径是首先将基类的方法用关键 字virtual修饰为虚拟方法,再由派生类用关键字override修 饰同名的方法,表明是对基类的虚拟方法重载。(运行时多 态,动态绑定) 21虚方法使用注意事项: 1)不能将虚方法声明为静态的,因为多态性是针 对对象的,不是针对类的。 2)不能将虚方法声明为私有的,因为私有方法不 能被派生类覆盖。 3)覆盖方法必须与它相关的虚方法匹配,也就是 说,它们的方法签名(方法名称、参数个数、参 数类型)、返回类型以及访问属性都应该完全一 致。 运算符重载: 22 系统对大部分运算符都给出了常规定义 但可以根据需要给这些运算符赋予一个新的含 义,这就是运算符的重载。 23 【格式】: 返回类型值 operator 运算符(运算对象列表) 重载的实现部分; 【说明】: 1)、返回类型可以是任意合法的C#类型修饰符,或自定义类 型,在方法实现部分通过returnreturn语句返回该数据类型的数据 。 2)、在C#中,可以重载的运算符主要有:+,-,!,+ ,-,true,false,*,/,%,&,|,=,! =,=。 3)、不能重载的运算符有:=,&,|,?:,new, typeof,sizeof,is。 24 属性 属性是对现实世界中实体特征的抽象,它提供了一种 对类或对象特征进行访问的机制。 如:一个窗口的标题、一个控件的尺寸。 与域相比,属性具有良好的封装性。属性不允许直接 操作类的数据内容,而是通过访问器进行访问(使用get和 set对属性的值进行读写)。 25 【格式】: 属性修饰符 类型说明符 属性名 访问声明 【说明】: 1)属性修饰符有new, public, protected, internal, private, static, virtual, override和abstract 9种。 2)访问声明用来声明属性访问器。 set给属性赋值 get获取属性值 如果只有get访问器,表示属性只读;如果只有set访问器, 表示只写属性;两个都有,表示读写属性。 3)get访问函数是一个不带参数的方法,它用于向外部返回属 性成员的值。通常访问函数的语句或语句块主要由return或 throw语句返回某个变量成员的值。 26 set访问函数 Set访问函数是一个带有简单值类型参数的方法,用于 处理类外部的写入值。 set函数带有一个特殊的关键字value,在set函数中通过 value将外部的输入传递进来,然后赋值给类中的某个变量 成员。 C#封装: 封装的概念:可以把程序按某种规则分成很多“ 块“,块与块之间可能会有联系,每个块都有一 个可变部分和一个稳定的部分。我们需要把可变 的部分和稳定的部分分离出来,将稳定的部分暴 露给其他块,而将可变的部分隐藏起来,以便于 随时可以让它修改。这项工作就是封装。 例如:在用类实现某个逻辑的时候,类就是以上 所说的块,实现功能的具体代码就是可变的部分 ,而public的方法或者属性则是稳定的部分 封装的意义 封装的意义在于保护或者防止代码(数据)被我 们无意中破坏。在面向对象程序设计中数据 被看 作是一个中心的原素并且和使用它的函数结合的 很密切,从而保护它不被其它的函数意外的修改 。 封装提供了一个有效的途径来保护数据不被意外 的破坏。相比我们将数据(用域来实现)在程 序 中定义为公用的(public)我们将它们定义为私有 的(private)在很多方面会更好。 C# 继承 继承是面向对象程序设计中最重要的概念之一 。继承允许我们根据一个类来定义另一个类来 定义一个类,这使得创建和维护应用程序变得 更容易。同时也有利于重用代码和节省开发时 间。 当创建一个类时,程序员不需要完全重新编写 新的数据成员和成员函数,只需要设计一个新 的类,继承了已有的类的成员即可。这个已有 的类被称为的基类,这个新的类被称为派生类 。 例如: public class A public A() public class B : A public B() C#多态 同一操作作用于不同的对象,可以有不同的解释,产生不 同的执行结果,这就是多态性。 C#多态性分为两种,一种是编译时的多态性,一种是运 行时的多态性。 编译时的多态性:编译时的多态性是通过重载来实现的。 对于非虚的成员来说,系统在编译时,根据传递的参数、 返回的类型等信息决定实现何种操作。 运行时的多态性:运行时的多态性就是指直到系统运行时 ,才根据实际情况决定实现何种操作。C#中运行时的多 态性是通过覆写虚成员实现。 C#多态性之重载和覆写的区别: 重载 public int Calculate(int x, int y) public double Calculate(double x, double y) 特点(两必须一可以) 方法名必须相同 参数列表必须不相同 返回值类型可以不相同 覆写 子类中为满足自己的需要来重复定义某个方法 的不同实现。通过使用override关键字来实现覆 写。只有虚方法和抽象方法才能被覆写。 要求(三相同) (1)相同的方法名称 (2)相同的参数列表 (3)相同的返回值类型 C#多态性之虚方法和抽象方法: 虚方法: 声明使用virtual关键字。 调用虚方法,运行时将确定调用对象是什么类的 实例,并调用适当的覆写的方法。 虚方法可以有实现体。 抽象方法: 必须被派生类覆写的方法。 可以看成是没有实现体的虚方法。 如果类中包含抽象方法,那么类就必须定义为抽 象类,不论是否还包含其他一般方法。 抽象类和接口 抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成 是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法 ,但是一旦有了抽象方法,就一定要把这个类声 明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以 不覆盖。如果不覆盖,则其具体派生类必须覆盖 它们。 接 口 (1) 接口不能被实例化 (2) 接口只能包含方法声明 (3) 接口的成员包括方法、属性、索引器、事件 (4) 接口中不能包含常量、字段(域)、构造函数、 析构函数、静态成员。 (5) 接口中的所有成员默认为public,因此接口中 不能有private修饰符 (6) 派生类必须实现接口的所有成员 (7) 一个类可以直接实现多个接口,接口之间用逗 号隔开 (8) 一个接口可以有多个父接口,实现该接口的类 必须实现所有父接口中的所有成员 抽象类和接口的异同点 相同点: (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 (4) 派生类必须实现未实现的方法 区 别: (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和 方法声明,不能包含字段。 (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定 义接口总是后带able字段,证明其是表述一类“我能做。” (3) 接口可以被多重实现,抽象类只能被单一继承 (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现 某一功能的类中 (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接 口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性 (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法 (7) 接口可以用于支持回调,而继承并不具备这个特点 (8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的 ,当然您也可以声明为虚的 (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实 现,而在抽象类的子类中实现接口中方法 C/S 和 B/S 架构 C/S架构 C/S架构是一种比较早的软件架构,主要应用于局域网内。在这之前经历了集中计算模 式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层 C/S架构,不过一直很流行也比较经典的是我们所要研究的两层C/S架构。 C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机 系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就 是第一层是用户表示层,第二层是数据库层。 客户端和服务器直接相连,这两个组成部分都承担着重要的角色,第一层的客户机并 不是只有输入输出,运算等能力,它可以处理一些计算,数据存储等方面的业务逻辑 事务;第二层的服务器主要承担事务逻辑的处理,本来事务很重,但是由于客户机可 以分担一些逻辑事务,所以减轻了服务器的负担,使得网络流量增多。 想要使用C/S架构的软件需要下载一个客户端,安装后就可以使用。 C/S架构的优点 C/S架构既然能在计算机历史的长河中长盛不衰就必然有其闪光之处。下面将 从各个角度分析C/S架构的优点。 1)客户端和服务器直接相连 a)点对点的模式使得更安全。 b)可以直接操作本地文本,减少获取文本的时间和精力。 c)由于直接相连,减少了通信流量,这对于客户来说可以节约一大笔费用。 d)直接相连,中间没有什么阻隔或岔路,所以响应速度快。当通信量少的时 候没什么感觉,但是如果通信量庞大,就不会出现拥堵的现象。 2)客户端可以处理一些逻辑事务 a)充分利用两者的硬件设施,避免资源的浪费。 b)为服务器分担一些逻辑事务,可以进行数据处理和数据存储。可以处理复 杂的事务流程。 c)客户端有一套完整应用程序,在出错提示、在线帮助等方面都有强大的功 能,并且可以在子程序间自由切换。 3) 客户端操作界面 a)可以提高客户的视觉体验,满足客户需求。 b)客户端操作界面可以随意排列,充分满足客户的需要,展现特点与个性。 C/S架构的缺点 经过长期的时间检验,人们也发现了C/S存在的不足,下面将前人的观点整理总结一下。 1)客户端 a)只能处理一些功能单一的多系统。 b)C/S架构适用于局域网,对网速的要求比较高。 c)由于需要安装客户端,安装部署困难,所以不易扩展。 d)若客户端使用的系统不同,就要针对这些系统分别编写程序。 e)客户端界面缺乏通用性,且当业务更改时就需要更改界面,重新编写。 f)客户端需要专门的客户端程序,比较麻烦,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安 装和配置。 2)服务器 a)用户数增多会出现通信拥堵,服务器响应速度慢等情况。 b)当服务器难当大任时,只能将其废弃,使用更强大的服务器。 c)当客户端用户增多时,服务器难以承担重负,是名副其实的“胖”客户端。 d)用户是通过ODBC连接到数据库的,且每个连接到数据库的用户都会保持一个ODBC连接,会一直占用中央服务器 的资源,对服务器的要求很高。 3)用户 a)没有安装客户端的外部用户不能访问。 b)只有安装了客户端才能访问服务器,所以用户不能随时随地的访问。 c)用户是通过ODBC连接到数据库的,所以用户数受限,不易扩张。 d)由于针对小范围的客户,所以不能实现真正大范围的信息共享,信息传达和发布。 4)开发成本 a)需要聘用高素质的人员,对其培训,费用高。 b)初次开发就需要配备好客户端,服务器,需要有专业水准的技术人员,所以成本高。 5)后期成本 a)系统升级维护麻烦,需要更改大量程序,投入大量精力和金钱。 b)业务扩展或变更时,需要更改程序,客户端的界面也需要重新更改。 c)初次投入成本后不能一劳永逸,后期需要很多成本,比如服务器的更换,客户端的更变等。 B/S架构 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前 的全球网络开放、互连、信息随处可见和信息共享的新要求,于是就 出现了B/S型模式,即浏览器/服务器结构。它是C/S架构的一种改进, 可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术 ,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能 ,并节约了开发成本,是一种全新的软件系统构造技术。 第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部 分的事务逻辑。由于客户不需要安装客户端,只要有浏览器就能上网 浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通 用。 第二层是WEB服务器,扮演着信息传送的角色。当用户想要访问数据 库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向 数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的 。 第三层是数据库服务器,他扮演着重要的角色,因为它存放着大量的 数据。当数据库服务器收到了WEB服务器的请求后,会对SQL语句进 行处理,并将返回的结果发送给WEB服务器,接下来,WEB服务器将 收到的数据结果转换为HTML文本形式发送给浏览器,也就是我们打开 浏览器看到的界面。 B/S架构和C/S架构不同,浏览器不是直接和数据库服务器相连,所以 是多对多的结构。因此在此结构下,很适合在广域网里实现巨大的互 联网,甚至是全球网。有着很强大的信息共享性。 在B/S出现的早期,浏览器只能显示静态页面,得不到良好的交互, 不能进行大量的逻辑处理,当时浏览器主要用来实现信息的发布,是 一种单向的应用。后来出现了动态网页,这里的动态有三个方面,一 是交互,二是动画,三是数据。这样,浏览器的交互性能得到极大提 高。页面也越来越丰富多彩。浏览器也能处理部分逻辑事务,所以浏 览器成为了客户端,但由于处理的内容较少,所以叫“瘦”客户端。 B/S架构的优点 B/S架构是应WEB技术的飞速发展而从传统的C/S架构发展而来,并且一举成为当今主 要的网络架构。目前主要的网站,尤其是商务网站都是基于B/S架构建立的。那么我们 就来细数一下B/S架构的优点,它到底为什么受到大家的青睐。 1)浏览器 a)能面对广大的用户实现信息传播共享。 b)浏览器只处理一些简单的逻辑事务,负担小。 c)页面的更新能实现同步,所有用户都能看到。 d)界面设计开发简单,对程序员的要求较低,不需要大量的培训。 e)业务扩展方便,只需要增加几个业务扩展的页面即可,不需要大量的编程。 f)界面不需要太多的编写,比较通用,更改界面也比较简单,所以几乎不需要维护。 g)由于Web的平台无关性,可以从一台服务器、几个用户的工作组级扩展成为拥有成 上万用户的大型系统。 2)服务器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级语文上册 第四单元 15《诫子书》教学设计 新人教版
- 初中物理粤沪版八年级上册1 我们怎样听见声音第1课时教案及反思
- 云南省曲靖市高中化学 第三章 金属及其化合物 3.2 铁的重要化合物 氧化钠和过氧化钠教学设计 新人教版必修1
- 高速公路水运试验室培训大纲
- 九年级化学上册 2.3 构成物质的微粒离子的形成教学设计 (新版)粤教版
- 九年级化学下册 第九章 现在生活与化学9.4 化学物质与健康第1课时 人体内的元素教学设计 科粤版
- 人教版八年级英语上册第九单元教案
- 2024内蒙古东源投资集团招聘高级管理人员51人笔试参考题库附带答案详解
- 三年级数学上册 六 年、月、日 24时计时法教学设计 西师大版
- 肝动脉化疗栓塞术护理
- 2023年高考真题-政治(福建卷) 含答案
- 幼儿园小班认识小动物课件
- GB/T 44569.1-2024土工合成材料内部节点强度的测定第1部分:土工格室
- 热敏灸课件完整版本
- 计算机组装与维护
- 设计(技术)变更申报审批单
- 大学股票投资研究报告
- 人教版信息技术八年级下 第二章活动1认识三维建模技术 教案
- 高空作业施工方案四篇
- 北师大版二年级数学下册全册10套试卷(附答案)
- 2024城市电缆线路岩土工程勘察规范
评论
0/150
提交评论