我正在准备面试,并决定重新整理我的OOP概念。有数百篇文章可用,但似乎每个文章对它们的描述都不相同。 有人说
抽象是“识别具有系统变异的通用模式的过程;抽象表示通用模式,并提供了指定使用哪种变异的方法”(Richard Gabriel)。
并通过抽象类实现。
一些其他的说
抽象意味着只向对象的客户显示必要的细节
和
假设您的Employee类中有一个方法“ CalculateSalary”,该方法将EmployeeId作为参数,并以整数值返回当月员工的薪水。现在,如果有人想使用该方法。他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,其输入参数和所得成员的格式,
我一遍又一遍地搜索,结果似乎都没有给我一个正确的答案。 现在,封装在所有这些方面适合什么地方? 我搜索发现堆栈溢出问题。它说,即使是这些问题的答案也使这里感到困惑。
封装是用作抽象的一部分的策略。封装是指对象的状态- 对象封装其状态并将其从外部隐藏起来;类的外部用户通过其方法与之交互,但无法直接访问类的状态。因此,该类抽象出了与状态相关的实现细节。
而这里的另一个知名的成员说,
它们是不同的概念。 抽象是完善对象的所有不需要/不重要属性并仅保留最适合您的域的特征的过程。
它们是不同的概念。
抽象是完善对象的所有不需要/不重要属性并仅保留最适合您的域的特征的过程。
现在我把整个概念弄糊涂了。我了解抽象类,继承,访问说明符以及所有其他内容。我只想知道 在面试中被问到抽象和/或封装时应该如何回答。
请不要将其标记为重复项 。我知道有几个类似的问题。但是,我想避免相互矛盾的解释之间的混淆。谁能建议一个可靠的链接?也欢迎使用stackoverflow问题的链接,除非它再次造成混乱。:)
编辑:我需要答案,有点面向C#
其实就是封装。另请参阅Wikipedia文章的第一部分,以免被封装和数据隐藏所混淆。http://en.wikipedia.org/wiki/Encapsulation_(面向对象的编程)
请记住,仅将您所有的类成员1:1隐藏在属性后就根本不是封装。封装是关于保护不变量和隐藏实现细节的。
这是一篇很好的文章。 http://blog.ploeh.dk/2012/11/27/Encapsulationofproperties/ 还可以查看该文章中链接的文章。
类,属性和访问修饰符是在c#中提供封装的工具。
您可以进行封装以降低复杂性。
是的,这是抽象的一个很好的定义。
它们是不同的概念。抽象是完善对象的所有不需要/不重要属性并仅保留最适合您的域的特征的过程。
是的,它们是不同的概念。请记住,抽象实际上与使对象仅适合您的域相反。一般是为了使对象适合领域!
如果您遇到实际问题并提供特定的解决方案,则可以使用抽象来形式化更通用的解决方案,该解决方案也可以解决具有相同通用模式的更多问题。这样,您可以提高组件的可重用性,也可以使用由其他程序员为相同域甚至不同域制作的组件。
.net框架提供的类就是很好的例子,例如列表或集合。这些都是非常抽象的类,您几乎可以在任何地方和许多领域中使用。试想一下,如果.net仅实现了一个EmployeeList类和一个CompanyList,该类只能容纳具有特定属性的员工和公司列表。这样的类在很多情况下是没有用的。例如,如果您必须重新实现CarList的全部功能,那将是多么痛苦。因此,“列表”与员工,公司和汽车无关。List本身是一个抽象概念,可以由其自己的类实现。
接口,抽象类或继承和多态是在c#中提供抽象的工具。
您进行抽象以提供可重用性。