Download unidad_iii_java_capitulo_i

Document related concepts
no text concepts found
Transcript
Capítulo 1: Conceptos Básicos
1.1 Introducción
1.1.1 Antecedentes
La POO permite fabricar programas de forma más parecida al pensamiento humano, de hecho
simplifica el problema dividiéndolo en objetos y permitiendo centrarse en cada objeto, para en
esa forma eliminar la complejidad. Cada objeto se programa de forma autónoma y esa es la
principal virtud.
La Programación Orientada a Objetos tiene las siguientes ventajas respecto a otros paradigmas
de la programación:
Fomenta la reutilización y extensión del código.
Facilita el mantenimiento del software.
Permite crear sistemas más complejos.
Agiliza el desarrollo de software.
Facilita la creación de programas visuales.
Facilita el trabajo en equipo.
Permite relacionar el sistema con el mundo real.
Los principales inconvenientes serían los siguientes:
Se tiene que conocer muy bien la metodología Orientada a Objetos para poder sacar provecho
de sus beneficios.
Al principio del desarrollo de una aplicación pareciera presentar gran cantidad de código, pero
esto a la larga se convierte en un beneficio debido a la reutilización.
Al aparecer la programación orientada a objetos (en los ochenta), aparecieron varios lenguajes
orientados a objetos y también se realizaron versiones orientadas a objetos (o semi-orientadas a
objetos) de lenguajes clásicos.
Una de las más famosas fue el lenguaje orientado a objetos creado a partir del C tradicional. Se
le llamó C++ indicando con esa simbología que era un incremento del lenguaje C. La principal
ventaja que añadió C++ al C fue el soporte para objetos (POO).
C++ pasó a ser el lenguaje de programación más popular a principios de los 90 (sigue siendo un
lenguaje muy utilizado).
Otras adaptaciones famosas fueron:
El paso de Pascal a Turbo Pascal y posteriormente a Delphi.
El paso de Basic a QuickBasic y después a Visual Basic.
Pero el crecimiento vertiginoso de Internet iba a propiciar un profundo cambio.
Fig.1.1 Aparición de distintos lenguajes de programación
Java es un lenguaje de programación creado para satisfacer una necesidad de la época (así
aparecen todos los lenguajes) planteada por nuevos requerimientos hacia los lenguajes
existentes.
1.1.2 Aparición de Java
En 1991, la empresa Sun Microsystems crea el lenguaje Oak (de la mano del llamado proyecto
Green). Mediante este lenguaje se pretendía crear un sistema de televisión interactiva. Este
lenguaje sólo se llegó a utilizar de forma interna. Su propósito era crear un lenguaje
independiente de la plataforma y para uso en dispositivos electrónicos.
Se intentaba con este lenguaje paliar el problema fundamental del C++; que consiste en que al
compilar se produce un fichero ejecutable cuyo código sólo vale para la plataforma en la que se
realizó la compilación. Sun deseaba un lenguaje para programar pequeños dispositivos
electrónicos. La dificultad de estos dispositivos es que cambian continuamente y para que un
programa funcione en el siguiente dispositivo aparecido, hay que rescribir el código. Por eso
Sun quería crear un lenguaje independiente del dispositivo.
En 1995 pasa a llamarse Java y se da a conocer al público. Adquiere notoriedad rápidamente.
Java pasa a ser un lenguaje totalmente independiente de la plataforma y a la vez potente y
orientado a objetos. Esa filosofía y su facilidad para crear aplicaciones para redes TCP/IP ha
hecho que sea uno de los lenguajes más utilizados en la actualidad. La versión actual de Java es
el llamado Java SE 6.
Actualmente la empresa Oracle Corporation adquirió los derechos sobre la empresa Sun
Microsystems, y es quien hoy en día está a cargo del seguimiento de Java así como de otros
productos ofrecidos originalmente por Sun, entre los que se encuentra el popular manejador de
bases de datos MySQL entre otros.
Sus ventajas son:
 Su sintaxis es similar a C y C++
 No hay apuntadores (lo que lo hace más seguro)
 Muy preparado para aplicaciones TCP/IP
 Implementa excepciones de forma nativa
 Es interpretado / precompilado
 Permite multihilos (Multi-thread)
 Tipos de datos y control de sintaxis más rigurosa
 Totalmente orientado a objetos
 Es independiente de la plataforma
Quizá la ventaja más importante es la independencia de plataforma, y posiblemente la segunda
característica más importante es que es orientado a objetos, los programas orientados a objetos
son más fáciles de entender y consumen menos tiempo al momento de darles mantenimiento a
diferencia de los programas no orientados a objetos.
1.1.3 Crecimiento de Java
Java ha madurado inmensamente en años recientes, particularmente desde la introducción de
Java 2. La amplitud de funciones provistas por el núcleo de Java ha crecido increíblemente. Java
provee al desarrollador con herramientas para construir diversos tipos de aplicaciones, ya sean
graficas, de acceso a bases de datos o de comunicación con computadoras remotas a través de
una red. Prácticamente cualquier tipo de aplicación puede ser programada en Java de manera
efectiva, con la conveniencia implícita de la portabilidad. Por supuesto, Java todavía está en
desarrollo y en constante crecimiento.
1.1.4 Programas en Java
Hay dos tipos básicos de programas que se pueden escribir en Java. Programas que pueden ser
empotrados en una página web (applets, servlets), y programas autónomos llamados
aplicaciones Java. Las aplicaciones Java se pueden subdividir en aplicaciones de consola, las
cuales solamente soportan la salida de caracteres a la pantalla de la computadora (aplicaciones
de consola, por ejemplo salida a la línea de comandos de Windows) y en aplicaciones con
ventanas (aplicaciones graficas), en las cuales se pueden crear y manipular múltiples ventanas
además de menús, barras de herramientas, ventanas de dialogo, botones, etc.
1.1.5 Proceso de compilación
Un programa C o C++ es totalmente ejecutable y eso hace que no sea independiente de la
plataforma y que su tamaño normalmente se dispare ya que dentro del código final hay que
incluir las librerías de la plataforma.
En Java la independencia de plataforma se consigue ya que el código Java no se compila, sino
que se precompila, de tal forma que se crea un código intermedio que no es ejecutable. Para
ejecutarle hace falta pasarle por un intérprete que va ejecutando cada línea. Ese intérprete suele
ser la máquina virtual de Java.
Fig.1.2 Proceso de compilación de un Programa C++
Fig.1.3 Proceso de compilación de un Programa Java
Los programas Java no son ejecutables, no se compilan como los programas en C o C++. En su
lugar son interpretados por una aplicación conocida como la máquina virtual de Java (JVM).
Previamente el código fuente en Java se tiene que precompilar generando un código (que no es
directamente ejecutable) previo conocido como bytecode o J-code. Ese código (generado
normalmente en archivos con extensión class) es el que es ejecutado por la máquina virtual de
Java que interpreta las instrucciones de los bytecodes, ejecutando el código de la aplicación. El
bytecode se puede ejecutar en cualquier plataforma, lo único que se requiere es que esa
plataforma posea un intérprete adecuado (la máquina virtual que sea para esa plataforma). La
máquina virtual de Java, además es un programa muy pequeño y que se distribuye gratuitamente
para prácticamente todos los sistemas operativos. A este método de ejecución de programas en
tiempo real se le llama Just in Time (JIT).
En Java la unidad fundamental del código es la clase. Son las clases las que se distribuyen en el
formato bytecode de Java. Estas clases se cargan dinámicamente durante la ejecución del
programa Java.
1.1.6 Kit de desarrollo de Java (JDK)
Para escribir en Java hacen falta los programas que realizan el precompilado y la interpretación
del código, Hay entornos que permiten la creación de los bytecodes y que incluyen herramientas
con capacidad de ejecutar aplicaciones de todo tipo. El más famoso (que además es gratuito) es
el Java Developer Kit (JDK) de Sun/Oracle, que se encuentra disponible en la dirección :
http://java.sun.com/javase/downloads/index.jsp.
No hay que confundir el JDK con el JRE. El JDK es como ya mencione el kit de desarrollo
necesarios para realizar aplicaciones, mientras que el JRE es el interprete el cual es el encargado
de ejecutar las aplicaciones hechas en Java, existe una versión JRE para cada plataforma, este
interprete incluye lo que se conoce como JVM (Maquina Virtual de Java) y se puede descargar
desde:
http://java.com/en/download/inc/windows_upgrade_ie.jsp .
1.1.7 Versiones
A través de los años Java ha venido creciendo considerablemente, a continuación se muestra
una breve evolución:
Tabla 1.1 Versiones del lenguaje java.
1.2 Estructura de archivos en Java
Al llevar a cabo la instalación del kit de desarrollo de java, se crearán en el disco duro una serie
de directorios los cuales contendrán diversos archivos para el correcto funcionamiento de Java,
normalmente la carpeta raíz se nombra de acuerdo a la versión instalada en ese momento. Sin
embargo tal directorio raíz puede ser nombrado de forma diferente, según criterio del usuario.
Fig.1.4 – Estructura de directorios en Java
1.3 Escritura de programas en Java
Los archivos con código fuente en Java deben guardarse con la extensión .java. Como se ha
comentado cualquier editor de texto basta para crearle.
Algunos detalles importantes básicos son:
En java hay diferencia entre mayúsculas y minúsculas (como en C++).
Cada línea de código debe terminar con ;
Los comentarios:
 Si son de una línea debe comenzar con “//”
// comentario de una sola línea
 Si ocupan más de una línea deben comenzar con “/*” y terminar con “*/”
/* Comentario
de varias
líneas */
 También se pueden incluir comentarios javadoc
/** forma de manejo de comentarios
* para generación de documentación automatica
* mediante el comando javadoc
* @author jcarlos
*/
Más adelante veremos un poco más acerca del manejo de este último tipo de comentarios
javadoc.
1.4 Entornos de Desarrollo Integrados (IDE)
El código en Java se puede escribir en cualquier editor de texto. Y para compilar el código en
bytecodes, sólo hace falta descargar la versión del JDK deseada. Sin embargo, la escritura y
compilación de programas así utilizada es un poco incomoda. Por ello numerosas empresas
fabrican sus propios entornos de edición, algunos incluyen el compilador y otras utilizan el
propio JDK de Sun.
Existen diversos entornos de desarrollo para trabajar con Java por ejemplo Eclipse, Microsoft
Visual J++, Visual J#, JBuilder y NetBeans, éste ultimo sin duda uno de los más populares.
NetBeans es un entorno gratuito de código abierto para la generación de código en diversos
lenguajes (especialmente pensado para Java). Contiene prácticamente todo lo que se suele pedir
a un IDE, editor avanzado de código, depurador, diversos lenguajes, extensiones de todo tipo
(CORBA, Servlets, etc.). Incluye además un servidor de aplicaciones Tomcat para probar
aplicaciones de servidor. Se descarga en www.netbeans.org.
1.5 Estructura básica de una aplicación en Java
En Java la unidad fundamental del código es la clase. Son las clases las que se distribuyen en el
formato bytecode de Java. Estas clases se cargan dinámicamente durante la ejecución del
programa Java.
Resumamos como se estructura un programa en Java:
Un programa en Java siempre consiste de una o más clases
Típicamente se coloca el código de programa para cada clase en un archivo por separado, y
se le debe dar a cada archivo el mismo nombre con que la clase haya sido definida dentro de él.
Un archivo fuente de Java debe tener la extensión .java
Tales archivos pueden estar organizados dentro de carpetas o mejor dicho en paquetes
(package).
Fig.1.6 Estructura básica de un programa en Java
Fig.1.7 Detalle de instrucción para dar salida a pantalla
Fig.1.8 Detalle de la estructura básica de un programa en Java
1.6 Variables y tipos de datos
1.6.1 Variables
Las variables se utilizan para almacenar datos asociados a nombres. Cada variable tiene un
nombre que sirve de referencia para introducir datos o acceder a ellos. Un ejemplo de utilización
de variable es Edad = 23; en este caso, introducimos el valor numérico 23 en la variable con
nombre Edad. Curso
Los nombres de las variables, en Java, pueden tener cualquier longitud y deben comenzar con
una letra, el símbolo de subrayado “_” o el signo de dólar ”$”. El resto de los caracteres del
nombre pueden ser cualquiera, salvo los que pueden dar lugar a confusión, como los operadores
(+, -, *, etc.). Por ejemplo, sería correcto el nombre de variable MiAmigoMasQuerido, pero no
el de MiAmigo+Querido, puesto que en este último caso el compilador interpretaría que hay que
sumar el contenido de la variable MiAmigo con el contenido de la variable Querido. Los
nombres de variables tampoco deberán tener espacios en blanco.
Por último, los nombres de variables no deben coincidir con palabras reservadas (tales como
public, static, class, vois, main, etc.). Puesto que estos identificadores tienen un significado
especial para el compilador.
En Java, por convención los identificadores de variables suelen definirse empezando por un
carácter en minúscula, por ejemplo contador. Si en el identificador existe más de una palabra,
los comienzos del resto de las palabras se ponen con mayúsculas, ejemplo: contadorDeAciertos.
Veamos una serie de casos de identificadores de variables correctos e incorrectos:
1.6.2 Declaración de Variables
Antes de poder utilizar una variable, ésta se debe declarar. Lo cual se debe hacer de esta forma:
tipo nombrevariable;
Donde:
- tipo es el tipo de datos que almacenará la variable (texto, números enteros, etc.)
- nombrevariable es el nombre con el que se conocerá la variable.
Ejemplos:
int dias;
boolean decision;
1.6.3 Tipos de datos primitivos
A continuación se establece una relación de los tipos de datos primitivos que proporciona el
lenguaje:
Tipo
boolean
byte
short
int
Bytes que ocupa
2
1
2
4
long
double
float
char
8
8
4
2
Rango de valores
true, false
-128 a +127
-32,768 a 32767
-2,147,483,648
2,147,483,647
-9 · 1018 a 9 · 1018
-1.79 · 10308 a 1.79 · 10308
-3.4 · 1038 a 3.4 · 1038
Caracteres (en Unicode)
a
1.6.4 Conversión de tipos (Casting)
Conversión automática de tipos
Cuando el tipo del resultado de una expresión aritmética a la derecha de un operador de
asignación difiere del tipo de la variable del lado izquierdo, se aplicará una conversión
automática al resultado de tal manera que no haya posibilidad de pérdida de información.
Secuencia de conversión de un tipo a otro se daría de la siguiente manera de forma natural.
byte short int long float double
Conversión explicita de tipos (casting)
Hay veces en las que se deseará realizar algo como:
int a;
byte b=12;
a=b;
La duda está en si esto se puede realizar. La respuesta es que sí. Sí porque un dato byte es más
pequeño que uno int y Java le convertirá de forma implícita. Sin embargo en:
int a=1;
byte b;
b=a;
El compilador devolverá error aunque el número 1 sea válido para un dato byte. Para ello hay
que hacer un casting. Eso significa poner el tipo deseado entre paréntesis delante de la
expresión.
int a=1;
byte b;
b= (byte) a; //No da error
1.7 Operadores Aritméticos, Lógicos y de Comparación
¿Qué operadores hay en Java? Esta es la lista:
-- (decremento)
- (resta)
! (No lógico)
!= (distinto)
% (módulo)
%= (asignación del módulo)
& (AND a nivel de bit)
&& (AND)
&= (asignación de AND)
* (multiplicación)
*= (asignación del producto)
/ (división)
/= (asignación de la división)
?: (if-then-else)
^ (Xor a nivel de bit)
^= (asignación de Xor)
| (OR a nivel de bit)
|| (OR)
|= (asignación de OR)
- (NOT unario a nivel de bit)
+ (suma)
++ (incremento)
+= (asignación de la suma)
< (menor que)
<< (desplazamiento de bits hacia la izquierda)
<<= (asignación del desplazamiento de bits a la izquierda)
<= (menor o igual que)
= (asignación)
-= (asignación de la resta)
== (igual a)
> (mayor que)
>= (mayor o igual que)
>> (desplazamiento a la derecha)
>>= (asignación del desplazamiento a la derecha)
>>> (desplazamiento a la derecha con relleno de ceros)
>>>= (asignación del desplazamiento a la derecha con relleno de ceros)
Precedencia de operadores
Precedencia de operadores
Asociatividad
(), [], postfijo ++, postfijo -unario +, unario -, prefijo ++, prefijo --,
~, !
(type), new
*, /, %
+, <<, >>, >>>
< ,<= , >, >=, instanceof
==, !=
&
^
|
&&
||
?:
=, +=, -=, *=, /=, %=, <<=, >>=, >>>=,
&=, |=, ^=
Izquierda
Derecha
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Izquierda
Derecha