面向对象设计基础.ppt

上传人:本田雅阁 文档编号:2613175 上传时间:2019-04-19 格式:PPT 页数:40 大小:1.11MB
返回 下载 相关 举报
面向对象设计基础.ppt_第1页
第1页 / 共40页
面向对象设计基础.ppt_第2页
第2页 / 共40页
面向对象设计基础.ppt_第3页
第3页 / 共40页
面向对象设计基础.ppt_第4页
第4页 / 共40页
面向对象设计基础.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《面向对象设计基础.ppt》由会员分享,可在线阅读,更多相关《面向对象设计基础.ppt(40页珍藏版)》请在三一文库上搜索。

1、第一篇 .NET 基础 东鹏信息电子有限公司 2 内容 第 1 章 认识 ASP.NET 第 2 章 C# 3.0 程序设计基础 第 3 章 面向对象设计基础 第 4 章 ASP.NET 的网页代码模型及生命周期 3 第 3 章 面向对象设计基础 主讲:Jayce_Zou 4 本章内容 主讲:Jayce_Zou 面向对象的概念 类的封装 继承、多态 设计模式 5 面向过程 主讲:Jayce_Zou 在传统应用程序开发领域(如 C 语言的开发),或者是早期的基于 B/S 领域的 Web 应用程序开发(如 ASP)都使用的是传统的面向过程的开发语言。 面向过程的一段 C 语言代码如下所示。 mai

2、n() sum(x,y); get(x,y); print(x); print(y); 面向过程的思想决定了其没有派生、覆盖、继承等特性,所以每当创建一个新的 “对象”时,就有可能需要编写更多的代码,这在一定程度上造成了代码的编写 和维护的困难。 6 面向对象编程 主讲:Jayce_Zou OOP 旨在在计算机程序中 模拟现实世界中的概念 在 OOP 中,现实世界的 所有事物全都被视为对象 能够在计算机程序中用类似的 实体模拟现实世界中的实体 设计和实现软件系统的方法 7 主讲:Jayce_Zou class Program /主程序类 public int sum(int x, int y)

3、 /sum 方法 return x + y; /返回值 static void Main(string args) /静态方法 int x = 1, y = 2; /声明整型变量 Program sum = new Program(); /创建对象 Console.WriteLine(sum.sum(x, y); /输出方法返回值 8 面向组件 主讲:Jayce_Zou 面向组件其实是面向对象的另一种加强。 使用了分层的概念,将代码封装在一个类,然后通过编译器对类或类 库进行编译,形成 DLL组件,在应用程序中使用 DLL,从而提高了代 码的重用性。 分层的概念也是设计模式的开端。 面向组件的

4、概念在平时就已经被读者广泛使用了,例如.NET中的某些 类库,还有COM组件等。面向组件的概念对开发人员在设计的思想上 要求更高,这些要求不仅仅局限于编码。 9 对象 主讲:Jayce_Zou 对 象 面向对象编程的核心 为计算机应用程序提 供实用基础 完成特定任务 表示现实世界中的实体 “对象是存在的具体实体,具有明确定义的状态和行为。” 10 创建一个类和其方法 主讲:Jayce_Zou 11 类成员 主讲:Jayce_Zou class Animal public string color; /声明颜色字段 public bool haveFeather; /声明是否含有羽毛字段 pub

5、lic int age; /年龄字段 成员的访问: Animal bird = new Animal(); /创建对象 bird.haveFeather = true; /鸟有羽毛 bird.color = “black“; 12 访问器 主讲:Jayce_Zou VS 2005的定义方法 public class Animal private int _age; /定义私有变量 public int Age get return _age; set _age = value; /赋值属性 VS 2008 set; /简便的属性编写 13 方法 主讲:Jayce_Zou 方法的语法: 私有级别

6、 返回类型 方法名称(参数 1,参数 2) 方法代码块。 示例代码: public int sum(int number1, int number2) /必须返回 int 类型的值 return number1 + number2; /返回一个 int 类型的值 public void newsum(int number1, int number2) /void 表示无返回值 int sum = number1 + number2; /没有返回值则不能返回值 14 构造函数和析构函数 主讲:Jayce_Zou 构造函数在对象初始化时被执行 析构函数在对象被销毁时被执行 C#应用程序能够提供默认

7、的构造函数和析构函数 15 构造函数示例 主讲:Jayce_Zou public class Animal /创建一个类 public string AnimalName; /创建 AnimalName 名称字段 public Animal() /无参数的构造函数 nimalName = “动物“; /赋值私有变量 public Animal(string name) /有参数的构造函数 AnimalName = name; /私有变量获取传递的参数 Animal dog = new Animal(“狗“); /通过构造函数创建对象 Console.WriteLine(dog.AnimalNa

8、me); /输出对象的属性 16 析构函数示例 主讲:Jayce_Zou public class Animal /创建类 public string AnimalName; /创建 AnimalName 名称字段 Animal() /使用析构函数 AnimalName = String.Empty; /将字符串清空 17 访问修饰符 主讲:Jayce_Zou public 共有权限 public 字段具有最高访问级别,任何它的对象或者其他的类都能对 public 关键字所修饰的类或类成员进行访问。 private 私有权限 private 字段具有最低的访问级别,它能够保证类和类成员的安全,

9、却限 制了其他类或对象对它的访问。私有成员只有在声明他们的类之后才能访 问。 protected 保护权限 protected 字段具有保护类中字段的功能,能够保证类和类成员的安全性 ,也能够限制其他类或对象对它的访问。 internal 程序集保护权限 internal 字段修饰的类或类成员只有在同一程序集的文件中内部类型或 成员才可以访问。 18 .NET 的垃圾回收机制 主讲:Jayce_Zou 当创建一个对象,.NET 对该对象初始化并在内存相应位置存储,当 一个对象执行析构函数时,该对象被销毁并释放相关资源。在.NET 中,由于使用了垃圾回收机制(GC)从而导致开发人员无法控制析构

10、函数是何时被运行的。 垃圾回收机制监视对象的生存周期,当一个对象没有被任何应用程序 引用时,垃圾回收器就释放对象所占的内存以及资源。 垃圾回收机器没有固定的工作模式。它的工作间隔是不可预期的,一 般情况下,当应用程序占用的内存不足的时候会启用垃圾回收器释放 未被引用的对象的资源。 在 ASP.NET 或者 WinForm 开发中,显式的使用 Dispose 方法能够 提高应用程序的性能。同样,析构函数也是一种清理资源的方法,在 对象析构时,可以用 Dispose 对对象的资源,以及连接信息进行清 空从而对对象进行释放。 19 命名空间 主讲:Jayce_Zou 为什么要使用命名空间? 某个学校

11、有两个班级,每个班级里都有一个叫小明的人。如果在早操大会上点名小 明,那么这两 个小明都不知道点的是谁,如果指定一下,说是一班的小明,那么二 班的小明就不会认为是自己了。命名 空间就起到了这个区分的作用 创建命名空间 namespace 命名空间 类以及类成员 引用命名空间 using 命名空间 20 分层设计中使用命名空间 主讲:Jayce_Zou 创建类库 21 主讲:Jayce_Zou 引用类库 代码头部书写 using 命名空间 则可以使用类库项目的命名空间 并访问方法和成员,代码: using System; using System.Linq; /系统命名空间的使用 using S

12、ystem.Text; /自定义命名空间的使用 using MyNamsSpace; 22 给方法传递参数 主讲:Jayce_Zou 传递值 方法可以接收传递的值,并获取参数。 Program pro = new Program(); /创建一个新对象 pro.GetUserName(“guojing“); /传递了一个值 传递对象 方法也可以接收对象,对象也可以看作是一个变量进行参数传递。 Program pro = new Program(); pro.name=”guojing” /初始化字段 pro.GetUserName(pro); /传递了一个对象 23 使用 ref 关键字 主讲

13、:Jayce_Zou class Car string carNumber=“1001”; /声明字符串变量 string carType = “Car”; /声明字符串变量 public string GetCarNum(ref string num,ref string type) /使用 ref 关键 字 num = carNumber; /获取私有变量的值 type = carType; /获取私有变量的值 return num; /返回字符串变量 static void Main(string args) /程序的主入口方法 Car myCar = new Car(); /创建一个新

14、对象 string number=“0“; /将 number 赋值为 0 string type = String.Empty; /将 type 赋值为空 myCar.GetCarNum(ref number,ref type); /使用 ref 关键字 Console.WriteLine(number); /输出字段 Console.WriteLine(type); /输出字段 24 方法的重载 主讲:Jayce_Zou 设计一些相同的方法时,如果只是参数不同,则使用重载。 如果为程序添加一个新功能,重载一个方法是不错的选择。 如要实现类中相似的功能,则可以考虑使用重载。 public v

15、oid GetUserInfor(string name) /一个方法 /通过用户名获取用户信息 public void GetUserInforById(int id) /重载方法 /通过 ID 获取用户信息 25 封装 主讲:Jayce_Zou 在 C#中,封装就是将类成员中的字段、方法以及属性事件等放在一个公共的 结构中 按照一个公共的方法把数据和操作这些数据的方法进行组装(封装),同时 为对象指定操作和属性,从而创建了新的数据类型提供给用户使用,而保证 了私密的内容不会被用户察觉 在开发时,常常会将类成员中的字段、方法、属性封装在一个类或命名空间 内。当把数据和方法封装后,就可以指定方

16、法和属性,对于外部使用者而言 ,他们无需知道类是怎样设计的,只需要关心如何实现信息,让用户成为类 的使用对象 方法的内部代码对开发人员是封闭的,保证内部代码的隐私和安全,开发人 员只需要使用方法或者覆盖方法来达到自己编程的目的 例如一台电脑有显示器、主机等等外设,而相对于显示器而言,显示器是一 个类,同样,机箱也是一个类,同样这些来还包括鼠标,键盘等。而显示器 内部和机箱内部对一般 的用户是不可见的,因为用户不知道怎样拆装显示器 和机箱,但是用户知道怎样将插座相连,组成一个完整的计算机。封装能够 让用户更加关注“计算机”本身,而不去关注“计算机”内部是怎样实现的 。 26 继承 主讲:Jayc

17、e_Zou 在类的设计中,经常需要管理和开发相似功能。在设计这些类的时候 ,就可以使用继承的原则。 在面向对象的应用程序开发中,允许创建一个抽象的类而不实现其具 体方法,而需要通过继承、派生来实现方法。 这样不仅优化了代码,提高了代码的可读性,而且在开发过程中,也 让开发人员有比较明确的编码思想。 例如,要开发一个应用程序或者网站来统计全球动物的种类和基本信 息的时候,就需要创建一些类,比如 人类、猫、狗等等。相比之下 ,人类和猫和狗有相似之处,如它们都是哺乳动物,说的更高一点, 就都是 生物。而人,猫和狗却是不同的对象,还必须要区分三者之 间的关系。 27 一个示例 主讲:Jayce_Zou

18、 public class Animal /编写类 public string type; /动物的种类 public string color; /动物的颜色 public string sound; /动物叫的声音 class Program /应用程序主类 static void Main(string args) /应用程序入口方法 Animal cat = new Animal(); /创建对象 cat.type = “cat“; /猫科动物 cat.sound = “miaomiao“; /猫的叫声为 miaomiao Animal person = new Animal(); /

19、创建对象 person.type = “person“; /人类 28 派生类的优点 主讲:Jayce_Zou 提高重用性 提高结构性 创建派生类 public class Animal /创建基类 public string type; /创建基类成员 public string color; /创建基类成员 public string sound; /创建基类成员 public class People:Animal /创建派生类 public string country; /创建派生类成员 29 抽象类与密封类 主讲:Jayce_Zou 当声明或者设计一个 类的结构时,基类往往是不完善

20、的,也不应该把基类的 类成员实例化。 这时候我们就要使用到抽象类。 public abstract class Animal /创建抽象类 public Animal() /创建构造函数 出于某种目的,当程序块只需要完成某些特定的功能或者在商 业上为了保密 ,则可以使用密封类对类进行密封,保证类的可靠性。 public sealed class Animal /创建密封类 public Animal() /创建构造函数 注意:设计类的时候,通常情况下是不需要将类设置为密封类的, 因为密封类会让类的扩展性非常的差,这个类也无法再次扩展和派生。 30 多态 主讲:Jayce_Zou 面向对象应用程

21、序开发中,与传统的面向对象不同的是, 面向对象具有很多的特性让开发变得简单和方便,代码便 于阅读和维护,多态也是其中的重要的特性。 多态可以分为两种,分别为动态多态和静态多态。 多态的例子: 方法重载 抽象方法 虚方法 接口 . 31 抽象方法 主讲:Jayce_Zou 抽象方法是一个没有对类成员中方法进行具体实现的一种方法,抽象方法的 实现必须让派生类实现。 虽然抽象类中的所有方法不一定全是抽象方法,但是包含抽象方法的类被称 作抽象类。 public abstract class Animal /编写类 public abstract string Sound(); /创建抽象方法 publ

22、ic class People:Animal /派生自 Animal 类 public string country; public override string Sound() /实现抽象方法 return “language“; /返回值 注意:Sound 方法是一个抽象方法,在其他派生类中,如猫、狗,都有自己独 特的叫声,而人类使用的 是语言。不同的种别实现的方法千差万别,在基类 中规定将属性规定死是非常不明智的做法。 32 虚方法的抽象类 主讲:Jayce_Zou public class Animal /创建类 public virtual string Fly() /虚方法,飞行

23、方法 return “Most Of The Animal Can Fly“; /返回值 public class People:Animal /创建派生类 public string country; /没有实现虚方法也可以 public class Bird : Animal /创建派生类 public string FLY() /鸟儿能飞行,实现一个虚方法 return “It Can Fly“; /返回值 33 类命名 主讲:Jayce_Zou 命名空间的命名原则 当开发人员创建命名空间时,命名空间的名称应该避免与公司名称 或其他品牌的名称相同,例如为了做 Office 开发扩展,可能

24、会命 名为 Microsoft.Office,但是此命名空间已经在.NET 框架中被使 用了,所以编译器会报错。 技巧:尽量使用开发人员开发组或公司的名称作为命名空间,因为 开发组或公司的名称能够表示这个 程序或组件是来自哪里。不仅 如此,开发组或公司的名称也能在一定程度上避免了重复,例如 HuaWei.TcpIp.Class 既能表示华为的 TCP/IP 研发小组,又可以 很大程度上的避免重复。 34 类命名 主讲:Jayce_Zou 类的命名原则 类名尽量使用 Pascal 大写,减少类名称的所写的使用 量,并且不推荐使用前缀和下划线。正确的类命名如下 所示。 class SystemMe

25、ssage /良好的命名 35 类命名 主讲:Jayce_Zou 接口的命名原则 在接口的命名中,接口名前应加上大写字母“I”来表示这 是一个 接口而不是一个类。示例代码如下所示。 public interface ISystemMessage /良好的接口命名 void SystemOutput(string str); public interface IUserMessage /良好的接口命名 void Output(string str); 36 类命名 主讲:Jayce_Zou 枚举的命名原则 枚举的命名同样使用 Pascal 大写。枚举值的名称同样需要使用 Pascal 大写,并同

26、样避免枚举名称中所 写的使用量。枚举的命名 不需要加入任何的后缀,示例代码如下所示。 public enum FileType Txt, /定义枚举成员 Txt Mp3, /定义枚举成员 Mp3 Mp4, /定义枚举成员 Mp4 Doc, /定义枚举成员 Doc Pdf, /定义枚举成员 Pdf Html, /定义枚举成员 Html Htm, /定义枚举成员 Htm 37 类命名 主讲:Jayce_Zou 参数名的命名原则 参数名应该具有描述性,即一个参数能够描述当前参数的意义,例 如 computerUser 能够描述一台电脑的使用者,而不应该命名为其 他没有意义的字符,例如 abc,并推荐

27、使用 camel 大写方式命名 。参数的命名 应该根据参数的意义来命名,而不是根据参数的种 类,并且不提倡使用保留参数、下划线等。示例代码如下所示: public void Set(string computerUser) /参数声明 38 小议设计模式 主讲:Jayce_Zou 什么是设计模式? 就是一种规范,所谓的设计模式,就是软件设计的一种范例。虽然 定义看上去非常简单,看是实际上初学者是非常难以理解的,设计 模式是一项长期的学习,需要不停的使用和学习才能掌握。 为什么要使用设计模式? 设计模式是一种编码的范例。在软件开发过程中,不同的人对类的 设计不同,命名的方法也不同,在 类的结构上

28、的设计也不同,通 常会导致代码混乱,难以阅读和难以维护,以至于上个世纪出现了 所谓的“软件危机”。于是人们在软件开发的经验中找到一种模式 ,所谓的模式,就是一种规律、一种规范,就例如现在的教育模式 ,大家都会从小学开始,慢慢的读到大学,是一种经典的模式。在 软件的开发过程中,也存在这样的模式,就是通常情况下所说的设 计模式。 39 小议设计模式 主讲:Jayce_Zou 设计模式让人们在软件设计中有据可循。例如在开发一套网站 管理系统,首先系统设计师需要对网站 进行需求分析,在需 求分析之后,就需要规定接口,来说明开发中的类的规范。在 规范制定好以后,开发人员需要按照规范来开发软件,并按照 统

29、一的类结构或风格编写代码。 常用的有28种设计模式,经常使用的成熟的设计模式在9种左 右。设计模式的学习是一个长期的过程,初学者在理论上很难 理解设计模式,是因为如果没有一定的编码基础,是很难理解 为何要使用设计模式的,因为很短的代码段,基本上 难以涉 及到多人开发,以及市场的考验的经验。 40 小结 主讲:Jayce_Zou 在这一章中,介绍了 C#面向对象的特性。面向对象在构建强大的应用程 序中,起着重要的作用。同样, 面向对象的设计思想为维护做了铺垫,为了 让读者能够加深面向对象的概念,本章还讲解了基本的设计模 式的概念。 什么是面向对象:介绍了面向对象的概念。 面向对象的 C#实现:使用 C#介绍面向对象。 对象的生命周期:讲解了构造函数、析构函数、垃圾回收机制等对象的生命 周期的概念。 使用命名空间:讲解了使用命名空间,以及创建自定义命名空间。 类的方法:讲解了什么是类、类成员、字段、方法等基本知识。 封装:讲解了封装以及为何要封装。 属性:详细讲解了 C#中属性的概念,声明和使用方法。 继承:讲解了面向对象中的继承的概念,并用 C#实现。 多态:讲解了面向对象中的多态的概念,并用 C#实现。 类命名:讲解了命名规范,以及为何要规范命名。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


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