我正在Java开发一个应用程序,该应用程序管理银行贷款数据库。我在应用程序开发方面有一些调查,我有一个可能很愚蠢的问题,但是自从我学习开发语言并且从未得到令人信服的答案以来,我一直在谈论这件事。

在我的程序中,我有许多类和方法,我用作通用工具。例如,我有一个用于excel写作的课程,一个用于文件阅读/写作的类,以各种方式操纵字符串的类,以我的默认格式显示对话框/消息的类,一个用于特定数学功能的类(例如数学),等等

我无法想象那些班级是真实的东西 (就像类/对象的意思一样),但是它们作为工具箱而想到。这就是为什么我让它们静态的原因。这样我写了

excelWriter.create("C:\temp.xls");
excelWriter.append("mydata1\tmydata2\nmydata3\tmydata4");
excelWriter.close();

而不是

ExcelWriter myExcelWriter;
myExcelWriter.create("C:\temp.xls");
myExcelWriter.append("mydata1\tmydata2\nmydata3\tmydata4");
myExcelWriter.close();

这更适合我的原因是我想到一个工具箱,就像我总是在我身边一样,我不需要每次都想使用它来创建一个对象。 C ++的数学不是相同的情况和静态的吗?我已经与许多同事和编码朋友讨论了它,其中大多数人说我必须创建一个对象,因为这就是面向对象的编程的全部内容。

我了解他们在另一种情况下说的话:在业余时间,我一直在使用vb.net开发纸牌游戏。在那里,我上了游戏,玩家,甲板,手。我在每个班级的许多地方制作的对象,因为我有很多游戏,玩家,甲板,手。它们可以被认为是真实的事物。当您开发游戏时,它特别不同。 游戏的开发更加面向对象,因为它包含真实的东西.

我想知道,这里有些错误吗?我想听听关于OOP的深入的反对。我还想听听什么静态课程的用途。

谢谢

有帮助吗?

解决方案

不,在这种情况下,至少在我看来,只有静态成员功能的类是不正确的。第二个ExcelWriter班级会更好。无论如何,您在哪里存储Excel输出的文件句柄?我希望不是静态变量吗?这是该课程数据成员的主要候选人。

在这种情况下,尝试将对象视为表示您正在编写的输出流。将来,您可能需要同时打开两个输出流,“工具箱”类是不可能的。

有时,仅包含静态成员函数的类可作为分组相关功能的方式,但这很少见,通常意味着可以在包含数据的对象周围重新设计类。例如,静态成员函数可以作为具有类别构造函数的一种方式。

其他提示

静态类和功能仅应用于中性函数和计算。只有当您只需要得到某事的答案时。

当您想到自己在做什么和使用字面上使用时,OOP设计非常容易。例如,在您的情况下,您使用了Excel Writer的“ myexcelwriter”一词。因此,如果它是一个对象。这意味着它需要一个实例。

始终只描述自己对自己的工作,如果您的工作可以由名词描述,那是一个对象。如果是形容词,则是属性或类成员。如果是动词,那是一种方法。如果是副词,则是传递给该函数的属性或变量。

静态类是包含独立函数的工具,并且只需对输入变量进行一些计算。 (再次喜欢 Math, ,这只是计算2个数字)

类中的静态功能是在该类的对象上使用的工具,这些工具不需要实例的状态工作。 (喜欢 Int.Parse())

OOP更接近真正的语言IMO,这就是为什么它更直观地以这种方式进行编程。

课程不 代表现实世界的事物。如果您对它们的使用使您的程序更容易理解,那么您正在做对。

也就是说,一类应同时具有数据和方法。您的Excel和File类对我来说似乎不错,但要警惕只有方法并且没有数据的类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top