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

本文主要是介绍(delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(private访问说明符),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7.3.1 一个私有数据的例子

​ 作为使用这些访问说明符实现封装的示例,考虑一下TDate类的新版本:

TDate = class
privateMonth, Day, Year: Integer;
publicprocedure SetValue(M, D, Y: Integer);function LeapYear: Boolean;function GetText: string;procedure Increase;
end;

​ 在这个版本中,字段现在被声明为private,并且有了一些新方法。第一个方法是 GetText,它是一个返回包含日期的字符串的函数。您可能会考虑添加其他函数,如 GetDayGetMonthGetYear,这些函数只需返回相应的私有数据,但并不总是需要类似的直接数据访问函数。为每个字段提供访问函数可能会降低封装性、削弱抽象性,并使以后修改类的内部实现变得更加困难。只有当访问函数是类的逻辑接口的一部分时,才应该提供访问函数,而不是因为有匹配的字段。

​ 第二个新方法是Increase过程,它将日期增加一天。这并不简单,因为你需要考虑各种月份的不同长度以及闰年和非闰年。为了简化编码,我将更改类的内部实现,使用Object PascalTDateTime类型作为内部实现。所以实际的类将更改为你可以在Dates2示例中找到的以下代码:

type
TDate = class
privateFDate: TDateTime;
publicprocedure SetValue(M, D, Y: Integer);function LeapYear: Boolean;function GetText: string;procedure Increase;
end;

​ 请注意,由于对类的唯一更改在类的私有部分,因此你不必修改任何已使用该类的现有程序。这就是封装的优势!

注解:在这个新版本的类中,字段的标识符以字母 "F "开头。这是 Object Pascal 中一个相当常见的约定,我在书中一般也会使用这个约定。

​ 在本节的最后,让我通过列出类方法的源代码来结束对该项目的描述,这些方法依赖于一些系统函数来将日期映射到内部结构,反之亦然:

procedure TDate.SetValue(M, D, Y: Integer);
beginFDate := EncodeDate(Y, M, D);
end;function TDate.GetText: string;
beginResult := DateToStr(FDate);
end;procedure TDate.Increase;
beginFDate := FDate + 1;
end;function TDate.LeapYear: Boolean;
begin// 调用SysUtils中的IsLeapYear和DateUtils中的YearOfResult := IsLeapYear(YearOf(FDate));
end;

​ 还请注意,使用该类的代码不能再引用 Year 值,而只能在其方法允许的范围内返回日期对象的信息:

var
ADay: TDate;
begin// 创建ADay := TDate.Create;// 使用ADay.SetValue(1, 1, 2020);ADay.Increase;if ADay.LeapYear thenShow('Leap year: ' + ADay.GetText);// 释放内存ADay.Free;

输出与之前没有太大的不同:

Leap year: 1/2/2020

请注意,你的输出可能有所不同,因为日期的格式根据系统的语言环境设置而变化。

这篇关于(delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(private访问说明符)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832152

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻