[.net 面向对象编程基础] (11) 面向对象三大特性——封装

[.net 面向对象编程基础] (11) 面向对象三大特性——封装

我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即

面向对象的三大特性:封装、继承、多态。

1.封装概念

封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装。这样的方法包含在类中,通过类的实例来实现。

2.封装的优点

A.良好的封装能够减少耦合(比如实现界面和逻辑分离)

B.可以让类对外接口不变,内部可以实现自由的修改

C.类具有清晰的对外接口,使用者只需调用,无需关心内部

D.因为封装的类功能相对独立,因此能更好的实现代码复用

E.可保护代码不被无意中破坏,通过私有字段等实现内部。注意:这里的代码保护不是指代码本身的加密,而是对不想外部更改的代码通过私有实现。

为了更好的理解封装的我们举几个实际例子

实例一:有一个漂亮的房子(House类),房子里有:床(Bed属性)、沙发(Sofa属性)、书桌(Desk属性)、钱柜(Box属性),还有门(Door属性)、窗子(Window属性),我们可以用一个类及他的属性成员来表示这个房子这个对象,在定义之前,我们可以考虑,像钱柜、床这类个人隐私的东西,不能随便让路过的人看到,那就就是私有的。也不能把窗子也封闭起来不接受阳光,那么窗子就是一个公有属性。而门在离开家的时候需要锁上,回到家需要打开,这就是一个对外的方法,当然开锁是需要有定的条件,比如有钥匙等。通过个描述,我们来用代码实现这个封装

 1 /// <summary>
 2 /// 房子类
 3 /// </summary>
 4 class House
 5 {
 6     object _bed;
 7     object _sofa;
 8     object _desk;
 9     object _box;
10     object _door;
11     object _window;
12
13     /// <summary>
14     /// 床  默认私有成员
15     /// </summary>
16     object Bed
17     {
18         get { return _bed; }
19         set { _bed = value; }
20     }
21     /// <summary>
22     /// 沙发(私有)
23     /// </summary>
24     object Sofa
25     {
26         get { return _sofa; }
27         set { _sofa = value; }
28     }
29     /// <summary>
30     /// 书桌(私有)
31     /// </summary>
32     object Desk
33     {
34         get { return _desk; }
35         set { _desk = value; }
36     }
37     /// <summary>
38     /// 钱柜(私有)
39     /// </summary>
40     object Box
41     {
42         get { return _box; }
43         set { _box = value; }
44     }
45
46     /// <summary>
47     /// 门(公有)
48     /// </summary>
49     public object Door
50     {
51         get { return _door; }
52         set { _door = value; }
53     }
54
55     /// <summary>
56     /// 窗子(公有)
57     /// </summary>
58     public object Window
59     {
60         get { return _window; }
61         set { _window = value; }
62     }
63 }

实例二:我们单位养了一只价值800块钱,黄色的的牧羊犬,有陌生人来的时候,就会叫几声,当然越是陌生程度越高,叫的次数越多。对这样一个事务的处理上,可以利用面向对象的封装特性,代码实现如下:

 1 /// <summary>
 2 /// 狗狗类
 3 /// </summary>
 4 class Dog
 5 {
 6     string _dogName;
 7     readonly Color _dogColor=Color.Yellow;
 8     readonly double _dogPrice = 800.00;
 9     int _shoutNumber;
10
11     /// <summary>
12     /// 构造函数
13     /// </summary>
14     /// <param name="dogName"></param>
15     public Dog(string dogName)
16     {
17         DogName = dogName;
18     }
19
20     /// <summary>
21     /// 狗狗名字 公有属性
22     /// </summary>
23     public string DogName
24     {
25         get { return _dogName; }
26         set { _dogName = value; }
27     }
28     /// <summary>
29     /// 狗狗颜色 只读属性 (颜色一出生就是这个颜色,这里只提供只读,当然这里不考虑染色)
30     /// </summary>
31     public  Color DogColor
32     {
33         get { return _dogColor;}
34     }
35     /// <summary>
36     /// 狗狗价格 只读属性 (这是买来的价格,历史是不可以修改的)
37     /// </summary>
38     public  double DogPrice
39     {
40         get { return _dogPrice; }
41     }
42
43     /// <summary>
44     /// 狗叫的次数 (不同的陌生人来,叫的次数不同)
45     /// </summary>
46     public int  ShoutNumber{
47         set{_shoutNumber=value;}
48         get { return _shoutNumber; }
49     }
50
51     /// <summary>
52     /// 狗叫的方法
53     /// </summary>
54     public void  Shout()
55     {
56         int i=0;
57         string ShoutNum="";
58         do
59         {
60             ShoutNum += "旺!";
61             i++;
62         } while (i <= ShoutNumber);
63         MessageBox.Show(ShoutNum);
64     }
65 }

上面的Dog类就是对狗狗的全部信息,包括它的价格,颜色,叫声,名字等封装成一个类,以方便外部调用。对狗狗的价格和颜色使用了只读属性,因为它买来的历史价格和颜色是不可以更改的(染毛暂不考虑)。通过封装的思想我们可以增加狗狗体重等其它公有属性,而不会影响到外部接口的调用,对私有的只读属性做到了保护。

相信通过这两个实例,我们已经完全对封装熟悉了。假如我们的狗狗又生了一个宝宝,他的很多特征都基本相同,我们是不是又要复制一次这个类呢?这就要用到面向对象的另一个重要特性——继承,下面我们会慢慢介绍。

国际惯例,我们归纳一下封装的要点

要点:

1.封装,就是把一个对象所能操作的所有信息放在一起

2.封装能减少耦合,保持统一的对外接口,内部修改不影响外部调用

 

==============================================================================================

返回目录

==============================================================================================

时间: 2024-10-05 05:10:03

[.net 面向对象编程基础] (11) 面向对象三大特性——封装的相关文章

面向对象编程(十四)——面向对象三大特性之多态②

面向对象最核心的机制——动态绑定,也叫多态. 通过下面的例子理解动态绑定,即多态 1 package javastudy.summary; 2 3 class Animal { 4 /** 5 * 声明一个私有的成员变量name. 6 */ 7 private String name; 8 9 /** 10 * 在Animal类自定义的构造方法 11 * @param name 12 */ 13 Animal(String name) { 14 this.name = name; 15 } 16

[.net 面向对象编程基础] (14) 重构

[.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由之路.就看病一样,普通医生只能治标,高级医生不但看好病,还能除病根. 1.什么时重构? 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性.

[.net 面向对象编程基础] (17) 数组与集合

[.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总是举的是具体的实例以加深理解. 本节内容相当具体,学起来也相当轻松. 1.数组 1.1 什么是数组? 数组是一种数据结构,包含同一个类型的多个元素. 1.2数组的初始化 string[] mystringArray; 类型+方框号 数组名 1.3数组初始化 我们知道数组是引用类型,所以需要给他分配堆

[.net 面向对象编程基础] (20) LINQ使用

[.net 面向对象编程基础] (20)  LINQ使用 通过上节LINQ的基础知识的学习,我们可以开始使用LINQ来进行内存数据的查询了,我们上节说了LINQ的定义为:Language Integrated Query(语言集成查询)的简称,它是集成在.NET编程语言中的一种特性. 1.LINQ的构架 从这幅图中,我们可以知道LINQ包括五个部分:LINQ to Objects.LINQ to XML.LINQ to SQL.LINQ to DataSet.LINQ to Entities.

[.net 面向对象编程基础] (16) 接口

[.net 面向对象编程基础] (16) 接口 关于“接口”一词,跟我们平常看到的电脑的硬件“接口”意义上是差不多的.拿一台电脑来说,我们从外面,可以看到他的USB接口,COM接口等,那么这些接口的目的一就是让第三方厂商生产的外设都有相同的标准,也是提供一个对外通信或操作的入口. 只是C#的接口除了以上特点之外,还具有一种类似于模板的功能,我们定义一组接口,就像是一个模板.这点和抽象类不同,抽象类是先有子类或都子类的概念,从中抽象出一个类.而接口更像是我们要设计一台机器,先把这台机器对外的功能接

[.net 面向对象编程基础] (18) 泛型

[.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检索不方便.集合检索和声明方便,但是存在类型安全问题,本来使一个类型安全的C#变得不安全了. 集合为了解决数组预设大小的问题,采取了一种自动扩容的办法,这样当大小不够时,他就创建一个新的存储区域,把原有集合的元素复制过来.如此又对性能上也是有很大的影响. 上节我们说到解决这些缺陷的方法,那就是.NET

[.net 面向对象编程基础] (15) 抽象类

[.net 面向对象编程基础] (15) 抽象类 前面我们已经使用到了虚方法(使用 Virtual修饰符)和抽象类及抽象方法(使用abstract修饰符)我们在多态一节中说到要实现类成员的重写必须定义为一个虚方法或抽象方法.这节单独把抽象类提出来,是因为抽象是.net实现面向对象编程重要的重要思想,定义抽象类就象一个模板一个提纲,它可以理解为中央的指导思想,我们通过派生类去具体实现它.由此可见,抽象类本身没有任何作用,也不能被实例化,因为他本身就不具有具体的事物.比如上节的动物类的例 子,我们实

C#面向对象编程基础-喜课堂笔记

**************[5][C#面向对象编程基础]第1讲:类与对象**************** ????????????????*************2.1.1_类与对象的概念************** ? 研究对象的入口是: 静态特征:-------属性(什么样子) 动态特征:-------方法!(能做什么)这两个也是对象区分的重要因素! 3. 对象表示世界中的实体,面向对象编程就是将这些实体模拟到计算机中! 4. 什么是封装? ????封装是指将一个或多个小对象包装在一起,

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在