上层(或者是表层)、中间层和底层没有严格意义上的定义,在不同的项目中需要结合具体需求来具体分析。
一般来说,表层就是指展现给用户看的部分;而底层就是系统的最核心的部分。一般我们认为,越接接硬件的编程就越底层。
比如,一个在线通讯软件(QQ这种),表层就是窗口啊、菜单啊、按钮啊这些玩意儿;中间层是业务逻辑部分,就是你点击这些按钮会产生相应的什么事件,进行了什么操作;底层就是Socket网络通信了。当然,我这里这三层是大致划分的,实际开发中比这个要更具体详细。
再比如,拿题主说的游戏举例子,表层就是各种游戏的界面了;底层就是游戏引擎了。底层干嘛?接收你的鼠标键盘响应信号、操作显卡在显示器指定位置生成各种二维的三维的图像、控制声卡输出音频等等等等。
至于编程语言问题,这就牵扯到低级语言和高级语言的问题了。一般来讲低级语言和高级语言区别在于:
高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好。
低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差。
越低级的语言,形式上越接近机器指令(汇编语言就是与机器指令一一对应的)。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,使编写程序的过程更符合人类的思维习惯,并且极大了简化了人力劳动。也就是说你用高级语言写一句,会被转换成许多底层操作,大部分的工作交给了负责转换的机器(即编译器),从而人力得到了解放。因为机器就是用来为人类提供便利的,所以说高级语言的出现是计算机发展的必然结果。(参考:http://blog.csdn.net/guoxiaoqian8028/article/details/9103151)这就产生了执行效率的问题。
所以说用 C/C++ 这类语言更适合写游戏引擎。游戏嘛,必定是要求响应速度极高的,总不能按完键盘了等100毫秒才响应,生成个三维地图电脑卡半天。但一般不会游戏的所有部分都用 C/C++ 来完成,为什么?上面说了,可维护性差、可移植性差。这时候就需要用面向对象这种“高级语言”出马了。
至于题主提到的“不同语言之间的互通”,建议题主理解一下“接口”(不是面向对象里的“接口类型”)的概念。
泛泛而谈,希望对题主有所帮助。
楼上那个人回答的非常详细,也很对,我补充你的问题。
Java或C# 做上层,汇编 / C / C++做底层是对的。没错。但实际上没有用汇编 和 C 写引擎的,太磨叽。一般用C++ 比较多。
越底层,计算机运行效率越高,但是人开发起来越麻烦。 越上层,计算机运行效率越低,但是人开发起来越简单
底层和上层程度,从左到右越来越底层:
C# > Java > C++ > C > 汇编