texto_tecnicas de programacion

101
Calidad que se acredita internacionalmente ASIGNATURA TÉCNICAS DE PROGRAMACIÓN (TEXTO UNIVERSITARIO)

Upload: angelpovis

Post on 10-Feb-2015

55 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Texto_Tecnicas de Programacion

Calidad que se acredita internacionalmente

ASIGNATURA

TÉCNICAS DE

PROGRAMACIÓN

(TEXTO UNIVERSITARIO)

Page 2: Texto_Tecnicas de Programacion

Pág. 2

Asignatura: Técnicas de Programación

Material publicado con fines de estudio

Segunda Edición

Huancayo, 2011

MISIÓN

Somos una universidad privada,

innovadora y comprometida con el

desarrollo del Perú, que se dedica a formar personas competentes, íntegras y

emprendedoras, con visión internacional;

para que se conviertan en ciudadanos

responsables e impulsen el desarrollo de

sus comunidades, impartiendo

experiencias de aprendizaje vivificantes e

inspiradoras; y generando una alta valoración mutua entre todos los grupos de interés.

VISIÓN

Ser una de las 10 mejores universidades

privadas del Perú al año 2020, reconocidos por nuestra excelencia

académica y vocación de servicio, líderes

en formación integral, con perspectiva

global; promoviendo la competitividad

del país.

Page 3: Texto_Tecnicas de Programacion

Pág. 3

Asignatura: Técnicas de Programación

PRESENTACIÓN

Técnicas de Programación, es una asignatura orientada a la Programación

Orientada a Objetos (P.O.O.) para proporcionar al estudiante una herramienta

portable y extensible para generar un aprendizaje del lenguaje Java en su carrera

profesional. Java es toda una tecnología orientada al desarrollo de software con el

cual podemos realizar cualquier tipo de programa. Hoy en día, la tecnología Java ha

cobrado mucha importancia en el ámbito de Internet gracias a su plataforma J2EE.

Pero Java no se queda ahí, ya que en la industria para dispositivos móviles también

hay una gran acogida para este lenguaje.

En general, los contenidos propuestas en el material de estudio, se dividen en

tres unidades: Introducción a la P.O.O., Características Fundamentales de la

P.O.O., Implementación de interfaces de usuario y Acceso a Datos, recopilados

cuidadosamente del los libros: Técnicas de Programación (José Gallego, Editorial

McGraw-Hill, 1998 2003) y Java 2: Manual de usuario y tutorial (Agustín Frouge,

Alfaomega, 2000).

Es recomendable que el estudiante desarrolle en forma permanente la

realización de los diversos programas y aplicaciones con interfaz de usuario y el

acceso a datos que se basarán en un Lenguaje de Programación Orientada a

Objetos. El contenido del material se complementará con las lecciones presenciales e

investigación usando la tecnología de internet.

Agradezco a los alumnos quienes con sus inquietudes y sugerencias han han

contribuido a mejorar la presente edición.

Katia Montero

Page 4: Texto_Tecnicas de Programacion

Pág. 4

Asignatura: Técnicas de Programación

ÍNDICE

Pág.

PRESENTACIÓN 3 ÍNDICE 4 PRIMERA UNIDAD: Introducción a la Programación Orientada a Objetos Tema Nº 1: Trabajar con programas y metodología de la programación 6 1.1 Trabajar con programas y realización de programas 6 1.2 Conceptos básicos de la metodología de la programación 7 Tema Nº 2: Introducción a la Programación Orientada a Objetos 10 2.1 Programación Orientada a Objetos 10 2.2 Conceptos básicos de Programación Orientada a Objetos 12 Tema Nº 3: Lenguaje de Programación Orientada a Objetos 15 3.1 Comentarios, Identificadores, Separadores, Operadores, Variables,

Expresiones, Strings 15 3.2 Controles de Flujo selectivos 25 3.3 Controles de Flujo Repetitivos 29 3.4 Arrays 32 SEGUNDA UNIDAD: Características Fundamentales de la Programación Orientada a Objetos Tema Nº 4: Conceptos Básicos en Lenguaje de Programación Orientada a Objetos 36 4.1 Clases, Objetos, Control de acceso, Constructores, Mensajes 36 4.2 Herencia, Subclases, Polimorfismo y Encapsulamiento 46 4.2 Clase Object, Clases Abstractas, Interfaces y Paquetes. 52

TERCERA UNIDAD: Interfaz Gráfica y manejo de Datos Tema Nº 5: Programas Básicos en Lenguaje de Programación Orientada a Objetos 57 5.1 El visor de Applets 57 5.2 Escribir Applets Java 59 5.3 La aplicación Fecha 62 5.4 Clases Java 62 5.5 Excepciones 64

Page 5: Texto_Tecnicas de Programacion

Pág. 5

Asignatura: Técnicas de Programación

Tema Nº 6: Delegación de eventos y AWT 65 6.1 Delegación de eventos 65 6.2 AWT: Interfaz de Usuario, Estructura del AWT, Componentes 69 6.3 Contenedores y Layouts 82 Tema Nº 7: SWING: Borders, Etiquetas, Botones, Grupos y botones 85 Tema Nº 8: SWING: Listas y cajas combinadas, texto, tooltips, Iconos 90 Tema Nº 9: SWING: Menus, Menus popup 93 Tema Nº 11: JDBC 97

Referencias Bibliográficas 101

Page 6: Texto_Tecnicas de Programacion

Pág. 6

Asignatura: Técnicas de Programación

PRIMERA UNIDAD

Introducción a la Programación Orientada a Objetos

1.1 Trabajar con programas y realización de programas

Antes de iniciar con el proceso de programación, es conveniente tener claro algunos conceptos preliminares respecto a la organización de los programas en la memoria del procesador.

Por otro lado, también es importante reconocer las diferentes representaciones de los lenguajes de programación, así como, su denominación en marcas de reconocido prestigio.

PROGRAMA, PROGRAMACION Y LENGUAJES DE PROGRAMACION

Desde el punto de vista del Procesador:

Un programa es un conjunto de instrucciones o proposiciones bien definidas que le dicen lo que tiene quehacer. Cada instrucción le indica: - qué operación realizará a continuación

- de dónde obtendrá los datos que necesita para realizarla

- dónde guardará los resultados de la operación.

Desde el punto de vista del usuario:

Un programa, son las especificaciones de un conjunto de operaciones que debe llevar a cabo el computador para lograr resolver una determinada tarea.

Un programa se escribe en un lenguaje de programación, estos lenguajes permiten simplificar la creación de programas debido a su fácil descripción de las instrucciones que ha de ejecutar el procesador; en algunos casos, agrupando varias instrucciones y dando un solo nombre al conjunto, de tal forma que la lista de operaciones se reduce considerablemente, resultando fácil la comprensión y resolución de programas. También varios cientos de instrucciones simples se pueden expresar con una lista de unas cuantas líneas.

Finalmente, a la acción de realizar un programa se le conoce como programación.

Tema Nº 1: Trabajar con programas y

metodología de la programación

Page 7: Texto_Tecnicas de Programacion

Pág. 7

Asignatura: Técnicas de Programación

En conclusión, reuniendo estos tres conceptos podemos decir: Un programa se escribe en un lenguaje de programación y a la actividad de expresar un algoritmo en forma de programa se le denomina programación.

A menudo, el lenguaje de programación se denomina software de programación cuando se emplea un término genérico, a fin de distinguirlo del hardware.

1.2 Conceptos básicos de la metodología de la programación

Estructura de un programa

METODO MAIN

Un programa esta constituido por una colección de clases que interactuan entre si, las cuales contienen un método. El equivalente en java a una función o procedimientos es el método estático. Se puede llamar al método estático main con argumentos en la línea de comandos. Es obligatorio que los tipos de los parámetros de main y el tipo de resultados (void ) sean. public static void main (String [] args) Programa en java.

// Mi primera Aplicación /* autor Alumno semestre V */ public class programa1 {

public static void main (String [] args){ System.out.println (―Hola mi primer programa‖);

} }

El archivo debe guardarse como programa1 respetando las mayúsculas y minúsculas,

necesitamos compilar el programa para obtener un archivo con le mismo nombre con

extensión class,

Nota: El lenguaje Java es sensible a las mayúsculas y minúsculas

Técnicas de programación

Las técnicas de programación constituyen parte fundamental en el proceso de desarrollo e Ingeniería del Software dentro del ámbito informático.

Cada técnica tiene sus propias características, y distintos métodos de resolución de problemas, así como la implementación de estándares de ciertas compañías o instituciones, y es de gran importancia aprender a implementarlas a la hora de adentrarse en la evolución de cualquier proyecto de desarrollo de software.

A continuación tenemos las principales clasificaciones de las Técnicas de Programación:

Programación Modular. Programación Estructurada. Programación Orientada a Objetos.

Page 8: Texto_Tecnicas de Programacion

Pág. 8

Asignatura: Técnicas de Programación

a) Programación Modular

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que programar no es más que resolver problemas, y se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.

b) Programación Estructurada

La programación estructurada es una teoria de programación que consiste en construir programas de facil comprension.

La programación estructurada es especialmente util, cuando se necesitan realizar correciones o modificaciones despues de haber concluido un programa o aplicacion. Al haberse utilizado la programación estructurada, es mucho más sencillo entender la codificacion del programa, que se habra hecho en diferentes secciones.

La programación estructurada se basa en una metodologi de desarrollo de programas llamda refinamiento sucesivos: Se plantea una operacion como un todo y se divide en segmentos más sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el pool de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integracion debe ser sencilla y no presentar problemas al integrar la misma y de presentar algun problema, sera rapidamente detectable para su correccion.

La representacion grafica de la programación estructurada se realiza a traves de diagramas de flujo o flow chart, el cual representa el programa con sus entradas, procesos y salidas.

c) Programación Orientada a Objetos

La programación orientada a objetos, intenta simular el mundo real a traves del significado de objetos que contiene caracteristicas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacion.

Como su mismo nombre indica, la programación orientada a objetos se basa en la idea de un objeto, que es una combinacion de variables locales y procedimientos llamados metodos que juntos conforman una entidad de programación.

El termino encapsulacion se usa para describir la combinacion de estructuras de datos y de metodos que son manipulados por el objeto. La llamada a un objeto es lo que se denomina pasar un "aviso" a un objeto.

En la programación orientada a objetos, encapsular significa, reunir y controlar el grupo resultante como un todo y no individualmente.

En la programación orientada a objetos la abstraccion es un termino externo al objeto, que controla la forma en que es visto por los demas.

Page 9: Texto_Tecnicas de Programacion

Pág. 9

Asignatura: Técnicas de Programación

En la programación orientada a objetos la modularidad se considera de la siguiente manera: Un programa grande siempre sera más complicado que la suma de varios programas pequeños, con lo que se considera ventajoso dividir un gran sistema en diversos modulos.

En la programación orientada a objetos tenemos la jerarquia, la cual consiste en la clasificacion y organizacion de las abstracciones segun su naturaleza. El más claro ejemplo de jerarquia es la herencia.

En la programación orientada a objetos se define la herencia como una jerarquia de extracciones, y la relacion entre clases, donde se comparte la estructura y el comportamiento de una o más clase considerada como clases superiores o una superclase, con lo cual se resume que la herencia es una unidad independiente por si misma heredada de una abstraccion o superclase. Un ejemplo cotidiano lo encontramos en las aplicaciones que existen cactualmente en el mercado, donde un formulario cualquiera hereda las caracteristicas de uan ventana del sistema operativo Windows (Maximizar, Minimizar, Cerrar)

A continuación mostramos los distintos conceptos que definen este tipo de filosofía de programación:

Objetos. Son las entidades básicas en un sistema orientado a objetos. Cada objeto representa una abstracción de un elemento del mundo real.

Clases. Una clase es una colección de objetos de un tipo similar. Una vez definida una clase, se puede instanciar para crear un objeto a partir de la clase.

Abstracción de Datos. Significa representar propiedades esenciales sin incluir los detalles o la implementación de las mismas.

Encapsulación de Datos. Es guardar atributos y funciones en una clase. No se puede acceder a los datos desde fuera de la clase y sólo los métodos de dentro de la clase pueden acceder a ellos.

Herencia. Es el proceso en el que un objeto puede utilizar (heredar) métodos y atributos de otra clase definida como su clase padre.

Poliformismo. Són los distintos comportamientos que puede tener una operación

según los parámetros que reciba.

En el presente material nos adentraremos Programación Orientada a Objetos que son aplicadas actualmente con mayor frecuencia.

Page 10: Texto_Tecnicas de Programacion

Pág. 10

Asignatura: Técnicas de Programación

2.1 Programación Orientada a Objetos

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de ordenador. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.

La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.

Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha ido modificando y soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.

¿QUÉ ES JAVA?

Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.

Entre diciembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases que se requiere para ejecutar los programas Java aún no lo es).

Tema Nº 2: Introducción a la Programación

Orientada a Objetos

Page 11: Texto_Tecnicas de Programacion

Pág. 11

Asignatura: Técnicas de Programación

Acctualmente Oracle compró a Sun Microsystems es sabido que a Oracle lo único que le importó o al menos en mayor medida para adquirir era Java, a tal punto de restarle importancia a otros productos de Sun.

Versiones

JDK 1.0 (23 de enero de 1996) — Primer lanzamiento: comunicado de prensa

JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas: comunicado de prensa.

J2SE 1.2 (8 de diciembre de 1998) J2SE 1.3 (8 de mayo de 2000) J2SE 1.4 (6 de febrero de 2002) J2SE 5.0 (30 de septiembre de 2004) Java SE 6 (11 de diciembre de 2006) — Nombre clave Mustang. Estuvo en

desarrollo bajo la JSR 270. En esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión.

Java SE 7 — Nombre clave Dolphin. En el año 2006 aún se encontraba en las primeras etapas de planificación. Se espera que su desarrollo dé comienzo en la primavera de 2006, y se estima su lanzamiento para finales de 2010.

Ediciones

J2SE (Standard Edition): Aplicaciones y applets J2EE (Enterprise Edition): Servidores de aplicaciones J2ME (Micro Edition): Aplicaciones para dispositivos móviles

Plataforma de Java

La máquina virtual Java (JVM: Java Virtual Machine) Imprescindible para poder ejecutar aplicaciones Java. Las bibliotecas estándar de Java (Java Application Programming Interface = Java API)

Amplia colección de componentes. El lenguaje de programación Java

Page 12: Texto_Tecnicas de Programacion

Pág. 12

Asignatura: Técnicas de Programación

Para escribir aplicaciones.

Máquina Virtual de Java

El compilador de Java genera un código intermedio independiente de la plataforma

(bytecodes). Los bytecodes pueden considerarse como el lenguaje máquina de una máquina virtual,

la Máquina Virtual Java (JVM). Cuando queremos ejecutar una aplicación Java, al cargar el programa en memoria,

podemos a) Interpretar los bytecodes instrucción por instrucción b) Compilar los bytecodes para obtener el código máquina necesario para ejecutar la

aplicación en el ordenador (compilador JIT [Just In Time]). De esta forma, podemos ejecutar un programa escrito en Javasobre distintos sistemas operativos (Windows, Solares, Linux) sin tener que recompilarlo, como sucedería con programas escritos en lenguajes como C. Entorno de Desarrollo Integrado

Gratuitos De pago

· Eclipse (http://www.eclipse.org) · NetBeans (http://netbeans.org)

· Borland JBuilder · IBM Visual Age for Java · Sybase PowerJ · Metrowerks CodeWarrior

2.2 Conceptos básicos de Programación Orientada a Objetos

¿Qué son los objetos?

En informática, un OBJETO es un conjunto de variables y de los métodos relacionados con esas variables.

Un poco más sencillo: un objeto contiene en sí mismo la información y los métodos o funciones necesarios para manipular esa información.

Lo más importante de los objetos es que permiten tener un control total sobre 'quién' o 'qué' puede acceder a sus miembros, es decir, los objetos pueden tener miembros públicos a los

Page 13: Texto_Tecnicas de Programacion

Pág. 13

Asignatura: Técnicas de Programación

que podrán acceder otros objetos o miembros privados a los que sólo puede acceder él. Estos miembros pueden ser tanto variables como funciones.

El gran beneficio de todo esto es la encapsulación, el código fuente de un objeto puede escribirse y mantenerse de forma independiente a los otros objetos contenidos en la aplicación.

¿Qué son las clases?

Una CLASE es un proyecto, o prototipo, que define las variables y los métodos comunes a un cierto tipo de objetos.

Un poco más sencillo: las clases son las matrices de las que luego se pueden crear múltiples objetos del mismo tipo. La clase define las variables y los métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrá sus propios valores y compartirán las mismas funciones.

Primero deberemos crear una clase antes de poder crear objetos o ejemplares de esa clase.

¿Qué son los mensajes?

Para poder crear una aplicación necesitarás más de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se envían mensajes.

Los mensajes son simples llamadas a las funciones o métodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa.

¿Qué es la herencia?

Qué significa esto la herencia, quíen hereda qué; bueno tranquilo, esto sólo significa que puedes crear una clase partiendo de otra que ya exista.

Es decir, puedes crear una clase a través de una clase existente, y esta clase tendrá todas las variables y los métodos de su 'superclase', y además se le podrán añadir otras variables y métodos propios.

Se llama 'Superclase' a la clase de la que desciende una clase, puedes ver más sobre la declaración de clases en la página Declarar Clases.

Definición de Polimorfismo

Una de las características fundamentales de la OOP es el polimorfísmo, que no es otra cosa que la posibilidad de construir varios métodos con el mismo nombre, pero con relación a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes. Estos objetos recibirían el mismo mensaje global pero responderían a él de formas diferentes; por ejemplo, un mensaje "+" a un objeto ENTERO significaría suma, mientras que para un objeto STRING significaría concatenación ("pegar" strings uno seguido al otro)

¿Qué es encapsulamiento?

Cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP.

Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información.

Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. Deben realizarse a través de mensajes

dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas órdenes

Page 14: Texto_Tecnicas de Programacion

Pág. 14

Asignatura: Técnicas de Programación

será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla.

El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus

métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la POO sea muy apta para la reutilización de programas.

2.2 Características de la Programación Orientada a Objetos (Java)

Simple

Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ ―simplificada‖. Los creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase complicado o fuente de errores en este lenguaje.

Orientado a Objetos

Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en Java todo, a excepción de los tipos fundamentales de variables (int, char, long...) es un objeto.

Distribuido

Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP y FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparandolo con otros lenguajes que los soportan.

Robusto

El compilador Java detecta muchos errores que otros compiladores solo detectarían en tiempo de ejecución o incluso nunca. (ej: if(a=b) then ... el compilador Java no nos dejaría compilar este código.

Seguro

Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para ser ejecutados en una página web. Java garantiza que ningún Applet puede escribir o leer de nuestro disco o mandar información del usuario que accede a la página a través de la red (como, por ejemplo, la dirección de correo electrónico). En general no permite realizar cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página web.

Portable

En Java no hay aspectos dependientes de la implementación, todas las implementaciones de Java siguen los mismos estándares en cuanto a tamaño y almacenamiento de los datos. Esto no ocurre así en C++, por ejemplo. En éste un entero, por ejemplo, puede tener un tamaño de 16, 32 o más bits, siendo lo única limitación que el entero sea mayor que un short y menor que un long int.

Arquitectura Neutral

El código generado por el compilador Java es independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente ejecuta el código generado por el compilador no es el procesador del ordenador directamente, sino que este se ejecuta mediante una máquina virtual. Esto permite que los Applets de una web pueda ejecutarlos cualquier máquina que se conecte a ella independientemente de que sistema operativo emplee (siempre y cuando el ordenador en cuestión tenga instalada una máquina virtual de Java).

Page 15: Texto_Tecnicas de Programacion

Pág. 15

Asignatura: Técnicas de Programación

3.1 Comentarios, Identificadores, Separadores, Operadores, Variables, Expresiones, Strings

COMENTARIOS EN JAVA

Los comentarios en java se puede escribir en tres forma:

// comentario de una sola línea /* Comentario de una a mas líneas*/ /** Comentario para documentación */

IDENTIFICADORES Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el

programador necesite identificar o usar.

En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen las mayúsculas de las minúsculas y no hay longitud máxima.

Serían identificadores válidos:

identificador nombre_usuario Nombre_Usuario _variable_del_sistema $transaccion

y su uso sería, por ejemplo:

int contador_principal; char _lista_de_ficheros; float $cantidad_en_Ptas;

Palabras clave

Las siguientes son las palabras clave que están definidas en Java y que no se pueden utilizar como indentificadores:

abstract continue for new switch boolean default goto null synchronized break do if package this byte double implements private threadsafe

Tema Nº 3: Lenguaje de Programación

Orientada a Objetos

Page 16: Texto_Tecnicas de Programacion

Pág. 16

Asignatura: Técnicas de Programación

byvalue else import protected throw case extends instanceof public transient catch false int return true char final interface short try class finally long static void const float native super while

Palabras Reservadas

Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico. Son:

cast future generic inner operator outer rest var SEPARADORES

Sólo hay un par de secuencias con otros caracteres que pueden aparecer en el código Java; son los separadores simples, que van a definir la forma y función del código. Los separadores admitidos en Java son:

( ) - paréntesis. Para contener listas de parámetros en la definición y llamada a métodos. También se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo.

{ } - llaves. Para contener los valores de matrices inicializadas automáticamente. También se utiliza para definir un bloque de código, para clases, métodos y ámbitos locales.

[] - corchetes. Para declarar tipos matriz. También se utiliza cuando se referencian valores de matriz.

; - punto y coma. Separa sentencias.

, - coma. Separa identificadores consecutivos en una declaración de variables. También se utiliza para encadenar sentencias dentro de una sentencia for.

. - punto. Para separar nombres de paquete de subpaquetes y clases. También se utiliza para separar una variable o método de una variable de referencia.

OPERADORES

Operadores Aritméticos

El lenguaje Java soporta varios operadores aritéticos - incluyendo + (suma), - (resta), *

(multiplicación), / (división), y % (módulo)-- en todos los números enteros y de coma flotante.

Por ejemplo, puedes utilizar este código Java para sumar dos números:

sumaEsto + aEsto. O este código para calcular el resto de una división:

divideEsto % porEsto

Page 17: Texto_Tecnicas de Programacion

Pág. 17

Asignatura: Técnicas de Programación

Esta tabla sumariza todas las operaciones aritméticas binarias en Java.

Realizando la operación aritmética de división:

Operación Tipo Resultado

7 / 3 int 2

7 / 3.0f float 2.333333333f

5.0 / 2 double 2.5

7.0 / 0.0 double +Infinity

0.0 / 0.0 double NaN

Nota: El lenguaje Java extiende la definición del operador + para incluir la concatenación de

cadenas.

Los operadores + y - tienen versiones unarias que seleccionan el signo del operando.

Operador Uso Descripción

+ + op Indica un valor positivo

- - op Niega el operando

Además, existen dos operadores de atajos aritméticos, ++ que incrementa en uno su

operando, y -- que decrementa en uno el valor de su operando.

Operador Uso Descripción

++ op ++ Incrementa op en 1; evalúa el valor antes de incrementar

++ ++ op Incrementa op en 1; evalúa el valor después de incrementar

-- op -- Decrementa op en 1; evalúa el valor antes de decrementar

-- -- op Decrementa op en 1; evalúa el valor después de decrementar

Operador Uso Descripción

+ op1 + op2 Suma op1 y op2

- op1 - op2 Resta op2 de op1

* op1 * op2 Multiplica op1 y op2

/ op1 / op2 Divide op1 por op2

% op1 % op2 Obtiene el resto de dividir op1 por op2

Page 18: Texto_Tecnicas de Programacion

Pág. 18

Asignatura: Técnicas de Programación

Operadores Relacionales

Los valores relacionales comparan dos valores y determinan la relación entre ellos. Por

ejemplo, != devuelve true si los dos operandos son distintos.

Esta tabla sumariza los operadores relacionales de Java.

Operador Significado Uso Devuelve true si

== Igual op1 == op2 op1 y op2 son iguales

!= Distinto op1 != op2 op1 y op2 son distintos

Operadores Condicionales

Aquí tienes tres operadores condicionales.

Operador Significado Uso Devuelve true si

&& AND op1 == op2 op1 y op2 son iguales

|| OR op1 != op2 op1 y op2 son distintos

! NOT

^ XOR

Tablas de Verdad

X !X

frue False

false true

A B A&&B A||B A^B

V V V V F

F V F V V

F F F V V

F F F F F

El operador & se puede utilizar como un sinónimo de && si ambos operadores son

booleanos. Similarmente, | es un sinonimo de || si ambos operandos son booleanos.

Operadores de Asignación

i = i + 2;

Puedes ordenar esta sentencia utilizando el operador +=.

i += 2;

Las dos líneas de código anteriores son equivalentes.

Esta tabla lista los operadores de asignación y sus equivalentes.

Operador Uso Equivale a += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2

Page 19: Texto_Tecnicas de Programacion

Pág. 19

Asignatura: Técnicas de Programación

TIPOS DE DATOS:

Número

Clasificación Tipo de

Dato Espacio en

memoria Rango

Entero

byte 8 bits -128 127

short 16 bits -32768 a 32767

int 32 bits -2147483648 a 2147483647

long 64 bits -9223372036854775808 a 9223372036854775807

Reales float 32 bits 1.4 x 10-45 a 3.4 x 1038

double 64 bits 4.9 x 10-324 a 1.8 x 10308

Carácter, Booleano y String

Clasificación Tipo de

Dato Espacio en memoria

Ejemplo

Carácter char 16 bits ‗A‘, ‗a‘, ‗@‘, etc.

Booleano bool 1 bit True y False

Clase String String ―Katia Montero‖, ―Universidad

Continental‖

VARIABLES

Las variables se utilizan en la programación Java para almacenar datos que varían durante la ejecución del programa. Para usar una variable, hay que indicarle al compilador el tipo y nombre de esa variable, declaración de la variable. El tipo de la variable determinará el conjunto de valores que se podrán almacenar en la variable y el tipo de operaciones que se podrán realizar con ella.

Ejemplo: int num; . double precio; String nombre; Char ‗opc‘;

Convenciones

Los identificadores deben ser descriptivos: deben hacer referencia al significado de aquello a lo que se refieren.

int n1, n2; // MAL int anchura, altura; // BIEN

Los identificadores asociados a las variables se suelen poner en minúsculas. int CoNTaDoR; // MAL int contador; // BIEN

Cuando el identificador está formado por varias palabras, la primera palabra va en minúsculas y el resto de palabras se inician con una letra mayúscula.

Page 20: Texto_Tecnicas de Programacion

Pág. 20

Asignatura: Técnicas de Programación

int mayorvalor; // MAL int mayor_valor; // ACEPTABLE int mayorValor; // MEJOR

Inicialización de las variables

En una declaración, las variables se pueden inicializar: int i = 0; float pi = 3.1415927f; double x = 1.0, y = 1.0;

EXPRESIONES

Una expresión es una determinada combinación de operadores y operandos que se evalúan para obtener un resultado particular. Los operandos pueden ser variables, constantes o llamadas a métodos.

Una llamada a un método evalúa el valor devuelto por el método y el tipo de una llamada a un método es el tipo devuelto por ese método.

Constantes:

Java soporta constantes con nombre y se caracteriza porque el valor no puede modificarse y la forma de crearlas es:

final float PI = 3.14159;

Esta línea de código produce un valor que se puede referenciar en el programa, pero no puede ser modificado. La palabra clave final es la que evita que esto suceda.

STRINGS

Un String o cadena se considera a toda secuencia de caracteres almacenados en memoria

y accesibles como una unidad. C/C++ no soportan un tipo String, sino que simplemente disponen de un formato de almacenamiento de caracteres que se puede tratar como un String. Sin embargo, Java implementa cadenas a través de las clases String y StringBuffer, a las que se dedicará un amplio estudio.

Concatenación

La concatenación de texto se denomina a la unión de trozos o fragmentos de textos y

comúnmente se utiliza la conversión de números o de objetos a su representación en texto,

Java convierte automáticamente los tipos de datos básicos a texto antes de unirlos y llama

por cada objeto al método especial toString() para realizar la conversión de objetos

Page 21: Texto_Tecnicas de Programacion

Pág. 21

Asignatura: Técnicas de Programación

Veamos un ejemplo:

1.public class SumaSimple { 2. public static void main(String[] args) { 3. int a=1; 4. System.out.println("el valor de a="+a); 5. a=a+10; 6. System.out.println("ahora sumándole 10 es a="+a); 7. } 8.}

public class ejemplo6 { public static void main(String[] args) { double a,b,c,d; a=b=c=d=25; a*=20; b+=45; c%=35; d/=2; System.out.println("a = : " + a); System.out.println("b = : " + b); System.out.println("c = : " + c); System.out.println("d= : " + d); } }

Conversión de cadenas de texto en datos del tipo adecuado

Clase Math

En Java existe una clase (fichero/archivo) llamado Math, esta contiene muchas funciones

predefinidas y disponibles de forma inmediata para su uso. Todas estas funciones están

relacionadas con matemáticas y nos permiten calcular valores de trigonometría, potencias,

valores absolutos y números aleatorios, entre otros. Aquí hay una pequeña lista de esas

funciones:

Función Operación que realiza (Valor que devuelve)

Math.sin ( x) Devuelve el seno del valor x, x:angulo en radianes Math.cos( x) Devuelve el coseno del valor x, x:angulo en radianes Math.tan( x) Devuelve la tangente del valor x, x:angulo en radianes

Math.log( x) Devuelve el logaritmo natural del valor: log(x ) Math.exp( x) Devuelve: e

x

Concatenación de un

valor numerico para

que se imprima en

pantalla

Page 22: Texto_Tecnicas de Programacion

Pág. 22

Asignatura: Técnicas de Programación

Math.pow( a, b) Devuelve la potencia: ab

Math.sqrt( x) Devuelve la raíz cuadrada: √x Math.abs( x) Devuelve el valor absoluto: | x | Math.PI Devuelve la constante π (pi).

ceil(x), floor(x) Redondeo por arriba y por abajo

Ejemplo:

public class Programa01 { public static void main(String[] args) { int = 90, j=2; System.out.println("Cos i : " + Math.cos(i)); System.out.println("Sin i : " + Math.sin(i)); System.out.println("j^i : " + Math.pow(j,3)); } }

LEER DATOS DESDE EL TECLADO

Para el ingreso de datos desde el teclado se tiene que tener en cuenta lo siguiente:

Ejemplo : Este programa se encarga de pedir el ingreso de un número, para luego

mostrarlo en pantalla.

//import java.io.*; /* 1) */ import java.io.*; /* 2) */ public class Suma /* 3) */ { /* 4) */ public static void main(String [] args) throws IOException /* 5) */ { /* 6) */ BufferedReader xobj = new BufferedReader(new InputStreamReader(System.in)); /* 7) */ int num; /* 8) */ System.out.print("Ingrese numero : "); /* 9) */ num = Integer.parseInt(xobj.readLine( )); /* 10) */ System.out.println("Ud ingreso el numero : " + num ); /* 11) */ } /* 12) */ }

Ejemplo : El siguiente programa Java pide al usuario que teclee 2 números y muestra su

suma por pantalla:

import java.io.*; public class Suma1 {public static void main(String Arg[ ]) throws IOException {BufferedReader xobj = new BufferedReader(new InputStreamReader(System.in)); int n1,n2,s; System.out.print("Ingrese numero 1 : "); n1 = Integer.parseInt(xobj.readLine( )); System.out.print("Ingrese numero 2: "); n2=Integer.parseInt(xobj.readLine()); s=n1+n2; System.out.println("La suma es: " + s ); } }

Librería para el ingreso de datos desde

el teclado

Page 23: Texto_Tecnicas de Programacion

Pág. 23

Asignatura: Técnicas de Programación

E/S con interfaces gráficas de usuario (GUIs): JOptionPane

La biblioteca de clases estándar de Java incluye una amplia gama de componentes para la construcción de interfaces gráficas de usuario.

El componente javax.swing.JOptionPane se puede emplear para obtener

datos de entrada y mostrar mensajes de salida:

a) Entrada de datos con showInputDialog

String entrada; entrada = JOptionPane.showInputDialog( "Introduzca un valor" );

entrada = JOptionPane.showInputDialog ( null, "Introduzca un valor", "Mi programa en Java", JOptionPane.QUESTION_MESSAGE );

entrada = JOptionPane.showInputDialog ( null, "Introduzca un valor", "Otro programa en Java", JOptionPane.INFORMATION_MESSAGE);

b) Salida de datos con showMessageDialog

JOptionPane.showMessageDialog ( null, ―¡Bienvenido a Java!‖ );

Page 24: Texto_Tecnicas de Programacion

Pág. 24

Asignatura: Técnicas de Programación

JOptionPane.showMessageDialog ( null, ―¡Bienvenido a Java!‖, ―Programa de ejemplo‖, JOptionPane.INFORMATION_MESSAGE );

JOptionPane.showMessageDialog (null,―¡Bienvenido a Java!‖, ―Programa de ejemplo‖, JOptionPane.WARNING_MESSAGE );

JOptionPane.showMessageDialog ( null, ―¡Bienvenido a Java!‖, ―Programa de ejemplo‖, JOptionPane.ERROR_MESSAGE );

Ejemplo

import javax.swing.JOptionPane; public class Ejemplo01 { public static void main (String args[ ]) { double num1, num2, suma; String entrada; // variable auxiliar

Page 25: Texto_Tecnicas de Programacion

Pág. 25

Asignatura: Técnicas de Programación

// Entrada de datos

entrada = JOptionPane.showInputDialog ("Ingrese número 1: "); num1 = Double.parseDouble(entrada); entrada = JOptionPane.showInputDialog ("Ingrese número 2:"); num2 = Double.parseDouble(entrada); // Cálculo de la suma suma = num1+ num2; // Resultado JOptionPane.showMessageDialog (null, "La suma es "+suma); System.exit(0); // para terminar la ejecución del programa } }

3.2 Controles de Flujo selectivos SENTENCIAS DE SALTO

if/else

if( expresión-booleana ) {

sentencias; } [else {

sentencias; }]

if – else - if

if (comparación) { Acción_1_de_verdad;

Acción_2_de_verdad; … } else if (comparación) { Acción_1_de_verdad; Acción_2_de_verdad; … } else if (comparación) { Acción_1_de_verdad;

Page 26: Texto_Tecnicas de Programacion

Pág. 26

Asignatura: Técnicas de Programación

Acción_2_de_verdad; … } else { Acción_1_de_falsedad;

Acción_2_de_falsedad; … }

En el ejemplo Ejemplo01.java, se utilizan varias sentencias if-else para determinar en qué estación del año se encuentra un mes determinado.

class Ejemplo01 { public static void main( String args[] ) { int mes = 8; String estacion; if( mes == 12 || mes == 1 || mes == 2 ) { estacion = "el invierno"; } else if( mes == 3 || mes == 4 || mes == 5 ) { estacion = "la primavera"; } else if( mes == 6 || mes == 7 || mes == 8 ) { estacion = "el verano"; } else if( mes == 9 || mes == 10 || mes == 11 ) { estacion = "el otoño"; } else { estacion = "Mes falso"; } System.out.println( "Agosto esta en " + estacion + "." ); } }

Switch

switch (variable)

{ case valor1 : acción1; break;

case valor2 : acción2; break;

case valor3 : acción3; break;

case valor4 : acción4; break;

case valor5 : acción5; break;

// ...

[default: acciónX;]

}

Ejemplo: El Ejemplo02.java es el mismo ejemplo que se creó en la sección if-else, reescrito para utilizar switch.

class Ejemplo02 { public static void main( String args[] ) {

Page 27: Texto_Tecnicas de Programacion

Pág. 27

Asignatura: Técnicas de Programación

int mes = 8; String estacion; switch( mes ) { case 12: // Continúa case 1: // Continúa case 2: estacion = "el invierno"; break; case 3: // Continúa case 4: // Continúa case 5: estacion = "la primavera"; break; case 6: // Continúa case 7: // Continúa case 8: estacion = "el verano"; break; case 9: // Continúa case 10: // Continúa case 11: estacion = "el otoño"; break; default: estacion = "Mes falso"; } System.out.println( "Agosto esta en " + estacion + "." ); } }

Ejemplo: Realizar un programa que imprima el nombre del día de la semana correspondiente al número de día (1-7)

public class Ejemplo03 { public static void main(String[] args) { int ndia; ndia=3; System.out.println("ndia = "+ndia); switch (ndia) { case 1: System.out.println("LUNES"); break; case 2: System.out.println("MARTES");break; case 3: System.out.println("MIERCOLES");break; case 4: System.out.println("JUEVES");break; case 5: System.out.println("VIERNES");break; case 6: System.out.println("SABADO");break; case 7: System.out.println("DOMINGO");break; default : System.out.println("DESCONOCIDO");break; } } }

Page 28: Texto_Tecnicas de Programacion

Pág. 28

Asignatura: Técnicas de Programación

Ejemplo: Realizar un programa que muestre mn mensaje según el rango de nota

Rango Mensaje >= 9 "Sobresaliente"

>= 7 y <9 "Notable"

>= 5 y <7 "Aprobado";

<5 ―Suspenso";

import javax.swing.JOptionPane; public class Ejemplo04 { public static void main( String args[] ) { String entrada; String resultado; float nota; entrada = JOptionPane.showInputDialog ( "Calificación numérica:" ); nota = Float.parseFloat( entrada ); if ( nota >= 9 ) resultado = "Sobresaliente"; else if ( nota >= 7 ) resultado = "Notable"; else if ( nota >= 5 ) resultado = "Aprobado"; else resultado = "Suspenso"; JOptionPane.showMessageDialog ( null, resultado, "Calificación final",JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

El if encadenado anterior

import javax.swing.JOptionPane; public class Ejemplo05 { public static void main( String args[] ) { String entrada; String resultado; float nota; entrada = JOptionPane.showInputDialog( "Calificación numérica:" ); nota = Float.parseFloat( entrada ); resultado = ""; if ( nota >= 9 ) resultado = "Sobresaliente"; if ( (nota>=7) && (nota<9) ) resultado = "Notable"; if ( (nota>=5) && (nota<7) ) resultado = "Aprobado"; if ( nota < 5 ) resultado = "Suspenso";

Page 29: Texto_Tecnicas de Programacion

Pág. 29

Asignatura: Técnicas de Programación

JOptionPane.showMessageDialog( null, resultado,"Calificación final", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Anidamiento de if Ejemplo: Resolución de una ecuación de primer grado ax+b=0

import javax.swing.JOptionPane; public class Ejemplo06 { public static void main( String args[] ) { String entrada; String resultado; float a,b,x; entrada = JOptionPane.showInputDialog("Coeficiente a"); a = Float.parseFloat( entrada ); entrada = JOptionPane.showInputDialog("Coeficiente b"); b = Float.parseFloat( entrada ); if (a!=0) { x = -b/a; resultado = "La solución es " + x; } else { if (b!=0) { resultado = "No tiene solución."; } else { resultado = "Solución indeterminada."; } } JOptionPane.showMessageDialog( null, resultado,"Solución de la ecuación de primer grado",JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

3.3 Controles de Flujo Repetitivos SENTENCIAS DE BUCLE

Bucles for

for( inicialización; terminación; iteración ) {

sentencias; }

Page 30: Texto_Tecnicas de Programacion

Pág. 30

Asignatura: Técnicas de Programación

Ejemplo: Programa que imprime los 20 primeros números naturales

public class Ejemplo07 { public static void main(String args[]) { int num; System.out.println("Los 20 primeros números naturales:"); for(num=1;num<=20;num++) System.out.println(num); } }

Bucles while

[inicialización;] while( terminación-expresión-booleana ) { sentencias; [iteración;] }

Ejemplo: Programa que imprime los 20 primeros números naturales

Bucles do/while

[inicialización;] do { sentencias; [iteración;] }while( terminación-expresión-booleana );

Ejemplo: Programa que imprime los 20 primeros números naturales

public class Ejemplo09 { public static void main(String[] args) { int num; System.out.println("Los 20 primeros números naturales:"); num=1; do { System.out.println(num); num++; } while (num<=20);

public class Ejemplo08 { public static void main(String args[]) { int num=1; System.out.println("Los 20 primeros números naturales:"); while (num<=20) { System.out.println(num); num++; } } }

Page 31: Texto_Tecnicas de Programacion

Pág. 31

Asignatura: Técnicas de Programación

} }

Ejemplos varios Ejemplo: Tabla de multiplicar de un número

public class While1 { public static void main( String args[] ) { int n; // Número int i; // Contador n = Integer.parseInt( args[0] ); i = 0; while (i<=10) { System.out.println (n+" x "+i+" = "+(n*i)); i++; } } }

Ejemplo: Divisores de un número

public class While2 { public static void main( String args[] ) { int n; int divisor; n = Integer.parseInt( args[0] ); System.out.println("Los divisores son:"); divisor = n; while (divisor>0) { if ((n%divisor) == 0) System.out.println(divisor); divisor--; } } }

Ejemplo: Sumar una serie de números hasta que el usuario introduzca un cero

import javax.swing.JOptionPane; public class While3 { public static void main( String args[] ) { float valor; float suma; suma = 0; valor = leerValor(); while (valor!=0) {

Page 32: Texto_Tecnicas de Programacion

Pág. 32

Asignatura: Técnicas de Programación

suma += valor; valor = leerValor(); } mostrarValor("Suma de los datos", suma); System.exit(0); } private static float leerValor () { String entrada; entrada = JOptionPane.showInputDialog ( "Introduzca un dato:" ); return Float.parseFloat(entrada); } private static void mostrarValor(String mensaje, float valor) { JOptionPane.showMessageDialog ( null, valor, mensaje, JOptionPane.INFORMATION_MESSAGE ); } }

3.4 Arrays Como otras variables, antes de poder utilizar un array primero se debe declarar. De nuevo, al igual que otras variables, la declaración de un array tiene dos componentes primarios: el tipo del array y su nombre. Un tipo de array incluye el tipo de dato de los elementos que va contener el array. Por ejemplo, el tipo de dato para un array que sólo va a contener elementos enteros es un array de enteros. No puede existir un array de tipo de datos genérico en el que el tipo de sus elementos esté indefinido cuando se declara el array.

ARRAYS UNIDIMENSIONALES:

En Java podemos declarar un vector de dos maneras:

Tipo_de_dato nomb_vector [ ]; Tipo_de_dato [ ] nomb_vector;

Char letras[ ]; //array_De_Char int numeros[ ] ; //array De Enteros

De cualquiera de las dos formas obtendríamos un vector de tamaño no definido, sin embargo la declaración no asegura un buen uso de los elementos del vector; por lo que debe definir su tamaño asignado en memoria suficiente para todos sus elementos y así asignar valores a los elementos y recuperar sus valores

nom_array = new tipo_dato [tamaño_array];

Ahora sí tendríamos un vector preparado para aceptar tanto elemento según el tamaño indicado del tipo de datos que se haya elegido Ejemplo:

int enteros [ ]; //declaración del arreglo enteros = new int[20]; //asignación de memoria para 20 enteros

Page 33: Texto_Tecnicas de Programacion

Pág. 33

Asignatura: Técnicas de Programación

Ejemplo:Java permite una manera fácil de crear con valores iniciales:

String nombres [ ] = {―Erick‖, ―Yuri‖, ―Jamil‖, ―Athina‖};

La línea anterior es similar a:

String nombres[]; nombres = new String [4]; nombres[0] = ―Erick‖; nombres[1] = ―Yuri‖; nombres[2] = ―Jamil‖; nombres[3] = ―Athina‖;

Control de tamaño de Array El tamaño de un arreglo puede ser determinado en tiempo de ejecución usando la variable miembro length por ejemplo:

for (int j = 0; j < numeros.length; j ++) { numeros[j] = j; System.out.println("[j] = " + numeros[j]); }

THIS

En algunos momentos puede resultar útil tener una referencia a la instancia actual, aquella que se está ejecutando. This ---- (yo mismo, asimismo)

public Persona(String ID, String Nombre, String Fono) {

this.ID=ID;

this.Nombre=Nombre;

this.Fono=Fono;

}

Ejemplo: Ingrese 4 números y almacénalos y luego imprimir su correspondiente promedio

//Programa que Ingresa 5 números enteros y almacénalos //y luego imprimir su correspondiente promedio import java.io.*; public class Ejemplo1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int numeros []=new int[5]; int x,num; double sum,prom; System.out.println("Ingrese 5 números enteros: \n"); sum=0; for (x=0;x<numeros.length;x++) {

String nombres [ ] = new String [4]

Page 34: Texto_Tecnicas de Programacion

Pág. 34

Asignatura: Técnicas de Programación

System.out.print("Numero "+x+": "); num=Integer.parseInt(br.readLine()) ; numeros[x]=num; sum=sum+num; } prom=sum/(numeros.length); System.out.print("Los números ingresados son:"); for (x=0; x<numeros.length;x++) { System.out.print("\n Numero "+x+": "+numeros[x]); } System.out.print("\n El promedio es: "+prom); } }

Ejemplo: Realice un programa para que ingrese la lista de estudiantes y luego los muestre

//Programa que Ingresa la lista de estudiantes import java.io.*; public class Ejemplo2 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String nombres[]=new String[5]; int x; String nom; System.out.println("Ingrese los nombres:\n"); for (x=0;x<nombres.length;x++) { nom=br.readLine(); nombres[x]=nom; } System.out.println("Los nombres ingresados son:"); for (x=0;x<nombres.length;x++) { System.out.println(nombres[x]); } } }

ARRAYS BIDIMENSIONALES

Los arrays bidimensionales en java se tiene que construir uniendo dos arrays bidimensional

para declarar un array bidimensional es de la siguiente forma

tipo_dato nomb_matriz [ ][ ]; Los vectores en Java son en realidad objetos (como casi todo) y por lo tanto se inicializan llamando a un constructor con new, con lo cual se logra un asignamiento suficiente de memoria (instanciamiento) para que el vector funcione correctamente

char c[][]

Integer numeros[][]

Donde:

Page 35: Texto_Tecnicas de Programacion

Pág. 35

Asignatura: Técnicas de Programación

el primer corchete con las filas y el segundo las columnas:

Integer M[][] = new Int[4][5]

Ejemplo: Declarando e instanciando una matriz de números de 30 filas por 10 columnas

//Primera forma int numeros[][]; numeros=new int[30][10]; //Segunda forma int numeros[][] = new int[30][10];

Ejemplo: Realice un programa de manera que muestre una matriz de nxn en donde la diagonal 1.0 y los démas elementos 0.0

import java.io.*; public class Ejemplo1 { public static void main(String[] args) throws IOException {BufferedReader br= new BufferedReader (new InputStreamReader (System.in)); int i,j,n; double matA[][] =new double[100][100]; System.out.print("Ingrese dimensión de la matriz :"); n=Integer.parseInt(br.readLine()); //rellenando sus elementos de la matriz for (i=1; i<=n;i++) { for(j=1;j<=n;j++) { if (i==j) matA[i][j]=1.0; else matA[i][j]=0.0; } } //mostrando la matriz System.out.println("La matriz generada es :"); for (i=1; i<=n;i++) { for(j=1;j<=n;j++) System.out.print(matA[i][j]+"\t"); System.out.println(""); } } }

Page 36: Texto_Tecnicas de Programacion

Pág. 36

Asignatura: Técnicas de Programación

SEGUNDA UNIDAD

Características Fundamentales de la Programación Orientada a Objetos

4.1 Clases, Objetos, Control de acceso, Constructores, Mensajes

CLASES:

Una clase es como una plantilla de la cual se pueden crear varios objetos con las mismas

características y funciones.

Una clase es un modelo(diseño) de objeto

Define los atributos y operaciones o métodos del objeto

La clase usan el encapsulamiento para forzar la abstracción

Método: Se implementa en una clase de objetos y determina cómo tiene que actuar el

objeto cuando recibe el mensaje vinculado con ese método.

Atributos (propiedades): Son definidas en la clase permitirán almacenar información para

dicho objeto.

Tema Nº 4: Conceptos Básicos en Lenguaje de Programación Orientada a Objetos

clase objetos

Page 37: Texto_Tecnicas de Programacion

Pág. 37

Asignatura: Técnicas de Programación

OBJETOS:

Un Objeto es una entidad que tiene atributos particulares, las propiedades y unas formas

reoperar sobre ellos, los métodos

Objetos tienen las siguientes cualidades (identidad – los objetos se distinguen del uno del otro, comportamiento –pueden realizar tareas, estado – almacena información que varia a través del tiempo)

EJEMPLO: Clase Empleado

Notacion UML :

-El nombre de toda Clase debe comenzar con Mayúsculas

-El nombre de los objetos con MinúsculasNOTACIÓN UML Y JAVA

CODIFICACIÓN DE LA CLASE EMPLEADO

Empleado.java

public class Empleado { private String Nombre; private String Apellido; private int Edad; public void Registrar(String Nombre, String Apellido, int Edad)

-Nombre -Apellido -Edad

Empleado

+ registrar()

+ mostrar()

Métodos()

Atributos

Nombre de la

clase

Eventos

Nombre

Apellido

Edad

Empleado

registrar()

mostrar()

public class Empleado{

private String Nombre;

private String Apellido;

private int Edad;;

public void registrar(){

}

public void mostrar(){

}

}

Nombre del

Archivo

Page 38: Texto_Tecnicas de Programacion

Pág. 38

Asignatura: Técnicas de Programación

{ this.Nombre = Nombre; this.Apellido= Apellido; this.Edad = Edad; } public void Mostrar() { System.out.println("Nombre "+ Nombre); System.out.println("Apellido"+ Apellido); System.out.println("Edad"+ Edad); } }

Principal.java

public class Principal { public static void main(String[] args) { Empleado A1= new Empleado(); A1.Registrar("Juan","Hurtado", 22); A1.Mostrar(); } }

Nota: Java nos permite tambien crear clases y el programa principal en uno solo archivo como se muestra en el

siguiente lineas

Empleadoprin1.java

class Empleado { private String Nombre; private String Apellido; private int Edad; public void Registrar(String Nombre, String Apellido, int Edad) { this.Nombre = Nombre; this.Apellido= Apellido; this.Edad = Edad; } public void Mostrar() { System.out.println("Nombre "+ Nombre); System.out.println("Apellido"+ Apellido); System.out.println("Edad"+ Edad); } } public class Empleadoprin1 { public static void main(String[] args) { Empleado A1= new Empleado(); A1.Registrar("Juan","Hurtado", 22); A1.Mostrar(); } }

Nombre del

Archivo

Para este programa se tiene

que tener en cuenta que todo

el programa esta realizado en

un solo archivo o nombre del

programa para este ejemplo el

nombre del programa es

Empleadoprin1

Page 39: Texto_Tecnicas de Programacion

Pág. 39

Asignatura: Técnicas de Programación

VARIABLES Y CONSTANTES Variables Miembro

Una clase en Java puede contener variables y métodos. Las variables pueden ser tipos primitivos como int, char, etc. Los métodos son funciones.

Por ejemplo, en el siguiente trozo de código podemos observarlo:

public class MiClase { int i; public MiClase() { i = 10; } public void Suma_a_i( int j ) { int suma; suma = i + j; } }

La clase MiClase contiene una variable (i) y dos métodos, MiClase() que es el constructor de la clase y Suma_a_i( int j ).

La declaración de una variable miembro aparece dentro del cuerpo de la clase, pero fuera del cuerpo de cualquier método de esa clase. Si se declara dentro de un métodos, será una variable local del método y no una variable miembro de la clase. En el ejemplo anterior, i es una variable miembro de la clase y suma es una variable local del método Suma_ a_i().

Constantes

En Java, se utiliza la palabra clave final para indicar que una variable debe comportarse como si fuese constante, significando con esto que no se permite su modificación una vez que haya sido declarada e inicializada.

Como es una constante, se le ha de proporcionar un valor en el momento en que se declare, por ejemplo:

class Elipse { final float PI = 3.14159; . . . }

MÉTODOS

Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. La implementación de un método consta de dos partes, una declaración y un cuerpo. La declaración en Java de un método se puede expresar esquemáticamente como:

tipoRetorno nombreMetodo( [lista_de_argumentos] ) { cuerpoMetodo

}

Page 40: Texto_Tecnicas de Programacion

Pág. 40

Asignatura: Técnicas de Programación

Método para ingresar datos utilizando en una clase

Para ello se tiene que Diseñar un clase leer

Se Diseña clase Alumno con atributo código y nombre y los datos sena ingresado por

teclado, para ello se utilizar tres clases

Clase leer

Clase alumno

Clase principal

//Clase leer

import java.io.*; public class leer { public static String lectura() { String Dato=""; try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader flujo = new BufferedReader(isr); Dato = flujo.readLine(); } catch(IOException e) { } return Dato; } } //clase alumno

public class alumno { private int codigo; private String nombre; public void registrar() { System.out.print("Ingrese Codigo:"); codigo = Integer.parseInt(leer.lectura()); System.out.print("Ingrese Nombre:"); nombre = leer.lectura(); } public void consultar() { System.out.println("Codigo del Alumno: "+codigo); System.out.println("Nombre del Alumno: "+nombre); } } // programa principal

public class ejem06 { public static void main(String args[]) {

Page 41: Texto_Tecnicas de Programacion

Pág. 41

Asignatura: Técnicas de Programación

alumno a1 = new alumno(); System.out.println("INGRESO DE DATOS DE ALUMNO"); System.out.println("----------------\n"); a1.registrar(); System.out.println("CONSULTA DE DATOS DE ALUMNO"); System.out.println("----------------\n"); a1.consultar(); } }

PARÁMETROS DE CLASES

En el paso de parámetros a funciones hay dos aproximaciones clásicas: el paso por valor y paso por referencia.

PARÁMETROS VALOR

Se realiza una copia de los valores que se pasan, trabajando dentro de la función con la copia. Es por ello que cualquier cambio que sufran dentro, no repercute fuera de la función.

PARÁMETROS POR REFERENCIA

No se realiza dicha copia, por lo que las modificaciones de dentro de las funciones afectan a los parámetros y esos cambios permanecen al final de la función.

En Java el paso por parámetro es por valor, aunque los efectos son de paso por referencia

cuando los argumentos son objetos. ¿cómo sucede eso? Pues es muy fácil, si una función

tiene como argumento un tipo primitivo (int, float, etc...), en Java se realiza una copia para la

función y cualquier cambio a dicho argumento no afecta a la variable original. Este paso de

parámetros en Java está orientado a utilizar el valor de la variable para otros cálculos.

Ejemplo:

En la siguiente clase existe tres parámetros: Nombre, Apellido, Edad.

public void Registrar(String Nombre, String Apellido, int Edad){ this.Nombre = Nombre; this.Apellido= Apellido; this.Edad = Edad;

Ejemplo Diseñe una clase Estudiante; que tenga sus atributos propios: Nª de orden y

Edad, con Método u operaciones de ingresar e imprimir;

Primera Forma

CLASE ESTUDIANTE

public class estudiante { private int nro1; private int edad1; public void ingresar(int nro,int edad ) {

Parámetros

El archivo debe llamarse estudiante

Existe dos parámetros

que son de tipo entero

Page 42: Texto_Tecnicas de Programacion

Pág. 42

Asignatura: Técnicas de Programación

this.nro1 = nro; this.edad1 = edad; } public void imprimir() { System.out.println("El numero de orden es " + nro1); System.out.println("La edad del estudiante " + edad1); } }

CLASE PRINCIPAL O PROGRAMA PRINCIPAL

public class Ejemplo01 { public static void main(String[] args) { System.out.println("Paso de parámetro "); estudiante e1 = new estudiante (); e1.ingresar(1,22); e1.imprimir(); } }

Segunda Forma

Tambíen se puede realizar la implementación en un programa creando en un solo

archivo o file

class estudiante { private int nro1; private int edad1; public void ingresar(int nro,int edad ) { //this.nro1 = nro; nro1 = nro; edad1 = edad; } public void imprimir() { System.out.println("El numero de orden es " + nro1); System.out.println("La edad del estudiante " + edad1); } } public class Ejemplo01 { public static void main(String[] args) { System.out.println("Paso de parámetro "); estudiante e1 = new estudiante (); e1.ingresar(1,22); e1.imprimir(); } }

Ejemplo: Diseñar una clase persona que incluya los siguientes datos: nombre y edad.

Como atributos de la clase incluya los método o funciones siguientes:

public void ingresar() //Registra el ingreso de nombre y edad

public void imprimir() //Imprime el nombre y la edad ingresada

El archivo debe llamarse

Ejemplo01

Todo el archivo debe llamarse Ejemplo01

Cuando esta en un solo file

o archivo ya no es

necesario que se utilice

this

Page 43: Texto_Tecnicas de Programacion

Pág. 43

Asignatura: Técnicas de Programación

public int calcula_dvividos() //Devuelve la cantidad de dias vividos

persona.java

import java.io.*; public class persona { private int edad; private String nombre; private int ndiasv; public void ingresar() { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("Ingrese su nombre :"); nombre=br.readLine(); System.out.print("Ingrese su edad :"); edad=Integer.parseInt(br.readLine()); } catch (Exception e) { System.out.println(e); } } public int calcula_dvividos() { ndiasv=edad*365; return ndiasv; } public void imprimir() { System.out.println("Nombre :"+nombre); System.out.println("Edad :"+edad); } }

Ejemplo04.java

public class Ejemplo04 { public static void main(String [] args) { persona p1= new persona (); System.out.println("Calculo de dias vividos"); p1.ingresar(); p1.imprimir(); System.out.println("cantidad de dias vividos :"+p1.calcula_dvividos()+" dias"); } }

CONTRUCTORES Todas las clases Java tienen métodos especiales llamados Constructores que se utilizan para inicializar un objeto nuevo de ese tipo. Los contructores tienen el mismo nombre que la clase --el nombre del constructor de la clase Rectangle es Rectangle(), el nombre del constructor de la clase Cliente es Cliente(), etc... Java soporta la sobrecarga de los nombres de métodos, por lo que una clase puede tener cualquier número de constructores, todos los cuales tienen el mismo nombre. Al igual que otros métodos sobrecargados, los constructores se diferencian unos de otros en el número y tipo de sus argumentos.

Ejemplo de un constructor en un Programa: Ejemplo01 /** Calcula el área de un rectangulo*/

public class Rectangulo { private float x1,y1,x2,y2;

Page 44: Texto_Tecnicas de Programacion

Pág. 44

Asignatura: Técnicas de Programación

public Rectangulo(float ex1, float ey1, float ex2, float ey2) { this.x1 = ex1; this.x2 = ex2; this.y1 = ey1; this.y2 = ey2; } public float calcularArea() { return (x2-x1) * (y2-y1); } }

// Clase General

public class Programa1{ public static void main(String[] args) { Rectangulo prueba = new Rectangulo(1,4,7,6); System.out.println(prueba.calcularArea()); } }

Ejemplo 02 Realice un programa para mostrar los fechas ingresadas y asignar dentro de un constructor si parámetro, también con paso de parámetro.

public class Date { // Atributos private int month; private int day; private int year; // Constructor con cero parámetros public Date() { month = 2; day = 1; year = 1998; } // Constructor con tres parámetros public Date(int theMonth, int theDay, int theYear) { month = theMonth; day = theDay; year = theYear; } // Conversión a String public String toString() { return month + "/" + day + "/" + year; } } public class EjemploConstructor2 { public static void main(String [] args) { Date d1 = new Date(); Date d2 = new Date(1,1,1998); Date d3 = new Date(1,1,1999); System.out.println("Date 1: "+d1); System.out.println("Date 2: "+d2); System.out.println("Date 3: "+d3);

Page 45: Texto_Tecnicas de Programacion

Pág. 45

Asignatura: Técnicas de Programación

} }

Ejemplo03 Diseñar la clase empresa productora con: ruc, nombre y producción total, con los métodos:

public Empresa(int Ruc, String Nombre, float Prod)

public float retprod()

public String consultar() Diseñar la clase Industria que contenga el Ruc, Nombre , producción de una empresa y las funciones respectivamente:

public Industria(String Nombre, int Ruc1, String Nombre1, float Prod1) - constructor

public String consultar( )

public String totprod( ) Clase Empresa

public class Empresa { private int Ruc; private String Nombre; private float Prod; public Empresa(int Ruc, String Nombre, float Prod) { this.Ruc = Ruc; this.Nombre = Nombre; this.Prod = Prod; } public float retprod() { return Prod; } public String consultar() { return "Ruc" + Ruc +"Nombre: " + Nombre + " Producción: " + Prod + "\n"; } }

Clase Industria

public class Industria { private String NombreIndustria; private Empresa emp1; public Industria(String Nombre, int Ruc1, String Nombre1, float Prod1) { this.NombreIndustria=Nombre; emp1=new Empresa(Ruc1, Nombre1, Prod1); } public String consultar( ) { String Datos; Datos = emp1.consultar(); return " los datos de la Empresa es "+Datos; } public String totprod( ) { double total=0; total = emp1.retprod(); return "Produccion de la industria: " + total; }

Page 46: Texto_Tecnicas de Programacion

Pág. 46

Asignatura: Técnicas de Programación

}

Clase Principal

public class Principal { public static void main(String[] args) { // TODO code application logic here Industria ind = new Industria ("calzados", 131324254, "Rojas", 255444f); System.out.println(ind.consultar() + ind.totprod()); } }

MENSAJES

Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó

4.2 Herencia, Subclases, Polimorfismo y Encapsulamiento

HERENCIA Y SUBCLASES

Herencia La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.

Subclases

Como ya se ha indicado en múltiples ocasiones en esta sección, cuando se puede crear nuevas clases por herencia de clases ya existentes, las nuevas clases se llaman subclases, mientras que las clases de donde hereda se llaman superclases.

Cualquier objeto de la subclase contiene todas las variables y todos los métodos de la superclase y sus antecesores.

La orientación a objetos de Java, y en particular la característica de herencia, nos permite definir nuevas clases derivadas a partir de otra ya existente, que la especializan de alguna manera, extendiéndola. Así logramos definir una jerarquía

Page 47: Texto_Tecnicas de Programacion

Pág. 47

Asignatura: Técnicas de Programación

Ejemplo 1:

En todo lenguaje orientado a objetos existe una jerarquía de clases relacionadas en base a

términos de herencia. En Java, el punto más alto de la jerarquía es la clase Object de la

cual derivan en última instancia todas las demás clases. Esta clase aporta una serie de

funciones básicas comunes a todas las clases. Si al definir una nueva clase, no aparece la

claúsula extends, Java considera que dicha clase desciende directamente de Object.

Ejemplo 2: Desarrolle un programa para la clase Persona que será súper clase(Padre) y

Cliente sub clase(Hijo).

//clase persona public class Persona { private String ID; private String Nombre; private String Fono; public Persona(String ID, String Nombre, String Fono) { this.ID=ID; this.Nombre=Nombre; this.Fono=Fono; } public Persona(String Nombre, String Fono) { this.ID="conti"; //Se autogenera this.Nombre=Nombre; this.Fono=Fono; }

public class Lavadora

extends

Electrodomestico

{ public int capacidad()

{ <implementación>

}

}

public class Televisor

extends

Electrodomestico

{ public int

numCanales()

{ <implementación>

}

}

public class PLancha

extends

Electrodomestico

{ public int vapor()

{ <implementación>

}

}

public class Electrodomestico

{ private double tension;

private double comsumo;

public void conectar()

{ <implementación>

}

public void desconecctar()

{ <implementación>

}

}

Page 48: Texto_Tecnicas de Programacion

Pág. 48

Asignatura: Técnicas de Programación

public String Imprimir() { return ID + "\t" + Nombre + "\t" + Fono; } }

//clase cliente

public class Cliente extends Persona

{ private String RUC; public Cliente(String ID, String Nombre, String Fono, String RUC) { super(ID, Nombre, Fono); this.RUC=RUC; } public String Imprimir() { return super.Imprimir() + "\t" + RUC; } }

//Programa Principal

public class Prueba { public static void main(String[] args) { Persona p = new Persona("1", "Miguel","212121"); Persona amigo = new Persona("Pepe", "234920"); Cliente c1 = new Cliente("2", "Luis", "242425","10200325471"); System.out.println(p.Imprimir()); System.out.println(amigo.Imprimir()); System.out.println(c1.Imprimir()); } }

Ejemplo 3: Se desea diseñar una clase alumno que puede ser estudiante universitario o tal vez estudiante del instituto.

class alumno { private int codigo; private String nombre; public void registrar(int n_codigo, String n_nombre) { codigo = n_codigo; nombre = n_nombre; } public void consultar() { System.out.println("Codigo: " + codigo); System.out.println("Nombre: " + nombre); } } class alumno_univ extends alumno { private String facultad; public void regDatos (int n_codigo,String n_nombre,String n_facultad) { super.registrar(n_codigo,n_nombre); facultad = n_facultad; } public void conDatos() { super.consultar(); System.out.println("Facultad: "+facultad+"\n"); } } class alumno_inst extends alumno { private String espec; public void regDatos(int n_codigo,String n_nombre,String n_espec) { super.registrar(n_codigo,n_nombre); espec = n_espec; }

Page 49: Texto_Tecnicas de Programacion

Pág. 49

Asignatura: Técnicas de Programación

public void conDatos() { super.consultar(); System.out.println("Especialidad:"+espec+"\n"); } } public class EstudiPricipal { public static void main(String args[]) { alumno_inst a1 = new alumno_inst(); a1.regDatos(1,"Jejo","MKT"); alumno_univ a2 = new alumno_univ(); a2.regDatos(2,"Manuel","Ing Informática"); System.out.println("Consulta de Datos"); a1.conDatos(); a2.conDatos(); } }

Ejemplo 4: Desarrolle el ejemplo anterior con ingreso de datos empleando la siguiente clase leer

import java.io.*; class leer { public static String lectura() { String vdato=""; try { InputStreamReader isr =new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); vdato=br.readLine(); } catch(IOException e) { } return vdato; } }

Solución:

import java.io.*; class leer { public static String lectura() { String vdato=""; try { InputStreamReader isr =new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); vdato=br.readLine(); } catch(IOException e) { } return vdato; } } class alumno { private int codigo; private String nombre; public void registrar() { System.out.print("Ingrese Codigo : "); codigo=Integer.parseInt(leer.lectura()); System.out.print("Ingrese Nombre : ");

Page 50: Texto_Tecnicas de Programacion

Pág. 50

Asignatura: Técnicas de Programación

nombre=leer.lectura(); } public void consultar() { System.out.println("Codigo: " + codigo); System.out.println("Nombre: " + nombre); } } class alumno_univ extends alumno { private String facultad; public void regDatos () { super.registrar(); System.out.print("Ingrese Facultad : "); facultad=leer.lectura(); } public void conDatos() { super.consultar(); System.out.println("Facultad: "+facultad+"\n"); } } class alumno_inst extends alumno { private String espec; public void regDatos() { super.registrar(); System.out.print("Ingrese Especialidad : "); espec=leer.lectura(); } public void conDatos() { super.consultar(); System.out.println("Especialidad:"+espec+"\n"); } } public class Ejemplo4 { public static void main(String args[]) { alumno_inst a1 = new alumno_inst(); System.out.println("UTILIZANDO LA CLASE ALUMNO_INST"); a1.regDatos(); alumno_univ a2 = new alumno_univ(); System.out.println("\nUTILIZANDO LA CLASE ALUMNO_UNIV"); a2.regDatos(); System.out.println("\nCONSULTA DE DATOS"); a1.conDatos(); a2.conDatos(); } }

POLMORFISMO

Java soporta la sobrecarga de funciones, esto es, distintas funciones que comparten el mismo nombre, basta para ello con tener distintos argumentos de llamada. Ejemplo 1: Realizar una clase en, en el cual soporte la sobrecarga de funciones

Page 51: Texto_Tecnicas de Programacion

Pág. 51

Asignatura: Técnicas de Programación

unaclase.java

public class unaclase { public void escribe(int i) { System.out.println("LLamada con entero"); } public void escribe(float i) { System.out.println("LLamada con float"); } public void escribe(double i) { System.out.println("LLamada con double"); } }//

ejemplo1.java

public class ejemplo1 { public static void main(String arg[]) { unaclase uc; uc = new unaclase(); uc.escribe(1); uc.escribe(1.0F); uc.escribe(1.0); } }

Nota importante: Una forma de polimorfismo es Sobrecargar funciones Ejemplo 2: Se Tiene una clase producto con codigo y descripción como datos miembros o atributos y que tenga los siguientes metodos:

public void registrar () - que permita registrar los datos

public void consultar () - que visualice los datos del producto.

import java.io.*; class leer { public static String lectura() { String vdato=""; try { InputStreamReader isr =new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); vdato=br.readLine(); } catch(IOException e) { } return vdato; } } class producto { private int codigo; private String descrip; public void registrar() { System.out.print("Ingrese Codigo:"); codigo=Integer.parseInt(leer.lectura()); System.out.print("Ingrese Descrip.:"); descrip=leer.lectura(); }

Sobrecarga de

métodos

Método escribe

Page 52: Texto_Tecnicas de Programacion

Pág. 52

Asignatura: Técnicas de Programación

public void registrar(int n_codigo, String n_descrip) { codigo = n_codigo; descrip = n_descrip; } public void consultar() { System.out.println("Codigo:" + codigo); System.out.println("Descrip.:" + descrip+ "\n"); } } public class prrincipal { public static void main(String args[]) { producto prod1 = new producto(); producto prod2 = new producto(); // Dos formas de registrar los datos prod1.registrar(); prod2.registrar(2,"Cuaderno 100 hojas"); System.out.println("\nConsulta de Datos"); System.out.println("-----------------"); prod1.consultar(); prod2.consultar(); } }

ENCAPSULAMIENTO:

El encapsulamiento consiste en ocultar los detalles de la implementación de un objeto, a la vez que se provee una interfaz publica por medio de sus métodos permitidos. También se define como la propiedad de los objetos de permitir acceso a su estado únicamente a través de su interfaz o de relaciones preestablecidas con otros objetos.

4.3 Clase Object, Clases Abstractas, Interfaces y Paquetes.

CLASE OBJECT La clase Object, como ya se ha indicado anteriormente, es la clase raíz de todo el árbol de

la jerarquía de clases Java, y proporciona un cierto número de métodos de utilidad general

que pueden utilizar todos los objetos. La lista completa se puede ver en la documentación

del API de Java, aquí solamente se tratarán algunos de ellos; por ejemplo, Object

proporciona:

Un método por el que un objeto se puede comparar con otro objeto Un método para convertir un objeto a una cadena Un método para esperar a que ocurra una determinada condición Un método para notificar a otros objetos que una condición ha cambiado Un método para devolver la clase de un objeto

CLASES ABSTRACTAS

Una de las características más útiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen como se utiliza solamente, sin tener que implementar métodos, son las clases abstractas. Mediante una clase abstracta se intenta fijar un conjunto mínimo de métodos (el comportamiento) y de atributos, que permitan modelar un cierto concepto, que será refinado y especializado mediante el mecanismo de la herencia. Como consecuencia, la implementación de la mayoría de los métodos de una clase abstracta podría no tener significado. Para resolver esto, Java proporciona los métodos abstractos. Estos métodos se encuentran incompletos, sólo cuentan con la declaración y no poseen cuerpo de definición. Esto es muy útil cuando la implementación es

Page 53: Texto_Tecnicas de Programacion

Pág. 53

Asignatura: Técnicas de Programación

específica para cada usuario, pero todos los usuarios tienen que utilizar los mismos métodos. Un ejemplo de clase abstracta en Java es la clase Graphics:

public abstract class Graphics { public abstract void drawLine( int x1,int y1,int x2,int y2 ); public abstract void drawOval( int x,int y,int width,int height ); public abstract void drawArc( int x,int y,int width, int height,int startAngle,int arcAngle ); . . . }

Los métodos se declaran en la clase Graphics, pero el código que ejecutará el método está en algún otro sitio:

public class MiClase extends Graphics { public void drawLine( int x1,int y1,int x2,int y2 ) { <código para pintar líneas -específico de la arquitectura->

} }

Cuando una clase contiene un método abstracto tiene que declararse abstracta. No obstante, no todos los métodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden tener métodos privados (no se podrían implementar) ni tampoco estáticos. Una clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta.

INTERFACES

Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los métodos abstractos. Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel superior, lo que permite simular la herencia múltiple de otros lenguajes.

La principal diferencia entre interface y abstract es que un interfaz proporciona un mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia. Una interfaz es una clase completamente abstracta (una clase sin implementación).

Los interfaces se declaran con la palabra reservada de interface

En la declaración de una interfaz solamente puede ir las declaraciones de los métodos (su nombre y asignatura sin su implementación) y definiciones de constantes simbólicas.

Una interfaz no encapsula los datos, solo define cuales son los métodos que implementarán los objetos de aquellos clases que se implementa la interfaz.

Ejemplo Implementación del gráfico //clase Figura;

public interface Figura { public double area(); }

//Clase Cuadrado

public class Cuadrado implements Figura { private double lado; public Cuadrado( double lado) { this.lado=lado; } public double area() { return lado*lado;

Page 54: Texto_Tecnicas de Programacion

Pág. 54

Asignatura: Técnicas de Programación

} }

// clase circulo

public class Circulos implements Figura { private double Radio; public Circulos( double Radio){ this.Radio=Radio; } public double area(){ return (Math.PI)*Radio*Radio; } }

//Programa Principal

public class programa1 { public static void main(String[] args) { // TODO code application logic here Circulos c1= new Circulos(4.00); Cuadrado Cu2 = new Cuadrado(5.00); System.out.println("area del circulo"+c1.area()); System.out.println("area del cuadrado"+Cu2.area()); } }

PAQUETES

Para explicar el tema de los paquetes imaginarse una ciudad en la cual hay varios bloques de apartamentos propiedad de una única empresa inmobiliaria. Esta empresa dispone además de comercios, zonas de recreo y almacenes. Se puede pensar en la empresa como una lista de referencias a cada una de sus propiedades; es decir, la inmobiliaria sabe exactamente donde está un apartamento determinado y puede hacer uso de él en el momento en que lo necesite.

Si ahora se mira lo anterior en términos de Java, la empresa inmobiliaria es el paquete. Los paquetes agrupan a librerías de clases, como las librerías que contienen información sobre distintas propiedades comerciales. Un paquete será, pues, la mayor unidad lógica de objetos en Java.

Declaración de Paquetes

Los paquetes se declaran utilizando la palabra package seguida del nombre del paquete. Esto debe estar al comienzo del fichero fuente, en concreto, debe ser la primera sentencia ejecutable del código Java, excluyendo, claro está, los comentarios y espacios en blanco. Por ejemplo:

package mamiferos;

class Ballena {

. . .

}

Java también soporta el concepto de jeraquía de paquetes. Esto es parecido a la jerarquía de directorios de la mayoría de los sitemas operativos. Se consigue especificando múmtiples nombres en la sentencia package, separados por puntos. Por ejemplo, en las sentencias siguientes, la clase Ballena pertenece al paquete mamiferos que cae dentro de la jerarquía del paquete animales.

package animales.mamiferos;

Page 55: Texto_Tecnicas de Programacion

Pág. 55

Asignatura: Técnicas de Programación

class Ballena {

. . .

}

Esto permite agrupar clases relacionadas en un solo paquete, y agrupar paquetes relacionados en un paquete más grande. Para referenciar a un miembro de otro paquete, se debe colocar el nombre del paquete antes del nombre de la clase. La siguiente sentencia es un ejemplo de llamada al método obtenerNombre() de la clase Ballena que pertenece al subpaquete mamiferos del paquete animales:

animales.mamiferos.Ballena.obtenerNombre();

La analogía con la jerarquía de directorios se ve reforzada por el intérprete Java, ya que éste requiere que los ficheros .class se encuentren físicamente localizados en subdirectorios que coincidan con el nombre del subpaquete. En el ejemplo anterior, si se encontrase en una máquina Unix, la clase Ballena debería estar situada en el camino

siguiente:

animales/mamiferos/Ballena.class

Acceso a Otros Paquetes

Se decía que se pueden referenciar paquetes precediendo con su nombre la clase que se quiere usar. También se puede emplear la palabra clave import, si se van a colocar múltiples referencias a un mismo paquete, o si el nombre del paquete es muy largo o complicado.

La sentencia import se utiliza para incluir una lista de paquetes en los que buscar una clase

determinada, y su sintaxis es:

import nombre_paquete;

Esta sentencia, o grupo de ellas, deben aparecer antes de cualquier declaración de clase en el código fuente. Por ejemplo:

import animales.mamiferos.Ballena;

En este ejemplo, todos los miembros (variables, métodos) de la clase Ballena están accesibles especificando simplemente su nombre, sin tener que precederlo del nombre completo del paquete.

Esta forma de abreviar tienes sus ventajas y sus desventajas. La ventaja principal es que el código no se vuelve demasiado difícil de leer y además es más rápido de teclear. La desventaja fundamental es que resulta más complicado el saber exactamente a qué paquete pertenece un determinado miembro; y esto es especialmente complicado cuando hay muchos paquetes importados.

En la sentencia import también se admite la presencia del carácter *, asterisco. Cuando se emplea, se indica que toda la jerarquía de clases localizada a partir del punto en que se encuentre, debe ser importada, en lugar de indicar solamente una determinada clase. Por ejemplo, la siguiente sentencia indicaría que todas la clases del subpaquete animales.mamiferos, deben ser importadas:

import animales.mamiferos.*;

Esta es una forma simple y sencilla de tener acceso a todas las clases de un determinado paquete. Aunque el uso del asterisco debe hacerse con cautela, porque al ya de por sí lento compilador, si se pone un asterisco, se cargarán todos los paquetes, lo que hará todavía más lenta la compilación. No obstante, el asterisco no tiene impacto alguno a la hora de la ejecución, solamente en tiempo de compilación.

Page 56: Texto_Tecnicas de Programacion

Pág. 56

Asignatura: Técnicas de Programación

La sentencia import se utiliza en casi todos los ejemplos del Tutorial, fundamentalmente

para acceder a las distintas partes del API de Java. Por defecto, el conjunto de clases bajo java.lang.* se importan siempre; las otras librerías deben ser importadas explícitamente. Por ejemplo, las siguientes líneas de código premiten el acceso a las clases correspondientes a las librerías de manipulacion de imágenes y gráficos:

import java.awt.Image;

import java.awt.Graphics;

PAQUETES DE JAVA

El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. En la versión actual del JDK, algunos de los paquetes Java que se incluyen son los que se muestran a continuación, que no es una lista exhaustiva, sino para que el lector pueda tener una idea aproximada de lo que contienen los paquetes más importantes que proporciona el JDK de Sun. Posteriormente, en el desarrollo de otros apartados del Tutorial, se introducirán otros paquetes que también forman parte del JDK y que, incorporan características a Java que hacen de él un lenguaje mucho más potente y versátil, como son los paquetes Java2D o Swing, que han entrado a formar parte oficial del JDK en la versión JDK 1.2.

java.applet

Este paquete contiene clases diseñadas para usar con applets. Hay la clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip.

java.awt

El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Gráfico de Usuario), de manipulación de imágenes, impresión, fuentes de caracteres, cursores, etc.. Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea, TextField...

java.io

El paquete de entrada/salida contiene las clases de acceso a ficheros, de filtrado de información, serialización de objetos, etc.: FileInputStream, FileOutputStream, FileReader, FileWriter. También contiene los interfaces que facilitan la utilización de las clases: DataInput, DataOutput, Externalizable, FileFilter, FilenameFilter, ObjectInput, ObjectOutput, Serializable...

java.lang

Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, Package, Process, Runtime, etc.

java.sql

Este paquete incluye todos los interfaces que dan acceso a Bases de Datos a través de JDBC, Java DataBase Connectivity, como son: Array, Blob, Connection, Driver, Ref, ResultSet, SQLData, SQLInput, SQLOutput, Statement, Struct; y algunas clases específicas: Date, DriveManager, Time, Types...

Page 57: Texto_Tecnicas de Programacion

Pág. 57

Asignatura: Técnicas de Programación

TERCERA UNIDAD

Interfaz Gráfica y manejo de datos

5.1 El visor de Applets y escribir Applets Java

EL VISOR DE APPLETS

El visor de applets (appletviewer) es una aplicación que permite ver en funcionamiento applets, sin necesidad de la utilización de un navegador World-Wide-Web como HotJava, Microsoft Explorer o Nescape. En adelante, se recurrirá muchas veces a él, ya que el objetivo de este Tutorial es el lenguaje Java, y es la forma más sencilla y económica de poder ver un applet en ejecución.

Applet

La definición más extendida de applet, muy bien resumida por Patrick Naughton, indica que un applet es "una pequeña aplicación accesible en un servidor Internet, que se transporta por la red, se instala automáticamente y se ejecuta in situ como parte de un documento web". Claro que así la definición establece el entorno (Internet, Web, etc.). En realidad, un

applet es una aplicación pretendidamente corta (nada impide que ocupe más de un gigabyte, a no ser el pensamiento de que se va a transportar por la red y una mente sensata) basada en un formato gráfico sin representación indepediente: es decir, se trata de un elemento a embeber en otras aplicaciones; es un componente en su sentido estricto.

Llamadas a Applets con appletviewer

<HTML> <APPLET CODE=HolaMundo.class WIDTH=300 HEIGHT=100> </APPLET> </HTML>

El appletviewer creará un espacio de navegación, incluyendo un área gráfica, donde se ejecutará el applet, entonces llamará a la clase applet apropiada. En el ejemplo anterior, el appletviewer cargará una clase de nombre HolaMundo y le permitirá trabajar en su espacio

gráfico.

Tema Nº 5: Programas Básicos en Lenguaje de Programación Orientada a Objetos

Page 58: Texto_Tecnicas de Programacion

Pág. 58

Asignatura: Técnicas de Programación

Arquitectura de appletviewer

ESCRIBIR APPLETS JAVA

Para escribir applets Java. Hay que utilizar una serie de métodos. Incluso para el applet más sencillo. Son los que se usan para arrancar (start) y detener (stop) la ejecución del applet, para pintar (paint) y actualizar(update) la pantalla y para capturar la información que se pasa al applet desde el archivo html a través de la marca APPLET.

init()

Esta función miembro es llamada al crearse el applet. Es llamada sólo una vez. La clase Applet no hace nada en init(). Las clases derivadas deben sobrecargar este método para cambiar el tamaño durante su inicialización, y cualquier otra inicialización de los datos que solamente deba realizarse una vez. Deberían realizarse al menos las siguientes acciones:

Carga de imágenes y sonido El resize del applet para que tenga su tamaño correcto Asignación de valores a las variables globales

public void init() { resize(500,500); }

resize( int width,int height )

El método init() debería llamar a esta función miembro para establecer el tamaño del applet.

Puede utilizar las variables ancho y alto, pero no es necesario. Cambiar el tamaño en otro sitio que no sea init() produce un reformateo de todo el documento y no se recomienda.

Page 59: Texto_Tecnicas de Programacion

Pág. 59

Asignatura: Técnicas de Programación

En el navegador Netscape, el tamaño del applet es el que se indica en la marca APPLET del HTML, no hace caso a lo que se indique desde el código Java del applet.

paint( Graphics g )

Se llama cada vez que se necesita refrescar el área de dibujo del applet. La clase Applet simplemente dibuja una caja con sombreado de tres dimensiones en el área. Obviamente, la clase derivada debería sobrecargar este método para representar algo inteligente en la pantalla.

Podemos utilizar paint() para imprimir nuestro mensaje de bienvenida:

void public paint( Graphics g ) { g.drawString( "Hola Java!",25,25 ); // Dibujaremos la imágenes que necesitemos }

5.2 CLASE GRAPHICS

La clase Graphics describe el contexto gráfico y proporciona un conjunto de funciones para dibujar las siguientes figuras

Líneas Círculos y elipses Rectángulos y polígones Imágenes Texto

El sistema de coordenadas que se usa en Java es similar a Windows. El área de trabajo del

applet está compuesta por una matriz bidimensional de puntos o pixels. Decimos que un

punto tiene de coordendas (x, y) cuando está en la columna x medida desde la izquierda, y

está en la fila y, medida desde arriba.

La esquina superior izquierda es el origen (0, 0).

Método resize, setSize: Permite cambiar el tamaño del applet resize (int ancho, int alto) resize(500,500); setSize(500,500);

Método getSize: La función getSize nos devuelve un objeto de la clase Dimension cuyos

miembros width y height nos suministran la anchura y altura del componenete.

int ancho=getSize().width; int alto=getSize().heigth;

Método drawString: Permite escribir un texto en la pantalla

g.drawString("Holasssss!!", 50, 60 );

Método Color: Color C1 = new Color(255,0,0);

El color negro es el color por defecto del contexto gráfico. Para establecer otro color, como veremos en la página siguiente, se utiliza la función setColor, y se le pasa un color predefinido o definido por el usuario.

Page 60: Texto_Tecnicas de Programacion

Pág. 60

Asignatura: Técnicas de Programación

g.setColor(C1); Los colores primarios son el rojo, el verde y el azul. Java utiliza un modelo de color denominado RGB, que significa que cualquier color se puede describir dando las cantidades de rojo (Red), verde (Green), y azul (Blue). Estas cantidades son números enteros comprendidos entre 0 y 255, o bien, números reales comprendidos entre 0.0 y 1.0. La siguiente tabla nos proporciona los colores más comunes y sus valores RGB. Nombre Red (rojo) Green (verde) Blue (azul)

white 255 255 255

lightGray 192 192 192

gray 128 128 128

drakGray 64 64 64

black 0 0 0

red 255 0 0

pink 255 175 175

orange 255 200 0

yellow 255 255 0

green 0 255 0

magenta 255 0 255

cyan 0 255 255

blue 0 0 255

Para crear un objeto de la clase Color, se pasan tres números a su constructor que indican la cantidad de rojo, verde y azul. Color colorRosa=new Color(255, 175, 175); Mediante la función setColor, cambiamos color con el que dibujamos una línea, un texto o rellenamos una figura cerrada en el contexto gráfico g. g.setColor(colorRosa); No es necesario tener a mano la tabla de las componentes RGB de cada color. La clase Color nos proporciona un conjunto de colores predefinidos en forma de miembros estáticos de dicha clase. Podemos escribir alternativamente g.setColor(Color.pink); Los colores predefinidos son los siguientes

Color.white Color.black Color.yellow

Color.lightGray Color.red Color.green

Color.gray Color.pink Color.magenta

Color.darkGray Color.orange Color.cyan

Color.blue

Métodos De La Clase Graphics

drawLine(x1,y1,x2,y2):

La función drawLine, le pasamos el punto inicial (x1,y1) y el punto final (x2,y2). Para dibujar una línea diagonal desde el origen (0, 0) o esquina superior izquierda, hasta la esquina inferior derecha, obtenemos las dimensiones del applet mediante la función getSize, que devuelve un objeto de la clase Dimension. El miembro width nos proporciona la anchura y el miembro height la altura.

g.drawLine(0, 0, getSize().width-1, getSize().height-1); drawRect (x, y, ancho, alto): La función drawRect dibuja el contorno de un rectangulo

g.drawRect (x,y, anchura,altura);

Page 61: Texto_Tecnicas de Programacion

Pág. 61

Asignatura: Técnicas de Programación

fillRect(x, y, ancho, alto) Dbuja el rectángulo pintando su interior del color seleccionado, en este caso de color rojo.

g.setColor(Color.red); g.fillRect(50, 150, 50, 60);

drawRoundRect (x,y, ancho, alto,ancho Arco, alto Arco )

Permite dibujar un rectángulo con los bordes redondeados

g.drawRoundRect(3,3, 200, 100,25,25 );

drawOval (x, y, ancho, alto) fillOval (x, y, ancho, alto) Una elipse de dibuja mediante drawOval o fillOval, con los mismos parámetros que el

rectángulo fillArc(x, y, ancho, alto, ang_inicial, ang_final) drawArc(x, y, ancho, alto, ang_inicial, ang_final) Un arco requiere dos parámetros más el ángulo inical y el ángulo final. Las sentencias que vienen a continuación, dibujan un arco en el interior del rectángulo cuyo origen es el punto 10, 10, cuya anchura es 150, y cuya altura es 100. El ángulo inicial es 0 y el final es 270, expresado en grados. g.setColor(Color.cyan); g.fillArc(10, 10, 150, 100, 0, 270); g.setColor(Color.black); g.drawArc(10, 10, 150, 100, 0, 270);

Ejemplo 1: Creación de un Applet

import java.awt.*; import java.applet.*; public class Ejercicio1 extends Applet { public void init() { resize(600,400); } public void paint(Graphics g) { g.drawString("Holasssss!!", 50, 60 ); Color c1= new Color (255,0,0);//definiendo el color rojo g.setColor(c1);//activando el color rojo g.drawString("pruebita ps!!", 50,80 ); g.drawLine(50,100,210,120); Color c2=new Color(0,255,0);//verde g.setColor(c2); g.drawRect(50,130,25,25 ); Color c3=new Color(255,175,175);//rosado g.setColor(c3); g.fillRect(50,160,100,20 ); g.drawRoundRect(200,160,100,50, 15,15 ); g.setColor(c1); g.fillArc(50,180,120,60,0,50); } }

Page 62: Texto_Tecnicas de Programacion

Pág. 62

Asignatura: Técnicas de Programación

5.3 La aplicación Fecha

import java.util.Date; class FechaApp { public static void main( String args[] ) { Date hoy = new Date(); System.out.println( hoy ); } }

Esta aplicación es una versión modificada de HolaMundoApp de la que difiere porque se importa la clase Date, la aplicación se llama ahora FechaApp en vez de HolaMundoApp, se crea un objeto Date y el mensaje de salida a pantalla es diferente. Esta nueva aplicación se almacenar en el fichero fuente Java, FechaApp.java.

5.4 Clases Java

LA CLASE MATH

La clase Math representa la librería matemática de Java.

Funciones Matemáticas

Si se importa la clase, se tiene acceso al conjunto de funciones matemáticas estándar:

Math.abs( x ) para int, long, float y double Math.sin( double a ) devuelve el seno del ángulo a en radianes Math.cos( double a ) devuelve el coseno del ángulo a en radianes Math.tan( double a ) devuelve la tangente del ángulo a en radianes Math.asin( double r ) devuelve el ángulo cuyo seno es r Math.acos( double r ) devuelve el ángulo cuyo coseno es r Math.atan( double r ) devuelve el ángulo cuya tangente es r Math.atan2(double a,double b) devuelve el ángulo cuya tangente es a/b Math.exp( double x ) devuelve e elevado a x Math.log( double x ) devuelve el logaritmo natural de x Math.sqrt( double x ) devuelve la raíz cuadrada de x Math.ceil( double a ) devuelve el número completo más pequeño mayor

o igual que a Math.floor( double a ) devuelve el número completo más grande menor

o igual que a Math.rint( double a ) devuelve el valor double truncado de a Math.pow( double x,double y ) devuelve y elevado a x Math.round( x ) para double y float Math.random() devuelve un double Math.max( a,b ) para int, long, float y double Math.min( a,b ) para int, long, float y double Math.E para la base exponencial, aproximadamente 2.72 Math.PI para PI, aproximadamente 3.14

El ejemplo java800.java, muestra la utilización de algunas de las funciones de la clase Math:

Page 63: Texto_Tecnicas de Programacion

Pág. 63

Asignatura: Técnicas de Programación

class java800 { public static void main( String args[] ) { int x; double rand,y,z; float max; rand = Math.random(); x = Math.abs( -123 ); y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10,(float)3e9 ); System.out.println( rand ); System.out.println( x ); System.out.println( y ); System.out.println( z ); System.out.println( max ); }

LA CLASE CHARACTER

Declaraciones

La primera sentencia creará una variable carácter y la segunda un objeto Character:

char c; Character C;

Comprobaciones booleanas

Character.isLowerCase( char ) devuelve true si el carácter es una letra minúscula Character.isUpperCase( char ) devuelve true si el carácter es una letra mayúscula Character.isDigit( char ) devuelve true para caracteres numéricos Character.isSpace( char ) devuelve true para espacios en blanco

En este caso, si tuviésemos un objeto Character C , no se podría hacer C.isLowerCase(), porque no se ha hecho un new de Character. Estas funciones son estáticas y no conocen al objeto, por eso hay que crearlo antes.

Traslaciones de Caracteres

Character.toLowerCase( char ) convierte entre mayúscula y minúscula Character.toUpperCase( char ) convierte entre minúscula y mayúscula

LA CLASE DATE

La clase Date se utiliza para representar una fecha y una hora. Se pueden manipular el día, mes, año, día de la semana, horas minutos y segundos.

Constructores

Page 64: Texto_Tecnicas de Programacion

Pág. 64

Asignatura: Técnicas de Programación

Hay varios constructores para objetos Date, que ofrecen más o menos nivel de especificidad para la precisión que se desea para la hora.

Date() Inicializa el objeto con la fecha y hora

actual

Date( año,mes,día ) Establecerá la hora a las 00:00:00

(medianoche) del día especificado

Date( año,mes,día,horas,minutos ) Establecerá la fecha y hora, dejando los

segundos a 0

Date( año,mes,día,horas,minutos,segundos ) Establecerá la hora exacta

Date( String ) Este constructor de Date, analizará una

representación tipo cadena con la fecha y

hora y la convertirá en objeto. Date

convierte muchos formatos de fecha tipo

cadena, pero debería seguirse la sintaxis

de fecha de tipo:

Date( "Fri Oct 3 21:23:45 GMT 1997"

Date( long ) Establece la hora exacta a partir del

numero de milisegundos que han pasado

desde el 1 de Enero de 1970, a las

00:00:00 GMT

5.5 Excepciones

A continuación se muestra cómo se utilizan las excepciones, reconvirtiendo en primer lugar el applet de saludo a partir de la versión iterativa de HolaIte.java:

import java.awt.*; import java.applet.Applet; public class HolaIte extends Applet { private int i = 0; private String Saludos[] = { "Hola Mundo!", "HOLA Mundo!", "HOLA MUNDO!!" }; public void paint( Graphics g ) { g.drawString( Saludos[i],25,25 ); i++; } }

Normalmente, un programa termina con un mensaje de error cuando se lanza una excepción. Sin embargo, Java tiene mecanismos para excepciones que permiten ver qué excepción se ha producido e intentar recuperarse de ella.

Page 65: Texto_Tecnicas de Programacion

Pág. 65

Asignatura: Técnicas de Programación

Vamos a reescribir el método paint() de esa versión iterativa del saludo:

public void paint( Graphics g ) { try { g.drawString( Saludos[i],25,25 ); } catch( ArrayIndexOutOfBoundsException e ) { g.drawString( "Saludos desbordado",25,25 ); } catch( Exception e ) { // Cualquier otra excepción System.out.println( e.toString() ); } finally { System.out.println( "Esto se imprime siempre!" ); } i++; }

La palabra clave finally define un bloque de código que se quiere que sea ejecutado siempre, de acuerdo a si se capturó la excepción o no. En el ejemplo anterior, la salida en la consola, con i=4 sería:

C:\>java HolaIte

Saludos desbordado ¡Esto se imprime siempre!

6.1 Delegación de eventos

MODELO DE DELEGACIÓN DE EVENTOS

Los eventos ahora están organizados en jerarquías de clases de eventos.

El nuevo modelo hace uso de fuentes de eventos (Source) y receptores de eventos (Listener). Una fuente de eventos es un objeto que tiene la capacidad de detectar eventos y notificar a los receptores de eventos que se han producido esos eventos. Aunque el programador puede establecer el entorno en que se producen esas notificaciones, siempre hay un escenario por defecto.

Algunas clases de eventos, como los de ratón, involucran a un determinado conjunto de eventos diferentes. Una clase receptor que implemente el interfaz que recoja estos eventos debe sobreescribir todos los métodos declarados en el interfaz. Para prevenir esto, de forma que no sea tan tedioso y no haya que sobreescribir métodos que no se van a utilizar, se han definido un conjunto de clases intermedias, conocidas como Adaptadores (Adapter).

import java.awt.*; import java.awt.event.*; // Este es un paquete nuevo del JDK 1.1

Tema Nº 6: Delegación de eventos y AWT

Page 66: Texto_Tecnicas de Programacion

Pág. 66

Asignatura: Técnicas de Programación

public class java1101 { public static void main( String args[] ) { // Aqui se instancia un objeto de tipo Interfaz Hombre-Maquina IHM ihm = new IHM(); } } // Esta clase se utiliza para instaciar un objeto de tipo interfaz de // usuario, para que permita instanciar a su vez dos objetos Listener // y registrarlos para que reciban notificacion cuando se producen // eventos en una Ventana class IHM { // Constructor de la clase public IHM() { // Se crea un objeto Frame Frame ventana = new Frame(); // El metodo setSize() reemplaza al metodo resize() del JDK 1.0 ventana.setSize( 300,200 ); ventana.setTitle( "Tutorial de Java, Eventos" ); // El metodo setVisible() reemplaza al metodo show() del JDK 1.0 ventana.setVisible( true ); // Se instancian dos objetos receptores que procesaran los // eventos de la ventana Proceso1 ventanaProceso1 = new Proceso1( ventana ); Proceso2 ventanaProceso2 = new Proceso2(); // Se registran los dos objetos receptores para que sean // notificados de los evetnos que genere la ventana, que es el // objeto origen de los eventos ventana.addWindowListener( ventanaProceso1 ); ventana.addWindowListener( ventanaProceso2 ); } } // Las dos clases siguientes se pueden utilizar para instanciar los // objetos receptor. Esta clase implementa el interfaz WindowListener, // lo cual requiere que todos los metodos que estan declarados en el // interfaz sean definidos en la clase. // La clase define todos esos metodos y presenta un mensaje // descriptivo cada vez que se invoca a uno de ellos. class Proceso1 implements WindowListener { // Variable utilizada para guardar una referencia al objeto Frame Frame ventanaRef; // Constructor que guarda la referencia al objeto Frame Proceso1( Frame vent ){ this.ventanaRef = vent; } public void windowClosed( WindowEvent evt ) { System.out.println( "Metodo windowClosed de Proceso1" );

Page 67: Texto_Tecnicas de Programacion

Pág. 67

Asignatura: Técnicas de Programación

} public void windowIconified( WindowEvent evt ) { System.out.println( "Metodo windowIconified de Proceso1" ); } public void windowOpened( WindowEvent evt ) { System.out.println( "Metodo windowOpened de Proceso1" ); } public void windowClosing( WindowEvent evt ) { System.out.println( "Metodo windowClosing de Proceso1" ); // Se oculta la ventana ventanaRef.setVisible( false ); } public void windowDeiconified( WindowEvent evt ) { System.out.println( "Metodo windowDeiconified Proceso1" ); } public void windowActivated( WindowEvent evt ) { System.out.println( "Metodo windowActivated de Proceso1" ); } public void windowDeactivated( WindowEvent evt ) { System.out.println( "Metodo windowDeactivated de Proceso1" ); } } // Esta clase y la anterior se pueden utilizar para instanciar // objetos Listener. En esta clase, se extiende la clase Adapter // obvienado el requerimiento de tener que definir todos los // metodos del receptor de eventos WindowListener. El objeto // Adapter, WindowAdapter extiende a WindowListener y define // todos los metodos con codigo vacio, que pueden ser sobreescritos // siempre que se desee. En este clase concreta, solamente se // sobreescriben dos de los metodos declarados en el interfaz, y // presenta un mensaje cada vez que se invoca a uno de ellos class Proceso2 extends WindowAdapter { public void windowIconified( WindowEvent evt ) { System.out.println( "--- Metodo windowIconified de Proceso2" ); } public void windowDeiconified( WindowEvent evt ) { System.out.println( "---Metodo windowDeiconified de Proceso2" ); } }

El AWT define un conjunto determinado de eventos, aunque el programador también puede definir sus propios tipos de eventos, derivando de EventObject, o desde una de las clases de eventos del AWT.

El AWT proporciona dos tipos conceptuales de eventos: de bajo nivel y semánticos, que:

Page 68: Texto_Tecnicas de Programacion

Pág. 68

Asignatura: Técnicas de Programación

java.util.EventObject java.awt.AWTEvent java.awt.event.ComponentEvent Componente redimensionado, desplazado java.awt.event.FocusEvent Pérdida, ganancia del focus por un Componente java.awt.event.InputEvent java.awt.event.KeyEvent El Componente recoge una pulsación de teclado java.awt.event.MouseEvent El Componente recoge movimientos del ratón, pulsación de botones java.awt.event.ContainerEvent java.awt.event.WindowEvent

Como ya se ha indicado, algunas clases de eventos engloban a varios tipos distintos de eventos. Normalmente, hay un interfaz correspondiente a cada clase de evento y hay métodos del interfaz para cada tipo distinto de evento en cada clase de evento.

Un evento semántico es un evento que se define a alto nivel y encapsula una acción de un componente del interfaz de usuario. Algunos eventos de este tipo son:

java.util.EventObject java.awt.AWTEvent java.awt.event.ActionEvent Ejecución de un comando java.awt.event.AdjustmentEvent Ajuste de un valor java.awt.event.ItemEvent Cambio de estado de un item java.awt.event.TextEvent Cambio de valor de un texto

RECEPTORES DE EVENTOS

Un interfaz EventListener tendrá un método específico para cada tipo de evento distinto que trate la clase de evento. Por ejemplo, el interfaz FocusEventListener define los métodos focusGained() y focusLost(), uno para cada tipo de evento que trata la clase FocusEvent.

Los interfaces de bajo nivel que define la versión del JDK 1.2 son los siguientes:

java.util.EventListener java.awt.event.ComponentListener java.awt.event.ContainerListener java.awt.event.FocusListener java.awt.event.KeyListener java.awt.event.MouseListener java.awt.event.MouseMotionListener java.awt.event.WindowListener

Los interfaces de nivel semántico que define el AWT en la versión del JDK 1.2 son:

java.util.EventListener java.awt.event.ActionListener java.awt.event.AdjustmentListener java.awt.event.ItemListener java.awt.event.TextListener

Fuentes de Eventos

Page 69: Texto_Tecnicas de Programacion

Pág. 69

Asignatura: Técnicas de Programación

Todas las fuentes de eventos del AWT soportan el multienvío a receptores. Esto significa

que se pueden añadir o quitar múltiples receptores de una sola fuente; en otras palabras, la

notificación de que se ha producido un mismo evento se puede enviar a uno o más objetos

receptores simultáneamente.

java.awt.Component addComponentListener addFocusListener addKeyListener addMouseListener addMouseMotionListener java.awt.Container addContainerListener java.awt.Dialog addWindowListener java.awt.Frame addWindowListener

Los receptores de eventos que se pueden registrar de tipo semántico sobre objetos fuentes, generadores de eventos, en el JDK 1.2 son:

java.awt.Button addActionListener java.awt.Choice addItemListener java.awt.Checkbox addItemListener java.awt.CheckboxMenuItem addItemListener java.awt.List addActionListener addItemListener java.awt.MenuItem addActionListener java.awt.Scrollbar addAdjustmentListener java.awt.TextArea addTextListener java.awt.TextField addActionListener addTextListener

6.2 AWT: Interfaz de Usuario, Estructura del AWT, Componentes

AWT

AWT es el acrónimo del X Window Toolkit para Java, donde X puede ser cualquier cosa: Abstract, Alternative, Awkward, Another o Asqueroso; aunque parece que Sun se decanta por Abstracto, seriedad por encima de todo. Se trata de una biblioteca de clases Java para

el desarrollo de Interfaces de Usuario Gráficas. La versión del AWT que Sun proporciona con el JDK se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java como lenguaje. El entorno que ofrece es demasiado simple, no se han tenido en cuenta las ideas de entornos gráficos novedosos. Quizá la presión de tener que lanzar algo al mercado haya tenido mucho que ver en la pobreza de AWT.

Page 70: Texto_Tecnicas de Programacion

Pág. 70

Asignatura: Técnicas de Programación

INTERFAZ DE USUARIO

El interfaz de usuario es la parte del programa que permite a éste interactuar con el usuario. Las interfaces de usuario pueden adoptar muchas formas, que van desde la simple línea de comandos hasta las interfaces gráficas que proporcionan las aplicaciones más modernas.

El interfaz de usuario es el aspecto más importante de cualquier aplicación. Una aplicación sin un interfaz fácil, impide que los usuarios saquen el máximo rendimiento del programa. Java proporciona los elementos básicos para construir decentes interfaces de usuario a través del AWT, y opciones para mejorarlas mediante Swing, que sí permite la creación de interfaces de usuario de gran impacto y sin demasiados quebraderos de cabeza por parte del programador.

ESTRUCTURA DEL AWT

La estructura básica del AWT se basa en Componentes y Contenedores. Estos últimos contienen Componentes posicionados a su respecto y son Componentes a su vez, de forma que los eventos pueden tratarse tanto en Contenedores como en Componentes, corriendo por cuenta del programador (todavía no hay herramientas de composición visual) el encaje de todas las piezas, así como la seguridad de tratamiento de los eventos adecuados. Con Swing se va un paso más allá, ya que todos los JComponentes son subclases de Container, lo que hace posible que widgets Swing puedan contener otros componentes,

tanto de AWT como de Swing, lo que hace prever interesantes posibilidades.

COMPONENTES

Component es una clase abstracta que representa todo lo que tiene una posición, un tamaño, puede ser pintado en pantalla y puede recibir eventos.

No tiene constructores públicos, ni puede ser instanciada. Sin embargo, desde el JDK 1.1 puede ser extendida para proporcionar una nueva característica incorporada a Java, conocida como componentes Lightweight.

Los Objetos derivados de la clase Component que se incluyen en el Abstract Window Toolkit son los que aparecen a continuación:

Button Canvas Checkbox Choice

Page 71: Texto_Tecnicas de Programacion

Pág. 71

Asignatura: Técnicas de Programación

Container o Panel o Window o Dialog o Frame

Label List Scrollbar TextComponent

o TextArea o TextField

Jerarquia de clases (ver grafico)

Botones de Pulsación: BUTTON

La clase Button es una clase que produce un componente de tipo botón con un título. El

constructor más utilizado es el que permite pasarle como parámetro una cadena, que será la que aparezca como título e identificador del botón en el interfaz de usuario.

//EjemploButtonApplet.java import java.awt.*; public class EjemploButtonApplet extends java.applet.Applet { public void init() { Label etiqueta1 = new Label("Label1"); Button boton1 = new Button("Boton 1"); Button boton2 = new Button("Boton 2"); add(boton1); add(etiqueta1); add(boton2); } }

Botones de Selección: CHOICE

Los botones de selección (Choice) permiten el rápido acceso a una lista de elementos, presentándose como título el item que se encuentre seleccionado.

Page 72: Texto_Tecnicas de Programacion

Pág. 72

Asignatura: Técnicas de Programación

Choice c = new Choice(); // crea el menu desplegable c.addItem("Naranja"); c.addItem("Manzana"); c.addItem("Pera"); add(c); // añade el menu al panel ... Metodos utiles:

getItem(int n) devuelve el string de la opcion n-esima

getSelectedIndex() devuelve el indice de la opcion seleccionada

//Este tipo de menus solo permiten seleccionar una opcion. Para multiples opciones,

usar una lista

Botones de Comprobación: CHECKBOX, CHECKBOXGROUP

La clase CheckBox extiende la clase Component e implementa el interfaz ItemSelectable,

que es el interfaz que contiene un conjunto de items entre los que puede haber o no alguno seleccionado.

Los botones de comprobación (Checkbox) se pueden agrupar para formar un interfaz de botón de radio (CheckboxGroup), que son agrupaciones de botones de comprobación de exclusión múltiple, es decir, en las que siempre hay un único botón activo.

EJEMPLO: Muestra la lIsta de del deporte que desee

import java.awt.*; import java.applet.*;

Page 73: Texto_Tecnicas de Programacion

Pág. 73

Asignatura: Técnicas de Programación

public class Ejemplo17 extends Applet { Checkbox chkMusica, chkDeporte, chkAventura; TextArea txtS; public void init() { // anula distribucion por defecto de los objetos setLayout(null); // crear y ubicar los objetos de la GUI chkMusica = new Checkbox("Musica"); chkMusica.setBounds(10,10,100,25); add(chkMusica); chkDeporte = new Checkbox("Deporte"); chkDeporte.setBounds(10,45,100,25); add(chkDeporte); chkAventura = new Checkbox("Aventura"); chkAventura.setBounds(10,80,100,25); add(chkAventura); txtS = new TextArea(); txtS.setBounds(120,10,300,150); add(txtS); } public boolean action(Event e, Object o) { // programar la accion de los checks String eleccion="Ud. eligió: "; if (chkMusica.getState()==true) eleccion += "musica,"; if (chkDeporte.getState()==true) eleccion += "deporte,"; if (chkAventura.getState()==true) eleccion += "aventura,"; // muestra la elección txtS.setText(eleccion); return true; } }

import java.awt.*; import java.applet.*; import java.awt.event.*;

Page 74: Texto_Tecnicas de Programacion

Pág. 74

Asignatura: Técnicas de Programación

public class Ejemplo4 extends Applet { //Declarando los objetos de la interfaz gráfica GUI Checkbox chkMusica, chkDeporte, chkAventura; CheckboxGroup bgrHobby ; TextArea txtS; public void init() { setLayout(null); bgrHobby= new CheckboxGroup(); chkMusica= new Checkbox (" Música",bgrHobby,false); chkMusica.setBounds(10,10,100,25); add(chkMusica); chkDeporte= new Checkbox (" Deporte",bgrHobby,true); chkDeporte.setBounds(10,40,100,25); add(chkDeporte); chkAventura= new Checkbox("Aventura",bgrHobby,false); chkAventura.setBounds(10,70,100,25); add(chkAventura); txtS= new TextArea(); txtS.setBounds(120,10,300,150); add(txtS); } public boolean action (Event e, Object o) { //programando la accion de los checks String aux="Ud. eligió: "; if(chkMusica.getState()==true) aux+= " música,"; if(chkDeporte.getState()==true) aux+= " deporte,"; if(chkAventura.getState()==true) aux+=" aventura,"; //imprime la elección txtS.setText(aux); return true; } }

Listas: LIST

Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la manipulación de muchos elementos. Se crean utilizando métodos similares a los de los botones Choice. La lista es visible todo el tiempo, utilizándose una barra de desplazamiento para visualizar los elementos que no caben en el área de la lista que aparece en la pantalla.

Page 75: Texto_Tecnicas de Programacion

Pág. 75

Asignatura: Técnicas de Programación

Son menus, pero no desplegables Es una lista de items en la que se puede elegir uno o varios Si el numero de items es mayor que la longitud de la lista, aparecen barras de

deslizamiento

List lista = new List(5, true); // crea una lista que tendra 5 lineas, y que permitira

// seleccion multiple (valor 'true')

lista.addItem("Afrodita");

lista.addItem("Apolo");

lista.addItem("Ares");

lista.addItem("Hades");

lista.addItem("Zeus"); // si se añade un sexto elemento, se creara automaticamente

// una barra deslizante

add(lista);

Metodos utiles:

getSelectedIndex() // devuelve el indice del item seleccionado, si no se permite

seleccion mult.

getSlectedIndexes() // devuelve un array de indices de los items seleccionados

getSelectedItem() // devuelve el item seleccionado

getSlectedItems() // idem varios items

select(int) // fuerza a que esté seleccionado el item de la posicion dada

etc...

Campos de Texto: TEXTFIELD

Para la entrada directa de datos se suelen utilizar los campos de texto, que aparecen en pantalla como pequeñas cajas que permiten al usuario la entrada por teclado de una línea de caracteres.

Page 76: Texto_Tecnicas de Programacion

Pág. 76

Asignatura: Técnicas de Programación

...

add(new Label("Nombre completo"));

add(new TextField("-esciba aqui su nombre-"));

add(new Label("Telefono"));

add(new TextField(12));

add(new Label("Password"));

TextField t = new TextField(20);

t.setEchoCharacter('*');

add(t);

...

Metodos utiles:

setEditable(boolean) define si el testo es editable o no

select(int, int) selecciona el texto entre las dos posiciones (origen = 0)

etc...

Areas de Texto: TEXTAREA

Es un componente similar a TextField. TextField es mas conveniente para pequeños textos, idealmente de una sola linea.

No tiene barras de deslizamiento TextArea en mas conveniente para textos largos, de mas de una linea. Por defecto, tiene barras de deslizamiento

String texto = "Erase una vez un pais en el que vivian tres cerditos que eran\n" +

"hermanos. Decidieron construirse una casa, y uno el primero de\n" +

"ellos se la hizo de paja, el segundo de madera y el tercero de ladrillo\n" +

"Un buen dia aparecio por alli el lobo y blablabla...";

// el caracter ‗\n‘ es para forzr el retorno de linea

add(new TextArea(texto, 10, 60));

Metodos utiles:

insertText(String, int) // inserta texto en la posicion indicada

replaceText(String, int,int) // reepmplaza el texto entre las posiciones dadas

etc...

Etiquetas: LABEL

Una etiqueta (Label) proporciona una forma de colocar texto estático en un panel, para mostrar información fija, que no varía (normalmente), al usuario.

Page 77: Texto_Tecnicas de Programacion

Pág. 77

Asignatura: Técnicas de Programación

La clase Label extiende la clase Component y dispone de varias constantes que permiten especificar la alineación del texto sobre el objeto Label.

// EjemploLabelApplet.java

import java.awt.*;

public class EjemploLabelApplet extends java.applet.Applet

{

public void init()

{ Label etiqueta1 = new Label("Label1");

Label etiqueta2 = new Label("Label2");

Label etiqueta3 = new Label("Label3");

add(etiqueta1);

add(etiqueta2);

add(etiqueta3);

}

}

Ejemplo: Sumar dos números en un applet

import java.awt.*; import java.applet.*; import java.awt.event.*; public class Ejemplo11 extends Applet { private TextField tValor1,tValor2,tResul; private Button btnSumar,btnRestar; public void init() { setLayout(null);

Page 78: Texto_Tecnicas de Programacion

Pág. 78

Asignatura: Técnicas de Programación

resize(400,200); tValor1 = new TextField(20); tValor1.setBounds(10,10,100,25); tValor2 = new TextField(20); tValor2.setBounds(10,45,100,25); btnSumar = new Button("Sumar"); btnSumar.setBounds(10,80,100,25); btnRestar = new Button("Restar"); btnRestar.setBounds(100,80,100,25); tResul = new TextField(20); tResul.setBounds(10,150,100,25); add(tValor1); add(tValor2); add(btnSumar); add(btnRestar); add(tResul); } public boolean action(Event e,Object o) { int aux=0; if (e.target == btnSumar) { aux = Integer.parseInt(tValor1.getText()) + Integer.parseInt(tValor2.getText()); } if (e.target == btnRestar) { aux = Integer.parseInt(tValor1.getText())-Integer.parseInt(tValor2.getText()); } //showStatus("Resultado:" + aux); return true; } }

Canvas

Un componente Canvas es un objeto que permite dibujar en él. No hace nada por si mismo. Esta pensado para ser extendido por herencia.

Canvas can = new Canvas();

add(can);

Ejemplos varios:

EJEMPLO 01: Realice un programa para ralizar las 4 operaciones y limpiar el texfield

import java.awt.*; import java.applet.*;

Page 79: Texto_Tecnicas de Programacion

Pág. 79

Asignatura: Técnicas de Programación

public class Ejemplo18 extends Applet { private TextField tValor1,tValor2; private Choice chOperaciones; public void init() { tValor1 = new TextField(20); tValor2 = new TextField(20); chOperaciones = new Choice(); chOperaciones.addItem("sumar"); chOperaciones.addItem("restar"); chOperaciones.addItem("multiplicar"); add(tValor1); add(tValor2); add(chOperaciones); } public boolean action(Event e,Object o) { int aux=0; if (chOperaciones.getSelectedIndex()==0) { aux = Integer.parseInt(tValor1.getText()) + Integer.parseInt(tValor2.getText()); } if (chOperaciones.getSelectedIndex()==1) { aux = Integer.parseInt(tValor1.getText())- Integer.parseInt(tValor2.getText()); } if (chOperaciones.getSelectedIndex()==2) { aux = Integer.parseInt(tValor1.getText()) *Integer.parseInt(tValor2.getText()); } showStatus("Resultado:" + aux); return true; } }

EJEMPLO 02:

import java.awt.*; import java.awt.event.*; import java.applet.*; public class Ejemplo5 extends Applet { Choice choColorFondo; Button btnRestablecer; public void init() { setLayout(null);

Page 80: Texto_Tecnicas de Programacion

Pág. 80

Asignatura: Técnicas de Programación

resize(400,400); //creando el choice choColorFondo=new Choice(); //establce las coordenadas choColorFondo.setBounds(10,10,150,25); //agregando los items choColorFondo.add("ColordeFondo"); choColorFondo.add("Fondo Gris"); choColorFondo.add("Fondo Azul"); choColorFondo.add("Fondo Rojo"); choColorFondo.add("Fondo Naranja"); //agrega a lalista de choice que tendran acción //choColorFondo.addItemListener(this); //agrega como componente del applet add(choColorFondo); //creando el botón y agregando el botón btnRestablecer = new Button("restabecer"); btnRestablecer.setBounds(170,10,80,25); add(btnRestablecer); } public boolean action(Event e, Object o) { //programando la acción del choice int color = choColorFondo.getSelectedIndex(); switch(color) { case 1: setBackground(Color.lightGray); break; case 2: setBackground(Color.blue); break; case 3: setBackground(Color.red); break; case 4: setBackground(Color.orange); break; } //mostrando el item seleccionado en la linea de estado showStatus(choColorFondo.getSelectedItem()); if(e.target==btnRestablecer) { setBackground(Color.white); //vuelve la lnea a su estado original showStatus("Empezando el programa ..."); //enfoca al primer item del objeto choice choColorFondo.select(0); } return true; } }

EJEMPLO 03:

Page 81: Texto_Tecnicas de Programacion

Pág. 81

Asignatura: Técnicas de Programación

import java.awt.*; import java.applet.*; public class Ejemplo6 extends Applet { Label lblR = new Label("R"); Label lblG =new Label ("G"); Label lblB = new Label ("B"); Choice choR= new Choice(); Choice choG= new Choice(); Choice choB=new Choice(); Button btnCombinar= new Button("Combinar"); TextField txtColor= new TextField(20); public void init() { setLayout(null); resize(400,200); setBackground(Color.lightGray); lblR.setBounds(10,10,50,20); add(lblR); lblG.setBounds(10,40,50,20); add(lblG); lblB.setBounds(10,70,50,20); add(lblB); //agregando los items al choice int x; for(x=0;x<=255;x++) { choR.add(""+x); choG.add(""+x); choB.add(""+x); }

Page 82: Texto_Tecnicas de Programacion

Pág. 82

Asignatura: Técnicas de Programación

//ubicando y agregando al applet el choice choR.setBounds(70,10,50,20); add(choR); choG.setBounds(70,40,50,20); add(choG); choB.setBounds(70,70,50,20); add(choB); //ubicando y agregando el botón de comando btnCombinar.setBounds(10,100,100,20); add(btnCombinar); //ubicando y agregando el botón de comando txtColor.setBounds(130,10,200,100); add(txtColor); } public boolean action(Event e, Object o) { //programando la acción del botón if(e.target==btnCombinar) { int r=choR.getSelectedIndex(); int g=choG.getSelectedIndex(); int b=choB.getSelectedIndex(); //estableciendo el color de fondo personalizado txtColor.setBackground(new Color(r,g,b)); } return true; } }

6.3 Contenedores y Layouts

CONTENEDORES

La clase Container es una clase abstracta derivada de Component, que representa a cualquier componente que pueda contener otros componentes. Se trata, en esencia, de añadir a la clase Component la funcionalidad de adición, sustracción, recuperación, control

y organización de otros Componentes.

El AWT proporciona varias clases de Contenedores:

Panel o Applet

ScrollPane o Window o Dialog

FileDialog o Frame

Page 83: Texto_Tecnicas de Programacion

Pág. 83

Asignatura: Técnicas de Programación

Aunque los que se pueden considerar como verdaderos Contenedores con Window, Frame, Dialog y Panel, porque los demás son subtipos con algunas características determinadas y solamente útiles en circunstancias muy concretas.

Window

Es una superficie de pantalla de alto nivel (una ventana). Una instancia de la clase Window

no puede estar enlazada o embebida en otro Contenedor.

El controlador de posicionamiento de Componentes por defecto, sobre un objeto Window, es el BorderLayout.

Una instancia de esta clase no tiene ni título ni borde, así que es un poco difícil de justificar su uso para la construcción directa de un interfaz gráfico, porque es mucho más sencillo utilizar objetos de tipo Frame o Dialog. Dispone de varios métodos para alterar el tamaño y título de la ventana, o los cursores y barrar de menús.

Frame y Dialog

Frame es una superficie de pantalla de alto nivel (una ventana) con borde y título. Una instancia de la clase Frame puede tener una barra de menú. Una instancia de esta clase es mucho más aparente y más semejante a lo que se entiende por ventana.

La clase Window de AWT permite crear ventanas independientes del navegador que contiene al applet. Frame es mas potente que Dialog

El LayoutManager por defectserio o para Frame es BorderLayout Los Dialog son ventanas emergentes pensadas para mensajes no permanentes,

como ‗ADVERTENCIA‘, peticion de informacion especifica, etc..., que una vez presentados al usuario pueden desaparecer (p.ej.: ‗Se va a proceder a la instalacion de HyperQuake V. Confirmar?‘)

Se puede forzar a que sean no redimensionables o ‗modales‘ Un Dialog ‗modal‘ es aquel que impide usar otra ventana hasta que no se lleve a

cabo la accion de la presente ventana (p.ej.: ‗Es necesario que introduzca la clave de acceso para continuar la ejecucion‘)

A su vez existen dos clases de Dialog: o Dialog (a secas!) o FileDialog: Presenta los ficheros del directorio, abrir, cancelar, etc.. Debido a las restricciones de los applets, tiene muchas mas funcionalidades si se

emplea en una aplicacion Java

// Ejemplo de utilizacion de Frame Frame ventanaFrame = new Frame("Mi ventana FRAME"); ventanaFrame.setLayout(new FlowLayout()); //por defecto es BorderLayout ventanaFrame.add(new Button("Opcion 1")); ventanaFrame.add(new Button("Opcion 2")); ventanaFrame.add(new Button("Opcion 3")); ventanaFrame.resize(100,150); //define el tamaño de la ventana Point dim = location(); //devuelve la posicion de este componente, como la esquina sup-izda //medida respecto al componente padre ventanaFrame.move(dim.x + 50, dim.y + 50); ventanaFrame.show(); //cuando se crea la ventana, es invisible. Para ocultarla, hide() // Ejemplo de utilizacion de Dialog // Ejemplo de utilizacion de FileDialog

Page 84: Texto_Tecnicas de Programacion

Pág. 84

Asignatura: Técnicas de Programación

Panel

La clase Panel es un Contenedor genérico de Componentes. Una instancia de la clase Panel, simplemente proporciona un Contenedor al que ir añadiendo Componentes.

import java.awt.*; import java.awt.event.*; public class java1315 { public static void main( String args[] ) { IHM ihm = new IHM(); } } class IHM { public IHM() { // Se construyen tres Paneles con fondos de color diferente // y sin contener ningun elemento activo Panel panelIzqdo = new Panel(); panelIzqdo.setBackground( Color.yellow ); panelIzqdo.add( new TextField( "Panel Izquierdo -> amarillo" ) ); Panel panelCentral = new Panel(); panelCentral.setBackground( Color.red ); panelCentral.add( new Label( "Panel Central -> rojo" ) ); Panel panelDrcho = new Panel(); panelDrcho.setBackground( Color.blue ); panelDrcho.add( new Button( "Panel Derecho -> azul" ) ); // Se instancia un objeto Frame utilizando un FlowLayout y // se colocan los tres objetos Panel sobre el Frame Frame miFrame = new Frame( "Tutorial de Java, AWT" ); miFrame.setLayout( new FlowLayout() ); miFrame.add( panelIzqdo ); miFrame.add( panelCentral ); miFrame.add( panelDrcho ); miFrame.setSize( 500,200 ); miFrame.setVisible( true ); miFrame.addWindowListener( new Conclusion() );

Page 85: Texto_Tecnicas de Programacion

Pág. 85

Asignatura: Técnicas de Programación

} } class Conclusion extends WindowAdapter { public void windowClosing( WindowEvent evt ) { // Concluye la aplicacion cuando el usuario cierra la ventana System.exit( 0 ); } }

LAYOUTSLos layout managers o manejadores de composición, en traducción literal, ayudan a adaptar los diversos Componentes que se desean incorporar a un Panel, es decir, especifican la apariencia que tendrán los Componentes a la hora de colocarlos sobre un Contenedor, controlando tamaño y posición (layout) automáticamente. Java dispone de varios, en la actual versión, tal como se muestra en la imagen:

7.1 SWING

Cuando se empieza a utilizar Swing, se observa que JavaSoft ha dado un gran paso adelante respecto al AWT. Ahora los Componentes del interfaz gráfico son Beans y utilizan el nuevo modelo de Delegación de Eventos de Java. Swing proporciona un conjunto completo de Componentes, todos ellos lightweight, es decir, ya no se usan componentes "peer" dependientes del sistema operativo, y además, Swing está totalmente escrito en Java. Todo ello redunda en una mayor funcionalidad en manos del programador, y en la posibilidad de mejorar en gran medida la cosmética de los interfaces gráficos de usuario

7.2 Border

La clase JComponent también contiene un método llamado setBorder(), que permite colocar diferentes bordes a un componente visible. El ejemplo java1402.java genera los diferentes tipos de borde que están disponibles y que se reproducen en la figura siguiente.

Tema Nº 7: SWING: Borders, Etiquetas,

Botones, Grupos y botones

Page 86: Texto_Tecnicas de Programacion

Pág. 86

Asignatura: Técnicas de Programación

7.3 Etiquetas

Las etiquetas, junto con los botones y las cajas de selección, son uno de los componentes más básicos de todo interfaz de usuario, independientemente de que se hayan visto otros hasta ahora, o el lector difiera de esta clasificación. Y el más simple de todos ellos es la etiqueta, que se limita a presentar textos en pantalla. Swing introduce la clase JLabel para presentar estos textos en pantalla; sin embargo, es mucho más versátil que la clase correspondiente del AWT. En Swing, al derivar de JComponent, la clase JLabel

implementa todas las características inherentes a los componentes Swing, como pueden ser los aceleradores de teclado, bordes, y demás.

7.4 Botones

Swing añade varios tipos de botones y cambia la organización de la selección de componentes: todos los botones, cajas de selección, botones de selección y cualquier opción de un menú deben derivar de AbstractButton. El ejemplo java1404.java, muestra los diferentes tipos de botones que están disponibles ante el programador a través de Swing.

Page 87: Texto_Tecnicas de Programacion

Pág. 87

Asignatura: Técnicas de Programación

package ejemplo1; import java.awt.*;//libreria AWT import java.awt.event.*;//eventos de programación import java.applet.*;//clase awt import javax.swing.JButton; import java.awt.Rectangle; import javax.swing.JMenuBar; import javax.swing.ImageIcon; import javax.swing.*;//libreria SWING AGREGAMOS /** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2009</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */ public class Applet1 extends Applet { boolean isStandalone = false; BorderLayout borderLayout1 = new BorderLayout(); JButton btnRojo = new JButton(); JButton btnAzul = new JButton();

Page 88: Texto_Tecnicas de Programacion

Pág. 88

Asignatura: Técnicas de Programación

JButton btnBlanco = new JButton(); //CREANDO LOSICONOS DE LOS BOTONES private ImageIcon iconRojo; private ImageIcon iconAzul; private ImageIcon iconBlanco; //Get a parameter value public String getParameter(String key, String def) { return isStandalone ? System.getProperty(key, def) : (getParameter(key) != null ? getParameter(key) : def); } //Construct the applet public Applet1() { } //Initialize the applet public void init() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { this.setLayout(null); //CREANDO LOS ICONOS iconRojo= new ImageIcon(getClass().getResource("cuadrorojo.gif")); iconAzul=new ImageIcon(getClass().getResource("cuadroazul.gif")); iconBlanco=new ImageIcon(getClass().getResource("Help.gif")); btnRojo.setBounds(new Rectangle(81, 32, 139, 41)); btnRojo.setIcon(iconRojo); btnRojo.setText("Rojo"); btnRojo.addActionListener(new Applet1_btnRojo_actionAdapter(this)); btnAzul.setBounds(new Rectangle(84, 93, 137, 43)); btnAzul.setIcon(iconAzul); btnAzul.setText("Azul"); btnAzul.addActionListener(new Applet1_btnAzul_actionAdapter(this)); btnBlanco.setBounds(new Rectangle(85, 150, 134, 42)); btnBlanco.setToolTipText("Fondo Blanco"); btnBlanco.setIcon(iconBlanco); btnBlanco.addActionListener(new Applet1_btnBlanco_actionAdapter(this)); this.add(btnRojo); this.add(btnAzul); this.add(btnBlanco); } //Get Applet information public String getAppletInfo() { return "Applet Information"; } //Get parameter info

Page 89: Texto_Tecnicas de Programacion

Pág. 89

Asignatura: Técnicas de Programación

public String[][] getParameterInfo() { return null; } public void btnRojo_actionPerformed(ActionEvent e) { this.setBackground(Color.red); } public void btnAzul_actionPerformed(ActionEvent e) { this.setBackground(Color.blue); } public void btnBlanco_actionPerformed(ActionEvent e) { this.setBackground(Color.white); } } class Applet1_btnBlanco_actionAdapter implements ActionListener { private Applet1 adaptee; Applet1_btnBlanco_actionAdapter(Applet1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnBlanco_actionPerformed(e); } } class Applet1_btnAzul_actionAdapter implements ActionListener { private Applet1 adaptee; Applet1_btnAzul_actionAdapter(Applet1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnAzul_actionPerformed(e); } } class Applet1_btnRojo_actionAdapter implements ActionListener { private Applet1 adaptee; Applet1_btnRojo_actionAdapter(Applet1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.btnRojo_actionPerformed(e); } }

7.5 Grupos de Botones

Page 90: Texto_Tecnicas de Programacion

Pág. 90

Asignatura: Técnicas de Programación

Si se quieren botones de selección única, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado, hay que crearse un grupo de botones, añadiendo botones a ese grupo uno a uno. Pero, Swing permite que cualquier AbstractButton pueda ser añadido a un ButtonGroup.La figura siguiente muestra los grupos de botones con la apariencia correspondiente a Swing, según se obtiene la ventana tras la ejecución del ejemplo java1406.java, que crea varios paneles de botones.

8.1 Listas y cajas combinadas

Las lista y cajas "combo" en Swing funcionan del mismo modo que lo hacían en el AWT, aunque tienen incrementada la funcionalidad a través de algunas funciones de conveniencia que se han incorporado. Por ejemplo, JList tiene un constructor al que se puede pasar un array de objetos String para que los presente. El ejemplo java1407.java, muestra el uso básico de estos dos componentes.

import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; public class java1407 extends JPanel { public java1407() { setLayout( new GridLayout( 2,1 ) ); JList lista = new JList( java1406.ids ); add( new JScrollPane( lista ) );

Tema Nº 8: SWING: Listas y cajas

combinadas, texto, tooltips,

Iconos

Page 91: Texto_Tecnicas de Programacion

Pág. 91

Asignatura: Técnicas de Programación

JComboBox combo = new JComboBox(); for( int i=0; i < 100; i++ ) combo.addItem( Integer.toString( i ) ); add( combo ); } public static void main( String args[] ) { java1407 lista = new java1407(); JFrame ventana = new JFrame(); ventana.getContentPane().add( lista,BorderLayout.CENTER ); ventana.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ) { System.exit( 0 ); } } ); ventana.setSize( 200,200 ); ventana.setTitle( "Tutorial de Java, Swing" ); ventana.setVisible( true ); } }

La imagen siguiente es el resultado que se obtiene en pantalla tras la ejecución del ejemplo, y después de haber seleccionado uno de los elementos en la caja combo y abrirla para proseguir la selección de otra de las opciones o elementos que se permite elegir.

8.2 Texto: JTextArea, JTextField

Swing también introduce nuevos componentes dentro de la manipulación de textos. Así la clase JTextArea actúa como sustituto de la clase TextArea del AWT, la clase JTextField sustituye TextField del AWT y se incorporan las clases JPasswordField que viene a ser equivalente al uso de JTextField junto con el método setEchoChar(), y la clase JTextPane que permite que se presente el texto con diferentes fuentes de caracteres, colores, tamaños, etc.

Page 92: Texto_Tecnicas de Programacion

Pág. 92

Asignatura: Técnicas de Programación

8.3 Tool Tips

Casi todas las clases que se usan para crear los interfaces de usuario se derivan de JComponent. Esta clase contiene un método llamado setToolTipText( String ). Así que se puede indicar un texto de información virtualmente en cualquier lugar y lo único que se necesita es invocar a este método, indicando el texto correspondiente al mensaje. Por ejemplo, el programa anterior se incorporaron dos mensajes de información de este tipo, uno a cada uno de los botones del ejemplo:

. . . boton1.addActionListener( al ); boton1.setToolTipText( "Soy el JBoton 1" ); add( boton1 ); boton2.addActionListener( al ); boton2.setToolTipText( "Soy el JBoton 2" ); add( boton2 ); texto.setToolTipText( "Soy el JCampoDeTexto" ); add( texto ); . . .

8.4 Iconos

Se puede utilizar un objeto Icon dentro de un objeto JLabel, o cualquier objeto que derive de AbstractButton; incluyendo JButton, JCheckBox, JRadioButton y los diferentes tipos de JMenuItem. El uso de iconos con etiquetas Swing es muy simple, tal como ya se

mostraba en el ejemplo java1401.java y ahora en el ejemplo java1410.java, en donde se exploran todas las formas en las que se pueden emplear los iconos con los botones y sus descendientes. La figura reproduce la captura de la ejecución de este último programa, cuando el ratón llevaba varios segundos sobre la imagen correspondiente al botón, con lo cual el mensaje incorporado como ToolTip al botón que contiene el icono, aparece en pantalla.

Se puede utilizar cualquier fichero gif. Para abrir ese fichero y convertirlo en imagen, simplemente se crea un objeto ImageIcon indicándole el nombre del fichero, y ya se puede utilizar en el código el objeto Icon resultante.

Page 93: Texto_Tecnicas de Programacion

Pág. 93

Asignatura: Técnicas de Programación

9.1 Menus

MENÚ

1. primero se tiene que un proyecto 2. luego una aplicación (cuando se crea la aplicación se crea una clase principal 1 un

Jframe1) 3. A continuación se crea un Frame1, que por defecto se incluye en el mismo proyecto

y en el mismo paquete (package) Ejemplo: En el ejemplo ya tenemos la aplicación principal Frame1, Frame2

4. Ahora vamos crear el menú para ello se debe tener en cuenta los siguiente tab o pestaña

Source : para que se muestra el codigo

Design : para que se muestre el diseño cuando seleccionamos a Frame1

4.1 Ubicarse en en la Ficha diseño del Frame1

Tema Nº 9:

SWING: Menus

Page 94: Texto_Tecnicas de Programacion

Pág. 94

Asignatura: Técnicas de Programación

Para ello en el panel (formulario)

4.2 En el panel de estructura> this > content Pane >en propiedades en Layout seleccionar null

4.3 Ahora en el controles o clases en java seleccionar Swing containers

Y hacer clic en JMenuBAr y arrastar hacia el panel (formulario)

Y luego en en el tab MENU

Diseñar el menú

La barra del diseñador del menú contiene lo siguiente:

Como desea

Page 95: Texto_Tecnicas de Programacion

Pág. 95

Asignatura: Técnicas de Programación

Y para utilizar el evento se tiene que seleccionar el sub menú

Al costado en propiedades existe el tab o pestaña Event

Se activa los eventos que deseo

Ahora seleccionar el evento inicial

ActionPerform - para poder activar con un clic

Para ello de be hacer doble clic

Entonces entraremos al codigo fuente por defecto es decir

Page 96: Texto_Tecnicas de Programacion

Pág. 96

Asignatura: Técnicas de Programación

Para LLAMAR AL otro FRame2

Debemos crear un objeto del FRAme2 como se ve en la figura y luego mostrar con

SetVisible.

Frame2 f2= new Frame2();

f2.setVisible(true);

para salir es simplemente

System.exit(0);

Ojo

En el frame2

Se debe tener en cuenta que se debe incrementar los códigos del tamaño y del titulo

que no se incrementa

En el grafico se incremento el tamaño y el titulo en el método inicio del Frame2

Como se ve, en caso no se incrementa, nos mostrara el frame2 minimizado

private void jbInit() throws Exception {

getContentPane().setLayout(null);

this.setSize(400,400);

this.setTitle("Fomulario uno");

}

Al final ejecutamos y tendremos

Page 97: Texto_Tecnicas de Programacion

Pág. 97

Asignatura: Técnicas de Programación

10.1 JDBC

JDBC (Java DataBase Connectivity) es un API de Java que permite al programador ejecutar instrucciones en lenguaje estándar de acceso a Bases de Datos, SQL (Structured Query Language, lenguaje estructurado de consultas), que es un lenguaje de muy alto nivel que permite crear, examinar, manipular y gestionar Bases de Datos relacionales. Para que una aplicación pueda hacer operaciones en una Base de Datos, ha de tener una conexión con ella, que se establece a través de un driver, que convierte el lenguaje de alto nivel a sentencias de Base de Datos. Es decir, las tres acciones principales que realizará JDBC son las de establecer la conexión a una base de datos, ya sea remota o no; enviar sentencias SQL a esa base de datos y, en tercer lugar, procesar los resultados obtenidos de la base de datos.

10.2 Base de Datos

Una Base de Datos es una serie de tablas que contienen información ordenada en alguna estructura que facilita el acceso a esas tablas, ordenarlas y seleccionar filas de las tablas según criterios específicos. Las bases de datos generalmente tienen índices asociados a alguna de sus columnas, de forma que el acceso sea lo más rápido posible.

Las Bases de Datos son, sin lugar a dudas, las estructuras más utilizadas en ordenadores; ya que son el corazón de sistemas tan complejos como el censo de una nación, la nómina de empleados de una empresa, el sistema de facturación de una multinacional, o el medio por el que nos expiden el billete para las próximas vacaciones.

En el caso, por ejemplo, del registro de trabajadores de una empresa, se puede imaginar una tabla con los nombres de los empleados y direcciones, y sueldos, retenciones y beneficios. Para organizar esta información, se puede empezar con una tabla que contenga los nombres de los empleados, su dirección y su número de teléfono. También se podría incluir la información relativa a su sueldo, categoría, última subida de salario, etc.

Tema Nº 10: JDBC

Page 98: Texto_Tecnicas de Programacion

Pág. 98

Asignatura: Técnicas de Programación

Desde que los PC se han convertido en una herramienta presente en la mayor parte de las oficinas, se han desarrollado un gran número de bases de datos para ejecutarse en ese tipo de plataformas; desde bases de datos muy elementales como Microsoft Works, hasta otras ya bastante sofisticadas como Approach, dBase, Paradox, Access y Foxbase.

Otra categoría ya más seria de bases de datos para PC son aquellas que usan la plataforma PC como cliente para acceder a un servidor. Estas bases de datos son IBM DB/2, Microsoft SQL Server, Oracle, Sybase, SQLBase, Informix, XDB y Postgres. Todas estas bases de datos soportan varios dialectos similares de SQL, y todas parecen, a primera vista, intercambiables. La razón de que no sean intercambiables, por supuesto, es que cada una está diseñada con unas características de rendimiento distintas, con un interfaz de usuario y programación diferente. Aunque todas ellas soportan SQL y la programación es similar, cada base de datos tiene su propia forma de recibir las consultas SQL y su propio modo de devolver los resultados. Aquí es donde aparece el siguiente nivel de estandarización, de la mano de ODBC (Open DataBase Conectivity).

10.3 Conectividad JDBC

Para la gente del mundo Windows, JDBC es para Java lo que ODBC es para Windows. Windows en general no sabe nada acerca de las bases de datos, pero define el estándar ODBC consistente en un conjunto de primitivas que cualquier driver o fuente ODBC debe ser capaz de entender y manipular. Los programadores que a su vez deseen escribir programas para manejar bases de datos genéricas en Windows utilizan las llamadas ODBC.

Con JDBC ocurre exactamente lo mismo: JDBC es una especificación de un conjunto de clases y métodos de operación que permiten a cualquier programa Java acceder a sistemas de bases de datos de forma homogénea. Lógicamente, al igual que ODBC, la aplicación de Java debe tener acceso a un driver JDBC adecuado. Este driver es el que implementa la funcionalidad de todas las clases de acceso a datos y proporciona la comunicación entre el API JDBC y la base de datos real.

La necesidad de JDBC, a pesar de la existencia de ODBC, viene dada porque ODBC es un interfaz escrito en lenguaje C, que al no ser un lenguaje portable, haría que las aplicaciones Java también perdiesen la portabilidad. Y además, ODBC tiene el inconveniente de que se ha de instalar manualmente en cada máquina; al contrario que los drivers JDBC, que al estar escritos en Java son automáticamente instalables, portables y seguros.

Page 99: Texto_Tecnicas de Programacion

Pág. 99

Asignatura: Técnicas de Programación

Toda la conectividad de bases de datos de Java se basa en sentencias SQL, por lo que se hace imprescindible un conocimiento adecuado de SQL para realizar cualquier clase de operación de bases de datos. Aunque, afortunadamente, casi todos los entornos de desarrollo Java ofrecen componentes visuales que proporcionan una funcionalidad suficientemente potente sin necesidad de que sea necesario utilizar SQL, aunque para usar directamente el JDK se haga imprescindible. La especificación JDBC requiere que cualquier driver JDBC sea compatible con al menos el nivel «de entrada» de ANSI SQL 92 (ANSI SQL 92 Entry Level).

10.4 Modelo de dos capas

Este modelo se basa en que la conexión entre la aplicación Java o el applet que se ejecuta en el navegador, se conectan directamente a la base de datos.

Esto significa que el driver JDBC específico para conectarse con la base de datos, debe residir en el sistema local. La base de datos puede estar en cualquier otra máquina y se accede a ella mediante la red. Esta es la configuración de típica Cliente/Servidor: el programa cliente envía instrucciones SQL a la base de datos, ésta las procesa y envía los resultados de vuelta a la aplicación

10.5 Modelo de tres capas

En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa intermedia entre Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a la base de datos y recoger el resultado desde la base de datos. En este caso el usuario no tiene contacto directo, ni a través de la red, con la máquina donde reside la base de datos.

Page 100: Texto_Tecnicas de Programacion

Pág. 100

Asignatura: Técnicas de Programación

Este modelo presenta la ventaja de que el nivel intermedio mantiene en todo momento el control del tipo de operaciones que se realizan contra la base de datos, y además, está la ventaja adicional de que los drivers JDBC no tienen que residir en la máquina cliente, lo cual libera al usuario de la instalación de cualquier tipo de driver.

11.6 Puente JDBC-ODBC

La primera categoría de drivers es la utilizada por Sun inicialmente para popularizar JDBC y consiste en aprovechar todo lo existente, estableciendo un puente entre JDBC y ODBC. Este driver convierte todas las llamadas JDBC a llamadas ODBC y realiza la conversión correspondiente de los resultados.

La ventaja de este driver, que se proporciona con el JDK, es que Java dispone de acceso inmediato a todas las fuentes posibles de bases de datos y no hay que hacer ninguna configuración adicional aparte de la ya existente. No obstante, tiene dos desventajas muy importantes; por un lado, la mayoría de los drivers ODBC a su vez convierten sus llamadas a llamadas a una librería nativa del fabricante DBMS, con lo cual la lentitud del driver JDBC-ODBC puede ser exasperante, al llevar dos capas adicionales que no añaden funcionalidad alguna; y por otra parte, el puente JDBC-ODBC requiere una instalación ODBC ya existente y configurada.

Page 101: Texto_Tecnicas de Programacion

Pág. 101

Asignatura: Técnicas de Programación

REFERENCIAS BIBLIOGRÁFICAS

Juan Carlos López Rodríguez, Técnicas de Programación, CENGAGE LEARNING

ARG, 2000.

Santos, Manuel / Patiño, Ismael / Carrasco, RaúlJosé Gallego, Fundamentos de Programación, Alfaomega, 2006

UBICACIÓN: Biblioteca UCCI: 005 S21 2006

Agustín Froufe Quinta, Java 2: Manual de usuario y tutorial, Alfaomega Grupo Editor (México)Ra-Ma, 2008

Román Leobardo , Metodología de la programación orientada a objetos, Alfaomega, 2006

UBICACIÓN: Biblioteca UCCI: Cod. 005 L88 2006

Harvey M. Deitel, Cómo programar en C/C++ y Java, Pearson Educación, 2004 UBICACIÓN: Biblioteca UCCI: 005.1 D46 2004

Silvia Campos, Aprenda ya: programación orientada a objetos, Universidad Ricardo Palma, 2006

UBICACIÓN: Biblioteca UCCI: Cod. 005 C24 2006

Alfonso Vidal Romero Elizondo, Como programar en Java, Pearson/Educaci n, 2004

Arnold, Ken / Gosling, James / Holmes David, El Lenguaje de Programación Java, Pearson Educación, 2001

Luis JOYANES Aguilar, Fundamentos de programación, algoritmos, estructuras de datos y objetos, Mc Graw-Hill. 2003

GRIFFITH, Steven W. / CHAN, Mark C. / ISAI, Anthony F, Tips para programar con Java: La guía más completa para programadores de Java y Visual J++, Editorial Mc Graw-Hill. 2003

ALCALDE Lancharro, Eduardo / García López, Miguel, Metodología de la programación, Editorial: Mc Graw Hill. 2000

Descargar de JAVA PLATAFORM JDK; 2011 (acceso 14/02/20011). Disponible en: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Descarga de IDE NETBEANS; 2011 - (acceso: 14/02/20011). Disponible en: http://netbeans.org/downloads/index.html

Ejercicios en Java Disponible en: http://foro.elhacker.net/java/ejercicios_java_teoriaejemplos-t34891.0.html.

Manual de Java: http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Java/Java2.pdf,