我有点困惑,我读到了C ++中使用getter和setter的一些缺点,尽管创建只读变量,将变量设为私有并创建getter函数似乎是显而易见的事情。
也许有一个简单的答案,但我只是看不到它,但是什么是使成员变量只读而不使用getter或正在接受使用getter函数的更好/更好的解决方案,甚至是解决该问题的好方法?

最佳答案

a)提供获取器和设置器和/或b)公共数据属性

击败实现最佳耦合和内聚力的软件工程目标。



从维基百科:


  在软件工程中,耦合是指方式和程度。
  软件模块之间的相互依赖性;衡量是否紧密
  连接两个例程或模块;的力量
  模块之间的关系。耦合通常与
  凝聚。
  
  在计算机程序设计中,凝聚力是指
  一个模块的元素属于在一起。[1]因此,凝聚力可以​​衡量
  内的功能之间的关系强度
  给定的模块。例如,在高度凝聚力的系统中,功能是
  密切相关。




在过程编程中,(通常)有8个级别的耦合被排名(从最差到最佳)。维基文章描述了所有这些。您的编码工作应努力实现最佳耦合(带有标签“ none”)。

(通常)对7个内聚级别进行排序(从最差到最佳)。您应该争取最佳的凝聚力(带有“功能性”标签)。



一种考虑耦合的方法-如果添加setter和getter或使用公共数据属性,为什么还要费心将这些数据封装到此类中?如果您允许数据​​的任何部分修改数据属性,那么请考虑一下,当需求变更迫使您更改数据属性的名称和/或类型时,可能需要更改多少非类代码。

关于凝聚力的类似想法-公共数据属性很容易被不相关的代码(另一个对象或外部函数中的代码)修改,是什么使它们成为类的“好选择”?也许这些“外部”代码应该成为对象的一部分……是与该对象对系统所做的主要“目标”相关的数据。

07-24 09:37
查看更多