我试图理解php或actionscript proect的面向对象编程的核心。据我所知,我们将有一个Main类来控制项目的不同元素。例如,photoslider类,音乐控制类......等等。我在Main类中创建了这些类的实例,并使用它们的方法或属性来控制这些对象。
我已经研究了许多OOP文章,但大多数只讨论了继承,封装...等我不确定我是否对此如此,如果有人可以解释更多,我将不胜感激。谢谢!
答案 0 :(得分:3)
同样的问题,当我开始职业生涯的时候,我一直在问,但随着职业生涯的进步,我理解了面向对象。
但是对于oop中非常基本的起点。
1-考虑对象只是尝试将您的日常家居用品(您的笔记本电脑,您的ipad,您的手机,您的宠物)联系起来
第2步 -
尝试将(您的电视和遥控器)等对象联系起来,这样可以让您了解对象应该如何相互关联的基本概念。
第3步 -
尝试隐藏事物的构成方式,以创建一个完整的功能,如你的身体组成(心脏,肺和许多其他器官)
第4步 -
尝试考虑对象的生命周期(例如汽车enigne在Car外部不太有用,所以如果car是一个对象,那么这个对象必须包含一个引擎,当实际的汽车对象破坏引擎时也会被破坏)
第5步 -
尝试了解一个多态性(就像一个ScrewDriver可以根据你的需要采取形状,然后映射到你的对象,如果你使用c#而不是试图利用ToString()方法覆盖)
第6步 -
尝试为你的现实生活对象创造一个现实生活的边界(就像你的房子;你通过各种方式保护你的房子)
这是最初的学习..阅读尽可能多的文字,并尝试通过自己的例子学习
在最后; oop是一门艺术品,试图掩饰它。
答案 1 :(得分:2)
我的主要建议是将对象视为“智能serfs”:其中每一个都有内存(数据成员)和逻辑(成员函数)。 根据我的经验,OOP的最大优势在于您对设计发展的控制:如果您的软件远程有用,它将会发生变化,OOP为您提供了可持续变更的工具。特别是:
还有其他原则,但我认为这些是必须真正理解才能在OOP中取得成功的原则。
答案 2 :(得分:2)
在我开始使用Ruby编程之前,我不确定我是否理解过OOP,但我认为我现在已经理解它了。
曾经向我解释过汽车的组成部分并且帮助了很多......
有 Car (类)这样的东西。
my_car和girlfriends_car都是 Car 的实例。
my_car存在称为轮胎的这些东西。
my_car有四个轮胎的实例 - tyre1,tyre2,tyre3,tyre4
所以我有两个班 - 汽车,轮胎 我有每个班级的多个实例。
Car类有一个名为Car.colour的属性。
my_car.colour是蓝色
girlfriends_car是粉红色的
对我而言,关键在于理解类方法和实例方法之间的区别。
实例方法
实例方法类似于my_car.paint_green。调用Car.paint_green没有任何意义。油漆什么车绿色?不。它必须是girlfriend_car.wrap_around_tree,因为实例方法必须应用于该类的实例。
课程方法
说我想建一辆车? my_new_car = Car.build
我调用了一个Class方法,因为在实例上调用它是没有意义的吗? my_car.build? my_car已经建成。
<强>结论强>
如果您正在努力理解OOP,那么您应该确保理解Class本身与该Class实例之间的区别。此外,您应该尝试理解类方法和实例方法之间的区别。我建议学习一些Ruby或Python,这样你就可以更全面地理解OOP,而不会增加使用非OOP语言编写OOP的复杂性。
真正的OOP语言会带来很大的好处。在Ruby中,一切是一个类。甚至没有(Nil)是一个班级。字符串是类。数字是类,每个类都是Object类的后代,所以你可以做一些巧妙的事情,比如从Object继承instance_methods方法,所以String.instance_methods会告诉你字符串的所有实例方法。
希望有所帮助!
凯文。
答案 3 :(得分:1)
好像你在询问OOP的程序或“怎么样”,而不是概念。
对于how-tos,你大多是正确的:我不是特别熟悉PHP或ActionScript,但对于我们这些在.NET中的人来说,你的程序会有一些可以控制的入口点,然后它将调用不正常的对象,函数,方法或其他任何东西 - 通常将控制权转移到其他代码片段 - 来执行你已经决定的任何事情。
在伪代码中,它可能看起来像:
EntryPoint
Initialize (instanciate) a Person
Validate the Person's current properties
Perform some kind of update and/or calculation
provide result to user
Exit
如果您正在寻找的是“为什么”,那么您已经找到了正确的位置。封装,继承等术语的定义将阐明为什么我们做OOP。
答案 4 :(得分:1)
主要是将属于某些区域的代码分组在一起。在非OOP语言中,您经常遇到的问题是,您无法分辨哪个函数用于/修改哪些结构或函数往往会执行太多松散相关的事情。一种解决方法是引入严格的命名方案(例如,使用与其关联的结构名称启动每个函数名称)。使用OOP,每个函数都与数据结构(对象)相关联,因此可以更轻松地组织代码。如果您的代码变得更大/任务数量更大,继承开始产生影响。
好的例子是表示形状和返回其中心的函数的结构。在非OOP中,该函数必须区分每个结构。如果添加新形状,则会出现问题。您必须教您的功能如何计算该形状的中心。现在想象一下,你还有恢复环绕和区域的功能......继承解决了这个问题。
请注意,您可以使用非OOP语言进行OOP编程(例如参见C中的glib / gtk +),但是“真正的”OOP语言使得OOP风格的代码变得更容易并且通常不易出错。另一方面,您可能会误用几乎所有OOP语言来编写纯粹的命令式代码:-)并且没有语言可以阻止编写愚蠢和低效的代码,但这是另一个故事。
答案 5 :(得分:1)
不确定你正在寻找什么样的答案,但我认为1000名新毕业的comp sci学生中有10人会同意:没有多少书籍和理论可以替代实践。换句话说,我可以详细解释封装,多态,继承,但它无法教你如何有效地使用OO。
没有人能告诉你如何编程。随着时间的推移,你会发现,无论你工作多少个不同的项目,你都会一遍又一遍地解决同样的问题。你可能会经常问自己:
关于这个主题有很多书,如果你需要一些建议,他们可以给你一个良好的开端。但是相信我,时间和实践都是你需要的,而且不会太长 - 在一个真实的项目上可能是6或9个月 - 当OO习语成为第二天性时。