Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
怎么走';s接口编程模型与OOP的比较?_Oop_Go - Fatal编程技术网

怎么走';s接口编程模型与OOP的比较?

怎么走';s接口编程模型与OOP的比较?,oop,go,Oop,Go,我已经阅读了Go tour教程的大部分内容,但我仍然不清楚Go的接口编程模型与OOP相比如何 有人能解释一下我是如何开始“围棋思维”的吗 我不知道如何定义接口,然后基于接口创建对象 在编译时是否会隐式地为您创建一个具体的实现?OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类 Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接

我已经阅读了Go tour教程的大部分内容,但我仍然不清楚Go的接口编程模型与OOP相比如何

有人能解释一下我是如何开始“围棋思维”的吗

我不知道如何定义接口,然后基于接口创建对象


在编译时是否会隐式地为您创建一个具体的实现?

OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类


Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接口中描述的每个方法来满足此描述。如果一个类型实现了接口中描述的所有方法,那么它会自动满足接口,并且可以由编译器自动转换到该接口。

OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类


Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接口中描述的每个方法来满足此描述。如果一个类型实现了接口中描述的所有方法,那么它会自动满足接口,并且可以由编译器自动转换到该接口。

Go的接口系统类似于。考虑一个Python代码的片段:

def foo(bar):
   bar.baz(5)
在这段代码中,我们不知道什么是具体类型的
bar
,但我们可以说它必须有一个
baz
方法,该方法接受一个
int
参数。注意,当我们编写
bar
类时,我们不必声明我们正在实现这个“接口”(有一个取整数的
baz
方法)。我们只需编写一个
baz
方法,该方法在使用单个
int
调用时可以正常工作,并且我们可以将一个实例传递给
foo
方法


Go以类似的方式工作,但在编译时检查所有内容。在Python中,如果我们将
foo
方法传递给一个没有
baz
方法的类的实例,就会得到一个运行时异常。在Go中,我们将使用
baz
方法定义一个接口,并在
foo
类型中声明它将获取该接口的一个实例。现在,在单个
int
上具有
baz
方法的任何类型都满足
foo
要求的类型。

Go的接口系统类似于。考虑一个Python代码的片段:

def foo(bar):
   bar.baz(5)
在这段代码中,我们不知道什么是具体类型的
bar
,但我们可以说它必须有一个
baz
方法,该方法接受一个
int
参数。注意,当我们编写
bar
类时,我们不必声明我们正在实现这个“接口”(有一个取整数的
baz
方法)。我们只需编写一个
baz
方法,该方法在使用单个
int
调用时可以正常工作,并且我们可以将一个实例传递给
foo
方法

Go以类似的方式工作,但在编译时检查所有内容。在Python中,如果我们将
foo
方法传递给一个没有
baz
方法的类的实例,就会得到一个运行时异常。在Go中,我们将使用
baz
方法定义一个接口,并在
foo
类型中声明它将获取该接口的一个实例。现在,在单个
int
上具有
baz
方法的任何类型都满足
foo
所需的类型。

传统(Java)OO是关于类层次结构的。您可以使用类、抽象类、最终类和接口对问题进行建模。然后提供实现

Go让你换一种方式:从具体类型开始,实现你的逻辑。如果出现或需要有用的抽象:将其打包到接口中,并重构代码以使用此接口类型。

传统(Java)OO是关于类层次结构的。您可以使用类、抽象类、最终类和接口对问题进行建模。然后提供实现


Go让你换一种方式:从具体类型开始,实现你的逻辑。如果出现或需要一个有用的抽象:将其打包到接口中,并重构代码以使用此接口类型。

您所说的“与OOP相比”是什么意思?类型通过定义接口中的所有方法来“实现”接口,IIRC。我看到至少有一个否决票,但这是一个可以使用下面一系列答案的问题。我一直在使用面向对象编程(OOP),但要想解决复杂的问题仍然需要时间和阅读。因此,让不那么明确的见解跟进。是Go中面向对象设计的一个很好的介绍。你说的“与OOP相比”是什么意思?类型通过定义接口中的所有方法来“实现”接口,IIRC。我看到至少有一个否决票,但这是一个可以使用下面一系列答案的问题。我一直在使用面向对象编程(OOP),但要想解决复杂的问题仍然需要时间和阅读。因此,让不那么明确的见解跟进。是对Go中面向对象设计的一个很好的介绍。值得一提的是,给定的接口
foo
和实现
a