Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Interface 什么是';不影响程序';在接口上下文中是什么意思?_Interface - Fatal编程技术网

Interface 什么是';不影响程序';在接口上下文中是什么意思?

Interface 什么是';不影响程序';在接口上下文中是什么意思?,interface,Interface,对接口进行编码被认为是一种很好的实践,允许在不影响程序行为的情况下更改对象,但是如果没有效果,为什么我们需要更改某些东西呢?我理解这种做法所带来的灵活性,我只是不理解它的定义。它们意味着您可以更改该类的实现,并且您将100%确保更改后程序的其余部分不会中断。因为您在该类实现之外没有更改任何一行。当然,您可以中断实现。使用接口不仅仅允许您更改类的实现。它还允许您更改类本身。休息后的细节 接口还可以减少开发(和理解)复杂代码所需的脑力劳动。如果您可以清楚地定义程序的两个部分之间的交互,那么工作可以在

对接口进行编码被认为是一种很好的实践,允许在不影响程序行为的情况下更改对象,但是如果没有效果,为什么我们需要更改某些东西呢?我理解这种做法所带来的灵活性,我只是不理解它的定义。

它们意味着您可以更改该类的实现,并且您将100%确保更改后程序的其余部分不会中断。因为您在该类实现之外没有更改任何一行。当然,您可以中断实现。

使用接口不仅仅允许您更改类的实现。它还允许您更改类本身。休息后的细节

接口还可以减少开发(和理解)复杂代码所需的脑力劳动。如果您可以清楚地定义程序的两个部分之间的交互,那么工作可以在两个部分上进行,而不需要一个知道另一个如何实现接口。这种愉快的局面可以一直持续到这两个部分准备好放在一起时,即所谓的“集成测试”发生时

从上述意义上讲,接口是一个相当抽象的概念。例如,函数的签名就是一个“接口”

其他形式的接口是使用
接口
关键字(例如,在Java或C#)的构造,或使用纯虚拟方法的类(在C++中)。当人们说“编程到接口”时,他们通常指的是这些结构

这不是世界上最好的例子,但假设我们有:

interface ICooking
{
void Chop();
void Grill();
// other cooking functions
}
它由此类实现:

class Chef implements ICooking
{
void Chop()
{
...
}

void Grill()
{
...
}

// other cooking functions
}
现在你想写一个函数来制作牛排。您将需要有人操作厨房(即实施iCOKING的人)

您可以这样编写函数:

void MakeASteak( Chef ThePersonWhoCooks )
{
...
}
void MakeASteak( ICooking ThePersonWhoCooks )
{
...
}
并称之为:

Chef Joe;

MakeASteak( Joe );
Chef Joe;

MakeASteak( Joe );
或者你可以这样写:

void MakeASteak( Chef ThePersonWhoCooks )
{
...
}
void MakeASteak( ICooking ThePersonWhoCooks )
{
...
}
并称之为:

Chef Joe;

MakeASteak( Joe );
Chef Joe;

MakeASteak( Joe );
你应遵守以下规定:

  • 在这两种情况下,您调用的
    MakeASteak
    完全相同

  • 您可以更改
    Chef::Grill
    的实现,只要它仍然是“烤肉”(例如,您从中熟变为中熟),就不需要在
    MakeASteak

这是使用明确定义的接口的好处之一。只要
Grill
方法做了它应该做的事情,它的调用者就不需要知道它是如何做的

第二个版本完全不同。这就是人们在说“编程到接口”时想到的。它允许添加以下内容:

class HomeCook implements ICooking
{
void Chop()
{
...
}

void Grill()
{
...
}

// other cooking functions
}
打电话

HomeCook AverageJoe;

MakeASteak( AverageJoe );
因此,如果
MakeASteak
函数只使用
ICooking
中定义的方法,那么它不仅不关心如何实现
ICooking
函数,也不关心什么对象实现接口

然后还可以使用复杂对象:

Class ComplicatedPerson implements ICooking, IWriting, IActing, ISwimming
{
}
并像以前一样使用它:

ComplicatedPerson person;
MakeASteak( person );

另一个例子是使用迭代器的
std
算法。库编写者只需要知道迭代器“迭代”,就可以专注于算法本身。负责为
向量
集合
编写迭代器代码的程序员可以专注于自己的代码,而不必担心
二进制搜索
算法的细节。如果两个程序员都正确地完成了他们的工作,那么无论迭代器由哪个容器提供,算法都是可用的。

您影响程序行为,而不影响程序结构。你不必改变它。你的信息基本上是错误的,所以你不能从中得出任何有意义的结论。术语“接口”在Java或C#等语言中的含义非常具体。寻找更多信息。还可以阅读和。