我正在准备面试,并决定刷新我的OOP概念.有数百篇文章可供使用,但似乎每篇文章都有不同的描述. 有人说
抽象是"识别具有系统变化的共同模式的过程;抽象代表了常见模式,并提供了指定使用哪种变体的方法"(Richard Gabriel).
并通过抽象类实现.
一些其他的说
抽象意味着仅向对象的客户端显示必要的细节
和
假设您的Employee类中有一个方法"CalculateSalary",它将EmployeeId作为参数,并将当前月份的员工薪水作为整数值返回.现在,如果有人想要使用该方法.他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,输入参数和结果成员的格式,
我一遍又一遍地搜索,结果似乎没有给我一个正确的答案. 现在,封装在哪里适合所有这些? 我搜索并发现了堆栈溢出问题.即使答案到问题被混淆 在这里,它说
封装是一种用作抽象的一部分的策略.封装是指对象的状态 - 对象封装其状态并将其隐藏在外部; 类的外部用户通过其方法与之交互,但无法直接访问类状态.因此,该类抽象出与其状态相关的实现细节.
而这里的另一个知名的成员说,
它们是不同的概念.
抽象是精炼对象的所有不需要/不重要的属性并且仅保留最适合您的域的特征的过程.
现在我搞砸了整个概念.我知道抽象类,继承,访问说明符和所有.我只是想知道在面试中被问及抽象和/或封装时我该如何回答.
请不要将其标记为重复.我知道有几个类似的问题.但我想避免相互矛盾的解释之间的混淆.任何人都可以提出可靠的链接吗?除非再次造成混淆,否则也欢迎链接到stackoverflow问题.:)
编辑:我需要答案,有点c#导向
在这里我发现了这个:
定义:数据库表中的决定因素是可用于确定分配给同一行中其他属性的值的任何属性.
示例:考虑具有employee_id,first_name,last_name和date_of_birth属性的表.在这种情况下,字段employee_id确定剩余的三个字段.名称字段不确定employee_id,因为公司可能有多个具有相同名字和/或姓氏的员工.同样,DOB字段不确定employee_id或名称字段,因为多个员工可能共享同一个生日.
候选键的定义是否也适用?
我正在阅读一些关于Dispose()方法的文章,并发现应该从Dispose()方法(或finalize()方法)中显式释放非托管资源,文章说文件句柄和数据库连接对象是非托管资源的示例.任何人都可以解释为什么那些是不受管理的,如果在Dispose()中没有正确处理会发生什么?我不知道文件句柄是什么.它们存在于哪里?
我们可以在c#中实现两个具有相同功能的接口吗?
interface TestInterface
{
public function testMethod();
}
interface TestInterface2
{
public function testMethod();
}
class TestClass implements TestInterface, TestInterface2
{
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我发现这里的 PHP不可能
如果c ++中的程序执行在main函数中启动,那么编程类的对象何时会在执行期间生成?
#include<iostream>
using namespace std;
class programming
{
private:
int variable;
public:
void input_value()
{
cout << "In function input_value, Enter an integer\n";
cin >> variable;
}
void output_value()
{
cout << "Variable entered is ";
cout << variable << "\n";
}
};
programming object;
main()
{
object.input_value();
object.output_value();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?