(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

相关文章

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt