OOP - 预定的断点和类的抽象

时间:2014-08-13 13:13:01

标签: class oop architecture relationship

当我喜欢模拟一些现实世界的东西时,我一直在思考这个问题,当类及其关系(关联,继承)变得越来越大而你无法将它们分开时。由此产生的问题是:它如何适合主存储器?

想象一下:我为个人建模,包含所有属性,例如。

  • 眼睛
  • 宠物(也许很有趣,但是......)
  • ...

每个属性都有自己的属性,例如

宠物

  • 外套
  • ...

外套

  • 头发
  • ...

头发

  • 颜色
  • 长度
  • ...

这个例子不是很干净,但这只是一个粗略的例子。

当然,并不总是直接链接,但有时候是类似集合的特殊类。但是,正确的方法是什么才能让底层计算机变得那么复杂(以便应用程序不会占用主内存的太多空间),而是让它完全在另一方面完成?

你的Steffen

2 个答案:

答案 0 :(得分:0)

我认为问题是,“为什么这需要留在记忆中”?总之,它没有。如果你试图以你所描述的方式模拟你在这个世界中遇到的一切,你最终会失去记忆。那么你需要存储信息。那时,你的记忆问题就消失了。 RAM现在可能很快,但是如果你用完了,那对你没有好处。

答案 1 :(得分:0)

如果问题是将其纳入内存,可以使用SQL对其进行建模。

问题是,您可能有几个人或几个共有财产的动物。例如,一个人的头发也具有与动物相同的子特性。由于这种关系属性(我假设你可以让狗和人都有棕色头发),你可以使用一个SQL表,其中一个表代表每个属性。

individual表将包含eyes, bodyType, job等列,这些列将是具有这些属性的表的外键。例如,job表包含salarypositioncompany等属性。

那些为个人与其他事物之间的一对一关系而努力。

对于多对一关系,您可以创建表格,其中个人是父级,它是外键,或表格建模关系本身。

friends表可能包含individual1individual2individual的外键和relationship列之类的关系,例如"friends" }或"lovers"

这允许您在硬盘内存存储中任意创建关系,这应该是相当充分的。根据您的应用程序,我相信您可以在SQLite中执行此操作并在内存中运行它,或者实现一个缓存层来表示像Redis这样的对象本身。

您可以在内存中创建相应的域对象,例如class Individualclass Job以及class Pet。您可以根据需要使用Data Mapper模式从SQL表中检索和提交,允许您以最少的RAM存储相当多的东西,其他所有东西都保存在硬盘上。

注意:也可以使用NoSQL,例如MongoDB,因为您可以将所有内容表达为文档,但是为了最小化数据重复(许多对象将具有类似的相关属性),我建议使用SQL作为可能性。