版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第15章平台无关语言,第09章 平台无关语言,使用平台无关语言的需求 脚本语言 Java语言,第15章平台无关语言,9.1 使用平台无关语言的需求,高级程序设计语言本应是平台无关的 在高级语言中,数据、控制流等都是抽象的。 源程序经过编译生成的目标码是与本地机紧密相关的。表现在: 基本类型定义与及其字长相关; 各机指令集不一,操作效果相当,实现过程有微小的差别; 同一语言在相同编译和执行环境下,同一程序执行速度不一(硬件差异,优化次数); 已采用增加可移植手段。 设预定义环境(包)Ada; 分出头文件 - 宏 - 编译文件C;,第15章平台无关语言,单主机时代,需要解决的主要问题是高级语言程序
2、可移植性,以减少应用程序的开发费用,缩短开发周期。这时对平台无关性的要求不是十分迫切。,第15章平台无关语言,局域网时代,需要在局域网内实现信息共享,有协作计算需求。 网络协议栈实现了数据的平台无关; 以文件共享形式实现; 客户/服务器模式,程序可以不共享; 只要局域网内使用相同或相互兼容的平台,也可以实现程序的共享。,第15章平台无关语言,Internet时代,对资源共享提出了新的要求: 局域网的规模和结构是可控制的;但是,没有任何个人和机构可以控制Internet的构成。 Internet/Intranet包含各种类型计算机,是资源共享的平台。不论用户使用的是什么类型的计算机和操作系统,都
3、可以浏览网络上的信息,使用网络中的资源。 Wide Web)是Internet上最广泛的信息发布/浏览方式。与FTP等以往的方式相比较,WWW具有较强的动态性和交互性,需要完成复杂的应用(如电子商务等)因此,共享资源不但包括数据,也应包括程序。这就需要一种平台无关的语言。 激烈的竞争迫使软件生产者不断降低开发成本,缩短开发周期。平台无关语言使开发者不需要为一个软件开发多个操作系统的版本,减少了开发费用和时间。,第15章平台无关语言,平台无关语言的实现: 传送源代码 将源代码传送到目标机,先经过编译,生成目标机代码,再执行。前提是必须有不同平台的编译器,这种情况往往在编译时缺乏源代码原有的环境信
4、息(全程量),且只能先编译存入目标码再运行。局域网时代服务器已经做过了。要实时运行只能是解释(也要求有完整的信息)型语言。 传送目标代码 只有在相同或相互兼容的平台之间才可以实现。如在Windows NT/9x组成的局域网中,可以在一台机器上调用执行其它机器上的应用程序。 传送中间代码 中间代码由源代码经过编译生成。中间代码经过优化。中间代码传送到目标机上由解释器解释执行。Java语言使用的是这种方式。,第15章平台无关语言,9.2 脚本语言,脚本语言的概述: 描述性语言(4GL); 直接解释执行; 操作系统界面语言的扩大泛shell; 辅助开发(不是设计,但引用内部过程、函数、对象);,第1
5、5章平台无关语言,常见的脚本语言有: 页面描述类:TELEX、Postscript、HTML、VPML; 场景描述类:JavaScript、VBScript/ActiveX脚本、LotusScript(Lotus公司的Notes群件产品中的脚本语言),第15章平台无关语言,9.2.1 HTML(Hyper-Text Markup Language),用于描述Web主页,为所有OS上的浏览器所识; 设计编排多媒体主页(包括正文字体、图形、动画); 以超文本方式使用,可以链接任何网址上的各种多媒体文档,包括普通正文、HTML文档、GIF图形、TIFF图形;XBM位图、JPEG图形、Postscri
6、pt文件、AIFF声音、AU声音、QuickTime影片、MPEG影片;,第15章平台无关语言,标签。以尖括号括出的成对或单个标签给出页面编排信息。 文档编排、引用描述: 一个HTML文档 文档简介信息 文档内容 标题 链接名 第i层编排 此前为一段 由此换行 产生一个视窗宽度的水平分行符,第15章平台无关语言,字符格式 逻辑描述:已定义单词 重点词 书或电影主题 一段源代码 由此键入 状态信息 特别强调 物理描述:此处黑体 此处斜体 此处打字机体,第15章平台无关语言,内联图形 其它标签 列表:表项 表项 (无号) (有号) 表项 测试此表 表项 (定义表) 预定义格式正文:此段文本格式已定
7、 作者地址: ,第15章平台无关语言,扩展引用: 嵌入Java: 嵌入其它描述语言: ,第15章平台无关语言,9.2.2 JavaScript语言,HTML语言是静态的,动态性和交互性不强。于是,Netscape公司开发了JavaScript(与之对应是Microsoft公司的VBScript),扩充HTML文档的功能。 Javascript嵌入在HTML文本中,由浏览器解释执行。,第15章平台无关语言,以下是一个HTML文本中嵌入JavaScript的例子: function welcome() var s = “Hello world!”; document.write(s); /docu
8、ment是HTML文档对象 /函数的定义 welcome() / 函数的调用 ,这个例子将在浏览器中显示“ Hello world!”字符串。 “document”是HTML文档对象,使用它的write方法可以在文档中写入文本。,第15章平台无关语言,JavaScript有以下特点: 与C、Java相似的语法,如常规的变量、表达式、函数和控制语句等。 弱类型。有数字、布尔、字符串和空值类型。变量的确切类型取决于所赋给它数据的类型。 基于对象。把浏览器和HTML文档中的元素看作对象,对象有各自的属性。例如,浏览器对象是已被预定义的Navigator;HTML页面是document对象。程序员可以
9、使用的对象及其属性是已经被浏览器定义和生成的,不能定义新的类和对象。因此,是基于对象而不是面向对象的。 事件驱动。定义了一组系统、鼠标事件。可以通过事件激活定义好的函数。 在客户端使用的小语言,第15章平台无关语言,一个统计HTML文档中超链接个数的程序: for(var i=0; i); document.write(There are +document.links.length+ links.); 其中,document是整个HTML页面对象;links是document对象中的超链接对象数组,length、href又是links的属性,分别表示链接的数目、链接的内容,第15章平台无关语
10、言,该HTML在浏览器中的显示如下图所示:,第15章平台无关语言,9.3 Java语言9.3.1 Java是C+的网络应用的扩充和改造,保留了高级语言的主要机制 与C+基本相同的字符集、标识符、关键字、运算符、特殊符号 比C+更加强化类型。增加了布尔类型,只保留数组类型;使用真正的类型转换(C+中的类型转换是“伪”的,目的是为了通过编译器的检查;Java中的类型转换在运行时真正发生,如果不能转换,系统会抛出异常) 保留声明、作用域、变量、表达式、语句、三种结构化控制; 保留并增强C+的异常;,第15章平台无关语言,与C+相似的面向对象机制:类作为特殊类型、构造函数、初始化序列、实例变量、thi
11、s/super、方法的覆盖与重载、成员可见性。 取消了C+不利于网络应用的机制: 指针。以对象引用代替指针; 取消头文件和预处理器(宏与机器相关); C+中原有冗余:struct、union都被类代替; 不支持模板,动态束定功能可实现; 取消typedef; 不支持运算符重载;,第15章平台无关语言,9.3.2 平台无关性的解决,编译解释执行。 Java语言实现平台无关的关键是使用了“编译-解释”执行方式。Java源代码经过编译,称为Java字节代码(byte-code)。Java虚拟机(VM)是字节代码的解释器。JavaVM是用软件构造的一个虚拟计算机,它由虚拟的寄存器、内存、堆栈等;字节代
12、码就是这台虚拟计算机的指令。所有操作系统上的JavaVM执行一致的指令,这样,就屏蔽了各个平台之间的差异(如下图所示)。,第15章平台无关语言,Java虚拟机是平台无关性的关键,在不同的操作系统上有不同的Java虚拟机,向上有一致 的接口(虚拟机的指令字节代码),向下针对不同 的操作系统有不同的实现方式。,第15章平台无关语言,即时编译(JIT: Just-in-Time Compile)。 使用即时编译是为了提高Java程序的执行效率,是对Java解释器的改进。即时编译在虚拟机解释执行Java字节代码时发生。当虚拟机第一次调用某个方法时,不再直接解释这个方法的字节代码,而是用即时编译器将这个
13、方法的字节代码编译成为本机目标代码,然后执行这些目标代码。即时编译不是将整个类的字节代码进行一次性编译,而是只编译正在执行的函数,“边执行,边编译”。,第15章平台无关语言,小程序(applet)的传递运行方式 小程序是可以在Web浏览器中执行的Java程序; Web浏览器中有一个Java虚拟机,和浏览器一起构成小程序的运行环境; 浏览器根据HTML文档中的标志,从指定的URL下载小程序的类字节码(.class文件),装入到Java虚拟机中运行; 小程序的出现提高了Web页面的交互性和动态性,使浏览器能够完成更加复杂的应用。 Java虚拟机有内置的类装入机制,从文件系统或网络中下载类代码,然后
14、在虚拟机中运行。浏览器下载运行小程序只是一个特例,这种机制可以被所有Java应用程序使用。,第15章平台无关语言,9.3.3 Java为应用增加的新特性,两层封装:包类 “包”是一组功能相近或联系紧密的类的集合,同一个包中的类之间有比较大的访问权限。包是一种对语言进行扩充的机制。Java的核心类库主要由以下几个包组成: java.lang - 基本类库 java.io - 读、写流,文件,管道 - 网络 java.awt - 界面、窗口,第15章平台无关语言,java.applet - 小程序类 java.util - 通用工具:向量表、哈希表、栈 “类”与C+的基本相同。Java只有单继承,
15、类库呈树状结构,所有类都是java.lang.Object类的子类。,第15章平台无关语言,增加了接口(interface)的机制。 接口是一种特殊的类,在接口中只有函数的声明,而没有函数的具体定义(与C+的纯虚类相似)。接口可以继承,但不能直接由接口生成对象; 以类实现(implements)接口,即在类中定义所有接口中声明的函数。我们可以把一个接口看成某种功能的规定,实现了接口,就是实现了某种功能。类的继承和接口的实现是多态的基础。,第15章平台无关语言,以接口实现多态。接口将函数的声明和实现分离,允许几个类同时享有一个接口。调用者不需要了解接口的具体实现,以统一的方式使用这些类的对象。下
16、面是一个简单的例子: interface Drawer public void draw(); / 定义接口 class Circular implements Drawer . . . public void draw() 画一个圆; / 类Circular实现了Drawer接口,第15章平台无关语言,class Rectangle implements Drawer . . . public void draw() 画一个矩形; / 类Rectangle实现了Drawer接口 class User void paint(Drawer drawer) drawer.draw(); . . .
17、,第15章平台无关语言,public static void main() Circular c = new Circular(); Rectangle r = new Rectangle(); User user = new User(); user.paint(c);/ 画圆 user.paint(r);/ 画方 / End of class User user对象的paint方法使用统一的方式调用对象c和r的draw方法,产生不同的结果。,第15章平台无关语言,接口实现多态示意图:,第15章平台无关语言,以接口实现多继承。一个类可以实现多个接口,间接实现多继承,同时不影响类的继承结构。,
18、第15章平台无关语言,以synchronized控制模块的同步 Java使用监控器(Monitor)作为线程同步的机制。每一个对象都有一个监控器与之相对应。可以用synchronized关键字请求得到某个对象的监控器。在任何时刻,只能有一个线程可以拥有某个对象的监控器。如果有多个线程申请某个对象的监控器,系统会阻塞这些线程。如果监控器的使用者释放了监控器的拥有权,系统就会唤醒某个申请该监控器的阻塞线程。,第15章平台无关语言,增加了修饰符 final:变量或函数不能被重新赋值或定义。final变量就是常量;final方法是不能被子类覆盖的方法 native:本地方法声明,其定义放在本地库中 a
19、bstract:抽象方法/类。抽象方法是只有声明而没有定义的方法;含有抽象方法的类必须声明为抽象类 transient:被声明为transient的变量不能在网络中传递,第15章平台无关语言,增强对象性 所有的基本数据类型都有与之对应的类: int java.lang.Integer short java.lang.Short long java.lang.Long char java.lang.Character byte java.lang.Byte float java.lang.Float double java.lang.Double boolean java.lang.Boolea
20、n,第15章平台无关语言,数组也是一种对象。用new语句创建,且有length属性; 没有独立存在的全局变量、函数。程序完全由对象和类组成,甚至入口函数main也必须从属于某个类; 对象引用。所有非基本数据类型变量都是对象的引用。与指针相比,引用只能访问对象,不能访问内存地址。 比较 MyClass a; 这个声明语句: 在C+中将生成一个对象,名为a 在Java中只有一个对象的引用a,它不指向任何对象,只有再通过a = new MyClass()才能创建一个对象,第15章平台无关语言,再比较 MyClass myObject; /Java还要执行myObject = new MyClass(
21、); myObject = otherObject; 在C+中,myObject始终指向声明时分配的存储区,赋值语句的效果只是将otherObject的值拷贝给myObject对象 在Java中,myObject和otherObject将成为同一个对象的引用,如下图所示。,第15章平台无关语言,支持多线程编程 线程的状态 初始态:线程对象被创建但没有被运行时的状态; 运行态:线程对象被启动,进入CPU的调度队列,开始执行另外的运行线索; 阻塞态:线程对象由于某种原因,不能继续执行,CPU不再为它分配时间片。但是,这时的线程仍然是有生命的,一旦条件满足,它能够再次进入运行态,继续执行剩余的任务;
22、 死亡态:线程执行完任务,或者被强行结束。进入死亡态后,该线程不能再次返回运行态。,第15章平台无关语言,Java线程状态的转化:,Java的线程也是对象,由java.lang.Thread类继承而来。Thread 类中有run方法,子类线程覆盖这个方法,将需要执行的语句 填入run方法中。这样,当该线程被启动时,它会自动执行run 方法中的语句。,第15章平台无关语言,线程原语。java.lang.Thread类中有如下方法: start / stop:启动和停止线程 suspend / resume:悬挂和恢复线程 sleep:使线程睡眠 join:等待其它线程的停止 interrupt:
23、唤醒被阻塞的或是睡眠的线程 yield:让出CPU时间,使其它线程执行,第15章平台无关语言,wait / notify (等待-唤醒)原语 wait和notify方法是所有Java对象父类:java.lang.Object类的方法。当一个线程拥有一个对象的监控器(通过synchronized关键字)时,它可以调用该对象的wait或notify方法。 调用wait方法,该线程将放弃该对象的监控器,并且被阻塞,直到其它线程调用了该对象的notify方法唤醒它为止。 调用notify方法,该线程将唤醒某个由于等待(调用了wait方法)而被阻塞的线程,将该对象的监控器交给它,使其恢复执行。,第15章
24、平台无关语言,以下是利用Java实现的生产者-消费者问题: import java.util.*; public class CP Vector pool; /Vector是可以存储任何对象的表.这里 / 当作产品池. int product = 0; public static int EMPTY = 0; public static int FULL = 25; public static void main(String args) CP cp = new CP(); Consumer consumer = new Consumer(cp); Producer producer = ne
25、w Producer(cp); consumer.start();/启动线程,使其运行它的run函数 producer.start(); ,第15章平台无关语言,public CP() pool = new Vector(); /CP类的构造函数. public synchronized void produce() try if(pool.size() = FULL) pool.wait(); product+; /produce a product. pool.addElement(new Integer(product); /put the product into the pool.
26、System.out.println(Produce: + product); if(pool.size() = EMPTY + 1) pool.notify(); catch(InterruptedException e) ,第15章平台无关语言,public synchronized void consume() try int i = pool.size(); if(i = EMPTY) pool.wait(); System.out.println(Consume: + pool.firstElement().toString(); pool.removeElementAt(0); i
27、f(pool.size() = FULL - 1) pool.notify(); catch(InterruptedException e) /End of class CP. CP类以监控器的方式来管理产品池。它封装了数据对象产品池,和操纵该对象的方法生产(produce)和消费(consume)方法,并且通过Java的同步机制对这些方法的并发性进行控制。,第15章平台无关语言,以下是消费者类Consumer class Consumer extends Thread CP cp; public Consumer(CP cp) super(); this.cp = cp; public vo
28、id run()/线程的执行函数 while(true) cp.consume();/调用监控器的consume方法 Thread.sleep(1000);/模拟做其它工作的时间 / End of class Consumer,第15章平台无关语言,以下是生产者类Producer class Producer extends Thread CP cp; public Producer(CP cp) super(); this.cp = cp; / 构造函数 public void run() while(true) duce();/调用监控器的produce方法 Thread.sl
29、eep(200);/模拟做其它工作的时间 ,第15章平台无关语言,线程通信有以下几种方式: 共享对象 管道流 异地线程之间可以通过socket或RMI进行通信 以下是一个利用管道流(PipedStream)进行线程之间通信的例子。,第15章平台无关语言,import java.io.*; public class CommThreads public static void main(String args) / 生成一个单向管道流 PipedInputStream in = new PipedInputStream(); PipedOutputStream out = new PipedOu
30、tputStream(in); Thread sender = new Sender(out); Thread receiver = new Receiver(in); sender.start(); / 启动发送者线程 receiver.start();/ 启动接收者线程 ,第15章平台无关语言,class Receiver extends Thread PipedInputStream in; public Receiver(PipedInputStream in) super(); this.in = in;/ 得到管道流对象 public void run() StringBuffer sBuffer = new StringBuffer(); int b = 0; while(b != -1)/如果b=-1,表明已经读完 b = in.read();/从管道中读取信息 if(b != -1) sBuffer.append(char)b); System.out.println(Receiver: + sBuffer.toString();/ 输出得到的消息 ,第15章平台无关语言,class Sender
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 搬运仓储物流设备年终大促宣传及营销方案
- 2026年氟化工设备维护模拟题
- 2026年Python初级脚本工程师笔试题
- 2026年服装设计师招聘面试设计预测题
- 2026年数据处理专员初级题库
- 山东省泰安市肥城市2025-2026学年高一下学期期中考试语文试卷(含答案)
- 2026年数据治理师初级模拟测试题集
- 2026年计量师一级仿真题分类解析与预测
- 2026年面试职业生涯规划
- 2026年注册会计师考试经济法仿真题集
- (2026版)《煤矿重大事故隐患判定标准》培训课件
- 2025年湖北省中考生物、地理合卷试卷真题(含答案)
- 浙江省居住建筑节能设计标准
- 2024届上海市杨浦区六年级下学期小升初真题数学试卷含解析
- 24春国家开放大学《客户关系管理》形考作业1-4参考答案
- 矿山系统机电技术人员考试题库
- GB/T 43232-2023紧固件轴向应力超声测量方法
- 单层厂房抗震设计
- 公路水运工程施工企业(主要负责人和安全生产管理人员)考核大纲及模拟题库
- 仓库收货部文员绩效考核办法
- 中华人民共和国尘肺标准片
评论
0/150
提交评论