1.编程接口就是对于某种逻辑写的一定规范的数据格式,
就是宿主程序跟 Lu通讯用的一组 C 函数。 所有的 API 函数按相关的类型以及常量都声明在头文件 lua.h 中。
2.虽然我们说的是“函数”, 但一部分简单的 API 是以宏的形式提供的。
除非另有说明, 所有的这些宏都只使用它们的参数一次 (除了第一个参数,那一定是 Lu状态), 因此你不需担心这些宏的展开会引起一些副作用。
3.C 库中所有的 Lua API 函数都不去检查参数是否相容及有效。
然而,你可以在编译 Lu 时加上打开一个宏开关 LUA_USE_APICHECK 来改变这个行为。
Lu使用一个 虚拟栈 来和 C 互传值。 栈上的的每个元素都是一个 Lu 值 (nil,数字,字符串,等等)。
4.无论何时 Lua 调用 C,被调用的函数都得到一个新的栈,
这个栈独立于 C 函数本身的栈,也独立于之前的 Lu栈。 它里面包含了 Lu传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者。
5.方便起见, 所有针对栈的 API 查询 *** 作都不严格遵循栈的 *** 作规则。
而是可以用一个 索引 来指向栈上的任何元素: 正的索引指的是栈上的绝对位置(从1开始); 负的索引则指从栈顶开始的偏移量。 展开来说,如果堆栈有 n 个元素, 那么索引 1 表示第一个元素 (也就是最先被压栈的元素) 而索引 n 则指最后一个元素; 索引 -1 也是指最后一个元素 (即栈顶的元素), 索引 -n 是指第一个元素。
4.2 – 栈大小
5.当你使用 Lu API 时, 就有责任保证做恰当的调用。 特别需要注意的是, 你有责任控制不要堆栈溢
通过接口来调用一个类及其方法,而不是直接建立类实体来调用类。比如将来你要把这个被调用的类换成一个别的实现类时,你就不用去把调用过它的类一个个改掉了,因为它们调的是接口,接口没变,在配置里把接口的实现类换成新的类,就全部都替换掉了
这就是解耦,提高可维护性
interface 动物 {
void 叫()
}
class 狗 implements 动物 {
void 叫() {
System.out.println("汪")
}
}
class 猫 implements 动物 {
void 叫() {
System.out.println("喵")
}
}
class test{
private 动物 我的宠物
public static void main() {
我的宠物.叫()
}
}
现在你可以把我的宠物随便换成狗类或猫类都行了,main方法不用改。
针对实现编程就是
new 狗()
狗.叫()
换了猫再改一次main方法
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。 写小的应用程序看不到接口的优势,写大点的程序马上就显示出接口的优势,越大越明显.所以还是从现在开始养成面向接口编程的习惯.写多了程序就会觉得优势显而易见.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)