我正在准备面试,并决定刷新我的OOP概念.有数百篇文章可供使用,但似乎每篇文章都有不同的描述. 有人说
抽象是"识别具有系统变化的共同模式的过程;抽象代表了常见模式,并提供了指定使用哪种变体的方法"(Richard Gabriel).
并通过抽象类实现.
一些其他的说
抽象意味着仅向对象的客户端显示必要的细节
和
假设您的Employee类中有一个方法"CalculateSalary",它将EmployeeId作为参数,并将当前月份的员工薪水作为整数值返回.现在,如果有人想要使用该方法.他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,输入参数和结果成员的格式,
我一遍又一遍地搜索,结果似乎没有给我一个正确的答案. 现在,封装在哪里适合所有这些? 我搜索并发现了堆栈溢出问题.即使答案到问题被混淆 在这里,它说
封装是一种用作抽象的一部分的策略.封装是指对象的状态 - 对象封装其状态并将其隐藏在外部; 类的外部用户通过其方法与之交互,但无法直接访问类状态.因此,该类抽象出与其状态相关的实现细节.
而这里的另一个知名的成员说,
它们是不同的概念.
抽象是精炼对象的所有不需要/不重要的属性并且仅保留最适合您的域的特征的过程.
现在我搞砸了整个概念.我知道抽象类,继承,访问说明符和所有.我只是想知道在面试中被问及抽象和/或封装时我该如何回答.
请不要将其标记为重复.我知道有几个类似的问题.但我想避免相互矛盾的解释之间的混淆.任何人都可以提出可靠的链接吗?除非再次造成混淆,否则也欢迎链接到stackoverflow问题.:)
编辑:我需要答案,有点c#导向
学习OOP概念特别有兴趣深入了解抽象和封装.
已经查看了下面的内容
我发现用一个真实而简单的示例类/代码片段很难理解这些概念.
我的一位同事说抽象只不过是创建抽象类和普通类来保护其成员变量的范围称为封装.
是否有一种简单的方法可以理解并帮助其他人了解它们究竟是什么,而不是重复下面的内容?
抽象和封装是互补的概念:抽象侧重于对象的可观察行为......封装侧重于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.对象的秘密不会对其基本特征产生影响.