0

我一直在研究图像加载/缓存系统的许多试验/错误版本。作为 Delphi,我一直对面向对象编程感到满意。但是自从我开始实现一些多线程以来,我一直在想也许这个系统应该在程序的基础上工作。

为什么是因为这些进程将被踢到线程池中,执行图像的脏加载/保存,并释放自己。当我可以只使用过程/函数、记录、事件和图形时,我一直在尝试将这些线程进程包装在对象中。无需将其全部包装在一个类中,当它全部在一个单元内时……对吗?

现在我问的一个主要原因是因为这个系统是在单元的底部初始化的。使用 OmniThreadLibrary (OTL) 时,它已经有自己的初始化线程池,我什至不需要初始化我的线程池。

那么哪种方法更适合这个系统——包裹在一个对象中,或者只是在单元中运行,为什么?多线程的任何示例,而不是在对象内包装任何东西,而是在单元中?

4

3 回答 3

3

如果您有单身人士,则归结为个人喜好问题。以下是我的一些想法:

  • 如果您的代码库的其余部分使用 OOP,那么使用过程可能会使此代码看起来和感觉很奇怪。
  • 如果您使用 OOP,您可以使用属性、默认属性、数组属性。这可以使您的界面更有用。
  • 将你的功能放入一个类中会给你一个额外的命名空间级别。你可能会也可能不会欣赏这一点。
  • 如果您需要在全局范围内维护大量状态,那么您可能会将其包装成一条记录。您将拥有在此全局记录实例上运行的函数。在这一点上,使用对象语法编写的代码会更好地阅读。

底线是它并不重要,您必须选择最适合您的项目的东西。

于 2012-01-28T11:54:49.513 回答
1

OOP 并不意味着您需要为所有内容创建新对象。您也可以简单地从现有对象继承。(就像 OTL 的任何线程对象一样)

无论如何,我并不完全热衷于在任何地方引入 OO,但我在您的文本中看不到任何需要程序化的理由。

于 2012-01-28T10:45:09.223 回答
-1

无论如何,这不是一个是/否的决定。

我倾向于使用不属于类的函数和过程,当它们所做的工作与任何状态无关时,并且当它们打算单独使用和重用时,例如实用字符串函数的情况自己的公用事业单位。您可能会发现您需要“图像实用功能”并且它们不需要在一个类中。

如果你的函数只在后台线程的上下文中运行,那么它可能属于 TThread-descendant,如果它不被前台调用,它可以是私有的,使得 OOP 及其作用域隐藏能力非常强适合线程编程。

我的经验法则是:如果您无法以某种真正的方式使其成为独立的函数/过程,那么不要回到非 OOP 过程。

有些人非常热衷于 OOP,以至于他们避免使用非 OOP 函数和过程,并且喜欢为所有事物提供类包装器。我称之为“Java 代码气味”。但是没有理由避免 OOP。它只是一个工具。在有意义的地方使用它。

于 2012-01-28T13:02:36.973 回答