当前位置:  开发笔记 > 编程语言 > 正文

结构不属于面向对象的程序

如何解决《结构不属于面向对象的程序》经验,为你挑选了2个好方法。

或者是吗?

面向对象的设计是否应该使用默认情况下公开成员数据的语言结构,如果有一个同样有用的结构可以正确隐藏数据成员?

编辑:其中一个响应者提到,如果没有不变量,可以使用结构.这是一个有趣的观察结果:结构是一种数据结构,即它包含相关数据.如果结构中的数据成员是相关的,那么总是存在不变量吗?



1> Artelius..:

在C++中,structclass es除了其成员的默认公共/私有性外是相同的.(此默认设置很容易,通常会被覆盖.)

但是,大多数程序员将结构视为"数据对象",将类视为"交互式对象".那不是坏事; 事实上应该利用.如果某些东西只是一个无生命的数据块(即使可能有一些检查器方法),请使用它的结构; 当程序员试图查看它的用途时,它会省去一些努力.


不仅成员,而且基类默认为struct为public,而private为class.

2> Joe Pineda..:

不要成为隐藏的狂热者.如果你的get/set方法什么都不做,只是简单地将值逐字复制到隐藏的私有字段上,你就没有获得公共成员的任何东西,只会不必要地使你的类复杂化(并且,根据编译器的智能,慢它的用法有点).

有一种情况是,当你的setter方法做一些验证时不允许直接访问,在其他地方复制数据,在存储它之前稍微处理它,等等.在实际计算从多个内部源返回的值的getter的情况下,并隐藏它的衍生方式(我相信Bertrand Meyer在他的书中谈到这一点)

或者,如果允许您的类的用户直接更改此类值,则会产生意外的副作用,或者打破您的某些成员类关于值的假设.在这些情况下,一定要隐藏你的价值观.

例如,对于一个简单的"Point"类,它只包含几个坐标和颜色,以及在屏幕上"绘制"它并"隐藏"它的方法,我认为不允许用户直接设置值对于它的领域.


"你对公共成员一无所获".如果未在标头中定义方法,则您已获得链接兼容性,并且您希望将实现更改为超出普通访问权限.当然那里有一个相当强大的YAGNI,但是如果你正在为二进制分发编写一个lib,
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有