Questions tagged «object-oriented»

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

3
面向对象编程:为什么要“面向对象”?
我大部分时间都在学习游戏编程学位。这不是计算机科学学位,因此避开了许多理论,以建立实用的档案袋以及我认为的JIT学习,这显然在游戏行业中更为重要。第一个主题是“面向对象编程简介”。 直到我了解了不同的编程范例(我从https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms获得此列表)后,该短语才使我感到困扰: 势在必行 功能性 程序 结构化的 事件驱动 面向对象 陈述式 基于自动机 我知道这并不是一个详尽无遗的清单,并不是所有这些概念都是平等的,而且它们中的大多数甚至都不是排他性的,但是我不明白为什么其中大多数只用一个词-必要;功能 声明-但是当我们谈论使用对象编程中,我们必须澄清,我们面向围绕这些对象。我们不能只使用对象吗?我们就不能有对象吗?他们为什么要把我们定位为我们的指导明星? 在这里(https://en.wikipedia.org/wiki/Object-iented_programming),无处使用“定向”一词作为自己的术语。仅解释“对象”。 另外,出于实际原因,我可以看到使用事件驱动的原因,因为事件编程已经是您在运行会议时要做的事情,而自动机编程听起来就像您正在建立机器人生产线,因此,在此处添加其他澄清词会有所帮助。 是什么使“对象编程”作为一个短语不足以描述我们在编程中使用对象时所做的事情? 显然,从我的语气来看,我不太喜欢“面向”一词。这让我想起了我当法院记者的经历,是在律师使用“与……有关”这一短语作为一种口头记号之后,听听律师的话。没什么意思 这只是他们在尝试思考接下来要说的内容时常使用的术语。但是,我并不是要提倡改变语言,我只是在问为什么是这样。如果有人知道为什么纯粹出于历史,遗迹原因而被人们以这种方式知道,那就是答案。如果我决定浪费时间主张改变语言,那将是弹药。 另一方面,如果实际上有一种有用的原因,为什么某种语言或一段代码必须指向对象,而将所有其他方向都排除在外,而不是仅仅将它们作为工具放在工具带中,那我真的会有兴趣了解它。我喜欢学习有用的东西。

5
是否有“实用”类值得关注?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我有时会创建“ Util”类,这些类主要用于保存似乎并不真正属于其他地方的方法和值。但是每次创建这些类之一时,我都会想:“哦,哦,我以后会后悔的……”,因为我在某处读到不好。 但另一方面,似乎有两个令人信服的案例(至少对我而言): 包中多个类中使用的实现机密 提供有用的功能来扩展类,而不会使其界面混乱 我要毁灭了吗?你说的话 !!我应该重构吗?

5
确保类的唯一实例的方法?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我正在寻找不同的方法来确保给定类的每个实例都是唯一可识别的实例。 例如,我有一个Name带field 的课name。一旦我有一个初始化为John Smith 的Name对象,name我就不想再实例化一个Name名称为John Smith的对象,或者如果实例化发生了,我希望将对原始对象的引用传递回去比一个新的对象。 我知道这样做的一种方法是让一个静态工厂保存Map所有当前的Name对象,并且该工厂在将引用返回给a之前检查是否存在以John Smith为名称的对象。Name宾语。 我可以想到的另一种方法是在Name类中具有一个静态Map,并且当传入的for name值已经在另一个对象中使用时,在调用构造函数时引发异常,但是我知道抛出异常在构造函数中通常是个坏主意。 还有其他方法可以做到这一点吗?

1
如何在继承层次结构中验证Liskov替换原理?
灵感来自这个答案: 里氏替换原则要求 是 前提条件不能在子类型中得到加强。 子条件不能弱化后置条件。 超类型的不变量必须保留在子类型中。 历史记录约束(“历史记录规则”)。只能通过对象的方法(封装)将其视为可修改的对象。由于子类型可能会引入父类型中不存在的方法,因此这些方法的引入可能会导致子类型中状态不允许在父类型中发生变化。历史记录约束禁止这样做。 我希望有人能发布违反这4点的类层次结构,以及如何相应地解决它们。 我正在寻找出于教育目的的详细说明,以了解如何识别层次结构中的四个点以及解决该问题的最佳方法。 注意: 我希望发布代码示例供人们使用,但是问题本身是关于如何识别错误的层次结构的:)

6
有关如何传播面向对象实践的技巧
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我为一家拥有250名开发人员的中型公司工作。不幸的是,许多应用程序都陷入了过程性思维之中,一些团队不断交付大型事务脚本应用程序,而实际上该应用程序包含丰富的逻辑。他们还无法管理设计依赖性,最终得到的服务依赖于另一批大量的服务(“泥浆大球”的一个清晰示例)。 我的问题是:您能否建议如何传播这种知识? 我知道问题的表面在于这些应用程序的体系结构和设计不佳。另一个问题是,有些开发人员反对编写任何类型的测试。 我正在做一些改变这种情况的事情(但是我要么失败,要么改变太小了) 关于设计原理(SOLID,简洁代码等)的运行演示。 关于TDD和BDD的研讨会。 指导团队(这包括使用声纳,findbug,jdepend和其他工具)。 IDE和重构讲座。 我将来打算做的几件事(但我担心它们可能不好) 组成一个由OO传播家组成的团队,他们在不同的团队中传播OO的思维方式(这些人每隔几个月就要更换团队)。 运行设计审查会议,以批评设计并提出改进建议(即使由于时间限制而未完成改进,我认为这可能会很有用) 。 我在我的教练团队中发现的一件事是,一旦我离开他们,他们就会恢复到原来的做法。我知道我不会花很多时间陪伴他们,通常只有一个月。因此,无论我在做什么,它都不会粘住。 对不起,这个问题让我无奈,但写这个的替代方法是打我的头,直到我晕倒。

9
如何拆分紧密联系的大型课程?
我有一些巨大的类,它们包含超过2k行代码(并且还在不断增长),如果可能的话,我希望对其进行重构,以实现更加轻巧和简洁的设计。 它之所以如此之大,主要是因为这些类处理大多数方法都需要访问的一组映射,并且方法之间相互联系紧密。 我将举一个非常具体的示例:我有一个名为的类Server来处理传入消息。它有类似的方法joinChatroom,searchUsers,sendPrivateMessage等所有这些方法操纵映射,如users,chatrooms,servers,... 如果我可以有一个类来处理有关Chatrooms的消息,另一个可以处理所有有关Users的消息,等等,这也许会很好,但是这里的主要问题是我需要在大多数方法中使用所有地图。因此,Server由于它们都依赖于这些通用映射,并且方法之间相互联系紧密,因此它们现在都属于该类。 我需要创建一个类Chatrooms,但要引用其他每个对象。类的用户再次引用所有其他对象,等等。 我觉得我做错了什么。

10
面向对象真的会影响算法性能吗?
面向对象已经帮助我实现了许多算法。但是,面向对象的语言有时会引导您采用“直接”方法,并且我怀疑这种方法是否总是一件好事。 OO在快速轻松地编码算法方面确实很有帮助。但是对于基于性能的软件(即程序执行速度有多快),此OOP会对它不利吗? 例如,首先将图节点存储在数据结构中似乎“直截了当”,但是如果Node对象包含许多属性和方法,这会导致算法变慢吗? 换句话说,在许多不同对象之间的许多引用,或者使用许多类中的许多方法,是否可能导致“繁重的”实现?

3
关于如何减少“经理”类使用的提示/建议?
有时,我听说程序设计中有太多“管理器”类是代码的味道,并增加了不必要的复杂性。对我而言,人们想使用管理器类从对他们有意义的上下文中使用对象来控制和控制对象是有道理的,但是弄清楚如何使解决方案在没有它们的情况下有效。 真的应该尽可能避免经理班吗?另外,对于应删除这些管理人员的一般/常见情况,我应该阅读哪些文章/论文,以了解如何实施替代方法?

3
接口作为行为的抽象基类?
我需要为我的C#项目设计一个类层次结构。基本上,类的功能类似于WinForms类,因此让我们以WinForms工具包为例。(但是,我不能使用WinForms或WPF。) 每个类都需要提供一些核心属性和功能。尺寸,位置,颜色,可见性(对/错),绘制方法等。 我需要设计建议我使用了一个带有抽象基类和接口的设计,这些基类和接口不是真正的类型,而更像是行为。这是一个好的设计吗?如果没有,那将是一个更好的设计。 代码如下: abstract class Control { public int Width { get; set; } public int Height { get; set; } public int BackColor { get; set; } public int X { get; set; } public int Y { get; set; } public int BorderWidth { get; set; } …

6
受保护方法的真实场景
今天,我注意到我基本上从不使用protectedC ++代码中的方法,因为我很少感到需要调用父级的非公共方法。我确实在模板方法模式中使用了Java中的protected,但是由于您可以在C ++中覆盖私有方法,因此我也不需要protected。 那么,在哪些实际场景中我想protected在C ++代码中使用方法? (请注意,我一般不太喜欢实现继承,这可能会解释很多...)

8
如果不参考实际的物理对象,如何教OO?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我记得在某处读过,OO背后的原始概念是找到一种更好的体系结构,以一种保护数据状态的方式来处理多个系统之间的数据消息传递。现在这可能是一个很糟糕的措辞,但是让我想知道是否存在一种没有对象(类比,自行车,汽车,人等)的面向对象的教学方法,而是侧重于消息传递方面。如果您有文章,链接,书籍等,那将很有帮助。

3
我们应该在结构中添加构造函数吗?
我们经常使用c ++结构来定义数据结构,而不是使用类,类可以是带有成员方法的完整模块。从现在开始,我们知道它们都是相同的(松散地说)。 我们经常使用/处理结构作为仅数据实体的事实产生了这样的冲动,即我们也不要添加默认构造函数。但是构造函数总是很棒的,它们使事情变得更简单并有助于消除错误。 如果将默认构造函数添加到我的数据结构,会不会感到烦恼? 如果满足其他条件,实现默认构造函数还会使结构Non-POD(普通旧数据类型)吗? 为了正确理解,考虑一个简单的示例,但实际上结构会大得多。 struct method { char name[32]; float temperature; int duration; }; 每次我创建一个方法时,我都会担心(至少可以说)是否忘记设置一些值。想象一下,我忘记设置temperature该方法并将其应用于系统,该系统现在是一个随机的高值,并且会导致混乱。或者我忘了设置duration,现在该方法将其自身应用到未知的高持续时间。 为什么我应该负责每次都初始化对象,而不是执行保证它的构造函数?

2
面向对象与基于矢量的编程
我陷入了面向对象和基于矢量的设计之间。我喜欢对象赋予整个建筑的能力,结构和安全性。但是同时,速度对我来说非常重要,并且在数组中具有简单的float变量确实对基于矢量的语言/库(例如Matlab或Python中的numpy)有所帮助。 这是我写来说明我的观点的一段代码 问题:添加拖车波动率数字。如果x和y是两个波动率数字,则波动率的总和为(x ^ 2 + y ^ 2)^ 0.5(假设有一定的数学条件,但在这里并不重要)。 我想非常快地执行此操作,同时我需要确保人们不要以错误的方式(x + y)添加波动率。两者都很重要。 基于面向对象的设计将是这样的: from datetime import datetime from pandas import * class Volatility: def __init__(self,value): self.value = value def __str__(self): return "Volatility: "+ str(self.value) def __add__(self,other): return Volatility(pow(self.value*self.value + other.value*other.value, 0.5)) (此外:对于那些不熟悉Python的人来说,__add__它只是一个覆盖+运算符的函数) 假设我添加了两个波动率列表 n = 1000000 vs1 = Series(map(lambda …

6
如何仅实现一部分接口
在OOP中进行开发时,有时接口/协定是由您不能更改的库提供的。我们将此接口称为J。 现在,您有了一个类A的对象,该对象使用实现此接口的对象。内部仅需要接口定义的一小部分。我在项目期间创建了一些对象类(让我们称其中一个类型为D),因此在接口J内实现所有操作都会产生开销。 我想在接口J中实现功能的一个子集,但是到目前为止,我的解决方案并不令我满意: 实现J的各个方面,然后抛出“ notImplementedExceptions”会误告知用户我的对象:看来我类型D的对象确实符合接口J,但它们与我的对象的其他使用者(接受实现接口的对象) J)不能依靠我对象的完整性。 尽管接口J与我自己的接口完全兼容,但是实现新定义的接口会禁止我使用仅实现接口J的对象。 让我的自定义对象实现接口J会产生很大的开销,因为它们不需要所有这些功能。 当我能够更改接口J时,我将创建一个具有接口J功能子集的“超级接口” K,并使接口J从接口K继承。但是我不能更改接口J。 什么是此问题的面向对象的解决方案?最好的解决方案是否仍在实现“ Just”接口J?还是有OOP方式可以在不更改接口的情况下“超类化”接口?

6
在哪个顺序定义吸气剂和吸气剂?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 订单中定义吸气剂和吸气剂是否有最佳实践?似乎有两种做法: 吸气剂/设定剂对 首先是吸气剂,然后是二传手(或者反之) 为了说明不同之处,这里是一个getter / setter对的Java示例: public class Foo { private int var1, var2, var3; public int getVar1() { return var1; } public void setVar1(int var1) { this.var1 = var1; } public int getVar2() { return var2; } public void setVar2(int var2) { this.var2 = var2; } public …

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.