(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

相关文章

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /