Tag: oop

在C ++中创build稀疏数组的最佳方式是什么?

我正在研究一个需要处理巨大matrix的项目,特别是用于copula计算的金字塔加法。 简而言之,我需要在matrix(multidimensional array)中的零海中追踪相对较less的值(通常值为1,在极less数情况下超过1)。 稀疏数组允许用户存储less量值,并假定所有未定义的logging为预设值。 由于在物理上不可能将所有值存储在内存中,因此我只需要存储less量的非零元素。 这可能是数百万条目。 速度是一个重要的优先事项,我也想在运行时dynamicselect类中的variables数量。 我目前正在使用二叉search树(b-tree)来存储条目的系统上工作。 有谁知道更好的系统?

面向对象的编程在纯粹的函数式编程环境中?

在函数式编程(FP)环境中使用面向对象编程(OOP)有什么优势? 我已经使用F#一段时间了,我注意到我的函数越是没有状态,我就越需要将它们作为对象的方法。 特别是,依靠types推断使它们在尽可能多的情况下可用是有利的。 这并不排除需要一些与OOP正交的forms的命名空间。 也不鼓励使用数据结构。 实际上,FP语言的实际使用在很大程度上依赖于数据结构。 如果你看看F Sharp Programming / Advanced Data Structures中实现的F#栈,你会发现它不是面向对象的。 在我看来,面向对象与处理对象状态的方法主要是为了改变对象有很大关系。 在一个纯粹的FP环境中,这是不需要也不需要的。 一个实际的原因可能是能够与OOP代码交互,就像F#与.NET一样 。 除此之外,有没有什么原因? Haskell世界的经验是什么?编程更纯粹的FP? 我会很感激任何关于这个问题的论文或反事实的例子。

Objective-C:你如何从子类访问父属性?

如果我定义了这个类,如何在没有编译器错误的情况下访问子类中的someObject属性? @interface MyBaseClass // someObject property not declared here because I want it to be scoped // protected. Only this class instance and subclass instances should be // able to see the someObject property. @end // This is a private interface extension…properties declared here // won't be visible to subclasses. However, I don't see any […]

丢失重要参数/依赖项时抛出什么exception?

采取这种方法 /** * @return List of group IDs the person belongs to * */ public List<String> getGroups() { if (this.getId().equals("")) return null; } 我想抛出exception,而不是返回null,什么是一个重要的参数/依赖关系没有被设置时抛出exception?

基于原型的面向对象的基于类的面向对象的优点是什么?

为什么基于类的OO如此受欢迎,而不是基于原型的OO? 他们是否在学校教授后者? 尽pipeJavascript是基于原型的,但大多数人都是在function上使用它,或者通过尝试模拟基于类的系统的框架来使用它。 我知道Sun已经对自我进行了一些研究 – 在基于原型的oo上是否还有其他的知识来源? 最好是自学的东西。 我find了一本包含已发表论文的书: 基于原型的程序devise:概念,语言和应用程序 有没有人读过它? – 所以我给了我最多的答案。 不过,我并不是很满意。 我本来希望听到更多的技术性的答案。 也许我没有解释得很清楚。

从PHP中使用dynamic类名获得静态属性

我有这个: 一个保存类名的stringvariables( $classname ) 一个stringvariables与持有属性名称( $propertyname ) 我想从那个类中获得这个属性,问题是,属性是静态的,我不知道该怎么做。 如果财产不是静态的,那将是: $classname->$propertyname; 如果该属性是一种方法,我可以使用call_user_function call_user_func(array($classname, $propertyname)); 但就我而言,我刚刚输了。 然而,我希望这是可能的。 有了PHP的数以千计的function,他最好也有这个function。 也许我错过了什么? 谢谢! 编辑: 对于那些与eval()解决scheme:谢谢,但它是不可能的 对于那些获得_class _vars()解决scheme:谢谢,但它似乎返回“给定类的默认属性” (php.net),是的,我希望这个值是可变的(即使它帮助我在某些情况下)

为什么要将接口声明为抽象?

什么是声明一个接口为抽象的点? 接口方法也一样。 有没有指向它? 例如。 public abstract interface Presenter { public abstract void go(final HasWidgets container); }

抽象和封装如何不同?

我正在准备采访,并决定刷新我的面向对象的概念。 有数百篇文章,但似乎每个人都有不同的描述。 有人说 抽象是“识别具有系统变化的常见模式的过程;抽象代表了常见模式,并提供了指定使用哪种变化的手段”(Richard Gabriel)。 并通过抽象类来实现。 其他人说 抽象意味着只向对象的客户显示必要的细节 和 假设您的Employee类中有一个“CalculateSalary”方法,它将EmployeeId作为参数,并将当前月份的员工工资作为整数值返回。 现在,如果有人想要使用这种方法。 他不需要关心Employee对象如何计算工资? 他唯一需要关注的是方法的名称,input参数和结果成员的格式, 我一遍又一遍地search,结果似乎没有给我一个正确的答案。 现在,封装在哪里都适合? 我search,发现一个堆栈溢出的问题 。 即使这个问题的答案是混淆在这里 ,它说 封装是一种用作抽象的一部分的策略。 封装是指对象的状态 – 对象封装它们的状态并将其隐藏起来; 类的外部用户通过它的方法与它交互,但不能直接访问类的状态。 所以这个类抽象出与其状态相关的实现细节。 另外一位知名的成员说, 他们是不同的概念。 抽象是细化一个对象的所有不必要/不重要的属性,只保留最适合你的领域的特征的过程。 现在我搞砸了整个概念。 我知道抽象类,inheritance,访问说明符和所有。 我只想知道在面试中被问及抽象和/或封装的时候应该如何回答。 请不要将其标记为重复 。 我知道有几个类似的问题。 但是我想避免相互矛盾的解释之间的混淆。 任何人都可以build议一个可信的链接? 链接到stackoverflow问题也是受欢迎的,除非它再次造成混乱。 🙂 编辑:我需要答案,有点面向c#

OO JavaScript构造函数模式:新古典vs原型

我观看了道格拉斯·克罗克福德(Douglas Crockford)关于Javascript中好的部分的讲话 ,我的眼睛被打开了。 有一次,他说:“Javascript是唯一的语言,好的程序员相信他们可以有效地使用它,而不需要学习它。” 然后我意识到, 我就是那个人。 在那个演讲中,他发表了一些对我来说非常惊人和有见地的发言。 例如,JavaScript是这个星球上最重要的编程语言。 或者它是这个星球上最stream行的语言。 而且,这是以许多严重的方式被打破的。 他对我所做的最令人吃惊的表述是“新的危险”。 他不再使用它了。 他也不使用this 。 他为Javascript中的构造函数提供了一个有趣的模式,允许私有和公共成员variables,并且不依赖于new ,也不依赖this 。 它看起来像这样: // neo-classical constructor var container = function(initialParam) { var instance = {}; // empty object // private members var privateField_Value = 0; var privateField_Name = "default"; var privateMethod_M1 = function (a,b,c) { // arbitrary }; // initialParam […]

JavaScript中的原型OO

TL; DR: 我们是否需要原型OO中的工厂/构造器? 我们可以做一个范例转换并完全放弃它们吗? BackStory: 我最近一直在做JavaScript中的原型OO,并发现在JavaScript中执行的面向对象的99%迫使经典的OO模式。 我认为原型OO是两件事。 方法的静态原型(和静态数据)和数据绑定。 我们不需要工厂或build设者。 在JavaScript中,这些是包含函数和Object.create Object文字。 这意味着我们可以将所有东西都build模为一个静态的蓝图/原型和一个数据绑定抽象,这个抽象最好直接插入到文档样式的数据库中。 即从数据库中取出对象,并通过数据克隆原型来创build对象。 这将意味着没有构造逻辑,没有工厂,没有new 。 示例代码: 一个伪示例是: var Entity = Object.create(EventEmitter, { addComponent: { value: function _addComponent(component) { if (this[component.type] !== undefined) { this.removeComponent(this[component.type]); } _.each(_.functions(component), (function _bind(f) { component[f] = component[f].bind(this); }).bind(this)); component.bindEvents(); Object.defineProperty(this, component.type, { value: component, configurable: true }); this.emit("component:add", this, component); […]