publicaciones icesi no 63 abr-jun 1997 · eielm¡)lo de programación en java." las...
TRANSCRIPT
PROFESOR
D.E.A. en Informática industrial de la Universidad de Toulouse.Actualmente se desempeña como profesor de la Universidad del Valle,
Oepalrtalnento de Ciencias de la vUIIII-'UlctL;ItJII
bies enteras con signo sobre 1, 2, 4y8 Losfloat y double declararvariables reales sobre 4 y 8respel:::tivamlenite. El char se utiliza para declarar variables de caracteres. Java utiliza Unicode para reprE~s€mt,:tr los caracteres. Un carácter en Unicode es sobre 16 bits. Unicode~ la unificaciónde varios conjuntos de caracteres e
entre otros, los caractereslatinos, hebraicos,etc.
e Java cuenta con las mismas estruc-turas de control de C++ if/el5e,
while, do/while V Laúnica diferencia es que una condición en Java debe ser de tipoboolean, lo que hace el másclaro.
o Los son se<gulrannelltela más herramienta de C++pero también la más Javano cuenta con lo queasegura que el programador no puede tener acceso a una posición dememoria que no le pertenece. Al notener los programas de
Java es unoríentadoa
SINllurU[)ES y DIFERENCIASENTRE eH y JAVA
Una forma para hablar de Java escOlnparélrlo con C++. A continuación seresaltan las similitudes V diferenciasentre los dos lenlgu.ajes.
Java cuenta convos. El
y sus pOlsibles valn(l::''''false V true. Los¡ntV
de proigralna()ióndesarrollado por Sun
Mi()rm,vstel11S a de la décadade los años 90. Java es engran de C++ y a un nivel menorde C y Smalltalk.
la Sun Java fuecreado inicialmente porque C++ no eraadecuado para ciertas tareas. El éxitodel en 1995, cuandoNSitS()ar:1e anunció que su visualizador,Navlqatclr, trab.ajaría con programasJava insertados en las páginas Web. Laidea era ofrecer a los desarrolladores de
una forma de crear documentos interactivos y animados.
INSTRUCCIONES PARA EJECUTARUN PROGRAMA
Se debe digitar el fuente deJava dentro de un archivo con extensión.java. Es que el nombre delarchivo sea el de una clase que contiene, ya que el compilador genera un ar-chivo de de cada cia-se dicho archi-
booIE~arl, char o sin salto de línea. El método putln es similar al método con la diferencia que visualizael dato y pasa a la línea siguiente. Usted recuperar la clase Consolapor ftp (ftp://borabora.univalle,edu.co/
del operador new. En C++, los objetos pueden ser creados en la memo-ria yen la
• En Java no existe la noción de fun-ción o clase como seconoce en C++.
LA CLASE CONSOLELa realización de programas senci
llos, pasa por la lectura y escritura de datos. Como Java no cuenta confunciones para hacer entradas desdeuna terminal, por lo menos es cierto enlas versiones actuales, en los ejempllosde programas se utiliza unaclase llamada Consola que fue impleme,ntélda por el David Eckde la Universidad de Hobart and WilliamSmith. La creación de un deConsola, abre una ventana donde elprogramador leer y visualizardatos, Para cerrar la ventana, quemandar el mensaje a la instancia. Los métodos de esta clase son
corto rO{'f"\Frirl.,., \
En el alcance de las variablesdefinidas en la parte inicializaciónde un far va desde su declaraciónhasta el final del contiene el foro Eso era un bug de concepción de C++. lo tiene correclIdo, así que el alcance
de se
Java, los operadores lógicos (NDT),&& con corto y 1I (DRcon corto recorrido) solamente se
a loque hace que sus programas seanmás claros. Java cuenta con nuevos
como & (ANO sinI(DR sin corto reco-
y 1\ Note que como losenteros de Java tienen signo, se hatenido que íntroducir el operador »>para hacer un haciala derecha entrando ceros IOE~S[¡¡a
zamiento lógico hacia la derec:hal).
Java tiene una clase raíz llamadaEn Java, todas las clases
son derivadas de forma directa o indirecta de la clase En C++,no clase raíz,
Java cuenta con un poderoso operador llamado instanceof. Con esteoperador se saber si una re-ferencia remitir a una ciertaclase. Por si a es una refe-rencia, a instanceof devuel-ve true si a referir un objetode Este operador noexiste en C++ y permite imlnlAmF>n
tar en forma muy AI¡>,n::.,ntA la nociónde Ver «SegundoeiElm¡)lo de programación en Java."
Las bibliotecas de C++ son similares a los paquetes de Java,
Java no cuenta con para argumentos de función por omisióncomo en C++.
variables de tipo in! sobre dos bytesy otros sobre cuatro
En Java todos los métodos sonvirtuales, mientras que en C++ unmétodo puede o no ser virtual.
Java un compromiso entre un lenguaje totalmente compilado (como C++) y totalmente interpretado (como Smalltalk o Elcompilador de Java produceun código intermedio, indeplsncJierlte de la arquitectura, que se llama elcódigo de El interpretador deJava Uava) ejecuta dicho código de
Desde hace poco, algunasempresas proponen productos paragenerar a de Java.Para más información sobre estetema, ver «Creación de "']t'l-Ulct
bies",
En Java todas las funciones y variables deben ser de una clase, adiferencia de C++ que quelas funciones y variables se declaren en forma global.
Java, en su versión actual, no soporta las plantillas de C++. Es una delas críticas que se hacen alI¡>nrll ""¡I'> pero Java todavía está enevolución y es muy probable que lasfuturas versiones tengan plantillas.
En su versión actual, Java no cuenta con funciones de entrada para leerun tipo desde una terminala diferencia de C y C++ donde elconjunto de funciones para leer datos es muy (scanf, gels,getchar,
Java no soporta la herencia múltiple.Sin embargo, Java permite que unaclase herede múltiples interfaces quesegún un artículo publicado por laSun ofrece la mayoríade los beneficios de la herencia múl-
de C++ y evita sus dificultades.
La mayoría de los operadores deC++ son Java. En
•
"
Java son más fáciles de leer. La carencia de dichos apuntadores obliga al programador a pasar los argumentos de una función por valor, loque tiene como consecuencia que noes realizar en Java una función que intercambie el contenido dedos variables enteras.
Java no cuenta con la deoperadores como C++. Esta faltahace que el sea más fácilde aprender, pero también complicala escritura y la legibilidad de ciertasaplic8:cic1nes. Por es muchomás claro utilizar el operador + o eloperador* cuando se trata de hacerla suma o el producto de dos números complejos, en lugar de utilizarnombres de métodos,
Java cuenta con un debasura, lo que mucho eldesarrollo de programas dinámicos.De hecho, no existe en Java, el operador delate de C++, A pesar de laevolución del hardware y de las mejoras hechas sobre los derecolección de basura, este proceso es muy costoso en y haceque los programas de Java seanmás lentos que sus equivalentes deC++.
El código fuente de C++ no esnOlrí::.111AY muchas de sus primitivasrlA!1ArHlf',n del compilador utilizado yde la arquitectura. Se ha hecho ungran esfuerzo para que el códigofuente de Java sea portable, No existe ninguna en Java quedepende de la arquitectura. Porejemplo, las variables de C++ queson guardadas en registrosgister) no existen en Java. Los tipos primitivos de Java ocupan siempre la misma cantidad de bytes enla memoria yeso es totalmente independiente del compilador utilizado, mientras que algunos compiladores de C++ representan las
52lCES¡
instanceof Complex)
valorA=new Com-plex«(Complex)a).r,«Complex)a).i);
Complex valorB=new Com-
return new Com~ll8)(vi:dorA.r+\laÍ()rB"r,
valorA.i+valorB.i) ;
}
else
{
int valorA=«lnteger)a).intValueO;
int valorB=«lnteger)b).intValue();
return new IntE3gElr(,,'alc>rA+vialorB);
static Object sUllla(Oltlject a,b)
En la parte del programa, seim¡)lelmenta una clase llamada Complexque definir las sobre los números complejos que son nece:3arias con el fin de realizar el progra
método es un creador y else!~UrldO pelrmi'le un número
de caracteres
io.put(<<Entre el valor del entero 1 ... »);
a=new IntiegE,r(ío.!jletlnt());
io.put(«Entre el valor del entero 2 ...»);
b=new Integer(io.getlnt());
}
else
{
io.putln(«Error»);
io.close();
return;
}
s=suma(a,b);
io.putln(<<La suma es:»+~¡¡:
io.closeO;
}
comlplejo2
comlplej02
con [C}omplejos o
del complejo 1
r, i;
Complex(double r, double i)
String toStringO
{
double r,i;
static void main(String args[])
raturn <o>+r+'+'+i+'i';
else if(Char,aGtE,r,tcrUPIJer(Jase(rElsp)=='iE'){
return « »+r;
alsereturn (">+r+i+'i';
}
class Polimorfismo
{
Console io=new ConsoleO;
a,b,s;
this.r=r;
class Complex
de bytes con4. elFactorial
SEGUNDO EJEMPLODE PROGRAMA EN JAVA
El programa permite ilustrarel uso del operador instanceof y mues-tra una forma muy que tieneJava para el polimorfismo.Al el programa aparece un mensaje para seleccionar si se va a trabajarcon números complejos o con númerosenteros. Si el usuario escoge la opciónC (Complejos), el programa lo guía paraleer dos números complejos y visualizala suma de dichos Si el usua-rio escoge la E el pro-grama hace lo mismo, pero esta vez condos números enteros, si no el proQramavisualiza un de error.
int result=1;
for(int i=2;
result *=i;
return result;
ReCUIJere por el archivo Con-sole.class (ft¡):/I'borai)OI·a.IJIIle.edu.co/pub/eric/java)
2. el programa anterior en unarchivo llamado Falctorial.jalva
3. Genere el código de
El método llamado main en la claseFactorial es el método a sercutado. En este método se lee un entero llamado n, y se visualiza dos vecesel factorial de n, calculado por los métodos facto1 y fact02. El método lacto1calcula el factorial de un entero de forma recursiva, mientras que fact02 lohace de forma iterativa. Para ejecutar elprograma:
{
Console io=new ConsoleO;
io.~>ut(<<\rl\n[)¡g¡te un t:l H!:1IU' ... "'},
static vaid malin(String[]
{
if(n==O)
return 1;
else
return n*fact01 (n-1);
}
int n=io. notlnt/\·
io.putln(<< El factorial de «+n+» es«+facto1 (n));
El factorial de «+n+» es
static int facto1(int n)
static int n)
PRIMER EJEMPLO DE PROGRAMAEN JAVA
El programa que elusuario entra un número, y visualiza elfactorial de dicho número calculándolode forma iterativa y recursiva. Este pro-grama no tiene un interés enla orientada a ytiene como único familiarizar alprogramador con el uso del cOlmpila<:lory del interpre'tad()L
ffFíAmnln de cálculo del factorial
class Factorial
vo. Si el archivo fuente se llamaVI('I.j<:lIVéI, se compila con:
Ejemplo.java
Observe que el compilador genera unarchivo de código de bytes para cadaclase declarada en el archivo fuente. Seinterpreta el código de bytes con:
Ejemplo
de forma implícita. En la clase Polimorfismo, el método main se encarga de que el usuario seleccione si va atrabajar con números complejos o enteros, hace la lectura de los dos númerosy visualiza la suma. El método suma espolimorfo y hace la suma de sus dosargumentos teniendo en cuenta si sonnúmeros complejos o enteros. Esta forma de polimorfismo no existe en C++pero se puede implementar una funciónpolimorfa en C++ equivalente a sumapor medio de plantillas.
CREACION DE EJECUTABLES
Al ser interpretado, Java es un lenguaje lento. Ciertas aplicaciones implementadas en Java son del orden de veinte a treinta veces más lentas que susequivalentes de C++. Hoy en día, existen algunos productos que permitenobtener un ejecutable a partir de un archivo fuente de Java o de un archivo decódigo de bytes. A continuación, se citan dos productos:
1. Supersede de la sociedad Asymetrix.Ver http://www.asymetric.com/
2. Microsoft SDK (utilitario jexegen).Ver http://www.microsoft.com/javalsdkldefault.htm
Al generar un ejecutable, se pierdela independencia de la arquitectura. Nohe tenido la oportunidad de trabajar conestos productos, pero es muy probableque ellos sean limitados a ciertas aplicaciones.
PLATAFORMAS QUE SOPORTANJAVA
Al día de hoy, Java ha sido adaptadoa muchas plataformas diferentes. SunMicrosytems distribuye en forma gratuita su JDK (Java Development Kit) paraWindows 95, Windows NT, MacOS 7.5,Sparc Solaris y X86 Solaris. Se puederecuperar el kit de desarrollo (compilador, interpretador, depurador, visualizador de Applets, ...) de Sun Mi-
crosystems por ftp (ftp://ftp.javasoft.com/pub).
IBM ha portado el JDK para Windows3.1, OS2 y AIX. Ver http://ncc.hursley.ibm.com/javainfo/.
Existe una versión del JDK paraLinux. Ver http://java.blackdown.org/java-linux.html.
El producto Guavac de la Free Software Foundation (GNU) contiene dosutilitarios. El primero llamado guavac esun compilador que genera el código debytes a partir de un archivo fuente deJava (el equivalente de javac en el kitde desarrollo de SUN). El segundo llamado guayad es un desensamblador.Al día de hoy, en la distribución deGuavac, no hay un interpretador. Losdos utilitarios están escritos en C++ yse pueden compilar en cualquier plataforma equipada del compilador C++ dela GNU. Ver
http://HTTP.CS.Berkeley.EDU/-engberg/guavac/
Además, algunas empresas comoSymantec (Visual Café) y Microsoft (J++)han creado un ambiente de desarrollode programas para Java que funcionabajo Windows 95 y Windows NT dondese encuentran herramientas de muybuena calidad (compilador,interpretador, depurador, visualizador deApplets, editor de Applets, editor demenús, etc...)
MAS INFORMACION SOBRE JAVA
Si usted está interesado en Java,puede buscar información en la red Internet con un software de búsqueda. Heseleccionado algunos sitios como http://www.javasoft.com que es el sitio oficialde Sun Microsystems donde se puedeencontrar información y documentaciónsobre Java.http://www.gamelan.comdonde se puede encontrar ejemplos deprogramas y tutoriales sobre el lenguaje.
Se han creado varios grupos de noticias sobre Java. Si usted tiene acceso
a grupOS de noticias, le recomiendo losgrupOS comp.lang.java.programmer,comp.lang.java.misc ycomp.lang.java.announce.
La empresa Black Dirt ha desarrollado un utilitario llamado V Bto.Java quepermite convertir un archivo fuente deMicrosoft Visual Basic en su equivalente Java. Ver http://www.blackdirt.com.
He desarrollado algunos ejemplos deprogramas en Java, donde la clave esla programación orientada a objetos. Siusted está interesado en ellos, los puede recuperar por ftp(ftp://borabora.univalle.edu.co/pub/eric/java) .
CONCLUSIONESSe ha criticado mucho C++ como len
guaje de programación orientado a objetos. Java, en esta parte, no me parece superior a C++. Por mucho, el éxito
del lenguaje Java se debe a su particularidad de animar las páginas Web. Javaes de todos modos un lenguaje que vaa evolucionar en los futuros años. Sepuede observar al nivel mundial que muchas empresas de desarrollo de software ya han invertido en Java y entreellas están Sun Microsystems, Microsoft,Borland, Oracle, Symantec, Asymetrix,Intermetrics, Metrowerks. En los añosque vienen, seremos testigos de unagran batalla entre C++ y Java.
BIBLlOGRAFIAThe Java Handbook, Patrick Nau
ghton, Osborne McGraw-Hill.
Java in a Nutshe//, David Flanagan,Q'Reilly & Associates.
The Java Language Specification,Gosling, Joy and Steele, AddisonWesley.
/CE51 - as? »9 'liét#&f +diidil % "PES WEihít &&6 -.c9 &Md 63. Eh! lt'1m, i &i T#_ t ~#} %12 Wb 4.éM 57
~44@_& ¿ .¡dé i && iií& es ICE51