Questions tagged «object-oriented»

一种使系统能够建模为一组对象的方法论,这些对象可以模块化方式进行控制和操作

3
什么是面向对象的思维过程?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在过去的几个月中,我一直在与Zend的MVC实现一起研究OOP。通常,我对编程还很陌生,但是我强烈感到应该以“正确”的方式学习事物,这对我而言意味着要确保我理解为什么事情按照原样进行。即,我发现在学习如何做某事(任何事情,比如说音乐)时,学习如何做某事的最好方法是首先知道为什么要这样做。 无论如何,我一直在努力地理解如何开发自己的业务模型(例如,MVC的M),并且我决定这并不是因为我一般都不了解OOP,因为我已经研究了好几个几个月,我认为这些概念很难掌握。实际上,我发现我研究的示例非常直观。我认为,对我而言,问题在于将自己的问题转​​换为面向对象的解决方案的过程。书中的示例(到目前为止,我已经阅读过)太明显了,因此将问题转化为对象的过程并不是很困难。我认为我可能会缺少一个高级抽象过程。每个面向对象的解决方案都必须在最高级别上回答的某种步骤或问题列表。 如果您仅用五个步骤来描述这样的过程,它们将是什么,为什么?将任何问题转换为面向对象的解决方案最有效的过程是什么?

1
函数分解真的是反模式吗?
当我阅读您遇到的最糟糕的反模式时,我单击了这篇文章中的链接以登陆有关反模式的网站。 而http://sourcemaking.com/antipatterns/functional-decomposition页让我疑惑。 这个反模式有多严重,它到底是反模式吗?因为,尽管我现在主要进行OOP编程,但我仍然不愿意反对纯Java的所有OOP语言以及它们带来的设计实践。而且我猜想,我在编写代码时仍具有函数式编程的一些特征。 这就提出了一个问题,我是坚持OOP + Functional风格做错了吗,还是在行业中很常见,实际上还不是那么糟糕。 我从经验中知道的是,OOP +功能样式与纯OOP开发人员并不完全兼容。但是,与此同时,尽管OOP开发人员在OOP +功能开发方面遇到问题,但反驳的是,OOP解决方案往往设计过度,难以使用,并且根据我的经验,甚至一点也不容易,实际上介绍了一些非常严重的错误可以隐藏的盲点。 因此,即使我与同事讨论了这些主题,但我得出的结论是,所有方法实际上都不是完美的。而且我仍然有未解决的问题。 另一个线程中来自另一个帖子的链接也加剧了OOP问题。链接着眼于Java风格的OOP http://chaosinmotion.com/blog/?p=622 那么将函数式编程与OOP混合的一般态度是什么?开发人员应努力实现什么平衡?

3
保持MVC模型与数据库松散耦合?
我喜欢保持我的代码可测试性,并决定对我当前的MVC框架采用依赖注入策略,这无疑已被证明是确保松散耦合的代码,可测试性和模块化的好方法。 但是,由于与设计模式的掌握程度相去甚远,因此我很难找到一种使模型尽可能与数据库连接器类保持松散耦合的好方法。 这怎么办? 由于我没有随此问题提供任何物理代码,因此,我将不胜感激一些逻辑/代码示例或信息,这些示例或信息可为我提供一个理解上述问题的方向。

2
适用于UI编程的范例
这是一个更具体的问题(或者实际上是两个,但它们是相关的),来自OOP技术死亡的评论,有人说OOP不是GUI编程的正确范例。 在这里和这里阅读评论,我仍然感觉有很多东西要学习:哪种编程范例被认为是合适的,为什么它们比其他范例更好(也许用示例进行说明?) 我从标题和问题中删除了tk-example

8
OOP技术死亡[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我已经多次听说过面向方面的编程,主要是它是编程中的“下一代”技术,并且将“杀死” OOP。 这样对吗?OOP会死吗?或者这可能是什么原因?

5
您是否可以通过学习其他语言范例来提高编程技能?
如果是这样,您能告诉我学习新的范式是如何改变您解决编程问题的方法的,即使问题出在另一范式/语言/技术中? 如果您能以一种特定的方式告诉我,我将不胜感激,通过学习Y(即Scheme / Prolog / Lisp)可以提高您的X(即JAVA / C#/ C ++)编程技能。 另外,您建议什么范例最有助于成为一名优秀的程序员? 我的经验只是结构化的-OOP,命令式-过程性的,并且在某种程度上是模板元编程,但是我的目标不是学习另一种语言,而是学习解决问题的不同方法。 谢谢!

5
我们怎么知道偏爱合成而不是泛泛总是正确的选择?
无论对象是否物理存在,我们都可以选择以不同方式对其进行建模。在许多情况下,我们可以随意使用归纳或组合。但是,GoF的“偏爱组合胜于一般化”原则指导我们使用组合。因此,例如,当我们对一条线进行建模时,我们将创建一个包含两个类型为Point(组成)的PointA和PointB成员的类,而不是扩展Point(广义化)。这只是我们可以随意选择合成或继承进行建模的简化示例,尽管对象通常要复杂得多。 我们怎么知道这是正确的选择?至少很重要,因为如果做错了,可能要进行大量的重构?

6
如果有的话,在面向对象的系统中,应该在哪里选择类的C结构呢?
C和最有可能的许多其他语言提供了struct用于创建结构(或类似方式的东西)的关键字。从类的简化角度来看,它们是(至少在C语言中),但是没有多态性,继承,方法等。 考虑一下具有C样式结构的面向对象(或多范式)语言。您会在课堂上从哪里选择他们?现在,我不认为它们将与OOP一起使用,因为类似乎替代了它们的用途,但是我想知道在某些情况下,在面向对象的程序中,在某些情况下它们是否比类更受青睐。有这种情况吗?

4
用于编写国际象棋引擎的范式是什么?
如果要编写国际象棋游戏引擎,您将使用哪种编程范例(OOP,过程等),为什么要选择它?象棋引擎是指程序的一部分,它可以评估当前板并确定计算机的下一个动作。 我问是因为我认为写象棋引擎可能很有趣。然后我想到可以将其用作学习函数式编程的项目。然后我想到有些问题不太适合功能范式。然后我想到这可能是很好的讨论饲料。

4
为什么这么多的程序员绝对讨厌对象普遍性层?
流行是一种简单的技术,可基于二进制序列化和预写日志记录为内存中的对象模型提供ACID属性。它是这样的: 从快照开始。序列化对象模型并将其写入文件。 创建日记文件。对于对对象模型的每次调用,请序列化该调用及其参数。 当日志太大时,您将要关闭,或者它很方便,请执行检查点:编写新快照并截断日志。 要回滚或从崩溃或停电中恢复,请加载上一个快照并重新执行日志中记录的所有调用。 进行此工作所需的预防措施为: 不要让易变的对象引用转义或进入流行层。您需要某种代理或OID方案,就像在进行RPC一样。(这是一个常见的新手错误,被昵称为“ 洗礼问题 ”。) 调用可到达的所有逻辑都必须是完全确定性的,并且不得执行对业务逻辑有意义的I / O或OS调用。写入诊断日志可能没问题,但是获取系统时间或启动异步委托通常不行。这样一来,即使在不同的计算机上或在不同的时间还原日志,日志也可以相同地重放。(大多数流行代码提供备用时间调用以获取事务时间戳记。) 作者并发在日记解释中引入了歧义,因此被禁止。 是因为... 人们试图在一个不太适合*的项目中使用它之后,对他们产生了不良品味? 克劳斯·威斯特费尔德(Klaus Wuestefeld)的强烈倡导 使人们无法接受? 喜欢命令式编程模型的人不喜欢将I / O与计算分离,而宁愿将计算与I / O和线程调用交错? 流行层在概念上是如此简单,并且与它们所居住的框架的特性紧密相关,以至于它们通常是针对项目定制的,这使它们过于陌生/不合标准/充满风险? 保持直截了当是很困难的,您必须注意不要这样做? 新手的脑袋似乎在遇到与他们在学校学会编写的不是两层数据库驱动的应用程序相同的东西时爆炸吗?;) *在RAM中整个数据集拟合,你不需要作家的并发,并且你不需要做即席查询,报表,或导出到数据仓库。通过对SQLite的歉意,普遍性是对保存文件的一种改进,而不是Oracle的替代。
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.