You are on page 1of 6

c 

       


 

Todo lenguaje de programación ofrece un proceso de abstracción sobre un concepto


extraído del mundo realÔ en otras palabrasÔ un lenguaje permite un mapeo entre un
problema espacial(real) hacia uno maquinal que será aquel ejecutado por una computadora.
Es en esta capacidad de abstracción es que reside la facilidad/complejidad de generar
programas funcionales capaces de resolver el problema espacial.

El lenguaje ensamblador es una abstracción de la maquina ejecutora ("procesador");


lenguajes como Fortran, Basic y C son abstracciones de este mismo lenguaje ensambladorÔ
sin embargoÔ aunque estos últimos ofrecen un avance sobre el lenguaje ensambladorÔ estos
aún requieren de procesos de abstracción considerables.

Lo anterior produce programas que son difíciles de escribir y actualizar por la simple razón
que el problema espacial dista en grandes proporciones del mapeo maquinal; frente a estas
deficiencias han surgido lenguajes más apegados al problema real tales como: PROLOG
donde todo problema es mapeado a una cadena de decisiones o LISP donde todo problema
es convertido a listas.

Aquí es donde los lenguajes orientados a objetos salen a relucirÔ esto se debe a que
permiten llevar acabo un mapeo más directo con el problema espacial(real). Allan KayÔ
describió las 5 principales características de SmalltalkÔ uno de los primeros lenguajes
orientados a objetos y uno de los lenguajes en los cuales esta basado Java:

R !
 : Considere un objeto una variable especialÔ no solamente guarda
datosÔ sino también se pueden hacer solicitudes a este Objeto en sí. En teoríaÔ
cualquier elemento en el problema espacial(real) (edificiosÔ serviciosÔ automóvilesÔ
u otra entidad) puede ser representado como un objeto en un programa.
R D   
     : Para
realizar una solicitud a un Objeto es necesario enviarle un mensaje. Concretamente
se puede pensar que un mensaje es una solicitud para llamar una función que
pertenece a cierto objeto.
R   
      
  : En otras
palabrasÔ es posible generar un tipo de Objeto nuevo agrupando Objetos existentes.
De esta manera se pueden armar estructuras complejas en un programaÔ escondidas
detrás de la simplicidad de Objetos.
R !
  ! : En este sentido Tipo se refiere a ClaseÔ donde cada
Objeto es una ÷  ÷ de una Clase en cuestión.La característica más importante
de una Clase es el tipo de mensajes que pueden ser enviados a ella.
R !
   
   : Esto implica
que si un Objeto es del tipo CirculoÔ un Objeto del tipo Figura será capaz de recibir
mensajes de CirculoÔ puesto que un Circulo es una Figura. Este concepto forma
parte medular de todo lenguaje orientado a Objetos y será explorado en una sección
especifica de este curso.
En la gráfica anterior se puede observar una Clase conformada por una Lampara (problema
espacial real) a la cual pueden ser enviados distintos mensajes tales como: á  
á   y 
 ; para crear un Objeto de esta Clase y ser utilizado dentro de un
programa es necesario generar una ÷  ÷ del mismoÔ esto se demuestra a continuación:

L
á    L
á 
 á  

El primer renglón genera una ÷  ÷ de la Clase Lampara la cual es asignada a la
 ÷ candil; en la segunda lineaÔ a través de esta  ÷ se manda llamar el
método á   definido en la misma Clase; a través de  ÷ es posible generar
distintos Objetos del mismo tipo cada uno con su propio comportamiento:

L
á    L
á 
L
á 
  L
á 
L
á   L
á 
 á  
   

 á 
 á  
   
 á 

Lo anterior demuestra una de las principales características de los lenguajes orientados a


ObjetosÔ sin embargoÔ a continuación se describen las características especificas del
Lenguaje Java y porque es considerado uno de los más avanzados en su ramo.

è       

Entre los lenguajes orientados a Objetos hoy en día èava figura entre los más utilizados
comparado con sus homólogosÔ pre-aparición de Java el lenguaje C++ se encontraba en la
cúspide para desarrollos de Software con orientación a ObjetosÔ sin embargoÔ èava ha
venido suplantando su uso debido a dos características muy especificas que C++ no ofrece.

u 
   
Esta característica forma parte del lema Java: "Write onceÔ run everywhere" (Escribalo una
vezÔ ejecutelo en todos lados)Ô a continuación se ilustra este concepto.

El proceso de creación es muy similar a la de otros lenguajes: una vez creado el Código
Fuente es necesario compilarlo para generar un binarioÔ este binario denominado Byte-Code
en Java lleva por extensión  Ô sin embargoÔ a diferencia de otros lenguajes este
binario (Byte-Code) puede ser ejecutado en diversas plataformas obteniéndose el mismo
resultado final.Esta interoperabilidad de ejecución se debe a que el Byte-Code es ejecutado
en una maquina virtual llamada "èava Virtual Machine"Ô es a través de este componente
que se logra una ejecución idéntica en distintos ambientes.

Hoy en díaÔ existen diversos èVM("èava Virtual Machines") para distintas plataformas y
ambientes que oscilan desde los Sistemas Operativos Linux,Solaris,Windows,HP-UX hasta
productos como Bases de Datos Oracle y Servidores de Aplicaciones BEA; esto permite
que código escrito en Java pueda ser ejecutado en cualquier ambiente produciéndose los
mismos resultados.

G     !" 


  !#

En la sección anterior se pudo observar como son generadas distintas ÷  ÷ de Objetos
a través de una  ÷Ô sin embargoÔ el uso de esta metodología trae consigo otro
pregunta : Que se hace con estas ÷  ÷ una vez que ya no son utilizadas ? La
importancia de este concepto se debe al uso de memoria en una computadoraÔ es lógico que
estas ÷  ÷ de Objetos requieren memoria ("RAM") para mantener su informaciónÔ
ahora bienÔ también tiene sentido asumir que la memoria ("RAM") es limitada en todo
sistemaÔ esto trae consigo el problema denominado "fuga de memoria" ("memory leak").

Si alguna vez ha programado en el lenguaje C++ debe estar familiarizado con este
conceptoÔ el cual significa que los recursos de memoria ("RAM") han sido agotados en el
sistema. Suponga que ha diseñado un programa que invoca la creación de miles de
÷  ÷ Ô eventualmente su memoria ("RAM") puede fugarse si no ha tomado las
precauciones necesarias para deshacerse/destruir estas ÷  ÷ de Objetos.

En el mundo JavaÔ esta administración explicita de ÷  ÷ de Objetos no es necesaria


debido al proceso de "Garbage Collection"; este mecanismo a través del JVM ("Java
Virtual Machine") inspecciona constantemente la memoria empleada por JavaÔ lo cual le
permite ir eliminando las ÷  ÷ de Objetos que han dejado de ser utilizadas en un
programaÔ en el proceso despreocupándose de la destrucción de Objetos.

Aunque el concepto de recolección de basura ("Garbage Collection") posee una infinidad


de detalles en su fondoÔ es conveniente saber que este proceso es llevado automáticamente
por JavaÔ y que es una facilidad no ofrecida en otros lenguajes como C++

è èc

JDK ("Java Development Kit") y J2SE ("Java 2 Standard Edition") son nombres para el
mismo componente utilizado en ambientes JavaÔ el cual agrupa las diversas funcionalidades
necesarias para desarrollar programas Java.

Hoy en díaÔ existen JDK's/J2SE para diversos ambientes y plataformasÔ los cuales ofrecen
lo siguiente:

R Dn compilador JavaÔ capaz de generar Byte-Code.


R Dn JVM ("Java Virtual Machine")Ô capaz de ejecutar Byte-Code.
R Dn conjunto de Clases base utilizadas para generar programas Java.
R Otras utilerías para administrar código escrito en Java.

Para este curso se hace uso del JDK/J2SE de Sun Microsystems Ô aunque claro estaÔ
cualquier programa generado en este JDK puede ser ejecutado otros ambientesÔ al igual que
programas compilados en otros JDK's/J2SE pueden ser ejecutados en este ambiente. El
conjunto de Clases base proporcionadas por el JDK/J2SE incluyen clases de uso común
tales como : Manipulación de String'sÔ Fechas y Números así como todas las
funcionalidades base esperadas de un lenguaje computacional como: Ordenamiento y
manipulación de ArreglosÔ Operaciones matemáticas complejas (Trigonométricas y
Exponenciales) y escritura/lectura de "Streams".

Además de estas Clases baseÔ el JDK/J2SE posee otra serie de Clases especializadas que
también ofrecen la base para la creación de otros componentes Java que incluyen : AppletsÔ
Objetos CORBA Ô Fragmentos AuditivosÔ Soporte de Criptografía (Seguridad) y
Manipulación de XML entre otras funcionalidades.

Aunado a las Clases baseÔ el JDK/J2SE incluye una serie de ejecutables utilizados para
diversas tareas como : Creación de ejecutables (Byte-Code)Ô generación de documentaciónÔ
creación de "Stubs" y "Skeletons" a través de IDL e inclusive una implementación de un
ORB ("Object Request Broker") para interactuar con ambientes CORBAÔ entre otros
ejecutables.

La estructura de directorios del JDK/J2SE es la siguiente:




    

 !!  
      
á

"

!   #    $%&'áá  
(! 
 "   )*
   )*
 !        


Como se puede observarÔ la estructura se encuentra dividida en tres grandes partes :

R : Incluye los ejecutables para la generación de programas Java.


R  : Contiene las librerías (Clases) base empleadas en la generación de la gran
mayoría de programas Java.
R  : Incluye el ambiente necesario para ejecutar programas JavaÔ el cual a su vez se
encuentra sub-dividido en distintos directorios.

Dependiendo de la manera en que haya instalado la documentación


del JDKÔ se recomienda observarla en estos momentos para que se
familiarice con sus Clases Base.





You might also like