我有点新的节目。我正在使用Objective-C和iPhone应用程序Dev。我在围绕OOP思维方式时遇到了一些麻烦。在你坐下来开始之前,有没有人有任何提示或技巧来思考或可视化编程过程?
回答
这就是所谓的设计。你需要做的是编写用例并确定你的需求(搜索有关功能和非功能需求的信息)。如果你想要可视化你的代码,那么你应该阅读关于UML。
当面向对象的设计处理的最好的一个方法,你可以在小积木型的部分步骤从键盘和问题的事情了。这些对象中的每一个都具有描述它们的属性和它们可以执行的动作,它们将包含自足对象的概念以及完成工作所需的内容。一旦构建模块就位,您就会从更高层次上思考这些对象如何与其他对象交互以解决手头的问题。有些人觉得这个工具是UML,但它是一种偏好。
在阅读有关面向对象的设计和编程时,您会遇到两个概念:耦合和内聚。前者是关于每个阶级如何相互依赖的问题,后者是关于一个关注那些责任感的阶级的课程。
没有得到更深层次的话题,我拿那些两个概念,因为它帮助了我很多东西放在这些方面。第一步是清楚你的应用程序必须做什么。考虑一下“快乐之路”以及出现问题时会发生什么,例如用户没有填写正确的信息。
现在开始设计您的课程,这些课程是如何相关的以及每个课程提供给系统的整体内容。这个设计阶段通常表示为一组UML图表,但如果您不熟悉UML,则可以使用一些书面段落。如果你看到一个班正在做不属于那里的事情,那就改变你的设计。在纸上改变它是便宜的。
不要开始思考如何到实现某些功能,只是还没有。例如,如果您的应用程序将使用GPS硬件,请不要担心如何访问它。假设部分已解决。开始考虑你将如何处理数据?哪个班级会收到这些数据?谁来处理它?
你所描述的似乎提出了一个关于软件设计而不是编程的问题。为此,我发现学习设计范例的最佳方式,特别是早期,就是要消耗好设计。如果您想了解OO设计范例,请编写使用高质量OO框架的软件。 Java和.Net库都是例子。因为我怀疑你实际上对Objective C的适当设计方法更感兴趣,所以消费苹果公司提供的方法来了解事情是如何完成的,以及为什么这样做。
最终,通过练习和经验,您将开始设计一个直觉,捕捉更高层次的概念,如依赖关系,耦合和凝聚力。然后,阅读一些抽象设计原则并将其应用到您自己的代码中可能非常有价值。看看你六个月前写的东西。你喜欢什么?你不喜欢什么?你将做点什么不同的?
这主要是开发任何职业技能的行为:
执行=>批判=>一个蒸馏 教训=>应用课=>重复。
我认为最关键的一点是,你不会早早陷入太深,当你陷入分析瘫痪时,学习不会发生。相反,尝试(当然,使用良好的源代码库)。如果它爆炸了,你可以在你开始的地方找到一个快照,这样你就可以应用这些课程并再次尝试。
最终,在面向对象的世界里,我建议几个核心的最佳做法,让您开始:
避免循环依赖。如果你有两个相互依赖的对象,你可能做错了什么。 (也有例外,当然,但你不应该使用在年初的水平了这种技术。)
隔离从合同的执行。在你的脑海里维持两个不同的概念,在一个对象的“什么”和“如何”之间进行。我不知道Objective C,所以我不知道你的语言公开了什么特别的抽象。在C++中,您可以使用纯虚拟抽象基类来指定合约。 C#用
interface
这样做。如果您能够将“什么”(合同)与“如何”(实施)分开来推断,那么您可以更轻松地创建功能强大的高质量软件(以我的经验)。
我真的很喜欢从数据流的角度考虑所有的应用程序。先画出什么样的屏幕是好的,然后说出“哪些数据将成为哪里”,这有助于将数据分组为不同的可能对象和层次结构。
然后,当你知道什么样的数据将是什么屏幕,你可以把它绑控件或UI元素,以及通过什么机制,这些元素会得到的数据计算出。这有助于找出一个对象管理层(MVC的“控制”部分)来帮助路由和获取数据。
我发现,在我的块风格的应用程序抽出主力车型(最好在像白板)确实有帮助。在绘制模型,制定出它们如何与彼此,你会开始认识到孔您的应用程序(你有没有考虑过的车型),并填写他们。
你绝对不必在开始编码之前有一个“完整的”应用程序地图,但草稿真的有帮助。一旦你有一张地图与你一起工作,你会发现创建控制器的功能和视图也变得更容易(因为它显而易见的地方在哪里)。
我假设你在某种MVC框架的工作,但是这将与其他风格正常工作。
想想对象的责任。
而且阅读Design Patterns书来熟悉一些行之有效的抽象。
想象一副扑克牌。每个chard都有属性。你原来的甲板可能有红色的背部。你可以创建另一个具有所有相同属性的牌组,但相反,它有蓝色背。每张卡片都是不同的,但它们都有共同的特征。
呵呵?那是什么意思? – Tim 2010-02-16 00:57:40
学习大多数事情和编程中的大多数事情的最好方法就是使用一些你渴望做的事情的例子。所以,既然你用iphone和objective-c标记了这个,我会推荐使用Cocoa(Touch)API并且了解它们是如何设计的。从Apple和其他人的大量示例代码开始。一旦你使用了一些框架,你不仅知道如何让某些事情发挥作用,而且你已经感受到了常见的模式和陷阱。阅读书籍和教程也很好,但没有办法解决事实,即开始时总是很困难。但也很有趣。
嘿,非常感谢回复。这个网站的热情让我开始感觉更好。再次感谢伟大的建议。 – JoshD 2010-02-16 04:14:50
- 1. 执行顺序方法的最佳方法是什么?
- 2. matlab'fitctree'的CART算法考虑了属性顺序为什么?
- 3. 什么是刷新JSF页面编程的最佳方法
- 4. 为Windows编程MIDI的最佳方法是什么?
- 5. 存储排序顺序/优先级的最佳方法是什么?
- 6. 构建Silverlight应用程序的最佳参考是什么?
- 7. 什么是优化钛应用程序的最佳方法?
- 8. 调试Shoes应用程序的最佳方法是什么?
- 9. 制作android应用程序的最佳方法是什么?
- 10. 什么是创建移动应用程序的最佳方法
- 11. GWT应用程序样式的最佳方法是什么?
- 12. 什么是最好的办法......考虑性能
- 13. 什么应该考虑这个IF循环的最佳实践?
- 14. 编写概念验证(PoC)应用程序的最佳方法是什么?
- 15. 评论的最佳方法是什么?
- 16. 什么是以编程方式使用Gmail的最佳方式?
- 17. 控制返回反射属性值的顺序的最佳方法是什么?
- 18. PHP:顺序输出的最佳方法?
- 19. 允许用户定义表格顺序的最佳方法是什么?
- 20. 程序的最佳端口是什么?
- 21. 排序部分排序列表的最佳方法是什么?
- 22. 什么是避免Application.Current.Properties的硬编码键的最佳方法?
- 23. 为什么fuzzywuzzy不考虑字符顺序
- 24. 什么是最佳搜索方法?
- 25. 什么是以编程方式删除大型数据库的最佳方法
- 26. 在排序地图时优先考虑某些字符串的最佳方法
- 27. 什么是部署后编写日志的Android最佳方法?
- 28. 编组char函数参数的最佳方法是什么?
- 29. 提高ASP.NET/C#编译速度的最佳方法是什么?
- 30. 用Perl编写gunzip文件的最佳方法是什么?
你在OOP上读过哪些书?你的背景是什么?你做了什么?你在阅读什么教程? – 2010-02-15 21:25:51
可能重复:http://stackoverflow.com/questions/1551/how-to-think-in-oo – 2010-02-15 21:26:31
提示:练习。 – 2010-02-15 21:36:15