对于OO编程中对象的粒度,是否有经验法则?

时间:2013-09-04 11:57:23

标签: class oop

我正在学校学习OO编程,并且在接下来的几个月中,每项任务都涉及骰子游戏和文字游戏,如混蛋和刽子手。每个作业都让我们为这些变量创建一个新类; HangmanWordArray,JumbleWordArray等。为了可重用性,我想创建一个可以重复用于我的赋值的类(或一系列类)。我很难想象看起来会是什么样子,希望我的问题有道理......

假设类(s)将包含具有访问器和更改器的属性,以及返回各种对象的方法...单词,字母,掷骰子。如何组织这些类是否有经验法则?

每个班级最好保留一个对象吗?或者将所有对象分组到一个类中,因为它们都是“我需要分配的东西?”或按数据类型分组,因此所有数字对象都在一个类中,所有字符串在另一个类中?

我想我正在努力解决程序员在现实世界中如何决定如何在一个类或一系列类中对对象进行分组,以及我应该用来构建这种类型的一些问题和思考过程设计方案。

2 个答案:

答案 0 :(得分:4)

实际上,它因项目而异。没有任何保证'正确的方式'来分组任何东西;这一切都取决于你的需求。归结为可管理性,意味着您可以轻松地阅读和更新旧代码。如果你可以在一个“游戏”课程中包含所有游戏,那么这样做就没有错。但是,如果您的游戏中包含许多子和变量非常复杂,那么将它们全部移动到自己的类中会更容易管理。

话虽如此,有一些方法可以逻辑地分组项目。例如,如果你有许多用于操作的solo函数(char to string,string to int,html encode / decode等),你可以决定创建一个'helper functions'类来保存它们。同样,如果您的应用程序使用数据库连接,您可以创建一个类来保存和管理共享连接,以及获取查询结果和执行非查询的方法。

有些人试图将事情分解为多少。例如,它们可能创建一个类来创建和管理数据库连接,而不是使用上面提到的数据库核心。他们将创建另一个类,然后使用连接类来处理查询。并不是说这种方法不起作用,但是当项目分割得太小时,可能会很难管理。

如果不确切知道自己在做什么,就无法告诉你如何做到这一点。如果在每个项目中重复使用相同的方法,那么也许您可以将它们放在可以共享的位置。我找到最好的方法来找出最有效的方法就是尝试一下,看看它是如何响应的!

答案 1 :(得分:2)

我看到人们正在做的是分解他们的对象和方法,直到每个方法只是少数几个代码;如果任何方法超过了一页代码,他们会尝试进一步细分对象结构,以便缩短范围。

我个人不反对长方法,只要它们是可读的。我认为“单页限制”往往会产生太多的粒度,并且存在更多混淆而不是更少的混乱。但这似乎是当前的时尚。

只是报告我在野外看到的东西。