Questions tagged «abstraction»

抽象是一种计算机科学概念,其中,实现与其接口分离。

30
为什么要使用getter和setter / accessor?
使用仅获取和设置的getter和setter而不是仅对这些变量使用公共字段的优点是什么? 如果getter和setter所做的不只是简单的get / set,我可以很快地弄清楚这一点,但是我不清楚如何做到这一点: public String foo; 比以下任何方面都更糟糕: private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; } 而前者需要更少的样板代码。
1540 java  oop  setter  getter  abstraction 



16
接口和类之间的区别是什么?为什么可以在类中直接实现方法,为什么要使用接口?
我知道这是一个非常基本的问题,但是一个面试官以非常棘手的方式问我,我很无助:( 我只知道接口的材料或理论定义,并且在我从事的许多项目中也都实现了它。但是我真的不明白为什么这样做有用。 我也不了解界面中的一件事。即例如,我们使用 conn.Dispose();在最后块。但是我看不到该类正在实现或继承IDisposableinterface(SqlConnection)类。我想知道如何才能调用方法名称。同样,我也不了解Dispose方法的工作原理,因为我们需要为所有接口方法使用自己的实现来实现函数体。那么接口如何被接受或命名为合同呢?直到现在,这些问题一直在我脑海中浮现,坦率地说,我从未见过任何好的线索可以用我能理解的方式解释我的问题。 像往常一样,MSDN看起来非常可怕,而且没有清晰的界线(伙计们,请高水平开发的人为借口,我强烈认为任何代码或文章都应该引起任何人的注意,因此,就像许多其他人所说的那样,MSDN没用)。 面试官说: 他有5种方法,并且很乐意直接在类中实现它,但是如果您必须使用Abstract类或接口,则选择哪种方法,为什么?我确实回答了我在各种博客中读到的所有内容,并说了抽象类和接口的优缺点,但是他不相信,他是在总体上试图理解“为什么使用接口”。即使我只能一次实现相同的方法,也不能改变它,但一般来说,“为什么抽象类”还是如此。 我在网络上看不到任何地方,我可以得到一篇文章来清楚地向我解释接口及其功能。我是众多程序员之一,他们仍然不了解接口(我知道我使用的理论和方法),但不满意我清楚地了解它。
117 c#  class  oop  interface  abstraction 

6
“抽象”是什么意思?
在Scala文献中,我经常遇到“抽象”一词,但我不明白其意图。 例如,马丁·奥德斯基(Martin Odersky)写道 您可以将方法(或“函数”)作为参数传递,也可以对其进行抽象。您可以将类型指定为参数,也可以对其进行抽象。 再举一个例子,在“弃用观察者模式”一文中, 事件流是一流值的结果是我们可以对其进行抽象。 我已经读过一阶泛型“抽象于类型”,而monads“抽象于类型构造函数”。在Cake Pattern纸上我们也看到了这样的短语。引用许多这样的例子之一: 抽象类型成员提供了一种灵活的方式来对组件的具体类型进行抽象。 甚至相关的堆栈溢出问题也使用此术语。 “不能在参数化类型上存在抽象……” 那么...“抽象”实际上是什么意思?

4
编译与编译
在寻找差异时,我遇到了以下定义: 编译是获取用一种语言编写的源代码并转换为另一种语言的总称。 Transpiling是一个特定术语,用于获取用一种语言编写的源代码并转换为具有相似抽象级别的另一种语言。 我了解什么是抽象。 但是在上面的定义中“相似的抽象水平”是什么意思?以及如何找到一种语言的抽象水平?


15
封装与抽象之间的区别
我今天接受了采访。我对OOP提出了一个问题,关于封装和抽象之间的区别? 我回答了她,据我所知,封装基本上是将数据成员和成员函数绑定到称为Class的单个单元中。而抽象基本上是隐藏实现的复杂性并为用户提供方便的访问。我以为她可以接受我的回答。但是她询问,如果两者的目的都是隐藏信息,那么两者之间的实际区别是什么?我不能给她任何答案。 在问这个问题之前,我阅读了StackOverFlow上有关这两个OOP概念之间的区别的其他线程。但是我没有找到说服面试官的能力。 任何人都可以用最简单的例子来证明它的合理性吗?

5
返回IList <T>比返回T []或List <T>差吗?
这样的问题的答案:List &lt;T&gt;或IList &lt;T&gt;似乎总是同意,返回接口比返回集合的具体实现更好。但是我为此感到挣扎。实例化接口是不可能的,因此,如果您的方法正在返回接口,则实际上它仍在返回特定的实现。我通过编写2个小方法对此进行了一些试验: public static IList&lt;int&gt; ExposeArrayIList() { return new[] { 1, 2, 3 }; } public static IList&lt;int&gt; ExposeListIList() { return new List&lt;int&gt; { 1, 2, 3 }; } 并在我的测试程序中使用它们: static void Main(string[] args) { IList&lt;int&gt; arrayIList = ExposeArrayIList(); IList&lt;int&gt; listIList = ExposeListIList(); //Will give a runtime error arrayIList.Add(10); …

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

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

16
了解封装和抽象的简单方法
学习特别感兴趣的OOP概念,以深入了解抽象和封装。 已经检查了以下内容 抽象VS信息隐藏VS封装 和封装之间的区别? 我发现很难用一个真实而简单的示例类/代码片段来理解这些概念。 我的一位同事说,抽象只不过是创建抽象类和使用范围保护其成员变量的普通类,称为封装。 有没有一种简单的方法可以使我理解并帮助他人了解他们的确切身份,而不是重复以下内容? 抽象和封装是互补的概念:抽象集中于对象的可观察行为...封装着重于引起这种行为的实现...封装通常是通过信息隐藏来实现的,信息隐藏是隐藏所有对象的过程。对物体的本质没有帮助的秘密。
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.