mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-26 18:21:04 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@12373 72102866-910b-0410-8b05-ffd578937521
218 lines
5.7 KiB
Text
218 lines
5.7 KiB
Text
@node Obj-C and Java
|
|
@appendix Differences and Similarities Between Objective-C and Java
|
|
@cindex Objective-C and Java, differences and similarities
|
|
@cindex differences and similarities, Objective-C and Java
|
|
|
|
@paragraphindent 0
|
|
|
|
This appendix explains the differences/similarities between Objective-C
|
|
and Java. It has nothing to do with JIGS, but is included to help people who want to learn Objective-C and know Java
|
|
already.
|
|
|
|
@section General
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
C programmers may learn Objective-C in hours (though real expertise
|
|
obviously takes much longer).
|
|
|
|
@item
|
|
Java has global market acceptance.
|
|
|
|
@item
|
|
Objective-C is a compiled OO programming language.
|
|
|
|
@item
|
|
Java is both compiled and interpreted and therefore does not offer
|
|
the same run-time performance as Objective-C.
|
|
|
|
@item
|
|
Objective-C features efficient, transparent Distributed Objects.
|
|
|
|
@item
|
|
Java features a less efficient and less transparent Remote Machine
|
|
Interface.
|
|
|
|
@item
|
|
Objective-C has basic CORBA compatibility through official C bindings,
|
|
and full compatibility through unofficial Objective-C bindings.
|
|
|
|
@item
|
|
Java has CORBA compatibility through official Java bindings.
|
|
|
|
@item
|
|
Objective-C is portable across heterogeneous networks by virtue of a
|
|
near omnipresent compiler (gcc).
|
|
|
|
@item
|
|
Java is portable across heterogeneous networks by using client-side JVMs
|
|
that are software processors or runtime environments.
|
|
|
|
|
|
|
|
|
|
@end itemize
|
|
|
|
@section Language
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
Objective-C is a superset of the C programming language, and may
|
|
be used to develop non-OO and OO programs. Objective-C provides
|
|
access to scalar types, structures and to unions, whereas Java
|
|
only addresses a small number of scalar types and everything else
|
|
is an object. Objective-C provides zero-cost access to existing
|
|
software libraries written in C, Java requires interfaces to be
|
|
written and incurs runtime overheads.
|
|
|
|
@item
|
|
Objective-C is dynamically typed but also provides static typing.
|
|
Java is statically types, but provides type-casting mechanisms to
|
|
work around some of the limitations of static typing.
|
|
|
|
@item
|
|
Java tools support a convention of a universal and distributed
|
|
name-space for classes, where classes may be downloaded from
|
|
remote systems to clients. Objective-C has no such conventions
|
|
or tool support in place.
|
|
|
|
@item
|
|
Using Java, class definitions may not be divided or extended through
|
|
the addition of logical groupings. Objective-C's provides categories
|
|
as a solution to this problem.
|
|
|
|
@item
|
|
Objective-C provides delegation (the benefits of multiple inheritance
|
|
without the drawbacks) at minimal programming cost. Java requires
|
|
purpose written methods for any delegation implemented.
|
|
|
|
@item
|
|
Java provides garbage collection for memory management. Objective-C
|
|
provides manual memory management, reference counting, and garbage
|
|
collection.
|
|
|
|
@item
|
|
Java provides interfaces, Objective-C provides protocols.
|
|
|
|
@end itemize
|
|
|
|
@section Source Differences
|
|
|
|
@itemize @bullet
|
|
@item
|
|
Objective-C is based on C, and the OO extensions are comparable with
|
|
those of Smalltalk. The Java syntax is based on the C++ programming
|
|
language.
|
|
|
|
@item
|
|
The object (and runtime) models are comparable, with Java's
|
|
implementation having a subset of the functionality of that
|
|
of Objective-C.
|
|
|
|
|
|
@end itemize
|
|
|
|
@section Compiler Differences
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
Objective-C compilation is specific to the target system/environment,
|
|
and because it is an authentic compiled language it runs at higher
|
|
speeds than Java.
|
|
|
|
@item
|
|
Java is compiled into a byte stream or Java tokens that are interpreted
|
|
by the target system, though fully compiled Java is possible.
|
|
|
|
@end itemize
|
|
|
|
@section Developer's Workbench
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
Objective-C is supported by tools such as GNUstep that provides
|
|
GUI development, compilation, testing features,
|
|
debugging capabilities, project management and database access.
|
|
It also has numerous tools for developing projects of different
|
|
types including documentation.
|
|
|
|
@item
|
|
Java is supported by numerous integrated development environments
|
|
(IDEs) that often have their origins in C++ tools.
|
|
Java has a documentation tool that parses source code and creates
|
|
documentation based on program comments. There are similar features
|
|
for Objective-C.
|
|
|
|
@item
|
|
Java is more widely used.
|
|
|
|
@item
|
|
Objective-C may leverage investment already made in C based tools.
|
|
|
|
|
|
@end itemize
|
|
|
|
@section Longevity
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
Objective-C has been used for over ten years, and is considered to be
|
|
in a stable and proven state, with minor enhancements from time to time.
|
|
|
|
@item
|
|
Java is evolving constantly.
|
|
|
|
@end itemize
|
|
|
|
@section Databases
|
|
|
|
@itemize @bullet
|
|
@item
|
|
Apple's EOF tools enable Objective-C developers to build object
|
|
models from existing relational database tables. Changes in the
|
|
database are automatically recognised, and there is no requirement
|
|
for SQL development.
|
|
|
|
@item
|
|
Java uses JDBC that requires SQL development; database changes
|
|
affect the Java code. This is considered inferior to EOF.
|
|
|
|
@end itemize
|
|
|
|
@section Memory
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
For object allocation Java has a fixed heap whose maximum size
|
|
is set when the JVM starts and cannot be resized unless the
|
|
JVM is restarted. This is considered to be a disadvantage in
|
|
certain scenarios: for example, data read from databases may
|
|
cause the JVM to run out of memory and to crash.
|
|
|
|
@item
|
|
Objective-C's heap is managed by the OS and the runtime system.
|
|
This can typically grow to consume all system memory (unless
|
|
per-process limits have been registered with the OS).
|
|
|
|
|
|
@end itemize
|
|
|
|
@section Design Stability
|
|
@itemize @bullet
|
|
|
|
@item
|
|
Objective-C: A consistent API is provided by the OpenStep software
|
|
libraries. Mainstream developers may require knowledge of four to
|
|
five APIs, all of which have consistent style/conventions.
|
|
|
|
@item
|
|
Java package APIs are numerous and may use different styles.
|
|
|
|
@end itemize
|
|
|