Cocoa
Cocoa应用程序环境基于两个面向对象框架:Foundation 基本框架(Foundation. framework)与 Application Kit 应用程序工具箱框架(AppKit.framework)。这些框架都提供了面向Java和Objective-C的API(其中大部分的Java类只是简单地“桥接”了他的Objective-C实现)。
对与核心服务层和应用服务层的各自关系来说,Foundation 与 Application Kit在某些方面有着相似之处。Foundation框架中的类提供了不对用户界面产生影响的对象和功能;Foundation框架直接基于Core Foundation。而 Application Kit 中的类提供了所有能够影响用户界面上所呈现内容的对象和动作,例如:窗口和按钮、对鼠标和键盘的响应。 Application Kit 直接依赖于Foundation框架。
Foundation框架的类可归为以下几种类别:
·用于基本编程类型和操作的对象包装(或“助手(helper)”),包括:字符串、数组、字典、数字、字节交换、解析和异常处理等。
·用于内核环境实体和服务的对象包装,例如任务、端口、运行循环、计时器、线程和锁。
·对象相关功能,尤其是内存管理(自动释放缓冲区),远程调用、存档和串行化。
·文件系统和I/O功能,包括了URL处理、文件查找和代码以及本地化资源的动态装载。
·其他服务,例如分布式通知、取消(和重做)、格式化数据、使用系统日期和时间。
正如所期待的一样,许多Application Kit类被设计成用于创建和管理显示在图形用户界面上的对象。在这些类中,包括了窗口、对话框、按钮、图表、文本框、滚动条、弹出式菜单、滚动图、应用程序(下拉)菜单,甚至是用于QuickTime流的电影播放界面。
然而,Application Kit所拥有的特性与功能使得它远比作为一个用户界面对象的类集合更为有用。
·它有着对事件处理、应用程序管理与文档管理的成熟机制。
·它提供了对色彩、字体和打印进行管理与整合的应用方式(甚至提供了针对这些功能的对话框)。
·它允许以许多不同的图形格式来合成图像,还为绘画、矢量图处理提供了框架。
·它具有针对拼写检查、拖拽和复制粘贴等操作所提供的工具。
其他的 Cocoa 框架还能用于支持脚本、网络管理和其他用途。
Cocoa包罗框架(Cocoa.framework)中引入了Foundation框架和Application Kit框架。如果您正在编写一个应用程序,可以连接Cocoa框架。而如果您正在编写一个没有图形用户界面的Cocoa程序(例如:后台服务器),那么您至少需要连接Foundation框架。
JAVA
Java应用程序环境允许您在Mac OS X上开发和执行Java程序,包括100%的纯Java应用程序和applets。该环境由一个统一的工业化标准所实现--那就是包括了Java虚拟机(VM)在内的最新版本的Java开发工具(JDK)。因为这个原因,在该环境下生成的Java应用程序是可移植的。你可以把它复制到一个硬件完全不同,操作系统也不同的机器上,只要该系统具有兼容的Java 虚拟机,您的应用程序就可以在该系统上运行。另外,Java applet可以在任何性能合适的互联网浏览器中运行。
注意:Cocoa应用程序环境中包含了适应Application Kit和Foundation框架的Java包。这些包允许您使用Java作为开发语言来开发Cocoa应用程序。(出于某种原因)您可以混合使用这些包里的API和本机Java API(不包括AWT或Swing API)。关于Cocoa应用程序环境的更多内容,参见“Cocoa”。另外,苹果公司的Jdirect和Sun公司的JNI(Java Native Interface)编程界面允许您的Java程序调用其他框架,包括Carbon。并且您可以使用QuickTime for Javala来为Mac OS和Windows平台编写多媒体Java应用程序。
Mac OS X内的Java应用程序环境有三个主要的构件:
·开发环境,包括Java编译器(javac)和Java调试器(jdb)以及其它工具,包括:javap、javadoc和appletviewer等。这个"命令行"环境需要一个BSD shell,例如它可以由苹果的终端应用程序来提供。苹果还提供了Project Builder应用程序,作为这个环境的前端开发工具,而且第三方也可以使用他们自己的前端开发工具。命令行工具位于JavaVM.framework/Commands子目录下,并提供符号连接来将其连接到目录/usr/bin中。
·运行时环境由Sun公司的高性能Hotspot Java虚拟机、“just-in-time”(JIT)字节码编译器和基本的Java包所组成。Java虚拟机位于/System/Library/Frameworks/JavaVM.framework/Libraries目录下。这些基础包包括ava.lang、java.util、java.io和java.net;它们都在同一框架下的Classes目录中的classes.jar归档文件中。
·一个应用程序框架含有为建立一个Java应用程序所必需的类。
这些包中较为重要的是java.awt和javax.swing,通常它们被称为AWT(Abstract Windowing Toolkit) 和Swing。AWT包实现了标准的用户界面组件(例如:按钮和文本框)、基本绘图组件、布局管理器和事件处理机制。Swing包则极大的扩展了这套用户界面组件。这些组件能自动呈现出符合其宿主平台的外观风格(look and feel)。Swing在基于当前版本的AWT组件集的基础上扩充了一组高级组件,例如目录视图、列表框和分页框。AWT和Swing的包位于JavaVM.framework/Classes/classes.jar中的jar归档文件中。
比较起Carbon和Cocoa环境,Java虚拟机连同最基本的Java包(java.lang、java.util和java.io)等同于系统软件中的核心服务层。它们从内核环境中获得资源以实现低级别的服务(例如:进程管理、线程和输入/输出),而不必访问系统软件中的核心服务层(Open Transport,Core Foundation,等等)。
Mac OS X中Java的所有其它部分被分层置于虚拟机和基本Java包之上。如果一个Java程序不具用户界面(或者说它是一个工具或应用服务器),那么它仅仅只需要使用这些基本的Java包。但是100%的纯Java应用程序或applet(根据定义,applet具有图形用户界面)必须使用AWT或Swing,这两者均与系统软件应用服务层中的许多框架和库绑定在一起。Swing自身也被分层置于AWT包的原始部分之上。AWT和Swing在结构上等同于面向GUI的工具箱或框架,例如Carbon的人性化接口工具箱(Human Interface Toolbox)或Cocoa的Application Kit。
如同任何一个Carbon或Cocoa应用程序一样,Java应用程序也可以是能双击执行的束(double-clickable bundle),您可以使用MRJAppBuilder工具软件来绑定Java应用程序。另外,用户也可以在命令行环境中运行Java程序,或者通过系统exec调用和Java Runtime.exec 方法来执行Java应用程序。对于后一种情况,所启动Java程序的进程名会被显示成用于启动可执行Java程序的工具,即:java,或针对applet的appletviewer (例如,在Process Viewer中察看)。