问题标签 [abstraction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1395 浏览

visualization - 可视化抽象概念(算法/数据结构)的最佳方式是什么?

在算法/数据结构中“查看正在发生的事情”的最佳方式是什么?如果它类似于二分搜索,我只是想象一堆盒子排成一排,每次都扔掉一半。有没有更强大的东西可以让我们理解像算法/数据结构这样抽象的东西?

澄清:我正在寻找更通用的东西。示例:为了可视化时间 - 有些人在头上使用时钟,但这很慢,而更自然的感觉是地球,如果您试图“感觉”算法的工作原理,您可以想象两个对象在那个地球上朝不同的方向移动。

0 投票
3 回答
670 浏览

java - 如何抽象出两种不同的缓存实现

我计划在我的负载平衡 web 应用程序中使用分布式缓存。所以我将尝试抽象出apache ehcache和memcached之间的共同功能。

我的目标是能够进行简单的配置切换来选择要使用的缓存解决方案。我应该走 SPI 路线,例如 XML 解析器是如何连接的吗?

0 投票
1 回答
481 浏览

c++ - 在 OpenGL 中创建环境堆栈

我想在 OpenGL 中创建一个类似于矩阵堆栈的环境设置(混合、模板、深度等)的抽象。压入堆栈,进行所需的任何更改,绘制对象,然后弹出堆栈并返回之前的设置。

例如,目前你可能有这样的绘图代码:

但是使用环境堆栈,它看起来像这样:

在我看来,只有两种方法可以做到这一点:

  1. 为每个环境设置函数创建我自己的“风格”并调用它。它将依次更新当前的 EnvStack 数据结构并调用 OpenGL 环境函数。
  2. 更改 OpenGL 环境函数以指向我的环境函数,这将再次更新当前的 EnvStack 数据结构并调用原始的 OpenGL 环境函数。

所以选项1显然要简单得多。但是,如果我使用其他人的代码,我会遇到一个问题,因为我不一定知道它对环境做出了什么改变,因此我的数据结构会不同步。而且由于重点是有一个简单的方法来确保环境设置正确,这并不酷。

所以我的问题是,在这种情况下,如何更改 OpenGL 环境函数指向的函数?

0 投票
5 回答
796 浏览

javascript - 使用 Javascript 的“好部分”的最佳方式

在 Stackers 的推荐下,我一直在阅读 Crockford 的优秀Javascript: The Good Parts

这是一本很棒的书,但由于其中大部分内容都致力于描述使用 Javascript 基本功能的最佳方式,我不确定如何在不重复许多其他 Javascript 程序员的努力的情况下将他的建议付诸实践。

以这段话为例:

当您制作一个新对象时,您可以选择应该作为其原型的对象。Javascript 提供的用于执行此操作的机制混乱而复杂,但可以大大简化。我们将向函数添加一个create方法Object。该create方法创建一个使用旧对象作为其原型的新对象。

我可以手动将此代码添加到我所有的 Javascript 项目中,但跟踪所有内容将是一个巨大的痛苦。

是否有任何库实现了The Good Part的建议,从而省去了我必须跟踪它们的麻烦(/将它们全部输入)?

0 投票
11 回答
45029 浏览

oop - 抽象和多态有什么区别

我似乎不太了解两个 OOP 概念。你能解释一下抽象多态是什么,最好用真实的例子和代码吗?

谢谢你。

0 投票
3 回答
5589 浏览

c++ - 如何使用抽象类为实例数组分配内存?

我有一个在 C++ 中定义纯虚方法的抽象类:

我已经用许多其他类(它们提供了 Test() 的实现)对它进行了子类化,我将它们称为 A、B、C 等。我现在想使用它创建任何这些类型的数组基类:

(请原谅我可能犯的任何错误,我正在即时写这个以提供一个简单的例子)。

问题是我无法实例化数组,因为它需要创建 Base 类的实例(它不能这样做,因为它是抽象的)。但是,如果不这样做,它就没有分配分配给数组索引所需的内存,因此在尝试访问该内存时会出现分段错误。我的印象是,将 new 和 delete 与 malloc 和 free 混合使用并不是一个好习惯。

可能是我混淆了应该使用它的方式,我应该尝试使用模板或其他一些机制来做到这一点,但希望我已经提供了足够的信息来说明我正在尝试做的事情。

那么最好的方法是什么,我将如何解决将内存分配给抽象类的问题?

谢谢,丹

0 投票
3 回答
464 浏览

wcf - 报告应用程序中的数据库抽象

在报告应用程序中,是否可以抽象报告逻辑和数据库架构细节?

我有一个具有相当复杂的报告逻辑的 Reporting Services 应用程序,我正在尝试将应用程序迁移到其他一些数据库。(为相同目的而构建但由不同软件公司开发的数据库。)

在中间使用 Web 服务/WCF 层是明智的决定吗?还可以考虑哪些选项?

0 投票
4 回答
183 浏览

api - 在 API 中公开多少底层内容?

在设计泛型库的公共 API 时,应该公开多少内部使用的低级内容?一方面,用户不应过于依赖实现细节,过多的低级函数/类可能会使 API 混乱。因此,下意识的反应可能是“无”。另一方面,一些低级功能可能对人们有用,并且公开更多功能可以防止抽象反转(在高级构造之上重新实现低级构造)。

此外,暴露更多的低级细节可以提供性能捷径。例如,假设您有一个查找数组中位数的函数。最不意外的原则是你应该复制数组,这样你的 API 的用户就不必关心它的实现涉及重新排序元素的副作用。在这种情况下,您是否应该注意 medium() 会消耗内存分配并提供另一个绕过分配但会任意重新排序用户输入的函数?

对于要公开多少此类细节,有哪些一般准则?

0 投票
2 回答
839 浏览

c# - 使用抽象类型的反射从表中获取实体

好的,所以我有一个名为 Product 的抽象类。我有 3 个表,分别称为 Items、Kits 和 Packages,它们实现了 Product。Product 具有公开对象主键的公共属性。

那就是说我有一个传递产品的表格。我想将该产品从一个新的数据上下文中拉出来,而不必编写一个反映它的类型的大开关来获得它的正确表。

我想做这样的事情,但演员表不接受 foo。

或这个:

0 投票
4 回答
1190 浏览

java - 泄漏抽象定律的例外

我与一位友好的程序员发生了争执,他受到了 Joel 的泄漏抽象定律的轻微损害。很难说服他使用任何新的框架/工具箱。我试图提出一个观点,即“只要允许对抽象级别的低级访问,抽象就可以了”。

例子:

  • GWT - Google 出色的 Java 到 Javascript 编译器,具有 JSNI - 如果你真的愿意,可以编写“本机”Javascript。
  • Hibernate - AFAIK 有 SQLQuery - 编写本机 SQL 的方式。
  • Java - JNI - 如果你想念 C。

好听吗?我错过了什么吗?

谢谢