Interface 什么是';不影响程序';在接口上下文中是什么意思?
对接口进行编码被认为是一种很好的实践,允许在不影响程序行为的情况下更改对象,但是如果没有效果,为什么我们需要更改某些东西呢?我理解这种做法所带来的灵活性,我只是不理解它的定义。它们意味着您可以更改该类的实现,并且您将100%确保更改后程序的其余部分不会中断。因为您在该类实现之外没有更改任何一行。当然,您可以中断实现。使用接口不仅仅允许您更改类的实现。它还允许您更改类本身。休息后的细节 接口还可以减少开发(和理解)复杂代码所需的脑力劳动。如果您可以清楚地定义程序的两个部分之间的交互,那么工作可以在两个部分上进行,而不需要一个知道另一个如何实现接口。这种愉快的局面可以一直持续到这两个部分准备好放在一起时,即所谓的“集成测试”发生时 从上述意义上讲,接口是一个相当抽象的概念。例如,函数的签名就是一个“接口” 其他形式的接口是使用Interface 什么是';不影响程序';在接口上下文中是什么意思?,interface,Interface,对接口进行编码被认为是一种很好的实践,允许在不影响程序行为的情况下更改对象,但是如果没有效果,为什么我们需要更改某些东西呢?我理解这种做法所带来的灵活性,我只是不理解它的定义。它们意味着您可以更改该类的实现,并且您将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#等语言中的含义非常具体。寻找更多信息。还可以阅读和。