【发布时间】:2013-06-01 01:53:30
【问题描述】:
我正在准备面试,并决定复习我的 OOP 概念。 有数百篇文章可用,但似乎每篇文章对它们的描述都不同。 Some 说
抽象是“识别具有 系统变异;抽象代表通用模式 并提供了一种指定使用哪个变体的方法”(Richard 加布里埃尔)。
并且是通过抽象类实现的。
一些other说
抽象意味着只向客户展示必要的细节 对象
和
假设您的 Employee 类中有一个方法“CalculateSalary”, 它以 EmployeeId 作为参数并返回员工的薪水 当前月份的员工作为整数值。现在如果有人 想用那个方法。他不需要关心员工如何 对象计算工资?他唯一需要担心的是 方法名称、输入参数和结果格式 会员,
我一次又一次地用谷歌搜索,但似乎没有一个结果给我一个正确的答案。 现在,封装适合所有这些吗? 我搜索并找到了stack overflow question。甚至这些问题的答案也令人困惑 Here,上面写着
封装是一种用作抽象一部分的策略。封装 指对象的状态——对象封装了它们的状态和 把它从外面隐藏起来;类的外部用户与之交互 通过它的方法,但不能直接访问类状态。所以 该类抽象出与其相关的实现细节 状态。
而here 另一位知名成员说,
它们是不同的概念。
抽象是提炼所有 对象的不需要/不重要的属性,只保留 最适合您的域的特征。
现在我搞砸了整个概念。我知道抽象类、继承、访问说明符等等。我只想知道在面试中被问及抽象和/或封装时我应该如何回答。
请不要将其标记为重复。我知道有几个类似的问题。但我想避免相互矛盾的解释之间的混淆。谁能推荐一个可靠的链接?除非它再次造成混乱,否则也欢迎指向 stackoverflow 问题的链接。 :)
编辑:我需要答案,有点面向 c#
【问题讨论】:
-
所有这些答案再次让我感到困惑:(
-
我要开始悬赏这个问题。
-
问题是这些概念没有精确的定义,即使在面向对象的上下文中,这些词本身也有多重含义。如果你在采访中谈到这个,我希望这就足够了!
-
@MatthewWatson:
If you talk about that in an interview, I would hope that would be sufficient!我没听懂你。 -
我希望this article 能对两者的区别给出一个清晰的概念...... :)
标签: c# oop encapsulation abstraction