Questions tagged «oop»

面向对象的编程是一种使用“对象”的编程范式:由数据字段和方法及其相互作用组成的数据结构。

10
JavaScript扩展类
我有一个基类: function Monster() { this.health = 100; } Monster.prototype.growl = function() { console.log("Grr!"); } 我想扩展并创建另一个类: function Monkey extends Monster() { this.bananaCount = 5; } Monkey.prototype.eatBanana { this.bananaCount--; this.health++; //Accessing variable from parent class monster this.growl(); //Accessing function from parent class monster } 我已经做了大量的研究,并且似乎有许多复杂的解决方案可以在JavaScript中进行。在JS中完成此工作的最简单,最可靠的方法是什么?


11
C ++中的动态分派和后期绑定之间有什么区别?
我最近在Wikipedia上阅读了有关动态调度的内容,但无法理解C ++中动态调度和后期绑定之间的区别。 什么时候使用每种机制? 维基百科的确切报价: 动态分派不同于后期绑定(也称为动态绑定)。在选择操作的上下文中,绑定是指将名称与操作相关联的过程。调度是指在您决定名称所指的是哪个操作之后,为该操作选择一个实现。使用动态调度,可以在编译时将名称绑定到多态操作,但是直到运行时才选择实现(这是C ++中动态调度的工作方式)。但是,后期绑定确实意味着动态分派,因为在选择名称所指代的操作之前,您无法选择要选择的多态操作的实现。
76 c++  oop 

8
如何使用变量String定义类名来创建JavaScript Object?
这就是我想要做的-这是伪代码,不起作用。有谁知道如何真正做到这一点: // Define the class MyClass = Class.extend({}); // Store the class name in a string var classNameString = 'MyClass'; // Instantiate the object using the class name string var myObject = new classNameString();
76 javascript  oop 

30
关系数据库中的空值可以吗?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2个月前关闭。 改善这个问题 有一种流派认为在关系数据库中不应该允许空值。也就是说,表的属性(列)不应允许空值。来自软件开发背景,我真的不明白这一点。似乎如果null在属性的上下文内有效,则应允许该值。这在Java中非常普遍,在Java中对象引用通常为null。没有丰富的数据库经验,我想知道我是否在这里缺少什么。

17
自动实现的getter和setter与公共领域
我看到很多C#类的示例代码可以做到这一点: public class Point { public int x { get; set; } public int y { get; set; } } 或者,在较旧的代码中,具有明确的私有后备值且没有新的自动实现属性的情况相同: public class Point { private int _x; private int _y; public int x { get { return _x; } set { _x = value; } } public int y …
76 c#  oop  properties  field 

4
如何在Python中从类对象创建新实例
我需要在Python中动态创建类的实例。基本上,我使用load_module和inspect模块将类导入并将其加载到类对象中,但是我不知道如何创建该类对象的实例。 请帮忙!
76 python  oop 


10
FP和OO是否正交?
我一次又一次听到,我正在尝试理解和验证FP和OO是正交的。 首先,两个概念正交是什么意思? FP尽可能地鼓励不变性和纯净性,而OO似乎是为状态和突变而构建的–命令命令编程的组织性略微?我意识到对象可以是不可变的,但是OO似乎暗示着我的状态/变化。 他们似乎是相反的。这如何影响它们的正交性? 像Scala这样的语言可以轻松实现OO和FP,这是否会影响这两种方法的正交性?

4
为什么要使用“ using”关键字来访问我的基类方法?
我编写了以下代码,以解释我的问题。如果我注释第11行(使用关键字“ using”),则编译器不会编译该文件并显示此错误:invalid conversion from 'char' to 'const char*'。void action(char)在Parent类中似乎看不到该类的方法Son。 为什么编译器以这种方式运行?还是我做错了什么? class Parent { public: virtual void action( const char how ){ this->action( &how ); } virtual void action( const char * how ) = 0; }; class Son : public Parent { public: using Parent::action; // Why should i write …
75 c++  oop  inheritance  using 

6
什么是Mixins(概念)
我试图让我了解Mixin概念,但是我似乎无法理解它的含义。我看到的是,这是一种通过使用继承来扩展类功能的方法。我读过人们将它们称为“抽象子类”。谁能解释为什么? 如果您能根据以下示例解释您的答案,将不胜感激(摘自我的演讲幻灯片之一):
75 c++  oop  templates  mixins 

4
从打字稿中的超类调用重写的方法
当我从超类构造函数中调用重写的方法时,我无法正确获取子类属性的值。 例 class A { constructor() { this.MyvirtualMethod(); } protected MyvirtualMethod(): void { } } class B extends A { private testString: string = "Test String"; public MyvirtualMethod(): void { alert(this.testString); // This becomes undefined } } 我想知道如何正确覆盖打字稿中的函数。

8
多少抽象太多了?
在面向对象的程序中:抽象太多了?多少才对? 我一直都是个小人物。我了解高级封装和抽象背后的概念,但总是本能地认为添加太多内容只会使程序感到困惑。 我总是尝试拍摄一些抽象的东西,而没有留下任何空白的类或层。如有疑问,我将尝试在现有层中添加一些内容,而不是在层次结构中添加新层。 但是,最近我遇到了更多高度抽象的系统。一种系统,其中可能需要在层次结构中稍后进行表示的所有内容都预先放置了。这导致了很多空层,一开始似乎是不好的设计。但是,经过深思熟虑,我逐渐意识到,保留那些空的层将使您有更多的空间可以在将来使用而无需进行大量重构。它使您拥有了在旧功能之上添加新功能的更大能力,而无需进行几乎相同的调整旧功能。 这样做的两个风险似乎是您可能弄错了您需要的图层。在这种情况下,仍然需要进行大量的重构以扩展代码,并且仍然会有大量的未使用层。但是,取决于您花费多少时间来进行初始抽象,将其搞砸的机会以及如果正确就可以在以后节省的时间-仍然值得尝试。 我能想到的另一个风险是过度执行该风险而永远不需要所有额外层的风险。但这真的很糟糕吗?额外的类层真的那么贵吗,如果不使用它们,会造成很大的损失吗?这里最大的开销和损失将是时间,这些时间是与各个层一起预先损失的。但是,当人们可以使用抽象代码而不是更底层的代码时,大部分时间仍可以节省下来。 那么什么时候太多呢?在什么时候空层和多余的“可能需要”抽象变得过大?多少太少?最好的地方在哪里? 您在职业生涯中是否找到可靠的经验法则来帮助您判断所需的抽象量?

29
您如何在大海捞针中找到针?
当以面向对象的方式实现大海捞针的搜索时,您实际上有三种选择: 1. needle.find(haystack) 2. haystack.find(needle) 3. searcher.find(needle, haystack) 你更喜欢哪个?为什么? 我知道有些人喜欢第二种选择,因为它避免引入第三个对象。但是,至少在您的目标是为“真实世界”建模的过程中,我不禁会觉得第三种方法在概念上更“正确”。 您认为在什么情况下引入助手对象是合理的,例如本例中的搜索器,何时应避免使用它们?

13
抽象和封装有何不同?
我正在准备面试,并决定重新整理我的OOP概念。有数百篇文章可用,但似乎每个文章对它们的描述都不相同。 有人说 抽象是“识别具有系统变异的通用模式的过程;抽象表示通用模式,并提供了一种指定使用哪种变异的方法”(Richard Gabriel)。 并通过抽象类实现。 一些其他的说 抽象意味着只向对象的客户显示必要的细节 和 假设您的Employee类中有一个方法“ CalculateSalary”,该方法将EmployeeId作为参数,并以整数值返回当月员工的薪水。现在,如果有人想使用该方法。他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,其输入参数和所得成员的格式, 我一次又一次地搜索,结果似乎都没有给我一个正确的答案。 现在,封装在所有这些方面适合什么地方? 我搜索并发现了堆栈溢出问题。它说,即使是这些问题的答案也使这里感到困惑。 封装是用作抽象的一部分的策略。封装是指对象的状态-对象将其状态封装起来并从外部隐藏起来;类的外部用户通过其方法与之交互,但无法直接访问类的状态。因此,该类将与状态相关的实现细节抽象出来。 而这里的另一个知名的成员说, 它们是不同的概念。 抽象是完善对象的所有不需要/不重要属性并仅保留最适合您的域的特征的过程。 现在我把整个概念弄糊涂了。我了解抽象类,继承,访问说明符以及所有内容。我只想知道在面试中被问到抽象和/或封装时应该如何回答。 请不要将其标记为重复项。我知道有几个类似的问题。但是,我想避免相互矛盾的解释之间的混淆。谁能建议一个可靠的链接?也欢迎使用stackoverflow问题的链接,除非它再次造成混乱。:) 编辑:我需要答案,有点面向C#

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.