我有点困惑,我读到了C ++中使用getter和setter的一些缺点,尽管创建只读变量,将变量设为私有并创建getter函数似乎是显而易见的事情。
也许有一个简单的答案,但我只是看不到它,但是什么是使成员变量只读而不使用getter或正在接受使用getter函数的更好/更好的解决方案,甚至是解决该问题的好方法?
最佳答案
a)提供获取器和设置器和/或b)公共数据属性
击败实现最佳耦合和内聚力的软件工程目标。
从维基百科:
在软件工程中,耦合是指方式和程度。
软件模块之间的相互依赖性;衡量是否紧密
连接两个例程或模块;的力量
模块之间的关系。耦合通常与
凝聚。
在计算机程序设计中,凝聚力是指
一个模块的元素属于在一起。[1]因此,凝聚力可以衡量
内的功能之间的关系强度
给定的模块。例如,在高度凝聚力的系统中,功能是
密切相关。
在过程编程中,(通常)有8个级别的耦合被排名(从最差到最佳)。维基文章描述了所有这些。您的编码工作应努力实现最佳耦合(带有标签“ none”)。
(通常)对7个内聚级别进行排序(从最差到最佳)。您应该争取最佳的凝聚力(带有“功能性”标签)。
一种考虑耦合的方法-如果添加setter和getter或使用公共数据属性,为什么还要费心将这些数据封装到此类中?如果您允许数据的任何部分修改数据属性,那么请考虑一下,当需求变更迫使您更改数据属性的名称和/或类型时,可能需要更改多少非类代码。
关于凝聚力的类似想法-公共数据属性很容易被不相关的代码(另一个对象或外部函数中的代码)修改,是什么使它们成为类的“好选择”?也许这些“外部”代码应该成为对象的一部分……是与该对象对系统所做的主要“目标”相关的数据。