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

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

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

1.封装概念

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

2.封装的优点

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

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

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

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

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

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

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

 /// <summary>
/// 房子类
/// </summary>
class House
{
object _bed;
object _sofa;
object _desk;
object _box;
object _door;
object _window; /// <summary>
/// 床 默认私有成员
/// </summary>
object Bed
{
get { return _bed; }
set { _bed = value; }
}
/// <summary>
/// 沙发(私有)
/// </summary>
object Sofa
{
get { return _sofa; }
set { _sofa = value; }
}
/// <summary>
/// 书桌(私有)
/// </summary>
object Desk
{
get { return _desk; }
set { _desk = value; }
}
/// <summary>
/// 钱柜(私有)
/// </summary>
object Box
{
get { return _box; }
set { _box = value; }
} /// <summary>
/// 门(公有)
/// </summary>
public object Door
{
get { return _door; }
set { _door = value; }
} /// <summary>
/// 窗子(公有)
/// </summary>
public object Window
{
get { return _window; }
set { _window = value; }
}
}

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

 /// <summary>
/// 狗狗类
/// </summary>
class Dog
{
string _dogName;
readonly Color _dogColor=Color.Yellow;
readonly double _dogPrice = 800.00;
int _shoutNumber; /// <summary>
/// 构造函数
/// </summary>
/// <param name="dogName"></param>
public Dog(string dogName)
{
DogName = dogName;
} /// <summary>
/// 狗狗名字 公有属性
/// </summary>
public string DogName
{
get { return _dogName; }
set { _dogName = value; }
}
/// <summary>
/// 狗狗颜色 只读属性 (颜色一出生就是这个颜色,这里只提供只读,当然这里不考虑染色)
/// </summary>
public Color DogColor
{
get { return _dogColor;}
}
/// <summary>
/// 狗狗价格 只读属性 (这是买来的价格,历史是不可以修改的)
/// </summary>
public double DogPrice
{
get { return _dogPrice; }
} /// <summary>
/// 狗叫的次数 (不同的陌生人来,叫的次数不同)
/// </summary>
public int ShoutNumber{
set{_shoutNumber=value;}
get { return _shoutNumber; }
} /// <summary>
/// 狗叫的方法
/// </summary>
public void Shout()
{
int i=;
string ShoutNum="";
do
{
ShoutNum += "旺!";
i++;
} while (i <= ShoutNumber);
MessageBox.Show(ShoutNum);
}
}

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

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

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

要点:

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

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

 

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

返回目录 <如果对你有帮助,记得点一下推荐哦,有不明白的地方或写的不对的地方,请多交流>

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

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

  1. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  2. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  3. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

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

    [.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然 ...

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

    [.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总 ...

  6. [.net 面向对象编程基础] (19) LINQ基础

    [.net 面向对象编程基础] (19)  LINQ基础 上两节我们介绍了.net的数组.集合和泛型.我们说到,数组是从以前编程语言延伸过来的一种引用类型,采用事先定义长度分配存储区域的方式.而集合是 ...

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

    [.net 面向对象编程基础] (20)  LINQ使用 通过上节LINQ的基础知识的学习,我们可以开始使用LINQ来进行内存数据的查询了,我们上节说了LINQ的定义为:Language Integr ...

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

    **************[5][C#面向对象编程基础]第1讲:类与对象****************                 *************2.1.1_类与对象的概念**** ...

  9. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

随机推荐

  1. mysql的数据转换

    在sql语句中完成对数字类型的数据转换成字符类型的数据.像这次将读取出来的float类型的数据,在进行jsonObject.fromObject(object).toString();这个方法,并没有 ...

  2. (重要)使用廉价的VPN隐私会被窥探

    使用廉价的VPN可以节省一部分的支出,但是损失的却是我们的网上隐私,很多部门都很关心我们在网上干些什么,本来使用VPN是为了保护自己的隐私不被窥探,很显然这是事与愿违的,一些小公司或者大公司,通过提供 ...

  3. OD使用教程8

    方式一基本的打补丁方式:   打开程序之后首先会跳出一个nag窗口,从中我们知道了可以将nag窗口作为切入点,只要找到了nag的触发点就等同于找到注册与未注册的判断的点 右键-查找-所有参考文本字串 ...

  4. Linux系统目录结构

    Linux系统目录结构图 目录:/ 是Linux的根目录 每个文件和目录从根目录开始,只有root用户具有该目录下的写权限: /root是root用户的主目录,这与 / 目录不一样: 目录:/bin ...

  5. DEV GridControl双击行事件

    首先,需要将gridview1.OptionsBehavior.Editable设为false //双击行弹出nodeDetail信息 private void gridView1_MouseDown ...

  6. SQLServer : 几个特殊函数(RAND,CHECKSUM, NEWID)

    这一篇我们来捋捋在T-SQL中可能会用到的几个特殊的函数 1. 随机数: RAND 返回从 0 到 1 之间的随机 float 值. 语法: RAND ( [ seed ] ) seed 提供种子值的 ...

  7. MyEclipse快捷键敏感设置

    对于一个程序员来说,敲代码没有快捷键是很难受的.自从我装了MyEclipse之后发现快捷键敏感性太差了比如说我打输出语句System.out.println();一般打syso就会有提示,但是我的My ...

  8. jQuery - plugin 代码模型

    1.扩展 jQuery 的全局函数,主要以 $.xxx() 的形式调用 (function($) { $.myFunction = function(array) { // code } })(jQu ...

  9. 基于 Winform + DotNetBar 写的股市行情助手

    StockViewer 股市行情助手 简介 观看股市行情,窗口太显眼,是否担心被身后的老板发现? 窗口来回切换,工作时每隔几分钟就要看一眼股市.难道只能同时做一件事情吗? 现在,一款完全免费.开源的小 ...

  10. 使用JSON Schema来验证接口数据

    最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...