为什么在简单类中使用访问器和赋值器



对于简单的类(我指的是非常简单的类(,我们为什么要使用访问器和赋值器方法?我们为什么不公开数据成员呢?

例如,下面的类头(在C++中(和本可以用更少的精力实现;因为它实际上是一对具有访问器和赋值器的数据成员,它们只访问/修改这些数据成员。

我很欣赏在更复杂的类中使用访问器和赋值器的优势。

template<class T>
class Node
{
private:
T        item; // A data item
Node<T>* next; // Pointer to next node
public:
Node();
Node(const T& anItem);
Node(const T& anItem, Node<T>* nextNodePtr);
void setItem(const T& anItem);
void setNext(Node<T>* nextNodePtr);
T getItem() const;
Node<T>* getNext() const;
}; // end Node

这是OOP中一个非常基本、基本且定义良好的设计原则-为什么要使用访问器和赋值器,无论类是大还是小。

我仍然要说的是,实现-这一原则的使用仍然因语言而异,但面向对象设计的核心原则-封装始终保持不变,并要求始终隐藏所有可能隐藏的东西

这有点重复你的问题,它指的是为什么getter和setter在比赛中;不过,我也会尝试提出其他一些观点。

封装是面向对象编程的一个基本原则,可能也是最重要的原则。

首先:

封装的要点是不是(!(来限制/阻止对成员变量的访问,而是约束访问策略并强制进行合理的访问,从而避免任何意外干扰、隐式误用或意外访问。

想一想:如果用户调用.setUserName("MyUser"),那么用户真的打算将数据写入成员字段,这是明确的!否则,这将意味着客户端(1(意外地提供了";MyUser";数据作为setter方法的参数,并且他们(2(意外地调用了.setUserName方法,这两种方法一起意外发生的可能性要小得多,然后只需公开访问该字段,只需移动一步即可。

也就是说,使用封装的原理并将其作为OOP的核心功能来提倡,软件开发人员、许多框架和库通常会同意并使用数据类、普通类、业务类、服务或任何其他类型,依赖于广泛使用的常规设计和如何使用成员变量的最佳实践-使用mutator来mutate,使用accessor来access字段。

许多框架在实现IoC或DI时会显式调用setter和getter。

因此,使用封装并通过赋值器和访问器与类成员交互是最佳实践、传统约定的无气味代码风格,也是类成员最安全的设计。

最新更新