什么是面向对象的思维过程?[关闭]


9

在过去的几个月中,我一直在与Zend的MVC实现一起研究OOP。通常,我对编程还很陌生,但是我强烈感到应该以“正确”的方式学习事物,这对我而言意味着要确保我理解为什么事情按照原样进行。即,我发现在学习如何做某事(任何事情,比如说音乐)时,学习如何做某事的最好方法是首先知道为什么要这样做。

无论如何,我一直在努力地理解如何开发自己的业务模型(例如,MVC的M),并且我决定这并不是因为我一般都不了解OOP,因为我已经研究了好几个几个月,我认为这些概念很难掌握。实际上,我发现我研究的示例非常直观。我认为,对我而言,问题在于将自己的问题转​​换为面向对象的解决方案的过程。书中的示例(到目前为止,我已经阅读过)太明显了,因此将问题转化为对象的过程并不是很困难。我认为我可能会缺少一个高级抽象过程。每个面向对象的解决方案都必须在最高级别上回答的某种步骤或问题列表。

如果您仅用五个步骤来描述这样的过程,它们将是什么,为什么?将任何问题转换为面向对象的解决方案最有效的过程是什么?


1
OOP总是不是所有这些……
Job

在学习OOP时,您是否了解过有关设计模式的信息
Zoredache

1
我建议您在创建模型时遇到困难时,阅读Eric Evan关于域驱动设计的书。另请参见@Simon Stellings答案。这本书非常详细地介绍了这个过程。
猎鹰

@Zoredache我遇到了设计模式的概念,以及一些例子,例如单例,工厂和MVC本身(在Zend的实现中,它们也是前端控制器)。但是,可以这么说,这是我的下一步。我拿起了马丁·福勒(Martin Fowler)关于企业模式的书,到目前为止,我只读了一部分介绍。您会推荐一个清晰易读的简介吗?

@Falcon我前几天有一个关于php / mysql和日期格式的问题,我会选择你的答案,但这只是一条评论,它的价值。

Answers:


10

找到合适的模型并不总是那么简单。这是其中之一,需要比普通知识更多的经验。但是,以下简单食谱可能会帮助您克服最初的心理障碍。

它最初是由雅培(Abbott)本文中描述的,通常被称为“雅培的文本分析”。

  1. 编写纯文本规范。
  2. 确定班级:名词是很好的候选人。
  3. 查找属性:形容词/副词是很好的候选者。
  4. 查找操作:动词是很好的候选者。
  5. 查找类之间的关联
  6. 细化。

例:

名词动词adjectives被标记。

包含 书籍期刊。这可能有几个副本给定的。有些short-term 贷款只。任何其他图书馆成员均可 借用其他图书三周。 图书馆成员通常一次最多可以借六 件物品,但是工作人员一次可以 最多 12 件物品。只有职员 才能借阅日记

第一次分析迭代将产生:

类:

  • 图书馆
  • 书籍,日记
  • 复制
  • 贷款
  • 图书馆会员
  • 项目
  • 工作人员

从这里开始,您可以考虑哪个类需要哪些属性和方法来实现该行为,然后逐步完善该模型。


1
好答案。除了雅培的论文外,我还建议Eric Evan撰写有关域驱动设计的书。它教授如何为项目创建通用语言以及如何从中提取强大的模型。
猎鹰

我之所以会回答这个问题,是因为我对语言学进行了一点点学习,并且无需付出太多努力便对我有很好的直觉意义,但是由于相同的原因,我对此感到恐惧,因为我发现太多类比会使我误入歧途。

@Falcon +1,推荐一本带有康定斯基封面的书。

@ tbj1982:你是完全正确的。这是一种简单的启发式方法,应牢记此结果。这不是万灵药,但它可能是一个有用的启动器。
blubb 2011年

4

我认为采用TDD方法是自然而有效的:

  1. 写下特定要求(给出,何时,然后)
  2. 将每个需求(最重要的一个放在首位)转换为单元测试。
  3. 为了通过#2中编写的测试,编写最少的代码。
  4. 通过测试后,根据SOLIDD设计原则重构代码。
  5. 在#4之后,请确保您的代码仍然通过所有编写的测试。
  6. 重复2-5。

通过此过程,您可以通过声音设计逐渐生成可测试的代码。您可能一开始认为没有必要进行写作测试,但是该活动实际上可以帮助您构建声音体系结构。


3

这是我在c ++代码中使用的步骤:

  1. 决定班级名称
  2. 决定构造函数参数和数据成员。
  3. 决定成员函数的名称和原型
  4. 使它独立于其他类
  5. 设计已经完成,其他一切都只是实现。

(1)的原因是它定义了属于该类的功能的范围。(2)的原因是它定义了类与外界的通信方式。(3)的原因是它定义了如何选择每种情况下所需的类功能。(4)的原因是它允许在许多不同情况下使用类。(5)的原因是它定义了设计和实现之间的边界。


+1命名。令人惊讶的是,仅添加名称就能组织思想过程,因为您隐含了对“现实世界”的所有了解。
Mark Brackett13年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.