问题似乎很简单,答案也是如此。我是最近开始工作的开发人员。到目前为止,我在OOP上学习了很少的学士和硕士课程。然而,我对OOP概念并不自信和自信。最近,我正在寻找就业机会,我发现许多雇主都非常想知道我对OOP概念有多大信心。
我对OOP概念有很强的理论知识。虽然这种理论知识正在帮助我清理面试和找到工作,但是当涉及到实施时,我变得愚蠢。如果你问我什么是反射,那么你将得到我的完美答案,但如果有人问我为什么以及在哪里使用它,那么我就会摸不着头脑。
现在我真的想知道当我没有机会在我的项目中实现所有或大部分OO概念时我应该做些什么。
此外,我真的对所有最新的开发工具和编程环境感到满意,许多程序员都在忙于使用已经构建的组件,框架和库,这可能会造成优秀架构师的真空。
我想成为一名成功的建筑师,为此我认为我必须在这方面非常强大。
然后我想到了学习NHibernate,你将完全处理对象。
现在我需要的是一些有助于我掌握所有或大部分OOP概念的宝贵提示。
答案 0 :(得分:2)
听起来你错过了真正的编程经验。没有什么能取代它。
去工作,锻炼,阅读,向经验丰富的同事学习。最终你会得到它。
至于非常先进的工具,你是对的。他们生产的代码猴数量不断增加。如果你现在看到它,你就是一个良好的开端。坚持走的路。优秀的建筑师将永远是需要和重视的。
答案 1 :(得分:1)
您想要开始研究设计模式。了解使用OOP的时间,方式和原因比了解OOP本身更有价值。
框架很棒,我不会因人们使用它们而造成错误。但是,在这个领域仍然有很多优秀建筑师的空间。利用程序员知道如何使用它们的差距,但不是为什么或何时使用它们。框架很快成为许多开发人员寻找钉子的锤子。开源是你的朋友 - 深入了解源代码并从内到外学习它们,这样你才能真正理解正在做什么以及为什么。
答案 2 :(得分:1)
根据我的经验,您从学校和“应用程序”方面学习实际经验的“概念”方面。在工作上没有任何替代品;无论我有多少教育,它永远不等于我在实际工作中学到的东西。这就是为什么如果你能够在大学实习也是一个好主意。
至于OOP本身的价值,我发现它在大型项目和团队项目中最有用。重点是将解决方案分解为可行的“概念”元素,这使得团队成员之间的相互通信变得更加容易,并使解决方案可视化。可视化是OOP的另一大帮助。
有关OOP IMHO的一点需要注意的是入门级开发人员倾向于过度使用大量的OOP概念。并非一切都需要继承。设计模式非常有用,但也不应过度应用。看看你的问题,首先尝试自己想一个解决方案,然后将它与已知模式进行比较,看看它们是否提供了更好的答案。简单不能被高估。
此外,使用UML编辑器和Mind Mappers等工具(例如XMind)有助于进入正确的思维框架。
检查并查看您周围是否有任何编程小组;我发现这是一个很好的方式来认识你可以与之交谈的人,而OOP的另一个优点就是更容易与他人交流编程思想。
答案 3 :(得分:1)
您的下一站应该是研究设计模式(Applied OO)。有关介绍性文字,请查看Headfirst Design Patterns。
答案 4 :(得分:0)
有趣的问题。在某种程度上,我已经成长为对象编程,随着各种框架的发展,我已经发展了,我以前从未考虑过如此多的复杂框架已经存在的景观。他们的存在倾向于抑制那种程度的笨拙和绊脚石,并且通常会错误地导致更深入的理解。
我的感觉是,严肃的发展仍然是一个好的设计问题,并不只是填补空白,嘿IOC框架告诉我该怎么做,编程。
您可以通过研究您使用的框架的“方式”来增强您的理论知识。但我想你需要的是实践经验,不能评论你工作地点对你开放的东西,但如果你不能在那里做到,你可能需要做一些“爱好者”或开源开发。
我建议的一件事是尝试参与设计讨论,尝试让经验丰富的开发人员审核您的设计。运气好的话,他们甚至可以说:“嘿,你为什么不在那里使用反射......”
答案 5 :(得分:-1)
这是'思考'这很重要,在OOP中,人们需要改变思维 在oop环境中进行编程/开发或使用OOP时 范例。
我自己多次面对这个问题:为什么要使用OOPL或者 我可以在Procedural中开发软件时面向对象的编程语言 编程语言?为什么要使用OOP方法呢?它有什么好处 其他非oop不是什么?
我从许多来源阅读(有关该主题的大量书籍和文章!) 追查真正的原因,达到根本的基本思想或原则 因为它作为软件工程的范例存在。我想我发现了什么 很简单,这就是为什么我建议改变思维方式。
如果我们环顾四周,就能看到周围的事物和我们互动的事物 直接或间接地我们用名字识别他们,我们给了他们。 无论事物是什么,它们都存在于真实平面或概念平面中 我们知道'他们认识到'他们并与他们互动。而且重要的是我们 '名称'他们。这个命名很重要,因为要与“事物”相互作用。和 对于那种互动的知识,我们需要'姓名'。
你今天吃了什么?巧克力和咖啡。所以你有互动'同 巧克力和咖啡。现在巧克力和咖啡是我们的食物(人类) 已经给出了名字和我们认可的名字。而且,我们,在我们的 我们与他们互动的知识 - 让我们记录下来 与巧克力和咖啡的互动,知道他们的名字 与...互动。互动是我在这里使用的一般术语。实际上在我们的情况下,在 例如,您已执行了“操作”。 - 吃。通过' eat'行动你 与巧克力和咖啡互动。现在这样想,你,巧克力, 咖啡是现实世界中的实体,通过互动的行动来实现。 你可以说一个'过程'。
Alice已注册的课程是什么?计算机科学。 从某种意义上说,计算机科学在世界上并没有真正的存在 存在或树或房子,或咖啡杯或其他有形的东西'存在。它 是一个主题,概念性事物'。计算机科学的研究有一些 '主题'被研究(或通过我们的心理与之互动) 教师/过程)例如离散数学,算法的设计和分析, 数据结构等它们一起被命名为“计算机”的主题 科学&#39 ;.现在爱丽丝正在学习' (互动)计算机科学。发生了什么 这里?好吧,如果我们现在这么想,并说Alice是一个东西, 一个对象 。 计算机科学是一个东西, 一个对象 。
咖啡是一个对象。巧克力是一个对象。你又是一个对象。我们发现 对象与对象进行交互。太棒了!有人可能会惊呼!那就是 现实世界的场景!实际上它是通过达成的概括 的 抽象 即可。
它只是 - 表面层面至少 - 命名 意即可。或者您可以说 '有意义的命名' 。这是一个过程。这很自然 对我们来说很明显,我们只是忽视它。
在OOP中,我们只需要将自己带入这种形式的思考过程, 知道并提醒自己"物体与物体互动"。哦! 不仅仅是想到这一点。你必须记住一个对象 可以与自己互动!想想你,你在做什么 思维?是啊!还有一件非常重要的事情我会来 在限定时间内。虽然我觉得很明显。但是在适当的时候。好。我们是什么 真的用电脑吗?其实我们解决问题。特别是那些 我们在脑海中尝试做或解决的问题。从广义上讲,我们是 模拟机器中的心理过程,由我们设计。记住AI是 在现实中仍然是一个遥远的事情,并且有科学和经验的争论 关于计算机是否可以变得智能化的哲学思考。另一个 无论计算机是否能真正模拟真实的心理,它的方式 处理。但那不是我们带到这里的。别管它!
如果我们想通过计算设备解决现实生活中的问题,我们 我想尽可能密切地代表现实生活 在OOP'现实生活建模中出现了这个术语。可以看出,在解决 现实生活中的问题,无论是发射航天飞机,还是保持客户 和处理的产品销售信息我们做抽象和做 计算,这是另一种形式的抽象过程,反过来我们处理 精神上的对象,在我们的脑海里。所以我们代表现实生活中的对象(概念性 抽象中的对象,如数字),并用抽象处理它们 过程,如数学。在计算机中我们也想代表 对象,也喜欢以对象的形式表示进程。所以在这里 来自面向对象,可以说是软件工程。现在来了 那个'到期时间'处理面向对象的另一个方面。
回到我们的例子,你吃了什么?饮食是一种行为,是一种形式 相互作用。这可以被认为是再次可以想到的过程 作为一个对象,就像一个过程被认为并表示为'功能'要么 '程序'或者'程序'在非OOPL中。在OOP中我们可以表示(抽象) 吃作为一个体现为对象的过程。同样,学习是一个对象。在 同样的思路'和'处理'两者都被认为是对象 并在虚拟平面中表示,它是计算机存储器。因此 Alice-一个对象 - 研究 - 一个对象 - 计算机科学 - 一个对象在OOP中是有效的 就我们的论点而言。
我们可以在这里写一段代码吗?我们试试吧。
class Alice {
private String name;
private String address;
private String stdID;
private Course courseOfStudy;
... other codes...
public void studies(Course sub) {
courseOfStudy=sub;
}
...
public Course getStudyCourse() {
return courseOfStudy;
}
}
class Course {
codes....
}
这种方式在OOP(这里是Java代码)中可以用来编写代码。我刚才 给出一个简单的编码。人们可以提出更好的编码和设计 取决于要编写的软件的方法。在OOP设计非常 重要。所以在考虑我在开始时提到的改变应该 被带进来。这很重要!对于OOPL,我更喜欢这种方式 或OOAD,"一切都是对象"。
那就是我想说的。你可能喜欢或不喜欢它,但评论和 说出你的想法。