Aprendiendo Java y POO
Java es un lenguaje muy útil debido a la opción multiplataforma que provee
Este libro se hizo con la idea de proveer a los alumnos un material didáctico con qué trabajar (también es útil para profesores y otros cursos) y al mismo tiempo dar una idea concisa de lo que significan los objetos en Java. La programación orientada a objetos en Java no es tratada y enfocada.
en muchos textos tutoriales, manuales o libros sobre el tema y considero que es la etapa inicial del aprendizaje donde se falla en muchos cursos respecto a Java. Por otro lado los estudiantes que recién se inician en la programación, no podrán ir muy lejos si no se les inculca los conceptos básicos, entonces este material no avanzara de lleno sobre la programación orientada a objetos, sino hasta que los conceptos de programación básicos, como tomas de decisión, bucles, variables etc, estén fijados lo suficiente.
Java es un lenguaje muy útil debido a la opción multiplataforma que provee (desde PC, Linux, Windows, hasta MAC, teléfonos, pocket PCs, etc.) y veremos en el transcurso de este texto como se puede optimizar la ejecución de una aplicación Java para que se aproxime a la ejecución de un binario nativo como los que se compilan con gcc.
Por lo tanto suponer que el alumno posee conocimientos avanzados de programación orientada a objetos o de otros lenguajes de programación no siempre suele ser la mejor opción, en este libro dejaremos en claro que el lenguaje de programación Java tiene sus operadores matemáticos básicos y
tipos de datos básicos sin importar que estos mismos existan o no en otros lenguajes de programación.
TEMAS INTRODUCTORIOS
La Máquina Virtual de Java (JVM, Java Virtual Machine)
La máquina virtual de Java se denomina al procesador o entorno virtual que se utiliza para interpretar los bytecodes de los binarios de Java, ya que como sabemos Java se hizo para correr en cualquier plataforma sin recompilar los binarios. De esta manera este entorno virtual se puede obtener para nuestra arquitectura y sistema operativo sin modificaciones a nuestro programa original (esto no es cierto si utilizamos una mala dinámica de programación).
Podemos entonces generar un binario y este podrá Correr en Linux, MAC OSX, FreeBSD, Solaris, o Windows, y para las arquitecturas disponibles en las que podamos obtener la JVM, como ser AMD64, SPARC, PIV, etc. etc.
La máquina virtual de Java ha tenido la característica de ser un entorno de ejecución pesado en términos de recursos del procesador y memoria, que por medio de una administración rigurosa del sistema operativo estos podrían llegar a ser insuficientes y las aplicaciones ejecutarse de manera muy lenta. Esto no es cierto en la actualidad, existen alternativas a la JVM provista por Sun Microsystems que permiten una velocidad comparable a una aplicación compilada en C++ nativa en la arquitectura, un ejemplo de esto es Kaffe, Kaffe (www.kaffe.org) es una máquina de Java OpenSource que puede compilarse sin mayores modificaciones en nuestra arquitectura necesaria y correrá increíblemente más rápida que la distribución estándar de JVM de Sun Microsystems y consumirá muchos menos recursos.
Kit de desarrollo y Entorno de ejecución (JDK, JRE)
El Kit de desarrollo conocido como JDK (Java Development Kit) provee de un compilador, un mecanismo para comprimir un proyecto en un solo archivo de tipo JAR (que es compatible con ZIP) y un entorno de ejecución para nuestros binarios.
Cuando nuestro proyecto terminado se prepara para distribuir, no es necesario tener el compilador y la mayoría de las herramientas que se proveen en el JDK, entonces podemos prescindir de dicho JDK y utilizar el entorno de ejecución que es más pequeño en cuestiones sólo de espacio en disco. Este JRE (Java Runtime Environment) también puede redistribuirse sin problemas de licencias.
En las plataformas basadas en Linux, existen mejores herramientas de desarrollo y por supuesto en casi todas las distribuciones de Linux, se encuentra disponible Kit de desarrollo o JDK. Así como recomendamos Kaffe como JVM para proyectos avanzados o de alto rendimiento, recomendamos Jikes como compilador de ByteCodes para Java, Jikes no es interpretado como el compilador proporcionado en el JDK de Sun Microsystems
Comandos que inician el JDK, JRE
java
Inicia el entorno de ejecución recibiendo como argumento el nombre del binario ejecutable en formato ByteCodes sin la extensión de archivo .class que identifica de manera visual un binario java. Este comando es parte de JDK y JRE
javac
Inicia el compilador Java recibiendo como argumento todos los archivos de código fuente cuya terminación es .java incluida dicha extensión. Este comando no es parte de JRE.
jar
Por medio de este comando iniciamos el empaquetador de clases y archivos de Java que nos permiten fabricar un único archivo contenedor de nuestras aplicaciones, multimedia y gráficos. Este comando es parte sólo de JDK
Salida por pantalla de los comandos del JDK, JRE
Salida por pantalla de los comandos del JDK, JRE
Si abrimos una consola de comandos, y ejecutamos estos comandos podremos detectar la versión del entorno de ejecución y las órdenes de entrada que estos soportan.
En Linux, podemos abrir una XTerm, buscando el menú ejecutar y escribiendo xterm. En Windows, podemos hacerlo abriendo el diálogo ejecutar y escribiendo command o cmd dependiendo si el sistema es basado en NT o 9X.Descargando el libro encontraras ejemplos
Programación Orientada a Objetos con Java
Como es sabido hay muchos lenguajes de programación orientada a objetos POO que tienen muchas similitudes entre si, pero puntualmente nos enfocaremos en Java, utilizaremos para tal efecto un modelo de fábrica de objetos, para introducir los términos clase, objeto, método, propiedad, estático, dinámico, donde la fábrica de objetos será el entorno de ejecución o JRE.
Descripción Empírica del funcionamiento del entorno JRE
Como podemos ver en la imagen anterior la fábrica de objetos utiliza memoria del sistema para fabricar los objetos, pero para fabricarlos necesita la información pregrabada llamada clases, las clases son las que almacenan las propiedades y métodos que contendrá un objeto. Un objeto cambiará sus propiedades o las propiedades de otros objetos por medio de los métodos. Los métodos que sólo pueden ejecutarse cuando el objeto existe, son los denominados dinámicos, y los métodos que pertenecen a la clase son denominados estáticos, porque pueden ser llamados sin necesidad de la existencia de un objeto.
En el ejemplo tenemos dos objetos, Reloj y Lámpara los cuales tienen métodos Cuerda e Interruptor, que son los que cambiaran el estado de las propiedades Hora e Iluminando. La clase reloj, podría tener un método estático llamado poner_en_hora, para ajustar todos los relojes fabricados. El programa en ejecución inicia en un método estático ya que no existen inicialmente objetos en nuestro programa, este método se llama main que se define como:
static int main(String[] args){ ..... }
Donde args es un vector o arreglo unidimensional que contendrá los argumentos que hayan sido pasados al comando java después de las órdenes y el nombre de la clase principal que alojará este método. El entorno de ejecución o la JVM fabricará objetos de sistema que podrán ser utilizados llamando a métodos estáticos de clases pertenecientes a la biblioteca de java.
Nota: Java provee una documentación completa en inglés de toda la biblioteca incluida en la versión de JRE o JDK, una buena práctica es no utilizar las más avanzadas y complejas funciones de la API (Application Programing Interface) ya que al querer iniciar nuestro programa en una versión anterior que no tenga una biblioteca actualizada, se pueden producir problemas de métodos faltantes.
Herencia soportada por Java
Java no soporta herencia múltiple, es decir no podemos fabricar un objeto más complejo con dos diferentes más simples, sino que sólo podremos heredar objetos nuevos de un sólo objeto padre, que proveerá los métodos y propiedades básicas que serán extendidas y/o ampliadas por el nuevo objeto. Es decir no podríamos tener un objeto Lámpara Reloj que derive del objeto Lámpara y del objeto Reloj, sino que tendríamos que usar otros mecanismos para proporcionar esa funcionalidad, interfaces y alojamiento de objetos.
Esto podría comprenderse como:
Interfaces:
Permiten que sean implementadas por objetos para adquirir comportamiento, pero el comportamiento no es provisto por la interfaz, sino que el programador debe proporcionar una manera eficaz de construir los métodos definidos en dicha interfaz uno por uno. Pueden implementarse varias interfaces al mismo tiempo, en todos los casos es necesario codificar funciones o métodos.
Alojamiento: Podemos pensar que al objeto Lámpara le insertamos en su interior un objeto Reloj entonces podemos llamar a los métodos del Reloj que está en la Lámpara, esto lo veremos más adelante en algunos ejemplos. Ya no sería la Lámpara Reloj, pero sería una Lámpara con Reloj.
Herencia: Nos permite crear un objeto nuevo en base a uno existente, es una nueva clase de objeto, puede utilizar el alojamiento de otros objetos como propiedades para adquirir funcionalidad.
Alojamiento: Podemos pensar que al objeto Lámpara le insertamos en su interior un objeto Reloj entonces podemos llamar a los métodos del Reloj que está en la Lámpara, esto lo veremos más adelante en algunos ejemplos. Ya no sería la Lámpara Reloj, pero sería una Lámpara con Reloj.
Herencia: Nos permite crear un objeto nuevo en base a uno existente, es una nueva clase de objeto, puede utilizar el alojamiento de otros objetos como propiedades para adquirir funcionalidad.
SIGUE APRENDIENDO DESCARGANDO EL ARCHIVO