我正处于开发学习的某个阶段,我觉得我必须更多地了解接口.
我经常阅读它们,但似乎我无法掌握它们.
我已经阅读过这样的例子:动物基类,IAnimal界面,如'Walk','Run','GetLegs'等等 - 但我从来没有做过某些事情,感觉就像"嘿我应该使用界面这里!"
我错过了什么?为什么我要掌握这么难的概念!我只是因为我可能没有意识到对一个人的具体需求而感到害怕 - 主要是由于理解它们的一些缺失方面!这让我觉得自己在成为开发者方面缺少一些东西!如果有人有过这样的经历并取得了突破,我会很感激如何理解这个概念.谢谢.
什么是 C 组件图中的接口?
我是一名嵌入式系统测试员,了解软件开发架构。我看过我执行黑盒测试的项目的组件图。我已经看到组件由与“套接字”和“棒棒糖”连接的块表示。我知道那些是接口,组件提供和请求接口。我读过不同的文章,但我没有找到一个实际的例子。它们是函数和变量,请求这种接口的组件调用它,提供者有函数的定义吗?
最近几天,我经常遇到“实现接口”这个术语......我知道它是什么,但我想要更多关于它的信息和一些资源。类什么时候实现接口?
在 Allen Downey 的 Python 2.x 的“Think Python, version 2.0.17”中,Downey 对函数的接口是这样说的:
函数的接口是对它如何使用的总结:参数是什么?函数有什么作用?返回值是多少?如果一个界面“尽可能简单,但不简单”,那么它就是“干净的”。(爱因斯坦)”
我完全不明白这一点。接口是一个书面摘要,如文档字符串,附加到函数的某个地方吗?或者它完全是别的东西?
我是一个完整的编程初学者,所以我没有很多背景可以借鉴。在我目前(非常低)的水平上,我找不到任何我能理解的解释!
快速示例(虽然不是回答问题所必需的):唐尼谈到了画圆圈(在海龟世界的背景下)。他的功能是
def circle(t, r):
circumference = 2 * math.pi * r
n = 50
length = circumference / n
polygon(t, n, length)
Run Code Online (Sandbox Code Playgroud)
其中t是来自 Turtleworld 的海龟(他称之为 Bob),r是要绘制的圆的半径。Polygon 是一个函数,它将海龟、n多边形的边数和(其边的)长度作为参数,并用这些规格绘制多边形。足够高n,这看起来像一个圆圈。
然后他评论道:
该解决方案的一个限制是它
n是一个常数,这意味着对于非常大的圆,线段太长,而对于小圆,我们浪费时间绘制非常小的线段。一种解决方案是通过将函数n作为参数来泛化该函数。这会给用户(无论谁调用circle)更多的控制,但界面会不那么干净。
再次,什么接口?什么是接口?好吧,让我们暂缓一下。
在这个例子中,r 属于接口,因为它指定了要绘制的圆。
n不太合适,因为它涉及如何渲染圆的细节。与其把界面弄得乱七八糟,不如选择一个合适的值n取决于circumference:
def circle(t, r):
circumference = 2 * math.pi * r
n …Run Code Online (Sandbox Code Playgroud) 我越来越深入地了解 python,发现很难理解接口的概念。
\n\n这个问题更具理论性。
\n\n据我了解,为最终用户(非开发人员用户)提供一个接口是可取的,但是为什么类也应该具有供其他对象/类(基本上是其他程序/程序员)使用的接口?\n在示例中,在 B 类中使用 comment1 或 comment 2 如何改变程序的功能?
\n\nclass A():\n def __init__(self,a):\n self.a = a\n print self.a\n def seta(self,newa): #setter\n self.a = newa\n print self.a\n def geta(self): #getter\n return self.a\n\n\nclass B(object):\n def __init__(self,oobj,b):\n self.b = b\n self.oobj = oobj\n print self.b\n def addab(self):\n #a = self.oobj.geta() # \xe2\x80\x94> 1. using interface : the getter method \n #return (self.b +a)\n return (self.b+self.oobj.a) # \xe2\x80\x94> 2.directly accessing the a attribute\nRun Code Online (Sandbox Code Playgroud)\n\n希望我已经说清楚了..
\n\n编辑:\n我确实检查了提到的可能重复的其他线程,但即使在尝试理解@property之前,我也试图理解不通过程序内的不同对象自行修改属性背后的基本原理。
\n我有这段代码(来自这里),我试图理解它的作用:
declare global {
interface Window { analytics: any; }
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这里的declare global意思了。
我从这个问题中看出了什么interface意思。
我知道窗口对象的含义。
我不明白上面的代码是什么意思。如果我错了请纠正。该代码意味着分析变量现在被识别为任何类型的全局对象。此外,它还具有您可以访问的窗口属性,如 所示interface Window。
又为何我们declare global{ /**variable being declared gloabal here.*/ }。为什么我们使用这种语义来声明全局变量。为什么变量放在花括号内而不是类似的东西var goat?
我很快用Java编写了一个链表类.我想编写另一个使用链表的队列类.我如何用Java实现这一目标?我不完全理解implements/extends关键字......这就是我的队列的样子(例如):
public class Queue<T> implements LinkedList
{
protected LinkedList<T> list;
public Queue() {
list = new LinkedList<T>();
}
public void add( T element) {
list.add( element);
}
public T removeLast() {
return list.removeLast();
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,链表类也是通用的.我知道已经内置了类来实现这个功能,但是我想学习(这就是我试图手动完成的原因)
编辑:此外,最后,我想能够说出这样的话:
Queue<String> aQueue = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud) interface ×3
oop ×2
python ×2
angular ×1
c ×1
class ×1
class-design ×1
components ×1
declare ×1
function ×1
generics ×1
java ×1
linked-list ×1
queue ×1
typescript ×1
uml ×1