我一直致力于自己的一些项目,并没有任何可观的曝光。目前我使用简单的方法来开发具有可忽略的OO方法的小应用程序,例如使用函数的多态性为构造函数创建一个公共类,但我真的不能想到如何使用OOP实现整个项目逻辑。
我知道什么是接口,抽象类,密封类和其他oops概念以及非常清晰的图片。但问题是我何时以及如何在应有的地方大量实施OOP。
我是否需要研究实时应用程序及其案例研究,如果是这样,请向我推荐一些我可以阅读它们的网站或书籍/电子书,并且能够实现它们。
目前我在编程时觉得自己不完整。我有效地实现了数据库及其大部分组件,但在尝试使用OOP时却是一个小孩。
我已经阅读了很多例子,试图让人们理解像形状一样的OOP,例如汽车。所有这些。 他们不清楚概念,但还不足以在一些实时项目中实施
答案 0 :(得分:14)
学习应用OOP的第一步是将常用的功能和数据收集到类中。一开始你不会做得很好,但你会变得更好。关于回归基础的recent article in Code Magazine表达了这一点。
开始尝试在解决方案中创建(将成为真正的对象)。 (这里有一个fancy name,但它也非常基本。)这不是制作方便,主题相关函数的实用类。尝试安排事物,以便在调用该对象上的方法时,对象中维护的数据会保存参数。想想在社区中作为真实个体事物存在的对象。个性化他们。安排一些事情,这样你在使用他们的功能时就不会担心课程中发生了什么。
我首先不担心所有这些设计模式。最好先练习你学到的基本OOP概念。关注这些模式会导致很多人跳过真正考虑OOP的理念,而是试图将他们的情况塞进预先打包的计划中。阅读有关娱乐和创意的“设计模式”。之后,你会真正研究它们并尝试专门实现它们中的一些。
简而言之,您必须跳入并开始应用您学到的知识。在制作一些好的设计之前,你需要做一些糟糕的设计,所以不要担心。
根据提问者的评论进行编辑:
我认为下一步可能是专注于您的类之间的关系。例如,在逻辑中使用Customer对象后,您应该花费No Effort获取相关的Order对象。创建一个返回oCustomer.Orders
的属性List<Order>
。 (这是一个c#示例。)在此属性中获取所有客户的订单,将它们放在列表对象中,以便在再次调用该属性时将其保存在私有变量中,并返回该列表对象。如果您已经这样做了,那么请寻找下一个最难尝试的新事物。也许您需要经常找到客户首次订购的日期。然后,创建一个继承自Collection<order>
的Orders类,以替换您的基本List<order>
,并添加属性FirstOrder。然后,您可以var FirstOrderDate = oCustomer.Orders.FirstOrder.OrderDate
。
继续尝试下一个最难的新事物。继承并添加成员。使用子类创建基类。覆盖基类成员。使用并获得自定义集合。
从您正在使用的对象模型中学习。当您看到直观并且易于使用的内容时,请执行此操作!在我的职业生涯早期,我不得不广泛使用MS-word对象模型,这种模型直观且简单。当我创建自己的库时,我试图复制那种感觉;结果很好。
最终研究 patterns 。尽管我建议你不要被他们过度敬畏,但他们是一个很好的想法来源,最重要的是尝试的东西。 (了解常见“模式”的名称也有利于通信目的。)例如,当您看到plug-in model时,接口的概念确实有意义。
答案 1 :(得分:4)
这是一个很难的问题 - 一旦你拥有构建真实应用程序,不得不改变它们,被迫重新评估原始设计等等的经验,优秀的OO设计才会成为第二天性。大多数例子完全无足轻重,这个问题更加复杂。
我能建议的最好的事情是如果你搜索设计模式的实现。这些并不总是提供非平庸/琐碎的例子,但当你在其他人的软件中看到它时,它将有助于认识到OO原则的应用。您可以做的另一件事是尝试自己创建一系列常见模式的真实实现。然后,当您编写生产应用程序时,希望您能够建立连接并应用相关的模式/原理/设计技术。
简而言之,没有替代经验。
对于真实代码,我会开始在codeplex之类的某个地方查看一些您感兴趣的项目。
Here's the classic list of GOF design patterns
以下是常见模式的几个示例:
答案 2 :(得分:3)
首先,我只是建议您使用OOP而不是OOPS。 OOP是一种编程范式,因此“系统”部分并非真正必要(但当然这只是一种观点)。此外,大多数人认为OOP更容易,所以它会让你的问题更容易理解。最后,因为OOPS使面向对象编程看起来像一个错误(呵呵......抱歉,糟糕的笑话)。当然,这只是我的意见,当然我可能是错的。
无论如何,开展业务。我认为你遇到了问题,因为你在规划阶段的开始就过度思考了。不要再考虑每个对象的方法和属性了。不要考虑它如何有用或如何使用它。忘记计算机以及如何实现它。只需列出任何想到的对象。你提到过制作数据库应用程序。您可以从要保存的数据开始。例如,如果要创建学生数据库,则可能需要创建 Student 对象。您还需要一种连接到数据库的方法,因此您可能希望将对象用作数据库的连接。当然,这两个对象只是建议;您是否希望使用它们取决于您。
制作一长串对象后,开始查看您制作的对象并列出它们的作用。仅仅因为一个对象没有做任何事情,并不意味着你应该从列表中删除它。以“学生”对象为例。该对象可以由getter和setter组成,但它是学生的模型,因此在数据库系统中非常有用。如果您了解C编程语言,则可以将“Student”对象视为 struct 。完成此列表后,尝试组合看起来非常相似的对象。删除没有任何事情要做的对象,被动地(如存储数据)或主动(如连接数据库或获取用户输入)。你应该有你的对象,以及它们的大多数属性和方法。剩下要做的就是实现这些对象并为功能添加更多内容。
为了进一步理解这一点,我建议阅读实体关系图。这应该有助于你的设计。因为我相信你是在思考过度的东西,我建议你不要先阅读模式和GOF,因为它可能会让你更加困惑。当你超越这个障碍时它会很好地为你服务,但是现在,它只会为你的问题添加更多层次。
答案 3 :(得分:1)
我相信你所寻找的是面向对象的设计模式。通常许多最好的OOP原则都是以标准设计模式实现的,可以在许多类型的项目中使用。
许多开发人员在查看问题时会尝试将其纳入标准设计模式,正确使用时会加快开发速度!
我建议阅读面向对象的设计模式以及如何应用它们。一个很好的例子是在Factory方法模式中使用抽象类或接口。
答案 4 :(得分:1)
首先,我会推荐这本关于设计模式的经典书籍。 http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&s=books&qid=1261679601&sr=8-1
但最终,真正重要的是在大型现实项目上的工作经验!当你开始工作,几年后,一切都会变得更加清晰。
答案 5 :(得分:1)
点击给我的东西的一刻是肯特贝克读“测试驱动的开发,例如”。本书的第一部分是Beck逐步设计一个功能的演练。我发现它非常有用,因为你看到这个过程是以一种有机的方式发生的 - 从很少的课程开始,这些课程随着时间的推移而发展 我认为从模式开始不一定是个好主意。设计模式很棒,但我发现它们有用的原因只有在首先在现实项目中做错之后才会变得明显,并且对OO中有效和无效的内容有所了解。