诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

封装与类型的扩展性

面向对象编程(OOP)为软件编写提供了一个平衡的方法。数据和行为被一起封装。这种封装创建了用户定义的数据类型,扩展了语言数据类型并与之互动。类型的可扩展性是一种机会,允许在语言中添加用户定义的数据类型,这些数据类型使用起来与基本类型一样简单。

抽象数据类型,例如字符串,是理想行为类型的描述。

字符串用户知道,如连接或打印这样的字符串操作具有特定的行为。连接和打印操作被称为方法。

一个特定的ADT实现可能具有某些限制,例如,字符串可以有长度限制。这些限制影响了所有人都可以观察到的行为。同时,内部或私有的实现细节并不直接影响用户如何看待对象。例如,字符串通常实现为数组,但对于用户来说,这个数组的内部基地址和其名称并不是必要的。

封装的重要性

封装是在为用户定义的类型提供开放接口时隐藏实现细节的能力。在MQL4中,类和结构定义(class和struct)与访问关键词private、protected和public结合使用,用于封装规定。

公共关键词表示对其后面的成员的访问是开放的,没有任何限制。没有这个关键词,类成员默认是锁定的。私有成员只能通过其类的成员函数访问。

受保护的类函数不仅在其类中,而且在其继承类中也可用。公共类函数在类声明的范围内对任何函数都是可用的。保护机制使得可以隐藏部分类实现,从而防止数据结构中的意外变化。访问限制或数据隐藏是面向对象编程的一个特征。

示例解读

首先,通过函数名称,我们可以了解它的作用-设置或获取类成员的值。其次,也许将来我们需要更改CPerson类或其任何派生类中m_name变量的类型。

在这种情况下,我们只需更改SetName()和GetName()函数的实现,而CPerson类的对象在程序中的使用不需要任何代码更改,因为用户甚至不会知道m_name的数据类型已经更改。

例如,考虑一个名为CPerson的类,它有一个受保护的成员m_name。然后,我们为该类提供了公共的SetName和GetName方法,以设置和获取名字。

此外,我们还考虑了一个更复杂的例子,其中名字被分解为名和姓,并存储在一个名为Name的结构中。此时,SetName方法更为复杂,需要分解全名以获取名和姓,然后再存储它们。

通过上述示例,我们可以清晰地看到封装的强大之处,它不仅隐藏了实现细节,还提供了一个清晰、统一的接口,使得其他代码可以轻松地与之互动,而无需关心背后的具体实现。

未经允许不得转载:ea编程网 » 封装与类型的扩展性