Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 如何设计面向对象的项目?_Architecture_Oop_Class Design - Fatal编程技术网

Architecture 如何设计面向对象的项目?

Architecture 如何设计面向对象的项目?,architecture,oop,class-design,Architecture,Oop,Class Design,我正在(为我)进行一个大型项目,该项目将有许多类,并且需要扩展,但我不确定如何规划我的程序以及这些类需要如何交互 几个学期前,我参加了一门OOD课程,从中学到了很多东西;比如编写UML,将需求文档翻译成对象和类。我们也学了序列图,但不知怎么的,我错过了讲座或其他什么,它们并没有真正吸引我 在以前的项目中,我曾尝试过使用从课程中学到的方法,但通常最终得到的代码是,只要我能说“是的,这看起来像我所想的那样”,我就不想挖掘这些垃圾来添加新功能 我有一份史蒂夫·麦康奈尔的《代码完成》的副本,在这里和其他

我正在(为我)进行一个大型项目,该项目将有许多类,并且需要扩展,但我不确定如何规划我的程序以及这些类需要如何交互

几个学期前,我参加了一门OOD课程,从中学到了很多东西;比如编写UML,将需求文档翻译成对象和类。我们也学了序列图,但不知怎么的,我错过了讲座或其他什么,它们并没有真正吸引我

在以前的项目中,我曾尝试过使用从课程中学到的方法,但通常最终得到的代码是,只要我能说“是的,这看起来像我所想的那样”,我就不想挖掘这些垃圾来添加新功能

我有一份史蒂夫·麦康奈尔的《代码完成》的副本,在这里和其他地方,我不断听到这本书令人惊叹。我读了关于设计的一章,似乎没有说出我想要的信息。我知道他说这不是一个简单的过程,它主要基于启发式,但我似乎不能把他的所有信息都应用到我的项目中

那么在高级设计阶段(在开始编程之前),您会做些什么来确定您需要的类(特别是那些不基于任何“真实世界对象”的类)以及它们之间如何交互


我特别感兴趣的是你使用的方法是什么?您遵循的流程是什么,通常会产生一个好的、干净的设计,将密切代表最终产品?

这是经常重复但完全正确的-了解您的数据

对于OOP,您的类应该描述重要的信息片段及其交互方式

如果你有一个能够很好地描述数据的行为和生命周期的心智模型,那么你就可以轻松地规划你的类


这只是:确切地知道你正在尝试做什么的一个扩展。

我建议你使用ActiveWriter,也建议你学习ActiveWriter,并培养对对象的良好理解。推荐的书也是一个不错的资源

发件人:

BlueJ是一个集成开发 Java编程环境 语言,主要为 教育目的,而且 适用于小型软件 发展

此外,它使用UML,对我来说,它是一个很好的资源,可以理解关于建模对象的一些事情

是一种建模实体和关系的工具,它还生成代码,并且易于进行更改。这将节省您的时间,对于敏捷开发非常合适



(来源:)

老实说,回头看看流程图和序列图是一个不错的步骤。有很多好的网站告诉你怎么做。当我想把一个程序分成几个类时,我发现这是非常宝贵的,因为我确切地知道该程序需要输入、计算和输出什么,并且每一步都可以分解成程序的一部分。

正如在

中回答的那样,当我有机会时,我通常使用我称之为“三次迭代规则”

在第一次迭代(或启动)中,我根据模型对象、算法和预期(真的预期,而不是可能预期)的未来方向设计应用程序的总体布局。我不写设计文档,但如果我必须协调多人,当然需要一个过程的草图,以及对依赖关系的分析和所需时间的猜测。如果像我一样,您喜欢更敏捷的方法,请尽量将此阶段控制在最低限度。在某些情况下,需要一个强大的设计阶段,特别是当程序逻辑的所有内容都是已知和真实的,并且如果您计划在代码中的功能之间进行大量交互时。在这种情况下,用例或用户故事提供了一个很好的高级概念,特别是对于GUI应用程序。对于命令行应用程序,尤其是库,请尝试编写“程序故事”,在其中针对必须开发的库编写代码,并检查其外观。完成后,这些程序将成为库的功能测试

在第一次迭代之后,您将更好地了解事物是如何相互作用的,了解细节和粗糙点,并通过贴上胶带补丁解决问题。您已经准备好利用这些经验来改进、清理、润色、划分太大的内容、合并太零碎的内容、定义和使用设计模式、分析性能瓶颈和重要的安全问题。通常,所有这些更改都会对您编写的单元测试产生巨大影响,但不会对功能测试产生影响

当您完成第二次迭代时,您将有一个小宝石,经过良好的测试、良好的文档记录和良好的设计。现在,您已经拥有了执行第三次迭代(extend)的经验和代码。您将添加新功能和用例以改进应用程序。您将发现粗糙点,并最终进入第四次迭代,类似于第二次迭代。冲洗并重复

这是我对软件设计的一般方法。它类似于螺旋式设计(spiraldesign),具有短时间、三个月的迭代和敏捷开发的元素,允许您了解问题并了解您的软件及其应用领域。当然,这是一个可伸缩性的问题,因此,如果应用程序太大,涉及数百名开发人员,事情就比这复杂一些,但最终我想想法总是一样的,划分和划分

综上所述:

  • 在迭代一中,您可以尝到它的味道,并学习它
  • 在第二次迭代中,您将清理产品并为将来做好准备
  • 在迭代3中,您将添加新特性并了解更多信息
  • 转到2

  • 我用于初始设计的步骤(获得类图)