代码之家  ›  专栏  ›  技术社区  ›  AJ.

数据库员问:面向对象设计理论?

  •  4
  • AJ.  · 技术社区  · 17 年前

    我在设计数据库方面工作了很长一段时间,最近我也在C工作。OO对我来说是有意义的,但我觉得我对OO设计的深层理论没有很好的基础。

    在数据库领域,关于如何设计数据库结构有很多理论,主要的概念是规范化。归一化直接控制数据库的结构,在某种程度上决定了如何在数据库中安排实体。

    在如何设计面向对象程序的结构之后,是否有类似的概念?

    我所追求的是一个或多个基本的理论原则,它们自然地引导开发人员进入“正确”的设计,以解决给定的问题。

    我在哪里可以找到更多信息?
    有没有我应该读的作品?

    更新:

    感谢大家的回答。 我读到的似乎是说没有“面向对象设计的伟大理论”,但是有一堆重要的原则——它们在很大程度上以设计模式为例。

    再次感谢您的回答:)

    14 回复  |  直到 10 年前
        1
  •  11
  •   S.Lott    17 年前

    注意一些设计模式文献。

    有几种广泛的类定义。持久对象(类似于关系表中的行)和集合(类似于表本身)的类是一回事。

    一些“ Gang of Four “设计模式更适用于活动的应用程序对象,而不适用于持久对象。当你在像 抽象工厂 ,将缺少OO设计的一些关键点,因为它适用于持久对象。

    对象导师 What is Object-Oriented Design? 佩奇有MICH,你真的需要知道如何从关系设计过渡到OO设计。

    归一化(btw)并不是一个总适用于关系数据库的总体设计原则。当您有更新事务时应用规范化,以防止更新异常。这是一种黑客行为,因为关系数据库是被动的;要么你必须添加处理(比如类中的方法),要么你必须通过一系列规则(规范化)。在数据仓库世界中,更新很少(或不存在),标准规范化规则没有那么重要。

    因此,对象数据模型没有“像这样规范化”。

    在OO设计中,设计持久对象的最重要规则可能是 Single Responsibility Principle .

    如果你设计的类对现实世界中的对象有很好的逼真度, 您以一种非常集中的方式为这些类分配职责,您将对对象模型感到满意。您将能够将其映射到相对较少复杂性的关系数据库。

    事实证明,当你从责任的角度来看事情时,你会发现2nf和3nf规则适合合理的责任分配。唯一的钥匙仍然重要。派生数据成为方法函数的责任,而不是持久属性。

        2
  •  6
  •   Corey Trager    17 年前

    “设计模式”这本书是你的下一步。
    http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612

    但是,你不必对每件事都使用OO方法。别信奉宗教。如果一个更为程序化的方法感觉更为严格,那么就这样做。刚接触OO的人往往会迟到一段时间。

        3
  •  4
  •   toolkit    17 年前

    我想 Agile Software Development, Principles, Patterns, and Practices 相当不错。

    它对列出的OO原则进行了大量深入的讨论 here :

    • 面向对象设计原理与依赖管理
    • SRP“单一责任原则”
    • 开放-关闭原则
    • LSP_
    • 依赖倒置原则
    • isp_
    • rep_
    • 共同结算原则
    • CRP_
    • ADP_
    • 稳定依赖原则
    • SAP_
        4
  •  2
  •   Jason Kester    17 年前

    如果您习惯于构建规范化的数据库,那么面向对象的设计应该会自然而然地出现在您的面前。您的类结构最终会看起来非常像您的数据结构,明显的例外是关联表变成了列表,查找表变成了类中的枚举。

    总之,我想说的是,在关系数据库中有一个背景的OO设计中,你会比向另一个方向发展要好得多。

        5
  •  2
  •   ConcernedOfTunbridgeWells    17 年前

    如果你真的想和O-O打交道,那就去玩吧 Smalltalk . ST是 纯净的 哦,语言,而且在你的脸上。一旦你克服了范式障碍,你就学会了“哦”,因为没有它,你就不能真正地做小型谈话。这就是我第一次学习OO的方式。

        6
  •  1
  •   Community Mohan Dere    8 年前

    检查的结果 this . 从每个问题中学习。

        7
  •  1
  •   Galwegian    17 年前

    我真的很喜欢 Head First Design Patterns ,这就是 非常 平易近人,优秀 Object oriented Design Heuristics 作者:Arthur J.Riel

        8
  •  1
  •   spinodal    17 年前

    This site lists 101 title ……设计模式、重构和其他…看看……这将是一个很好的起点…

        9
  •  1
  •   Gishu    17 年前

    大卫·韦斯特的《物体思考》。一本有趣的书……
    不过,你来自黑暗面……根据这本书;)数据库思维一直是OO程序员的诅咒。它们是一个光谱的两端。例如

    • 数据库思维认为数据属性比其他所有属性都重要。规范化并根据它们如何适应DB模式或ER图创建类型。OO思维基于行为和协作创建类型,并不认为数据属性很重要。
    • 数据库来自科学人士,他们重视形式化和方法胜过一切。OO来自于那些使用启发式方法和经验法则的人,他们重视个体性和社会互动,而这是一个艰难而快速的过程。

    作为一个COBOL程序员,即使在使用OO语言之后,也可以编写COBOL程序。在Java的第一部分中查看任何类似于思维的书籍,它总是详细地阐述OO(学徒)的宗旨。在适当的时候用目标思维(熟练工)跟进。主人。

        10
  •  1
  •   Treb    17 年前

    通过记住真实世界中的物体来模拟你的物体。

    我们目前正在开发机器自动化软件。其中一台机器有两个装载口,用于装载原料,而其他机器只有一个装载口。到目前为止,在所有模块中,我们都将端口信息(当前设置、当前分配给它的批号等)作为表示机器的类中的成员。

    我们决定创建一个保存端口信息的新类,并向这个machinexy类添加两个loadport成员。如果我们以前考虑过的话,我们会为所有这些单端口机器做同样的事情…

        11
  •  0
  •   Ady    17 年前

    您应该看看UML,它是一个提供给OOD的完整过程。

    我建议你买一本书(或几本),因为这个理论非常庞大,大多数人会选择最适合手头项目的技术。

        12
  •  0
  •   sajidnizami    17 年前

    开始阅读马丁·福勒的设计风格。:)

    它们是OOP最实际的用途。

        13
  •  0
  •   Will Dieterich    17 年前

    我猜你的意思是在数据库世界里。

    存储对象的面向对象数据库从未真正捕获到对象,因此您当前正在寻找将对象映射到关系数据库的方法。ORM或对象关系映射是用于描述执行此映射的软件的术语。理想情况下,这将为您提供两个方面的最佳选择,开发人员可以在其中与对象进行交互,并且在数据库中,所有内容都存储在关系表中,在关系表中可以进行标准调优。

        14
  •  0
  •   lurscher    14 年前

    在DBA俚语中:面向对象设计只不过是安全操作接口后面适当规范化的数据,安全意味着,查看操作,而不是直接查看数据。