Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para asegurar el aprendizaje se recomienda leer detalladamente el libro, analizar las imágenes que
contiene, observar los videos y resolver los ejercicios desarrollados.
.
CAPITULO 1 –INTRODUCCIÓNAL
LENGUAJE DE PROGRAMACIÓN JAVA
Este primer capítulo nos regalara un enfoque general del lenguaje de programación Java,
aportándonos información relevante y detallada para que continuemos nuestro estudio por cada uno
de los capítulos, y podamos resolver los ejercicios que se proponen.
Historia de Java
Java es un lenguaje de programación orientado a objetos desarrollado por un grupo de ingeniero de
Sun Microsystems,cuando en el año 1990 Patrick Naughton, reclutó a varios colegas entre
ellos James Gosling y Mike Sheridan, para trabajar en un proyecto conocido como “El proyecto
Verde”, en el que trabajaron 18 meses dentro de una pequeña oficina en Sand Hill Road en Menlo
Park, California.Intentaban desarrollar una nueva tecnología para programar la futura generación de
dispositivos electrónicos, como calculadoras, hornos microondas y televisores interactivos.
James Gosling intentó en primera instancia extender y modificar el lenguaje C++ el resultando fue el
lenguaje C++ ++ - (++ - porque se añadían y eliminaban características a C++), pero lo abandonó
para crear un nuevo lenguaje desde cero al que llamo Oak (roble en español, según la versión más
aceptada, por el roble que veía a través de la ventana de su despacho).
En Agosto de 1991 Oak ya corría sus primeros programas, y para 1992, ya había desarrollado un
sistema en un prototipo llamado Star7 (*7), dispositivo parecido a una PDA (asistente digital
personal).
Scott McNealy, presidente de Sun Microsystems, estableció el Proyecto Verde como una subsidiaria
de Sun y el 3 de septiembre del 1992 se terminó el proyecto verde pero al mismo tiempo nace el
fenómeno mundial de la Web.
En este mismo año se leshace la demostración a los ejecutivos de Sun, esta vez, se reconocen el
potencial de Java y se acepta el proyecto.
En enero de 1995 Sun forma la empresa Java Soft para dedicarse al desarrollo de productos
basados en la tecnología Java, y así trabajar con terceras partes para crear aplicaciones,
herramientas, sistemas de plataforma y servicios para aumentar las capacidades del lenguaje. Ese
mismo año aparece la versión 1.0 del JDK(Kit de desarrollo de Java).
El 23 de Mayo de 1995 Netscape anunció que incluiría soporte para Java en sus navegadores, dando
con esto un buen apoyo a Java.
Actualmente Java paso a propiedad de la empresa Oracle al ser compradorade la mayor parte de las
acciones de Sun Microsystems.
a.) SIMPLE
Completado con utilidades, El paquete de utilidades de Java, más conocido como la API
(Interfaz de programación de aplicaciones), viene con un conjunto completo de estructuras de
datos y sus métodos asociados, que serán de gran ayuda para desarrollar e implementar
aplicaciones. Se dispone también de estructuras de datos habituales, como arreglos, colas y
pilas, como también clases ya implementadas para manejar algunas estructuras de datos.
b.) POTENTE
Robusto, Java verifica su código al mismo tiempo que lo escribe (depende del IDE o el Editor
que se utilice), y una vez más antes de ejecutarse, de manera que se consigue un alto margen
de codificación sin errores. Se realiza un descubrimiento de la mayor parte de los errores durante
el tiempo de compilación, ya que Java es estricto en cuanto a tipos y declaraciones, y así lo que
es rigidez y falta de flexibilidad se convierte en eficacia.
Gestión de memoria, Java libera al programador del compromiso de tener que controlar
especialmente la asignación de memoria,el mismo administra esta y se hace a ella sus
necesidades específicas. Este lenguaje posee una gestión avanzada de memoria llamada
gestión de basura, y un manejo de excepciones orientado a objetos integrados.
Modelo rico de objetos, Existen varias clases que contienen las abstracciones básicas para
facilitar a los programas en Java. Se contará con un conjunto de clases comunes que pueden
crecer para admitir todas las necesidades del programador (a ese conjunto de clases se les “API”
Interfaz de Programación de Aplicación).
Interactivo y animado, Uno de los requisitos de Java desde sus inicios fue la posibilidad de
crear programas en red interactivos, por lo que es capaz de hacer varias cosas a la vez sin
perder rastro de lo que debería suceder y cuándo. Se da soporte a la utilización de múltiples hilos
de programación (multithread). Las aplicaciones de Java permiten situar figuras animadas en las
páginas Web, y éstas pueden concebirse con logotipos animados o con texto que se desplace
por la pantalla.
Arquitectura neutral, Java está diseñado para que un programa escrito en este lenguaje sea
ejecutado correctamente independientemente de la plataforma en la que se esté actuando
(Macintosh, PC, UNIX…). Para conseguir esto utiliza una compilación en una representación
intermedia que recibe el nombre de códigos de byte, que pueden interpretarse en cualquier
sistema operativo con un intérprete de Java (El intérprete de Java es “JVM” Máquina Virtual de
Java contenida en JRE Java Runtime Evironment).
Trabajo en red, Java anima las páginas Web y hace posible la incorporación de aplicaciones
interactivas y especializadas. Aporta la posibilidad de distribuir contenidos ejecutables, de
manera que los suministradores de información de la Web pueden crear una página de hipertexto
(página Web con código HTML) con una interacción continuada y compleja en tiempo real; el
contenido ejecutable es transferido literalmente al ordenador del usuario. Los protocolos básicos
para trabajar en Internet están encapsulados en unas cuantas clases simples. Se incluyen
implementaciones ampliables de los protocolos FTP, HTTP, NNTP y SMTP junto con conectores
de red de bajo nivel e interfaces de nombrado. Esto le permite interactuar con esos servicios de
red poderosos sin tener que comprender realmente los detalles de bajo nivel de esos protocolos.
Este lenguaje está diseñado para cumplir los requisitos de entrega de contenidos interactivos
mediante el uso de applets insertados en sus páginas HTML. Además, las clases de Java
admiten muy bien estos protocolos y formatos. El envío de las clases de Java a través de Internet
se realiza con gran facilidad, ya que existe una interfaz unificada, resolviendo así los típicos
problemas de diferencia de versiones. Java proporciona un conjunto de clases para tratar con
una abstracción de los conectores de red (sockets) originales de la versión UNIX de Berckley,
encapsular la noción de una dirección de Internet o conectar sockets con flujos de datos de
Entrada/Salida.
d.) SEGURIDAD
Existe una preocupación lógica en Internet por el tema de la seguridad: virus, caballos de Troya,
y programas similares navegan de forma usual por la red, constituyéndose una amenaza
palpable. Java ha sido diseñado poniendo un énfasis especial en el tema de la seguridad, y se ha
conseguido lograr cierta inmunidad en el aspecto de que un programa realizado en Java no
puede realizar llamadas a funciones globales ni acceder a recursos arbitrarios del sistema, por lo
que el control sobre los programas ejecutables no es comparable a otros lenguajes. Los niveles
de seguridad que presenta son:
• Rutina de verificación de los códigos de byte que asegura que no se viole ninguna
construcción del lenguaje.
Permiten tratar los ficheros, sockets, teclado y monitor como flujos de datos. De este modo se
pueden utilizar para cualquier operación de Entrada/Salida.
f.) DIFERENTES TIPOS DE APLICACIONES
• Aplicaciones: Se ejecutan sin necesidad de un navegador (se les conoce como aplicaciones
de escritorio).
• JavaScript: Conjunto del lenguaje Java que puede codificarse directamente sobre cualquier
documento HTML
• Servlets: Módulos que permiten sustituir o utilizar el lenguaje Java en lugar de programas
CGI (Common Gateway Interface) a la hora de dotar de interactividad a las páginas Web.
Guardar el Archivo en
formato .java
Obtener Documentación
Archivo *.java
(javadoc)
Transformación a código
maquina (JVM)
Los programas Java (archivos *.java) son compilados por medio del comando javac
{nombre_archivo.java} de la JDK creando bytecodes (archivos *.class) compactos, sonestos
bytecodes lo que el JVM por medio del comando java {nombre_archivo.class} lee, interpreta y
convierte a código máquina para ejecutar el programa en el ordenador.
Cuandose descarga una applet Java de la red Internet, lo que realmente está descargandoes un
archivo de bytecodes (archivo *.class) y este es interpretado por la JVM.
La compilación se le debe realizar a la clase que contenga el método principal main() o init() en caso
de que sean applets. El compilador se encargara de ir a las otras clases usadas en estos métodos y
realizar su compilación también.
b.) Instalar en su computadora la versión de la JDK descargada (solo sigue cada uno de los pasos).
c.) Configurar las variables de entono PATH y/o CLASSPATH (classpath es solo para Windows vista
o 7).
4. Localizo en la zona de variables del sistema una que se llama “Path” y pulso sobre editar.
5. No borramos nada de lo que contiene la variable Path y/o CLASSPATH, seguido de lo que
contiene colocamos un “;” sin espacios y la dirección donde está instalado nuestra JDK,
especialmente la carpeta “bin”. (en mi caso es C:\Program Files\Java\jdk1.6.0_24\bin),
concluimos pulsando sobre el boton aceptar.
Figura Nro 10: Editar la variable PATH y/o CLASSPATH
6. Este paso aplica es solo para windows vista o 7 y es opcional en algunos equipos, debes
repetir el paso 4 y 5, pero esta vez debes localizar la variable de entorno “CLASSPATH” y a
esta agregar la dirección de los archivos (src.zipytools.jar) según mi caso los valores son
losque está dentro de las comillas “C:\ProgramFiles\Java\jdk1.6.0_10\src.zip;C:\Program
Files\Java\jdk1.6.0_10\lib\tools.jar”. (Por ultimo no olvides presionar el botón aceptar).
d.) Abre una consola de MS–Dos y escribimos el comando de ejecución de programas de Javade la
JRE (java) y de la JDK el compilador (javac), para verificar que la configuración concluyo con
éxito. (no olvide presionar la tecla enter de su teclado).
e.) Abre un editor de texto y escribo el siguiente programa, al guardarlo le coloco el mismo nombre
que se le asigne a la “clase” más el consecutivo de .java en este caso. (Ejemplo.java).
Programa Nro 1: Programa escrito en un editor de texto
f.) Desde MS–Dos debo acceder a la carpeta donde se guardó nuestro archivo (Ejemplo.java).
Escribiendo la letra de la unidad de disco seguido de dos punto “:” y la presión de la tecla enter
permite ingresar a la unidad de disco (d:), escribiendo las letras “cd” seguido decarpeta y la
presión de la letra enter permite acceder la carpeta donde está guardado nuestro programa
(cdprogramas).
g.) Compilar el programaescribiendo el comando de ejecución de java (javac) seguido del nombre
del programa y el tipo de archivo (javac Ejemplo.java)luego se debe presionar la tecla enter.
Ejecutar el programa (java Ejemplo).
Figura Nro 15:Compilar el programa
Figura Nro16:Ejecución del
programa
Estas clases se pueden incluir en los programas Java, sin temor a fallos de portabilidad. Además,
están bien documentadas (mediante páginas Web), y organizadas en paquetes y en un gran árbol de
herencia.
A este conjunto de paquetes de librerías(o bibliotecas) se le conoce como la API de Java (Application
Programming Interface), es contenidointerno de la JDKo JRE en un archivo comprimido de nombre
src.zip.
a. Paquetes de utilidades
• java.lang: Fundamental para el lenguaje Java porque Incluye clases como String o
StringBuffer.
• java.io: Para la entrada y salida a través de flujos de datos, y ficheros del sistema.
• java.text: Clases e interfaces para manejo de texto, fechas, números y mensajes de una
manera independiente a los lenguajes naturales.
• java.applet: Para crear applets y clases que las applets utilizan para comunicarse con su
contexto.
• java.awt: Para crear interfaces con el usuario, y para dibujar imágenes y gráficos.
• javax.swing: Conjunto de componentes gráficos que funcionan igual en todas las plataformas
que Java soporta.
• java.sql: Paquete que contiene el JDBC, para conexión de programas Java con Bases de
datos.
• java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con ellos e incluso enviar
objetos como parámetros de un objeto a otro.
Plataformas de Java
Java es un lenguaje que actualmente se encuentra en todas partes gracias al soporte que presta
para programar aplicaciones.Java 2 Enterprise Edition (J2EE) permite la creación de programas
para computadoras que prestan servicios a otras aplicaciones, Java 2 Standard Edition (J2SE)
permite la creación de programas a computadores convencionales, Java 2 Micro Edition (J2ME)
permite la programación de aplicación para la tecnología Móvil y Java Card permite la programación
de tarjetas(débitos, créditos, entre otros).
• Eclipse y Netbeans, Soporta múltiples lenguajes como: Java, C/C++, PHP, entre otros.
• JBuilder, Soporta múltiples lenguajes como: Java, C/C++, PHP, entre otros.
Los editores solo permiten escribir los códigos de los programas y guardarlos en el formato
establecido para que pueda ser interpretado por el compilador.
Tokens
La estructura de un programa Java está definida porTokens, Un token es el elemento más pequeño
de un programa que es significativo para el compilador. Cuando se compila un programa Java, el
compilador analiza el texto, reconoce y elimina los espacios en blanco y comentarios y extrae tokens
individuales. Los tokens resultantes se compilan, traduciéndolos a código de byte Java, que es
independiente del sistema e interpretable dentro de un entorno Java.Los códigos de byte se ajustan al
sistema de Máquina Virtual Java (JVM). Los tokens Java pueden subdividirse en cinco categorías:
Identificadores, palabras clave, constantes, operadores y separadores.
a.) Indicadores, Los identificadores son tokens que representan nombres asignables a variables,
métodos y clases para identificarlos de forma única ante el compilador y darles nombres con
sentido para el programador.
Todos los identificadores de Java diferencian entre mayúsculas y minúsculas (Java es sensible a
mayúsculas y minúsculas),todos los identificadorescomienza con una letra o un subrayado (_).
Los caracteres posteriores del identificador pueden incluir las cifras del 0 al 9. Como nombres de
identificadores no se pueden usar palabras claves reservadas por Java.
Además de las restricciones mencionadas existen propuestas de estilo. Es una práctica estándar
de Java denominar:
• Las clases o interfaces: Iniciar con Letra mayúscula cada comienzo de nueva palabrao
separarlas con un “_”(Clase o MiClase o SumaMultiple o Interfacez o MiInterfaz).
• Los métodos: Iniciar con letra minúscula pero si es un identificador compuesto esta
segunda palabra debe comenzar con mayúscula o un “_”(metodo() o metodoLargo() o
sumaOperativa()).
• Las variables: Iniciar con letra minúscula pero si es un identificador compuesto esta
segunda palabra debe comenzar con mayúscula o un “_” (altura o alturaMedia).
Sin entrar en más detalle en el siguiente ejemplo se estructuras cada uno de los identificadores.
b.) Palabras claves, Las palabras claves son aquellos identificadores reservados por Java para un
objetivo determinado y se usan sólo de la forma limitada y específica. Java tiene un conjunto de
palabras clave más rico que C o que C++. Las siguientes palabras son reservadas por Java:
c.) Literales o Constantes, Los literales son sintaxis para asignar valores constantesa las variables.
Cada variable es de un tipo de datos concreto, y dichos tipos de datos tienen sus propios literales
(identificador + constante).Mediante determinados modificadores (static y final) podremos crear
variables constantes, que no modifican su valor durante la ejecución de un programa. Las
constantes pueden ser numéricas, booleanas, caracteres (Unicode) o cadenas (String).
Se puede observar en este ejemplo la utilización de la palabra “final y final static”, con la palabra
reservada “final” se coloca la variable constante por ese motivo no se puede modificar su valor, la
variable “final static” al igual que la anterior es constante pero tiene en particular que esta se
puede acceder desde fuera de cualquier clasey si no tiene la palabra “final” se puede modificar.
d.) Operadores, Conocidos también como operando, indican una evaluación o computación para
ser realizada en objetos o datos, y en definitiva sobre identificadores o constantes. Los
operadores admitidos por Java son de cuatro tipos:
• Operadores Aritméticos
• Operadores de Asignación
• Operadores especiales
Los operadores binarios tienen la misma prioridad excepto los operadores de asignación, porque
este se evalúa por el compilador de derecha a izquierda, contario a los demás que se evalúan de
izquierda a derecha.
e.) Separadores, Se usan para informar al compilador de Java cómo están agrupadas las cosas en
el código.Los separadores admitidos por Java son: { } () , ; . []
Expresiones
Una expresión es un conjunto o combinación de variables y llamadas de métodos unidas por
operadores,construidas de acuerdo a la sintaxis del lenguaje. El comportamiento real de un programa
Java se logra a través de expresiones, que se agrupan para crear sentencias.
Java identifica dos tipos de expresiones básicas Aritméticas y Lógicas, las expresiones aritméticas
se caracterizan porque los operandos que intervienen son número, los resultados también son
numéricos y los operadores son aritméticos (+,- , *, entre otros); las expresiones lógicas los
operadores son lógicas o relacionales (<=, ==, &&, ||, entre otros) y los resultados solo pueden ser
verdaderos o falsos.
Una sentencia en Java es una expresión que termina con un punto y como “;” y se pueden incluir
varias sentencias en una sola línea. Aunque lo habitual es utilizar una línea por cada sentencia.
Las expresiones son utilizadas para realizar cálculos, para asignar valores a variables, y para ayudar
a controlar la ejecución del flujo del programa. La tarea de una expresión se compone de dos partes:
realiza el cálculo indicado por los elementos de la expresión y devuelve el valor obtenido como
resultado del cálculo.
El tipo de datos del valor devuelto por una expresión depende de los elementos utilizados en la
expresión. La expresión suma = a + b; devuelve un entero porque a = 10 y b = 5, ambos son
enterospor tanto devuelve un valor del mismo tipo. Otras expresiones devuelven valores booleanos,
cadenas, entre otros, como:x=suma % 2 == 0 en donde aplica un operador aritmética para
determinar el módulo de división y uno relacional para identificar la igualdad, si es igual a cero
devuelve true, caso contrario false.
Una expresión de llamada a un método se evalúa al valor de retorno del método; así el tipo de dato
de la expresión de llamada a un método es el mismo que el tipo de dato del valor de retorno de ese
método.
Como se puede observar, Java permite construir sentencias (expresiones compuestas) a partir de
varias expresiones más pequeñas con tal que los tipos de datos requeridos por una parte de la
expresión concuerden con los tipos de datos de la otra.
Bloques y ámbitos
En Java el código fuente está dividido en partes separadas por llaves, denominas bloques. Cada
bloque existe independiente de lo que está fuera de él, agrupando en su interior sentencias o
expresiones relacionadas.Java presenta una jerarquía de bloques, externos e internos o subbloques.
Toda variable tiene un ámbito en el que es usada, que viene determinado por los bloques. Una
variable definida en un bloque interno no es visible por el bloque externo.
Las llaves de separación son importantes no sólo en un sentido lógico, ya que son la forma en que el
compilador diferencie dónde acaba una sección de código y dónde comienza otra, sino que tienen
una connotación estética que facilita la lectura de los programas al ser humano.
Así mismo, para identificar los diferentes bloques se utilizan sangrías. Las sangrías se utilizan para el
programador, no para el compilador. La sangría (también denominada indentación o tabulación).
int x = 1;
Los tipos de datos en Java pueden dividirse en dos categorías: Simples o primitivos y Compuesto.
Los tipos de datos simples son tipos nucleares que no se derivan de otros tipos, como los enteros, los
de coma flotante, booleanos y de carácter. Los tipos compuestos se basan en los tipos simples, e
incluyen las cadenas, las matrices y tanto las clases como las interfaces, en general (Ejemplo: un
objeto que utiliza diferentes atributos de tipo “String, double, float y boolean” para realizar sus
operaciones es un tipo de dato compuesto “objeto”).
• Tipo de datos enteros, Se usan para representar números enteros con signo.
• Tipos de datos decimales, Se usan para representar números con partes fraccionarias. En Java
se pueden usar dos tipos de datos decimales: float y double. El primero reserva almacenamiento
para un número de precisión simple de 4 bytes y el segundo lo hace para un número de precisión
de 8 bytes.
• Tipo de datos boolean, Se usa para almacenar variables que presenten dos estados, que serán
representados por los valores true y false.
• Tipo de datos char, Se usa para almacenar caracteres Unicode simples. Debido a que el
conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se
almacena en un entero sin signo de 16 bits.
• Tipo de datos String, En Java se tratan como una clase especial llamada String. Las cadenas
se gestionan internamente por medio de una instancia de la clase String. Una instancia de la
clase String es un objeto que ha sido creado siguiendo la descripción de la clase.
Variables
Una Variables no es más que un nombre simbólico que identifica una posición en memoria. Para
utilizar una variable en un ámbito de un programa hay que declararla en un bloque de ejecución, Los
identificadores de las variables son los nombres que utilizamos para referirnos a ellas, Al declarar una
variable hay que definirle su tipo y en una misma declaración se pueden declarar varias variables
separadas por coma. Esta acción del programador permite al ordenador prepararlo para los
siguientes:
• Al declarar una variable, se reserva el espacio de memoria necesario para almacenar el valor
del tipo de la variable.
class MiClase{
public static void main(String arg[]){
/*Dentro de este bloque se debe ingresar todo el códigológicoque
debe ejecutar nuestro programa*/
}
}
class MiClase{
public static void main(String arg[]){
System.out.print(“Hola mundo!!!”); /*Esta sentencia permite imprimir
un mensaje por consola*/
}
}
• “out”es un objeto de la clase PrintStreampara imprimirlos datos en la salida estándar del sistema
(normalmente asociado con la pantalla). Se utiliza así: “System.out”.
• “err” es un objeto de la clasePrintStreamusado para mensajes de error que salen también por
pantalla pero defecto. Se utiliza así: “System.err”.
System
in (InputStream)
out (PrintStream)
err (PrintStream)
System.in solo ofrece un método para leer datos “read()”,este lee un carácter y devuelve un
entero,System.out ofrece dos métodos para imprimir en pantalla el argumento que se le envié por
parámetro print(argumento)y println(argumento), la diferencia entre ellos es que el println coloca
un “\n”o salto de línea, al final.
Todas las clases mencionadas anteriormente se encuentran en la JDK “Kit de desarrollo de Java” y
están disponibles para ser utilizadas de forma directa o indirectamente.
Para Java, un InputStream es cualquier cosa de la que se leen bytes. Puede ser del teclado, un
fichero, un socket, un archivo plano, o cualquier otro dispositivo de entrada.
Un InputStream es para leer bytes, es decir que solo tiene métodos para leer tipo de dato bytes (un
byte es un entero de -128 a 127). Nosotros queremos leer palabras o números del teclado, no bytes.
Si escribimos en el teclado la letra A mayúscula y la leemos con System.in, obtendremos un entero
de valor 65, que es el valor del byte correspondiente a la A. Para obtener el carácter ingresado por
consola se debe hacer un casting con el tipo de dato char que me convierta ese entero en un único
carácter.
Programa Nro 14: Lectura (System.in)e impresión (System.out) un dato por consola
Si se desea crear un aplicativo que lee una cadena de caracteres se debe repetir el método
read()hasta el usuario presiones una salto de línea con la tecla “Enter”.
Para Java, una clase Reader es un objeto que lee caracteres. Un Reader tiene métodos para leer
caracteres. Con esta clase ya podríamos trabajar. El problema es que seguimos teniendo System.in,
que es un InputStream y no un Reader.
¿Cómo convertimos el System.in en Reader? Hay una clase en Java, la InputStreamReader, que
nos hace esta conversión. Para obtener un Reader, únicamente tenemos que instanciar un
InputStreamReader pasándole en el constructor un InputStream. El código es el siguiente:
Estamos declarando una variable "isr" de tipo InputStreamReader. Creamos un objeto de esta clase
haciendo new InputStreamReader(...). Entre paréntesis le pasamos el InputStream que queremos
convertir a Reader, en este caso, el “System.in”.
Si estamos leyendo de teclado, el que usa el programa puede escribir 10 caracteres o 20 o 13. Si
usamos InputStreamReader, solo lee con el método read()el primer carácter, Tenemos que decirle
cuántos caracteres queremos leer, o bien ir pidiendo de uno en uno hasta que no queramos más. En
realidad el InputStreamReader funciona muy igual al InputStream con el System.in.read(), pero es
requerido de forma especial para poder leer cadenas de caracteres con la utilización de otros objetos.
El resultado de la ejecución de este programa es igual según la figura numero 24, y si se le cambia el
tipo de dato de la variable carácter a int y quitamos el castin con (char) nos devolverá un byte.
Entonces podemos decir que la clase InputStreamReader sola como tal no funciona para recibir
cadenas de caracteres, pero la claseBufferedReader a partir de otro Reader cualquiera (por ejemplo
el InputStreamReader), si nos permite obtener una cadena de caracteres (String). El código es:
El funcionamiento de esta clase es igual que el InputStreamReader. Cuando le pedimos una línea
completa de caracteres (un String), ella se lo pide al Readerlo que tenga dentro y los convierte en
String.
Para pedirle un String, se usa el método readLine(). Este método lee todos los caracteres tecleados
(recibidos si fuera otro dispositivo de entrada) hasta que encuentra la pulsación de la tecla <INTRO>,
<RETURN> o como quieras llamarla.
Figura Nro 26:Jerarquía necesaria para leer una cadena de caracteres por consola
El siguiente ejemplo leer por teclado una cadena de caracteres y lo guarda en una variable “texto de
tipo de dato String.
Ahora con la implementación de esta clase Scanner, nos podemos ahorrar algo de código y hacerlo
de la siguiente forma:
Programa Nro 19: Lectura e impresión de una cadena completa clase Scanner
La clase scanner recibe por parámetro un InputStream (System.in) y con el método next() lee una
cadena de caracteres, es decir con esta clase no se requiere la clase intermedio InputStreamReader,
para convertir un byte a un carácter.
La única excepción que tenemos al utilizar la clase Scanner es que ella nos permite leer una cadena
de caracteres mientras no tenga espacios, es decir que si ingresa en la cadena un espacio, a partir
de él no es leída.
Estructuras de control
Las estructuras de control en un programa permiten modificar la ruta de ejecución de un programa en
Java. El lenguaje Java soporta las siguientes estructuras de control:
Sentencia Clave
Toma de decisión if-else, switch-case
Bucle o ciclos for, while, do-while
Misceláneo break, continue, label:, return, goto
Tabla Nro 10: Estructuras de control
• Las sentencias condicionales: if, Se trata de una estructura de control que permite redirigir un
curso de acción según la evaluación de una condicióno expresiones simple, sea falsa o
verdadera.
/*Condicional simple*/
if(condicion){
//En este bloque se ejecutan las sentencias requeridas
}else{
//En este bloque se ejecutan las sentencias requeridas
}
Programa Nro 21: Verifica si un número es par o impar
Puede darse el caso en un aplicativo donde toque realizar Condiciones anidadas es decir un
condicional de cualquier tipo con otro condicional interno.
El programa anterior recibe un primer dato por teclado y dependiendo su valor el programa
ejecuta una serie de sentencias más entre estas una estructura condicional compuesta.
switch(op){
case 1:
/*Ejecuta las sentencias */
break;
case 2:
/*Ejecuta las sentencias */
break;
case 3:
/*Ejecuta las sentencias */
break;
case 4:
/*Ejecuta las sentencias */
break;
default:
/*Ejecuta las sentencias por defecto si no se cumple ninguna de los casos anteriores*/
}
Al ejecutar el programa anterior notara que su funcionamiento será igual al programa numero 23.
Entonces podemos concluir que un switch es una representación condicional que utiliza casos
(case) en vez de if.
• Sentencia condicional en una sola línea, este sentencia representa un if else simple, en está
se estipulada la condición if con el operador “?” y el else un “:”.
El siguiente ejemplo utiliza una variable entera identificada con nombre resultado y que toma el
valor de las sentencias (a+b) o (a-b) según el condicional (a<b).
Programa Nro 25: Estructura condicional simple en una sola línea
• Sentencias de iteración o bucles for, while y do - while: un bucle se utiliza para realizar un
proceso repetitivo, las sentencias ejecutadas dentro del bloque del bucle se ejecutan mientras
que la condición de parada sea una verdad.
inicialización;
while(condicion){
sentencias;
incremento;
}
do{
sentencias;
}while(condicion);
La diferencia del bucle do – while con respecto a los demás es que este por lo menos deja
ejecutar las sentencias internas en el bloque una sola vez, y la continuación iterativa de ejecución
dependerá de que la condición sea un valor de verdad.
Programa Nro 26: Estructura repetitiva do{ }while();
Como podemos observar en el anterior ejemplo nuestro programa muestra al usuario un menú en
el cual podrá seleccionar entre dos opciones y el programa responderá según la opción
seleccionada, además también pedirá una respuesta sobre si desea o no continuar, según esta
respuesta y la condición de verdad del “while” se repita el ciclo. Podemos ver que la estructura
do{ }while() permite la ejecución de su código interno al menos una vez.
• Sentencias de salto, break y continue, este tipo de sentencias permite determinar el lugar
donde continuara una ejecución de un programa, el lugar seleccionado es identificado por una
etiqueta establecida a un bloque “{}”, y el lugar donde se deben incluir es cuando se tienen uno o
más buques dentro de otro.
En este ejemplo el continue salta a una etiqueta pero continúa la ejecución del programa, es
decir no detiene el número de iteraciones que se planearon realizar.
Contadores
Un contador es una variable cuyo valor es incrementado o decrementado en una cantidad constante
cada vez que se produce un determinado suceso o acción. Los contadores se utilizan con la finalidad
de contar sucesos o acciones internas de un bucle; deben realizar una operación de inicialización y
posteriormente las sucesivas de incremento o decremento del mismo. La inicialización consiste en
asignarle al contador un valor.
Representación:
<nombre del contador>=<nombre del contador> + <valor constante>
Si en vez de incremento es decremento se coloca un menos en lugar del más.
Ejemplo: i = i + 1
Acumuladores o totalizadores
Es una variable que suma sobre sí misma un conjunto de valores, de esta manera tener la suma de
todos ellos en una sola variable. La diferencia entre un contador y un acumulador es que mientras el
primero va aumentando de uno en uno, el acumulador va aumentando en una cantidad variable.
Valores de inicialización
Suma = 0
Excepciones en Java
Las excepciones son otra forma más avanzada de controlar el flujo de un programa. Con ellas se
podrán realizar acciones especiales si se dan determinadas condiciones, justo en el momento en que
esas condiciones se den.
Concatenación
La concatenación es la acción de unir cosas, en Java esta acción es permitida utilizando el operador
aritmético “+”, con este podemos unir dos o más cadenas. Por ejemplo:
String a=”Hola”;
String b=”Valentina”;
String cadena=a+b+”!!!”;
System.out.print(cadena);
Este ejemplo nos imprimirá en pantalla el resultado la cadena “Hola Valentina!!!”. De igual forma
podemos concatenar otro tipo de dato, ya sea entero, flotante, doublé, entre otro.
Un objeto es cualquier cosa de la vida cotidiana que tiene atributos y acciones, por ejemplo el objeto
Carro tiene atributos tales como color, lámparas, tipo de llantas (grandes, medianas y
pequeñas),mecanismo (automático o mecánico), número de pasajeros, entre otros. Cada vez que se
crea un objeto carro hay que definir los valores que tienen estos atributos.
El elemento básico de la programación orientada a objetos en Java es la Clase. Una clase define la
forma y comportamiento de un objeto.
Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave reservada
class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la
clase.
class Carro {
• Atributos, Los datos se encapsulan dentro de una clase declarando variables dentro de las
llaves de apertura y cierre de la declaración de la clase, variables que se conocen como
atributos. Se declaran igual que las variables locales de un método en concreto.
Por ejemplo, este es un programa que declara una clase Aritmética, con dos atributos enteros
llamados n1 e n2.
classAritmética {
doublé n1,n2;
Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la memoria
un espacio para un conjunto de datos como el que definen los atributos de una clase. A este
conjunto de variables se le denomina variables de instancia.
• Métodos, Los métodos son subrutinas que definen la interfaz de una clase, sus capacidades y
comportamiento.
Un método ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por
los nombres de la clase en que está definido. Los métodos se declaran al mismo nivel que las
variables de instancia dentro de una definición de clase.
En la declaración de los métodos se define el tipo de valor que devuelven y a una lista formal de
parámetros de entrada, de sintaxis tipo identificador separadas por comas. La forma general de
una declaración de método es:
cuerpo_del_método;
}
En el caso de que no se desee devolver ningún valor se deberá indicar como tipo la palabra
reservada void. Así mismo, si no se desean parámetros, la declaración del método debería
incluir un par de paréntesis vacíos ():
void metodoVacio( ) {
Los métodos son llamados indicando una instancia individual de la clase, que tendrá su propio
conjunto único de variables de instancia, por lo que los métodos se pueden referir directamente a
ellas.
Por ejemplo el método inicia() establecer valores a las dos variables de instancia:
n1 = paramX;
n2 = paramY;
También podemos definir métodos set para ingresarle valores a los atributos y métodos get para
obtener los valores que poseen esos atributos pertenecientes de la clase.
Todo objeto o clase debe tener como mínimo un método al que se le llama constructor, este método
es el primero que se llama cuando se crea una instancia de un objeto con el operador new,pero a
diferencia de los demás métodos este debe tener el mismo nombre de la clase.
Class Aritmetica{
Aritmetica(){
//Método constructor de la clase Aritmética
}
}
Class Aritmetica{
Aritmetica(){
double getN1(){
return n1;
n2=b;
double getN2(){
return n2;
double suma(){
return n1+n2;
double resta(){
return n1-n2;
double mutiplicacion(){
return n1*n2;
double division(){
return n1/n2;
}
La clase Aritmética puede ser utilizada desde cualquier parte de otra clase, creando una instancia de
ella, por ejemplo desde una clase que contenga el método main. Las funciones pueden ser accesible
utilizando el operador “.” (punto).
El siguiente ejemplo muestra como instanciar una clase Aritmetica desde una clase Main y utilizar sus
funciones.
class Main{
Herencia
Los descendientes de una clase heredan todas las variables y métodos que sus ascendientes hayan
especificado como heredables, además de crear los suyos propios.
La característica de herencia, nos permite definir nuevas clases derivadas de otra ya existente, que la
especializan de alguna manera. Así logramos definir una jerarquía de clases, que se puede mostrar
mediante un árbol de herencia.
En todo lenguaje orientado a objetos existe una jerarquía, mediante la que las clases se relacionan en
términos de herencia. En Java, el punto más alto de la jerarquía es la clase Objectde la cual derivan
todas las demás clases.
En Java sólo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se
compensa de cierta manera la inexistencia de herencia múltiple con un concepto denominado
interface, que estudiaremos más adelante.
Para indicar que una clase deriva de otra, heredando sus propiedades (métodos y atributos), se usa
el término extends, como en el siguiente ejemplo:
// Contenido de la clase
Todos los campos y métodos de una clase son siempre accesibles para el código de la misma clase.
Para controlar el acceso desde otras clases, y para controlar la herencia por las subclases, los
miembros (atributos y métodos) de las clases tienen tres modificadores posibles de control de acceso:
• public: Los miembros declarados public son accesibles en cualquier lugar en que sea accesible
la clase, y son heredados por las subclases.
• private: Los miembros declarados private son accesibles sólo en la propia clase.
• protected: Los miembros declarados protected son accesibles sólo para sus subclases.
La clase Object es la superclase de todas las clases de Java. Todas las clases derivan, directa o
indirectamente de ella. Si al definir una nueva clase, no aparece la cláusula extends, Java considera
que dicha clase desciende directamente de Object.
La clase Object aporta una serie de funciones básicas comunes a todas las clases:
• public boolean equals( Object obj ): Se utiliza para comparar, en valor, dos objetos. Devuelve
true si el objeto que recibe por parámetro es igual, en valor, que el objeto desde el que se llama
al método. Si se desean comparar dos referencias a objeto se pueden utilizar los operadores de
comparación == y !=.
• public int hashCode(): Devuelve un código hash para ese objeto, para poder almacenarlo en
una Hashtable.
• public final Class getClass(): Devuelve el objeto concreto, de tipo Class, que representa la
clase de ese objeto.
• protected void finalize() throws Trowable: Realiza acciones durante la recogida de basura.
Interfaces
Una interfaz en Java es una colección de métodos abstractos y propiedades. En ellas se especifica
qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las
que describan la lógica del comportamiento de los métodos.
• Organizar la programación.
• Obligar a que ciertas clases utilicen los mismos métodos (nombres y parámetros).
Java proporciona dos palabras reservadas para trabajar con interfaces: interface e implements.La
primera palabra se utiliza para declarar las interfaces y la segunda para implementarlas en las clases
que las usaran, se pueden implementar más de una interfaz al mismo tiempo.
Polimorfismo
El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos,
las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple,
morfismo= Formas, esto implica que un mismo Objeto puede tomar diversas formas y
comportamientos. Por ejemplo podemos declarar una Súper Clase llama Animal y esta será heredada
en diferentes Subclases con comportamientos diferentes tales como Pez, Ave y Perro.
Encapsulamiento
El encapsulamiento es una técnica de la programación orientada a objetos que permite en una misma
clase crear diferentes clases e interactuar directamente entre ellas.
Paquetes
Recursividad de métodos
Arreglos
Matrices
Pilas
Colas
Listas
CAPITULO 5 – ARCHIVOS
Los programas en Java necesitan comunicarse con su entorno, tanto para recordar datos e
información que debe procesar, como para devolver los resultados obtenidos.
El paquete java.io contiene todos lo necesario para comunicarse con el exterior, y dentro de este
encontramos dos familias para la entrada/salida de datos. La entrada se datos se puede hacer con
las clases derivadas de InputStreamy para escribir con OutputStream, estas clases tienen dos
métodos básicos read() y write().
InputStream OutputStream
FileInputStream FileOuputStream
PipedInputStream PipedOutputStream
ByteArrayInputStream
FilterOutputStream
StringBufferInputStream
DataOutputStream
SequienceInputStream
PrintStream
FilterInputStream
BufferedOutputStream
DataInputStream
PushbackOutputStream
LineNumberInputStream
ByteArrayOutputStream
BufferedInputStream
ObjectOutputStream
PushbackInputStream
ObjectInputStream
Dos nuevas clases aparecieron desde la JDK 1.1 Reader y Writer, estas resultan más prácticas para
las aplicaciones que manejan textos.
Reader Writer
BufferedReader BufferedWriter
LineNumberReader CharArrayWriter
CharArrayReader
OutputStreamWriter
InputStreamReader
FileWriter
FileReader
FilterWriter
FilterReader
PipedWriter
PushbackReader
StringWriter
PipedReader
PrintWriter
StringReader
Para leer y escribir archivos existen las clases FileInputSteam y FileOutputStream (Extendidas de
InputSteam y OutputSteam) que permiten leer y escribir bytes en archivos. Para archivos textos es
preferible FileReader y FileWriter (Extendidas de Reader y Writer). Por ejemplo de lectura de un
archivo de texto:
Equivalente a:
Si por algún motivo en la ejecucióndel programa no se encuentra el “archivo.txt” este lanza una
excepción de java.io.FileNotFoundException por este motivo el código de lectura de archivo se
debe colocar dentro de un estructura de excepciones try{}catch(){}.
El objeto File puede representar un archivo o un directorio y tienen los siguientes argumentos que
recibe para localizar el archivo o directorio:
File(String name)
Ejemplo:
Métodos Función
boolean isFile() true si el archivo existe
long length() Tamaño del archivo en bytes
long lastModified Fecha de la última modificación
boolean canRead() true si se puede leer
boolean canWrite() true si se puede escribir
delete() Borrar el archivo
RenameTo(File) Cambiar el nombre
TablaNro 5 – Métodos de File para archivo
Métodos Función
boolean isDirectory() true si existe el directorio
mkdir() Crea un directorio
delete() Eliminar el directorio
String[] list() Devuelve los archivos que tiene el directorio
TablaNro 5 – Métodos de File para directorios
Un objeto PrintStream se puede crear a partir de un objeto BufferedWriter (para disponer buffer
“espacio en memoria”), que se crea a partir del FileWriter al que se le pasa por parámetro el nombre
del archivo y después se escribe en el archivo.
Código Nro 27 – Creación de un archivo plano
Este ejemplo tiene algo en particular y es que lo que en él se escribe se pierde cuando se intenta
escribir otra línea, para solucionar esto solo se le tiene que colocar otro argumento al FileWriter de
tipo boolean con valor true.
Código Nro 28 – Creación de un archivo plano sin perder lo que el contenía
Serialización
La Serializacion es un proceso por el cual un objeto cualquiera se puede convertir en una seria de
bytes con la que más tarde se puede construir dicho objeto manteniendo el valor de sus variables, es
concepto permite guardar un objeto en un archivo o mandarlo por una red. La realización hace los
objetos persistentes en un archivo.
Para que una clase pueda utilizar la Serialización tiene que implementar la interfaz Serializable que
no define ningún método.
}
Para escribir y leer archivos o datos de un objeto serializable se utilizanlas clases
ObjectOutputStream y ObjectInputStream que cuentan con los métodos writeObject() y
readObject(). Estos Objetos requieren de un parámetro del tipo FileOutputStream y
FileInputStream.
Un hilo es un flujo de ejecución decódigo y, mediante el uso de hilos, podemos hacer que nuestros
programasaparentemente realicen varias tareas al mismo tiempo. Por ejemplo, su códigopodría
interaccionar con el usuario mientras realiza tareas en segundoplano de gran consumo de tiempo.
Los hilos separados realmente no seejecutan al mismo tiempo, por supuesto (a menos que tenga una
máquinamultiprocesadora); en realidad, cada hilo obtiene secuencias de tiempo delmismo
procesador. El resultado aparente, no obstante, es que los diversoshilos se ejecutan al mismo tiempo
y puede resultar impresionante. De hecho,Java es uno de los pocos lenguajes que soportan hilos.
Cuando se inicia un programa Java, éste tiene un hilo: el hilo principal.Podemos interaccionar con el
hilo principal de diversas formas, como veremosen este capítulo, por ejemplo obteniendo o asignando
su nombre, deteniéndoloy mucho más. Sin embargo, podemos también iniciar otros hilos.Podemos
iniciar el código en esos hilos llamando al método start del objeto ysituando el código que queremos
que utilice el hilo en el método run.
Hay dos formas claves de crear hilos, una es declarando una clase que herede el objeto Thread y
otra es que implemente la interfaz Runnable.
La Java Fundation Class (JFC) es un conjunto de paquetes que son parte de la Interfaz de
Programación de Aplicación (API)de Java, compuesto por clases u objetos que sirven para crear
Interfaces Gráficas de Usuarios (GUI) de forma visuales para las aplicaciones y applets de Java.Las
JFC contienen dos paquetes gráficos en especial: AWT y Swing.
La clase Component representa a cualquier objeto que puede ser parte de una interfaz gráfica de
usuario. Es la clase padre de muchas de las clases del AWT.Su propósito grafica de usuario y que
representar algo que tiene una posición y un tamaño, que puede ser dibujado en la pantalla y que
pueda recibir eventos de entrada (que responda a las interacciones con el usuario).
Los componentes en Java poseen un grupo de propiedades básicas con la que el usuario puede
jugar para darle mejor apariencias visuales a sus aplicaciones.
Button
Label
java.lang CheckBo
x
Font Choic
TextArea
Object CheckboxGroup e
TextComponent
TextField
Component Canva
sList
Panel
Container ScrollPane
Dialog FileDialog
Image Window
Fram
PopupMenuu
e
Menu
Imagen Nro 11– Jerarquía de componentes del paquete AWT
En una interfaz gráfica de usuario (GUI) el elemento más básico que suele emplearse es la creación
de ventanas. La AWT proporciona la clase Window, aunque para simplificar los desarrollos acudieron
a la clase Frame (Marco) derivada de Window y por tanto más especializada para la experiencia del
usuario, la clase Window muestra ventanas sin bordes, mientras que la clase Frame presenta
ventanas con bordes y barra de título con botones de acción (minimizar, maximizar y cerrar).
En el ejemplo anterior se creó una ventana con la clase Frame, le aplicamos un título, tamaño y la
hacemos visible, y además le agregamos un evento del tipo “WindowListener” con un objeto de
parametro “WindowAdapter” que llama al método “windowClosing” de la interfaz
WindowListener,para permitir que el botón de acción cerrar de la barra de título funciones y permita
cerrar la ventana cuando el usuario lo presione.
Ejercicio Nro 9– Creación de una ventana con AWT con herencia
La diferencia con el Ejercicio Nro 8es que en este se creó un objeto tipo Ventana que heredaba todos
los atributos y métodos de la clase Frame, la clase ventana requiere de constructores que permita
inicializar el objeto cuando se requiera su utilización, en este caso se crearon dos constructores un
sin parámetro y otro con parámetro, podemos ahora crear todos las ventanas que queramos con tan
solo creando objetos del tipo “Ventana”.
Ejercicio Nro 10– Creación de una ventana con AWT y herenciamúltiple
El ejercicio anterior se diferencia de los demás por tener implementado el concepto de herencia
múltiple, pues no solo hereda los atributos y métodos de la clase Frame sino también de la Clase
WindowListener, este por ser implementado como interfaz, todos los métodos y atributos de
WindowListener se tienen sé que colocar en la clase Ventana.
Ejercicio Nro 11– Creación de una ventana con AWT y encapsulamiento
En el Ejercicio Nro 11 se creó una clase “Ventana”, y esta hace uso de otra clase llamada
“CerrarVentana” que contiene los eventos de un Frame implementado la interfaz “WindowListener”.
Los siguientes ejercicios utilizando la clase Frame es dividiendo los códigos para hacer más legible el
programa, creando un archivo MiFrame y desde otros archivos poder aplicar herencia o la creación
de un objeto de tipo MiFrame. (Las clases creadas en encapsulamiento también son accesibles
desde otra clase o archivo.java)
Ejercicio Nro 12– Creación de una ventana con AWT en archivo separado
Ejercicio Nro 13– Uso de la clase MiFrame
La clase Component presenta diversos métodos, organizados para responder a diversos propósitos
sobre los componentes utilizados en una interfaz gráfica de usuario, estos métodos se dividen en
tres:
• setMinimumSize(int ancho, int largo), Establece el tamaño mínimo que este componente
debería tener.
• setBounds(int x, int y, int ancho, int largo), Establece las coordenadas de ubicación de un
componente.
b.) Acción sobre el componente
• update(Graphics g),Es llamado por AWT cuando se invoca el método repaint(). Por defecto
llama a paint().
La clase Component proporciona tres tipos de métodos, para la gestión de eventos mediante el nuevo
modelo de eventos de AWT.
Tanto AWT como Swing tienen en común un sistema para gestionar los eventos que se producen al
interactuar con el usuario de la interfaz gráfica, aunque el paquete Swing presenta mejoras de
algunos de los eventos.
Cada objeto de componentes represente una interfaz gráfica de usuario, a la que se le pueden definir
objetos "oyentes" (Listener), que esperen a que suceda un determinado evento sobre la interfaz. Por
ejemplo se puede crear un objeto oyente que esté a la espera de que el usuario pulse sobre un botón
de la interfaz, y si esto sucede, él es avisado, ejecutando determinada acción.
La clase base para todos estos eventos que se pueden lanzar es la clase AWTEvent (perteneciente
dentro del paquete java.awt).
El modelo de eventos de AWT depende del paquete java.awt.event, que en Swing se amplía con el
paquete javax.swing.event.En Java los eventos son dos tipos básicos, Físicos y Semánticos:
La clase containerañade la funcionalidad de poder contener otros componentes como (Button, Label,
TextFiel, entre otros) y hacer las Interfaces de Graficas de Usuario (GUI) más llamativa para los que
interactuaran con nuestros sistemas.
Java proporciona un conjunto de contenedores para agrupar los componentes de una interfaz gráfica
de usuario.Los siguientes contenedores ubican los componentes según la dirección que se le asigne,
pero también se le pueden agregarrellenos o bordes externos para evitar que los componentes se
visualicen pegados unos o a al mismo Frame. El contenedor GridBagLayout utiliza la expresión ipadx
y ipady, los demás contenedores utilizan las funciones setHgap(int x) y setVgap(int x).
Aceptar
• FlowLayout, Permite ubicar los componentes de forma consecutiva en una misma fila de
izquierda a derecha, de derecha a izquierda o centrado, al terminar el tamaño del Frame o Panel
continua ubicando los componentes en la línea siguiente, según como se le estipule (CENTER,
LEFT, RIGHT, TRAILING O LEADING).
• GridLayout, Permite dividir el contenedor en filas y columnas del mismo tamaño, y cada
componente que se agregue va llenando cada posición del Grid, los componentes se sitúan de
forma secuencial de izquierda a derecha y de arriba abajo.
Ejercicio Nro 16– Contenedor GridLayout
Analicemos que a nuestro marco hemos agregado cinco botones y nuestro Grid al ser de 2 x 3 =
6 permite agregar seis componentes, en el ejercicio solo agregamos cinco, es por eso que queda
en espacio en blanco reservado, en espera de recibir otro componente.
• GridBagLayout, Permite ubicar los componentes en una línea horizontal o vertical, sin dejar
espacio entre los componentes. Este contenedor es una réplica del GridLayout a diferencia que
las columnas y filas se le pueden asignar longitudes de ancho y alto diferentes.
Aplicación Nro 17– Aplicación con GridBagLayout
Ejemplo Nro 17– Creación de una clase Ventana con contenedor GridBagLayout
• BoxLayout, Permite organizar los contenedor en una line vertical o horizontal, dejar espacios
entre ellos. Este contenedor es proporcionado por el paquete swing y tal se profundiza en detalla
más adelante.
Aplicación Nro 18– Aplicación con BoxLayout
• CardLayout, Permite visualizar los contenedores que se le pasan como tarjetas, a cada una se
le da un nombre y luego se puede mover de una a la otra con el método show();
Aplicación Nro 18– Uso de CardLayout
La clase Panel es otro de los componentes de la AWT que permite contener múltiples componentes
al igual que el objeto Frame. En el ejemplo siguiente se crean componentes de tipo “Label, TextField,
Button y Panel” todos estos son agregados dentro del marco principal Frame, pero algunos de estos
solo son agregados dentro del Panel.
Ejercicio Nro 17– Paneles
Cada uno de los componentes en Java se les puede agregar ciertas propiedades como (color, tipos
de letras, bordes eimágenes) para mejorar la visibilidad o presentación de nuestros diseños. Nota: el
paquete “swing” provee a los componentes mejores manejo de imágenes y bordes.
Ejercicio Nro 19– Agrega fondo, tipo de letra y color a las letras
El ejercicio anterior agrega al componente TextField el tipo de evento del Ratón, y utiliza dos métodos
de acción del ratón, uno entra al componente y otro cuando el ratón sale del componente, en cada
uno de estos se generan acciones de cambio de fondo y color.
Si analizamos el objeto TextField vemos que tiene antepuesto la palabra reservada final, estipulando
este objeto como una constante, esto se requiere porque se está tratando de acceder a él desde un
método externo como lo son mouseEntered() y mouseExited(),(estudiar el concepto de bloques y
ámbitos), si se hubiese declarado como atributo propio de la clase este no fuera necesario la palabra
final (estudiar concepto de acceso a atributos miembros de un objeto).
Imagen Nro 20 – Ratón fuera del Imagen Nro 21 – Ratón dentro del
componente componente
El siguiente ejemplo es una aplicación que contiene cuatro componentes (Frame, Label, TextField y
Button)al componente Button y TextField se le activara un evento que muestre un mensaje en un
Label al hacer un click sobre el ratón o al presionar la tecla enter.
Clase importadas
Declaración de los atributos y definir las
funciones del constructor
Crear los atributos y asigna a estos Font, color, fondo, Eventos del mouse y eventos de acción
El anterior programa crea una calculadora digital en un Frame con un tipo de contenedor
GridBagLayout, dos componentes TextField para mostrar los datos de operaciones y resultados, un
Panel con un contenedor GridLayout de 6 filas por 4 columnas para contener los Button; a GridLayout
se le asigna la propieda setHgap(int) y setVgap para dar el espacio que tiene los botones.
El siguiente ejemplo ilustra una ventana con una barra de menú, respectivos menuce asociados y
cada uno de ellos con ítem dentro de los menuces.
El paquete AWT también ofrece varios métodos para dibujar en pantalla figuras geométricas como
rectángulos, cuadrados, triángulos entre otros, textos con estilos y apariencias e imágenes.
Para lograr el resultado de la aplicación anterior solo tenemos a agregar en cualquier parte de nuestro
programa la siguiente línea de código representada en un método. Este método es llamado por el
compilador de forma automática y repetitivamente cada vez que se maximiza, minimiza o se mueve el
Frame.
Código Nro 21 – Dibujar una imagen de fondo a un Panel, Canvas o Frame
La AWT ofrece un componente especial llamado “Canvas” para crear animaciones gráficas,este es
él recomiendocuando esto es lo que desea.
Swing
El paquete swing presenta componentes ligeros, que pueden tomar diferente aspecto y
comportamiento pues lo toman de una biblioteca de clases. Está disponible desde la versión 1.2 del
JDK como javax.swing. (Ver listado de algunos componentes). Este paquete ofrece aplicaciones
más llamativas, funcionales y amigables para con el usuario.
Imagen Nro 23 – Jerarquía del paquete Swing
Aplicación Nro 24 – Editor de texto
Código Nro 24 – Programa editor de texto (aplicando los componentes del paquete swing)
Skins
Los Skins son temas o que contienen una serie de elementos gráficos que al aplicarse a una
aplicación de software modifica su apariencia visual.
Las aplicaciones de Java también se le pueden agregar apariencias visuales osea Skins y para
lograr esta operación se requiere que importemos en nuestra aplicativo una librería llama skinlf.jar
para poder hacer uso del objeto SkinLookAndFeel que es la que permite cargar un archivo .zip
correspondiente a quien contiene imágenes y estilos del tema de aplicación.
Para lograr aplicar la apariencia de nuestros Skins en nuestras aplicaciones se recomienda colocar el
código en el método main, y de esta forma aplica a todos los marcos o JFrame o Frame de nuestro
software.
El código anterior aplica apariencia de tipo Windows a nuestra aplicación, es decir según la que tenga
su sistema operativo, así se visualizaran sus desarrollos. Las dos formas que muestra el código son
aceptadas, la línea 2 funciona igual que la línea 3.
El código anterior resalta en la línea 5 la ruta donde tengo almacenado mi tema, en este caso tengo
una carpeta skin en mi proyecto que contiene un archivo con extensión “.zip”. de nombre
“underlingthemepack.zip”.
CAPITULO 8 – Imágenes, animaciones y
audio
La Java Fundation Class (JFC) es un conjunto de paquetes que son parte de la Interfaz de
Programación de Aplicación (API)de Java, compuesto por clases u objetos que sirven para crear
Interfaces Gráficas de Usuarios (GUI) de forma visuales para las aplicaciones y applets de Java.Las
JFC contienen dos paquetes gráficos en especial: AWT y Swing.
Java nos ofrece un método llamado paint(Graphics) que recibe un argumento un objeto Graphics y
es el permite que nosotros podamos dibujar sobre nuestro contenedor. Con este podemos pintar
figuras de cualquier tipo como: cuadrados, rectángulos, círculos, líneas, entre otros, estas pueden
tener fuentes, colores entre otros.El método paint(Graphics) es propio para pintar sobre
componentes de la librería awto sobre un Frame, JFrame o Canvasy paintComponent(Graphics)
para dibujar sobre componentes de la swing como JPanel.
El siguiente ejemplo nos muestra cómocolocar una imagen de fondo con el método drawImage() de
la clase Graphics, este tiene varios constructores que reciben varios argumentos como: un objeto
Image, posición X y Y desde donde se va a iniciar a pintar la imagen y un objeto ImageOberver que
puede ser el mismo panel o frame sobre el que se va colocar la imagen.
Existen diferentes formas de cargar audio en nuestras aplicaciones, pero hemos tomado una de las
muchas posibles, que involucra tres objetos, File, AudioInputStream, AudioSystem y Clip,
ubicados los tres últimos en el paquete javax.sound.sampled, File como ya hemos vistos capítulos
anteriores pertenece al paquete java.io.
Código Nro 24 – Reproducir un audio
El objeto File permitirá abrir el archivo en la ruta donde este almacenado, el AudioInputStream
prepara el archivo para convertirlo a un Clip de audio y poder abrirlo con el método open() y el
método start() reproducirlo.Clip contiene otros métodos como stop() para detener la reproducción y
loop(int) para repetirla un numero veces establecido en el entero enviado por parámetro.
Graficas
CAPITULO 9 – Redes
La portabilidad que ofrece el lenguaje Java en sus programas es una de las grandes potencias que
posee, gracias a la “JVM maquina virtual”. Esto adquiere una importancia aún mayor en Internet
donde existen tipos de computadoras muy dispares.
La API de Java contiene una serie de clases que son interesantes de cara a la creación de
aplicaciones que trabajen en red. Estasse encuentran almacenadas en los paquetes mencionadas a
continuación.
• java.net: Clases para redes. Dan acceso al protocolo de comunicación TCP/IP, sockets y URLs.
• java.applet: Da soporte a las applets.
• java.sql: Paquete que contiene el JDBC Java DataBase Connectivity, para conexión de
programas Java con Bases de datos.
• java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con ellos e incluso enviar
objetos como parámetros de un objeto a otro.
• org.omg.CORBA: Facilita la posibilidad de utilizar OMG CORBA, para la conexión entre objetos
distribuidos, aunque estén codificados en distintos lenguajes.
Una de las características de Java que lo hacen especialmente interesante para Internet es que sus
programas objeto (códigos de byte) son verificables para poder detectar posibles virus en sus
contenidos. Estos programas Códigos de byte no necesitan ser recompilados, y una vez verificados,
se transforman en direcciones físicas “bits” de la máquina destino.
El paquete java.net
Java ofrece un conjunto de clases que permiten utilizar los URLs (Identificadores Uniformes de
Recursos). Un URL es una dirección electrónica que permite encontrar o identificar una información
en Internet o la red. Las URLs estánespecificada por:
• El nombre del protocolo que permitirá leer la información. Por ejemplo HTTP (Protocolos de
transferencia de hipertexto) que forma la base de la Word Wide Web “WWW”.
• El nombre del servidor que proporciona la información. Por ejemplo sunsite.unc.edu,
google.como bien una dirección IP directamente209.85.195.104.
La aplicación servidor está en espera de que un cliente se comunique con él para enviarle un
mensaje de bienvenida y es lo que se muestra en el ejemplo anterior, además el servidor imprime un
mensaje para notificar que se está sirviendo a un cliente.
El paquete java.applet
Una applet es un pequeño programa en Java transferido dinámicamente a través de Internet, se
puede visualizar desde un navegador al cargar una página HTML que incluye información desde una
etiquete <APPLET></APPLET>, lo que se carga en la pagina es el fichero compilado .class y que la
maquina del cliente interpreta gracias a la JVM para poder ejecutar.
El paquete java.appletcontiene la clase Applet que forma la base para la creación de applets, el
paquete swing también establece la clase JApplet para la creación applet. Solo se debe heredar
esta clase para convertir nuestra aplicación a un applet y cambiar el nombre del constructor por el
método init(),los métodos start(), stop() y destroy() son los posibles estados en los que se encuentra
un applet, además son llamados de forma automática.
En una aplicación applet se puede hacer todo lo ya anteriormente se realiza en una aplicación de
escritorio, utilización de paneles, botones, label, textField, imágenes, animaciones, pintar con el
método paint() o paintComponent(), entre otros.
Las aplicaciones apples se deferencias de las demás porque estas no utilizan el método main para
pode ejecutar, hacen un llamado al método start() de forma automática.
El API JDBC se presenta como una colección de interfaces Java y métodos de gestión de
manejadores de conexión hacia cada modelo específico de base de datos. Un manejador de
conexiones hacia un modelo de base de datos en particular es un conjunto de clases que
implementan las interfaces Java y que utilizan los métodos de registro para declarar los tipos de
localizadores a base de datos (URL) que pueden manejar. Para utilizar una base de datos particular,
el usuario ejecuta su programa junto con la biblioteca de conexión apropiada al modelo de su base de
datos, y accede a ella estableciendo una conexión, para ello provee el localizador a la base de datos
y los parámetros de conexión específicos. A partir de allí puede realizar con cualquier tipo de tareas
con la base de datos a las que tenga permiso: consulta, actualización, creación, modificación y
borrado de tablas, ejecución de procedimientos almacenados en la base de datos, etc.
La JDK permite el tipo de conexión JDBC ofreciendo el paquete java.sql en el que existen clases
muy útiles para trabajar con bases de datos.
Clases Descripción
DriverManager Cargar un controlador o driver
Connection Establece conexión con una base de datos
Statement Permite crear consultas SQL y enviar a la base de datos
ResultSet Almacena el resultado de una consulta
Para garantizar la conexión con una Sistema Gestor de Base de Datos (SGBD) se requiere
importar un Driver o manejador de conexión según él tipo (este driver en Java no es más que
un archivo .jar, que se debe agregar al proyecto). Si esto no se hace es posible que el código
de nuestra aplicación no marque ningún error pero cuando se intente establecer la conexión
este mostrar un error como el siguiente.
El software funciona de dos modos, con un software manejador en el cliente, en una filosofía cliente-
servidor. En el primero modo, el driver interpreta las conexiones y llamadas SQL y las traduce desde
el API ODBC hacia el SGBD. En el segundo modo para conectarse a la base de datos se crea una
DSN dentro del ODBC que define los parámetros, ruta y características de la conexión según los
datos que solicite el fabricante.
Para conectar con el Sistema gestor de base de datos MYSLQ según este tipo de conexión ODBC
con Java se requiere de la instalación del driver MyODBC-3.51.10-x86-win-32bit.exe. Su instalación
es fácil solo es siguiente tras siguiente.
Imagen Nro 25: Driver de conexión con MYSQL
Después de instalado el driver de configuración de MYSQL para conexión por el método ODBC se
debe establecer una conexión desde el sistema operativo cliente, entrando a Panel de control,
Herramientas administrativas y Origenes de datos ODBC.