第一单元封装学习指导书_第1页
第一单元封装学习指导书_第2页
第一单元封装学习指导书_第3页
第一单元封装学习指导书_第4页
第一单元封装学习指导书_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一单元封装学习指导书 一 学习目标一 学习目标 知识点知识点重 要性 掌握程度知识点关联 封装性 1 封装的威力 2 this 关键字 极高了解 从面向思想编程角度理解封装 理 解封装的作用 为后续学习属性等 提供伏笔 访问修饰符 1 成员的访问修饰符 2 成员的访问修饰符 极高 熟练 该部分内容在后续课程中应用比较 广泛 重点理解各个访问修饰符之 间的区别与联系 属性 1 声明属性 2 提供属性验证 3 只读和只写属性 极高熟练 属性的由来 提供了那些作用 理 解只读只写属性 也为前面所学封 装在此很好的体会 二 重难点知识点二 重难点知识点 重难点重难点 1 封装的概念 封装的概念 学习方法 学习方法 1 首先要从现实世界到编程世界封装的的用处首先要从现实世界到编程世界封装的的用处 1 所谓的封装其实就是保护对象隐私 当然 没有人能完全隐藏自己的隐私 比如现 实生活中去转户口时 不得不透露自己的家庭信息和健康状况 另外 在不同的场合 所透露隐私的数量也不一样 朋友和家人可能会知道你更多的隐私 同事次之 其他 人则知道得更少 面向对象的编程也考虑了这些实际的情况 所以编程语言有 public private protected friend 等关键字 以适应于不同的情况 在面向对象的 编程过程中为什么需要封装 Encapsulation 呢 因为对象也有隐私 对象的隐私就是 对象内部的实现细节 要想对象保持良好的形象就要保护好对象隐私 2 封装可以隔离变化 对象内部是非常容易变化的 比如 电脑在不断升级 机箱还 是方的 但里面装的 CPU 和内存已是今非昔比了 变化是不可避免的 但变化所影响 的范围是可以控制的 不管 CPU 怎么变 它不应该影响用户使用的方式 封装是隔离 变化的好办法 用机箱把 CPU 和内存等封装起来 对外只提供一些标准的接口 如 USB 接口 网线接口和显示器接口等 只要这些接口不变 不管内部怎么变化 也不 会影响用户的使用方式 3 封装还可以提高易用性 封装后只暴露最少的信息给用户 对外接口清晰 使用更 方便 更具用户友好性 试想 如果普通用户都要知道机箱内部各种芯片和跳线是如 何布局的 那是多么恐怖的事情 到现在为止编者甚至还搞不清楚硬盘的跳线设置 幸好也没有必要知道 2 掌握封装在编程语言中的使用场合和表现形式掌握封装在编程语言中的使用场合和表现形式 封装有两层含义 其一是隐藏内部行为 即隐藏内部函数 调用者只能看到对外提供 的公共函数 其二是隐藏内部信息 即隐藏内部数据成员 为了实现数据的封装 提高数据的安全性 一般建议把类的属性声明为私有的 把类 的方法声明为公共的 这样 对象能够直接调用类中定义的所有方法 当对象想要修 改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现 在考虑 封装的时候 建议遵守 对象调方法 方法改属性 的要求即可 重难点重难点 2 属性的概念 属性的概念 概念 概念 属性是提供一个灵活的机制来读取 写入 或计算私有字段的值的成员 可以像使用公共 数据成员一样使用属性 但实际上它们是称作 访问器 的特殊方法 这使得可以轻松访问数据 此 外还有助于提高方法的安全性和灵活性 实例语法 实例语法 class TimePeriod private double seconds public double Hours get return seconds 3600 set seconds value 3600 class Program static void Main TimePeriod t new TimePeriod Assigning the Hours property causes the set acces sor to be called t Hours 24 Evaluating the Hours property causes the get acce ssor to be called System Console WriteLine Time in hours t Hours 共性问题 共性问题 a 属性与字段容易混淆属性与字段容易混淆 属性与字段的异同 相同 都是表示类的一个数据 如人的身高 体重等 不同 属性对外部和派生类开放 这也解释了为什么需要加逻辑验证 字段对内部开放 提供更快的性能 更少的验证 信任程序员 b 属性的使用场合把握不准 属性的使用场合把握不准 尽可能的使用属性 property 而不是数据成员 field 我们的目标 尽可能编写出运行效率更高 更健壮 更容易维护的 C 代码 原则一 尽可能的使用属性 property 而不是数据成员 field Always use properties instead of accessible data members 出于以下几点原因 请在设计类时 尽可能的使用属性 而不是成员 1 Net 对属性的支持远远大于对成员的支持 你可以对属性进行数据绑定 设计时说 明等很多数据成员不被支持的内容 看看 net 里的属性面板 你会明白的 2 数据安全性检测 属性本质上是两个函数 只是因为 C 的特殊语法 但我们可以像访问成员一样的访 问它 因此我们可以在属性设计上添加更多更灵活的内容 对属性进行管理 其中对 属性数据的检测是其中之一 在对数据检测时 如果发现数据不满足条件 最好以抛出异常的形式来解决 千万不 要设置默认值 这是很危险的事情 例如 public string Name get if this Name null return NoName else return this Name set if value null this Name NoName else if value Length 10 this Name value else this Name value SubString 0 10 看上去很不错不是吗 请马上动手修改你的代码吧 上面的代码是很危险的 或者你 还不明白 明明对数据进行了安全检测 为什么还是危险的呢 试想这样的情况 有 两个实例 o1 与 o2 o1 的 Name 为 null 我们做了这样的事 o2 Name o1 Name 结果是什么 o2 Name 为 NoName 而在本质上 o1 与 o2 的 Name 是根本不相等的 这会对后面的程序运行带来很大的麻烦 请以抛出异常的形式来解决数据不满足条件 时的问题 辅导视频 辅导视频 参见视频文件夹参见视频文件夹 作业内容作业内容 参见作业文件夹参见作业文件夹 补充阅读 补充阅读 参见补充阅读文件夹参见补充阅读文件夹 重难点重难点 3 this 关键字关键字 学习方法 学习方法 首先回顾下访问修饰符的含义 首先回顾下访问修饰符的含义 1 由具体的实例体会 由具体的实例体会 this 关键字的作用关键字的作用 在 C 中 this 关键字代表当前实例 我们可以用 this 来调用当前实例的成员方法 变量 属 性 字段等 也可以用 this 来做为参数状当前实例做为参数传入方法 下面是你这段程序的注解 引入使命空间 System using System 声明命名空间 CallConstructor namespace CallConstructor 声明类 Car public class Car 在 Car 类中 声明一个非静态的整型变量 petalCount 初始值为 0 未用 Static 声明的变量叫做静态变量 非静态成员属于 类的实例 我们只能在调用类的构造函数对类进行实例化后才能通过所得的实例加 来 访问 int petalCount 0 声明一个非静态的字符串变量 s 初始值为 null 注意 s null 与 s null 是不同的 String s null Car 类的默认构造函数 Car int petals Car 类的默认构造函数中为 petalCount 赋值为传入的参数 petals 的值 petalCount petals 输出 petalCount Console WriteLine Constructor w int arg only petalCount petalCount 重载 Car 类的构造函数 this petals 表示从当前类中调用 petals 变量的值来作为构造函数重载方法 Car String s int petals 的第二个参数 Car String s int petals this petals 在构造函数中为 s 赋值 非静态成员可以在构造函数或非静态方法中使用 this 来调用或访问 也可以直接打变 量的名字 因此这一句等效于 s s 但是这时你会发类的变量 s 与传入的参数 s 同名 这里 会造成二定义 所以要加个 this 表示等号左边的 s 是当前类自己的变量 this s s Console WriteLine String 重载构造函数 this hi 47 表示调 Car String s int petals 这个重载的构造函数 并 直接传入变量 hi 和 47 Car this hi 47 Console WriteLine default constructor public static void Main Car x new Car Console Read 共性问题 共性问题 this 引用有三种典型的使用方式 第一种方式是限定被参数掩藏的实例变量 public void Function1 int i This i i 第二种用法是把当前对象作为参数传给另一个方法 public void Method1 OtherClass obj new OtherClass obj Method2 this 辅导视频 辅导视频 参见视频文件夹参见视频文件夹 作业内容 参见作业文件夹作业内容 参见作业文件夹 补充阅读 补充阅读 无无 重难点重难点 3 访问修饰符 访问修饰符 学习方法 学习方法 public 关键字是类型和类型成员的访问修饰符 公共访问是允许的最高访问级别 对访问公共成关键字是类型和类型成员的访问修饰符 公共访问是允许的最高访问级别 对访问公共成 员没有限制员没有限制 如下例所示 class SampleClass public int x No access restrictions 示例 在下面的示例中 声明了两个类 Point 和 MainClass 直接从 MainClass 访问 Point 的公共成员 x 和 y protected public cs Public access using System class Point public int x public int y class MainClass static void Main Point p new Point Direct access to public members p x 10 p y 15 Console WriteLine x 0 y 1 p x p y 输出 x 10 y 15 private 关键字是一个成员访问修饰符 私有访问是允许的最低访问级别 私有成员只有在声明它关键字是一个成员访问修饰符 私有访问是允许的最低访问级别 私有成员只有在声明它 们的类和结构体中才是可访问的们的类和结构体中才是可访问的 如下例所示 class Employee private int i double d private access by default 同一体中的嵌套类型也可以访问那些私有成员 在定义私有成员的类或结构外引用它会导致编译时错误 在此示例中 Employee 类包含两个私有数据成员个私有数据成员 namename 和和 salarysalary 作为私有成员 它们只能 作为私有成员 它们只能 通过成员方法来访问 因此 添加了名为通过成员方法来访问 因此 添加了名为 GetNameGetName 和和 SalarySalary 的公共方法 以允许对私有成员的公共方法 以允许对私有成员 进行受控制的访问 进行受控制的访问 namename 成员通过公共方法成员通过公共方法来访问 salary 成员通过一个公共只读属性来访问 private keyword cs using System class Employee private string name FirstName LastName private double salary 100 0 public string GetName return name public double Salary get return salary class MainClass static void Main Employee e new Employee The data members are inaccessible private so then can t be accessed like this string n e name double s e salary name is indirectly accessed via method string n e GetName salary is indirectly accessed via property double s e Salary protected 关键字是一个成员访问修饰符 受保护成员在它的类中可访问并且可由派生类访问 有关键字是一个成员访问修饰符 受保护成员在它的类中可访问并且可由派生类访问 有 关关 prot

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论