我正在准备面试,并决定刷新我的OOP概念.有数百篇文章可供使用,但似乎每篇文章都有不同的描述. 有人说
抽象是"识别具有系统变化的共同模式的过程;抽象代表了常见模式,并提供了指定使用哪种变体的方法"(Richard Gabriel).
并通过抽象类实现.
一些其他的说
抽象意味着仅向对象的客户端显示必要的细节
和
假设您的Employee类中有一个方法"CalculateSalary",它将EmployeeId作为参数,并将当前月份的员工薪水作为整数值返回.现在,如果有人想要使用该方法.他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,输入参数和结果成员的格式,
我一遍又一遍地搜索,结果似乎没有给我一个正确的答案. 现在,封装在哪里适合所有这些? 我搜索并发现了堆栈溢出问题.即使答案到问题被混淆 在这里,它说
封装是一种用作抽象的一部分的策略.封装是指对象的状态 - 对象封装其状态并将其隐藏在外部; 类的外部用户通过其方法与之交互,但无法直接访问类状态.因此,该类抽象出与其状态相关的实现细节.
而这里的另一个知名的成员说,
它们是不同的概念.
抽象是精炼对象的所有不需要/不重要的属性并且仅保留最适合您的域的特征的过程.
现在我搞砸了整个概念.我知道抽象类,继承,访问说明符和所有.我只是想知道在面试中被问及抽象和/或封装时我该如何回答.
请不要将其标记为重复.我知道有几个类似的问题.但我想避免相互矛盾的解释之间的混淆.任何人都可以提出可靠的链接吗?除非再次造成混淆,否则也欢迎链接到stackoverflow问题.:)
编辑:我需要答案,有点c#导向
对于封装的示例,我可以想到用户和移动电话之间的交互.用户不需要知道移动电话的内部工作来操作,因此这称为抽象.但封装在哪里适合这个例子?有人可以对此有所了解吗?
我是Ruby的新手.我正在学习ruby中的抽象原理.我理解过程抽象是隐藏用户的实现细节,或者只是专注于基本要素而忽略细节.
我关心的是如何实现它
1)这是一个简单的函数调用就像这样
# function to sort array
# @params array[Array] to be sort
def my_sort(array)
return array if array.size <= 1
swapped = false
while !swapped
swapped = false
0.upto(array.size-2) do |i|
if array[i] > array[i+1]
array[i], array[i+1] = array[i+1], array[i]
swapped = true
end
end
end
array
end
Run Code Online (Sandbox Code Playgroud)
并且这样打电话
sorted_array = my_sort([12,34,123,43,90,1])
Run Code Online (Sandbox Code Playgroud)
2)数据抽象与封装有何不同
据我所知,Data Abstraction只是隐藏了其他类的一些成员数据.
我一直在进行有关OOP概念的研究,并且在试图理解什么是Abstraction方面存在一些问题。我已经阅读了许多关于该主题的Stack Overflow帖子,但实际上并不能确定令人满意的答案。
我已经看到了很多的讨论上的差异抽象和封装,自然开始约开始思考抽象躲藏方面特定类的作品,并提供通过抽象类的API如何。以下是一些引导我朝这个方向发展的帖子:
但是,当我阅读更多文章时,我注意到在继承上下文中描绘抽象的答案,特别是使用接口和抽象类来提供特定实体(类)的抽象。我假设以这种方式给出的抽象将允许开发人员根据此抽象概述的“准则”适当地扩展新对象。以下是一些引导我朝这个方向发展的帖子:
我不确定我是否会完全遗漏这里的要点,但是它变得非常令人困惑,因为每个答案似乎都给混音添加了些许变化。我绝对明白为什么这两种上下文在面向对象编程中都至关重要,但是我确实想要明确定义什么是抽象。
这使我明白:抽象是否可以在多个上下文中工作?不抽象描绘这两个概念?
隐藏通过接口和抽象类完成的“不必要的细节”
IPet该接口可以充当Dog类的抽象。另外,我们可以提供Animal基类作为抽象类,以提供更高级别的抽象。这可以让我们使用多态性,并允许属于我们Animal抽象的不同类彼此交互。通过类API公开类的实现以抽象其实现
Dog类,我们只需要知道它有一个feed() 函数作为其API的一部分,并调用该函数来对其进行馈送,而无需知道馈送的实际完成方式。这提供了Dog类的抽象,并让我们轻松地与类进行交互我上面包含的链接之一包含Matthew Watson的以下引用:
“问题在于这些概念没有精确的定义,并且单词本身甚至在面向对象的上下文中也具有多种含义。”
仅仅是抽象是如此抽象,甚至定义是抽象:P吗?感谢您提前提供任何指导!
编辑:我对SO相当陌生,并不真正了解“主要基于意见”标志的含义。我看不出这个问题比关于SO上的抽象的众多问题如何有效。我认为应该较少地基于观点,因为我实际上是在指出我认为抽象在其中有意义的两个不同上下文。我已经看到许多问题,只是问什么是抽象,我认为这是一个更广泛的问题。比我在这里的问题。