当前位置: 首页 > article >正文

(delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(访问说明符)

7.3 private、protected和public访问说明符

strict private 访问说明符表示在类的任何方法(包括同一单元中其他类的方法)之外都不能访问的字段和方法,这与大多数其他 OOP 语言中 private 关键字的行为一致。

​ 一个类可以有任意数量的数据字段和任意数量的方法。但是,为了实现良好的面向对象方法,数据应隐藏或封装在使用它的类中。例如,当你访问一个日期时,改变日期本身的值是没有意义的。事实上,改变日期的值可能会导致一个无效的日期,如 2 月 30 日。使用方法访问对象的内部表示可以限制产生错误情况的风险,因为方法可以检查日期是否有效,如果无效,则拒绝修改新值。适当的封装尤为重要,因为它赋予了类编写者在未来版本中修改内部表示的自由。

​ 封装的概念非常简单:只需将类想象成一个 “黑盒子”,其中有一小部分是可见的。可见部分称为类接口,允许程序的其他部分访问和使用该类的对象。然而,当你使用对象时,它们的大部分代码都是隐藏的。你很少知道对象有哪些内部数据,通常也无法直接访问这些数据。然而,你可以使用方法来访问对象的数据或对其进行操作。

​ 使用私有和受保护成员进行封装是面向对象的一种解决方案,可实现信息隐藏这一经典编程目标。

Object Pascal 有五个基本的访问(或可见性)说明符:private、protected 和public。第 10 章将讨论第六种,即published。以下是这五个基本说明符:

  • public访问说明符表示字段和方法可以在定义它们的单元中以及程序的任何其他部分自由访问。
  • protected 和 strict protected 访问说明符用于表示可见性有限的方法和字段。只有当前类及其派生类(或子类)可以访问受保护的元素,除非它们在同一个类中,或者在任何情况下都取决于strict修饰符。我们~将在下一章的 "受保护字段和封装 "部分再次讨论这个关键字。

​ 一般来说,类的字段应该是privatestrict private,而方法通常是 public 。但情况并非总是如此。如果方法只需要在内部执行某些部分操作,那么这些方法可以是private或protected。如果您相当确定字段的类型定义不会改变,并且可能希望在派生类中直接操作字段(如下一章所述),则字段可以是protected,不过很少推荐这样做。

​ 作为一条通用规则,您应尽量避免使用public字段,而应提供一些使用属性直接访问数据的方法,我们将在第 10 章中详细介绍。属性是其他 OOP 语言封装机制的扩展,在 Object Pascal 中非常重要。

​ 如前所述,private访问说明符只限制单元外的代码访问该单元中声明的类的某些成员。这意味着,如果两个类在同一个单元中,它们的private字段就不会受到保护,除非它们被标记为strict private,这通常是一个好主意。

注解:C++ 语言有 "友元"的概念,即这个类能够访问另一个类的私有数据。按照这一术语,我们可以说,在 Object Pascal 中,同一单元中的所有类都自动被视为友元。


http://www.kler.cn/a/274801.html

相关文章:

  • CSS 样式化表格:从基础到高级技巧
  • 实战:如何利用网站日志诊断并解决收录问题?
  • 解决带空格的字符串输入问题:C/C++中的几种常用函数
  • Redis代金卷(优惠卷)秒杀案例-多应用版
  • 昆仑万维Java开发面试题及参考答案
  • MSP430 单独使用CCR1不触发的问题解决
  • mysql之基本概念与安装
  • Springboot+vue的仓库管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
  • android、Jetpack Compose使用 Room数据库kapt注解时出现的相关问题整理。
  • 用C语言打造自己的Unix风格ls命令
  • 五、C#归并排序算法
  • MaixSense-A010 接入 ROS
  • 信息学奥赛之C++中的数据类型数据结构
  • 简介:iframe 沙箱+WebComponent 容器
  • 网络安全的几个关键领域
  • 深入理解栈和队列(一):栈
  • 鸿蒙原生应用开发-ArkTS语言基础类库多线程CPU密集型任务TaskPool
  • 多线程:线程池
  • C语言经典面试题目(十六)
  • 选数异或 (AcWing 4645)
  • 设计模式学习笔记 - 规范与重构 - 8.实践:程序出错返回啥?NULL、异常、错误吗、空对象?重构ID生成器,处理各函数的异常
  • 国内外15款AI搜索引擎汇总
  • 选择排序算法(Selection Sort)原理及实现
  • 基于Spring Boot+Vue的智慧图书管理系统
  • 【使用xlrd、xlutils读写excel】
  • Devops-01-devops 是什么?