Sei sulla pagina 1di 13

EJERCICIOS CURSO JAVA 1.

Crear las clases Triangulo y TrianguloGrafico para el ejemplo comentado sacado del Tutorial Aprenda Java como si estuviera en primero. Una vez codificadas, cambiar el programa principal (Ejemplo1.java) para imprimir 2 Objetos TrianguloGrafico.
Nota: Usar el mtodo drawLine(int px1,int py1, int px2,int py2) de java.awt.Graphics para pintar cada uno de los tres lados del triangulo.

Sin comentarios de ayuda. Al terminar incidir el las ventajas del polimorfismo, como hemos ampliado un sistema aadiendo clases que cumplen el contrato de la interfaz.
2. Codificar un programa que recibiendo un nmero por teclado devuelva si es primo o no.
Nota: Un nmero entero es primo si slo tiene como divisores a l mismo y a la unidad.

Antes de resolverlo hay que contar como funciona la clase java.util.Scanner que permite coger y tratar cadenas y numeros sin hacer tener que usar/contar un BufferedReader sobre InputReader del System.in. Adems te ahorras el uso de los Wrappers (Integer, Float, etc) para transformar cadenas en datos primitivos y viceversa. Te he puesto un ejemplo que se llama EjemploTeclado. Respecto al programa de los primos, hazlo al principio dentro del main y cuando funcione lo sacas a una funcin. Incide que las funciones no deberan realizar operaciones de E/S para aumentar su reutilizabilidad. El algoritmo refinamientos: yo lo cuento en los siguientes

buscar si hay divisores del numero (resto de la divisin igual a 0) desde el 2 al numero menos uno. Si no hay el numero es un primo, evidentemente hay que llevar una variable auxiliar para al terminar el bucle consultarla. Tambin se puede romper el bucle pero a mi me gusta menos, los breaks hacen ilegibles los programas, charla filosofal de nuevo, hay que intentar salir estructuradamente, con lo cual se puede cambiar la condicin del for para recoger la condicin de encontrado. Luego podemos decir que slo hay un numero par primo, el dos, con lo cual, podemos chequear el caso especial
1

EJERCICIOS CURSO JAVA

antes del bucle (if) y luego realizar el bucle desde el tres hasta el numero avanzado por los impares (3+2=5,5+2=7,) Luego podemos pensar en que el numero su menor divisor es el numero dos, a partir de la mitad del numero las divisiones siempre dan a uno con algo, con lo cual hay podemos parar el bucle (n/2 +1). Por el mismo criterio podemos decir la descomposicin en factores primos de un numero nos garantiza que el mayor factor de descomposicin es su raz cuadrada con lo cual si no hemos encontrado un divisor entre los primos hay podemos parar. Para ellos vamos solo comprobando que se puede ir hasta raz(n) +1. los ms unos son por el redondeo de la raz y la divisin entre dos.

Yo cojo algn nmero primo grande y veo la diferencia de tiempo entre algoritmos para decidir si es primo. Lo cronometro usando System.currentmilis() que te dice el numero de milisegundos desde 1 de Enero de 1970. Esto es til para mediciones poco precisas pues en Windows esto tarda unos 15 milisegundos pues hay que calcular mucho porque el sistema operativo no lleva las fechas as. O bien google o se sacan primos grandes de aqu: http://primes.utm.edu/lists/small/millions/ la idea bucles y funcin. objetos, normal. de este ejercicio no es vacilar sino ver lo de condiciones. Tambin incidir en la llamada a Y ver que es esttico todo porque no hay estamos haciendo programacin estructurada

3. Codificar un programa que presente e implemente el siguiente men de opciones: i. Averiguar si un nmero si es primo o no. ii. Mostrar todos los primos menores a uno dado. iii. Salir.
Nota: Crear una Clase reutilizable partiendo de la solucin del ejercicio 2.

Creamos la clase, e inicialmente lo ponemos en el mismo paquete (el paquete por defecto) vemos que sin importar nada se ven y se comenta que las clases que estn en el
2

EJERCICIOS CURSO JAVA

mismo paquete se ven sin import. Hacer el cuerpo de programa principal para ello recordar la diferencia entre while y do/while (con esto hemos repasado las estructuras de control iterativas) y ver como el todos los mens del mundo al menos eligen una opcin del usuario, la de salir o sea que siempre do/while para iterar al menos una vez. Con el case para procesar las opciones se logra hacer los mens ms flexibles y ms legibles. Crear funciones de pantalla y de cada opcin. Para copiar otros ejemplos. Como somos elegantes cuando estamos en una opcin pedimos si quiere continuar el usuario antes de irnos al men principal. Ahora sacamos la clase a un paquete para ver como otros clases de fuera pueden usarla (con import) y finalmente pasamos de paquete y creamos un jar y la usamos sin tener el cdigo, solo la class y contamos los problemas de classpath.
4. Usando el armazn de clases del ejercicio 1 para construir una ventana grfica, dibujar una funcin trigonomtrica en el panel, muestreando 100 valores para ella y almacenndolos en un array.
Nota: Usar el mtodo drawPolyline(int[] pxs,int[] pys, int size) de java.awt.Graphics para pintar una polilnea que una dibuje todos los puntos muestreados.

Con este ejercicio a parte de incidir de nuevo en los paneles y frames y el grafics robado bueno pues se trata de recorrer dos arrays uno de puntos x y otros de puntos f(x) o sea y la idea es que no lo modules al principio es saldr una lnea el pxel uno del panel pues el seno/coseno varan desde -1 a 1 para pintarla en la mitad hay que sumar algo al valor y luego modular la lnea plana en amplitud multiplicamos el valor de la funcin por 100 para obtener valores entre -100 y 100 para la funcin. Para la fase damos valores en el intervalo 0 a 2pi que es la periodicidad de estas funciones.
5. Codificar una clase para la abstraccin Persona que tenga los siguientes atributos: nombre (Cadena), edad (entero), altura (real), sexo (carcter), casado (booleano). Crear 3 funciones constructoras para la clase: el constructor por defecto, el constructor genrico y un constructor especializado para crear solteros. Dotar adems a la clase de funciones de acceso a los atributos 3

EJERCICIOS CURSO JAVA (getters/setters). Por ltimo, escribir un mtodo imprimir que devuelva todos los datos de una persona concatenados en una cadena.

Con este ejercicio construimos nuestra primera clase no esttica desde 0. A parte de contar que los setter y setter permiten reducir el acoplamiento del codigo generado a veces aprovecho a contar lo de los inicializadotes estaticos, no estaticos y los finalizadotes. Tambin comento como funciona el garbage collector y hablo de los 7 colectores que trae la jvm y los otros tipos de referencias las weakreferences, las softreferences y las phantomreferences. El metodo este de mostrar datos esta a huevo para que fuera el toString pero eso lo dejo para ms adelante aunque si tu quieres puedes contarlo.
6. Codificar un programa que presente e implemente el siguiente men de opciones, usando la clase Persona del ejercicio anterior: i. Introducir los datos de una persona. ii. Mostrar los datos de una persona. iii. Salir.
Nota: Se puede pasar directamente al ejercicio 7.

No lo hago pero tu a lo mejor deberas para ganar tiempo.


7. Codificar un programa que presente e implemente el siguiente men de opciones, usando un arrray de 10 Objetos de la clase Persona del ejercicio 5: i. ii. iii. iv. v. Introducir los datos para una de las personas de la lista. Mostrar los datos de las personas almacenadas. Borrar una persona de la lista. Cambiar el tamao de la lista. Salir.

Nota: Usar System.arraycopy(Object src, int src_pos, Object dst, int dst_pos, int length)

Cosas que tiene este ejercicio: a) tratamiento estructurado de las excepciones, el scanner como clase nueva de java 5 usa la configuracin regional (locale) y pide numero con coma para la altura, si metes uno con punto peta, tambin tienes que meter el bolean como true o false. Fijate en el do while.
4

EJERCICIOS CURSO JAVA

b)

c) d) e)

Paso de referencias, hasta ahora funciona bien cuando cambias los objetos de la lista pero si tratas de cambiar el propio array al redimensionar, va a fallar puesto que la referencia se copia al redimensionarla no recoge los cambios. Hay que devolver explcitamente la nueva lista y asignarla a la anterior fuera de la funcin. Esto pasa siempre, ensales a identificar y resolver este problema, incluso yo a veces depuro para verlo. El uso del bucle for each nuevo de java for(elemento: iterable), permite ocultar la variable de recorrido del bucle. Haz la lista de tamao 2 o te vas a hinchar a meter datos para redimensionar. Cuidado con los retornos de carro de los scanner que a veces quedan, yo por eso despus de leer un numero vaco el buffer.

8. Codificar clases para las abstracciones Vehculo (con los siguientes atributos: String nombre y float velocidad), Coche (int ruedas), Barco (int velas), Avion (int alas), estas tres ltimas son especializaciones de la clase Vehculo. Dotar de constructores y mtodos de acceso a las clases. Por ltimo escribir un mtodo que devuelva todos los datos de una clase concatenados en una cadena. Crear una interfaz Controlable que permita a travs de un mtodo void controlar() hacer funciones especificas de cada una de las subclases (p.e: conducir, navegar, volar).
Nota: Sobrescribir (Override) los mtodos toString() y equals(Object o) de la clase java.lang.Object .

Haz la armadura inicial de las clases y refnalas despus con los mtodos de pedir datos y mostrar datos cuando haga el ejercicio siguiente as es ms impactante el polimorfismo.
9. Codificar un programa que presente e implemente el siguiente men de opciones, usando un nico ArrrayList de objetos de la clases del ejercicio 8: i. ii. iii. iv. v. Introducir los datos para un vehculo (c/b/a) de la lista. Mostrar los datos de los vehculos almacenados. Borrar un vehculo de la lista. Operar los vehculos (c/b/a) de la lista. Salir.

Nota: usar la clase java.util.ArrayList de Collections.

EJERCICIOS CURSO JAVA

Empieza pidiendo datos y haciendo el case con referencias de las subclases y luego las cambias a referencias a la superclase y sacar todo el cdigo de los brazos del case para ver que lo nico dependiente del cdigo es el new para la ejemplarizacin de cada objeto concreto. Habla si quieres del patrn factora. Subraya que mientras que en la herencia los mtodos tienen que ser simtricos (llamarse como en el padre), en la interfaz podemos instrumentarla de manera mucho ms flexible, de hecho se deberan programar interfaces y no clases para hacer los sistemas extensibles. Yo si les veo liados les pondra que hagan uno de animales pues es importante entender este ejercicio perfectamente.
10. Codificar un programa que implemente este GUI usando la clase Persona y un ArrayList.

Notas: Usar las clases del paquete java.awt y las classes Wrappers de java.lang.

Lo primero es recordar o hacer el ejemplo de los wrapper porque ahora para meter las cosas en los textfield va a ser necesario. Antes haba que hacer new Integer para las conversiones hay las clases tienen mtodos estticos bidireccionales para ir de String al tipo bsico y al revs. Fjate que tambin aprovecho a poner en lanzador el main para separarlo de la ventana. Se puede poner en la propia clase y puedes jugar con ello.
6

EJERCICIOS CURSO JAVA

Tambin aprovecho a ver lo de los windowlistener en la clase ventana, en una clase aparte y finalmente me hago la clase adaptador mo que implemente los mtodos de la interfaz con cuerpo sin instrucciones y solo hago que el manejador redefina lo que quiere. Al final digo que ya hay adaptadores definidos para java. Aprovecha a hacer el borrado mltiple para contar la seleccin de la lista mltiple y acurdate de que cuando borrar en un array varios elementos de golpe tienes que ir de atrs adelante para que no pete. Dales la brasa con el botn de guardar inteligente que inserta y actualiza. E incide en que nunca las clases de la vista sirven para guardar datos, no sacar las personas del list ! Mantn un array o un arraylist aparte y sincronizado con la list. MantenimientoPersonas es la clase principal del ejercicio.
11.Realizar el modelado de las clases de dominio para los siguientes requisitos. Definicin de Requisitos Nuestra empresa JAVAPOWERSOLUTIONS requiere que se desarrolle un sistema de informacin para el control y gestin de la venta de sus Productos y Soluciones de Informtica a sus clientes. Estos productos sern inicialmente Desarrollo de Software, Gestin de Proyectos Informticos, Servicios Profesionales y Formacin. Desde dicho aplicacin se gestionar todo el proceso comercial de dichos servicios desde la creacin de una nueva oferta, pasando por la gestin de las ventas y sus cobros. La aplicacin ofrecer esta funcionalidad a los comerciales de la empresa. Toda venta que realice a un comercial estar asociada a unos objetivos personales asignados de naturaleza mensual y anual en virtud de los cual se logran unas bonificaciones segn un porcentaje de las ventas. La aplicacin permitir al gerente de cuentas controlar toda la informacin tanto para un comercial particular como para el total de ellos. Los comerciales interactan con los clientes pero las capacidades administrativas y de gestin sobre la base de datos de estos ser responsabilidad del gerente de cuentas. Desde la aplicacin los comerciales tendrn las siguientes capacidades: Gestin de ofertas propias. Gestin de ventas propias. Gestin de comisiones propias. Solicitud de Altas y bajas de clientes. 7

EJERCICIOS CURSO JAVA Desde la aplicacin el Account Manager tendr las siguientes capacidades, para su grupo comercial asignado: Control de ofertas para un comercial. Control de ventas un comercial. Control de comisiones un comercial. Control de ofertas totales de su grupo. Control de ventas totales de su grupo. Control de comisiones totales de su grupo. Gestin de clientes de su grupo.

Existe el director comercial que tiene control total sobre todos los procesos comerciales y adems es el encargado de mantener el catlogo de productos de la empresa. Existir un administrador del sistema que tendr la capacidad de administrar usuarios y adems que tiene tambin un control total de la aplicacin, los comerciales y los gerentes y los clientes.
Notas: Usar alguna herramienta de modelado UML para realizar el diagrama de clases. Puede ser el plugging de Omondo para Eclipse.

Bueno ah va el modelo uml que yo diseo, te recuerdo el metodo: 1) buscar clases candidatas en los requerimientos. Suelen ser sustantivos o nombre, se descartar clases vagas (p.e. Sistema) o redundantes (gerente = account manager) y ojo con las instancias o ejemplares de clases. (en este caso formacin, desarrollo, y consultoria son ejemplares de productos. Comente lo de la metodologa CRC (clase, responsabilidad, colaboradores) es lo mismo preguntar a cada clase su misin y con quien la lleva a cabo, si la clase no responde a alguna de estas preguntas se la saca del modelo. 2) Establecer relaciones entre clases, hay dos tipos:
i. Relaciones

ISA (is a, es un, se parece, se comporta, funciona como) son de herencia. A la herencia se llega por generalizacin (viendo clases que tenemos y sacamos una clase factor comn abstracta o se llega por especializacin refinando un comportamiento de una superclase o ocultndolo completamente. A la herencia se le llama generalizacin en uml.

EJERCICIOS CURSO JAVA ii. Relaciones APO (a part of, forma parte de, esta

compuesto, tiene, se compone). Es la composicin de clases. La composicin indica que una objeto tiene referencias a otro/s objetos o/y viceversa. El cliente tiene unos pedidos asignados (array o lista) y un pedido tiene o puede tener una referencia al cliente al que pertenece. La lnea simple muestra esta relacin con un diamante en la parte que representa el todo para enfatizar si se quiere la relacin. Diamante negro vidas solidarias de los objetos, diamante blanco vidas independientes. Cuando ya tenemos las relaciones solemos pintar la cardinalidad y si acaso la navegabilidad de las relaciones. iii. Cuando no tienes mucha experiencia se llega a las interfaces por la imposibilidad de tener herencia mltiple en java. Forzar la creacin de dos tipos de clientes (particulares y empresas) un cliente no puede heredar de persona y de empresa con lo cual hay que declarar una interfaz clientela con los mtodos comunes que puede operar el comercial sobre los clientes: ofertar, vender, etc. 3) Luego se suelen poner los atributos relevantes de las clases para ello buscamos adjetivos o propiedades de los requerimientos para completar el modelo. 4) Finalmente se completa con los mensajes (resto de verbos) que van a componer el protocolo de cada clase. Aqu se suelen usar los diagramas de secuencia y colaboracin pero yo en este curso no los hago. Cuando doy uml si. Yo uso las enumeraciones nueva de java 5 para mantener el estado de la venta. Pero t lo puedes hacer como quieras.

EJERCICIOS CURSO JAVA

Al final el diagrama queda as.

12.Codificar un programa que implemente este GUI usando las clases de dominio del ejercicio anterior.

Los comerciales se podrn aadir, editar y borrar utilizando un men contextual que aparecer al pulsar con el botn derecho del ratn sobre el comercial pertinente. 10

EJERCICIOS CURSO JAVA Al realizar doble clic sobre un comercial se cargarn los particulares y empresas a l asignados. Estas listas se podrn mantener dinmicamente (ABM) usando las botoneras de cada pestaa en concreto. Al realizar doble clic sobre un cliente asignado a un comercial se cargarn sus ofertas, y ventas asociadas. Estas listas podrn mantenerse desde una botonera comn a las tres pestaas. Al hacer doble clic sobre una venta aparecer un dialogo de edicin de los tems que componen la venta. Implementar la aplicacin o alguno de sus paneles con persistencia en Ficheros. Implementar la aplicacin o alguno de sus paneles con persistencia en BBDD (antes realizar el ejercicio 13).

Notas: Usar especializaciones de javax.swing.table.AbstractTableModel para las diversas JTables y javax.swing.tree.DefaultMutableTreeNode para controlar el JTree de comerciales. Usar javax.swing.JFileChooser para los dilogos de abrir y guardar sobre ficheros. Y dilogos modales para cualquier ventana distinta de la principal. Usar Resultsets bidireccionales y actualizables para la parte de BBDD.

El programa tiene tela, Usa el lanzador2 y la ventana2 que no tiene cosas de JDBC. No lo vamos a hacer completamente funcional, ms bien vamos a ir trabajando por regiones: Lo primero es montar con el visual editor el armazn de mens, pestaas, splitpannels, botoneras, rbol y tablas vacas, despus de haber dado un repaso a todos los componentes de swing de la paleta del editor. Este primer ejercicio gusta mucho y sirve para practicar con los layouts. Despus vamos con la pestaa de particulares, yo la suelo hacer en la pantalla y luego los chicos hacen la pestaa de empresas. As cuento los tablemodels aunque antes inicializo la tabla con los otros constructores el de JTable(Object [][] datos, Object [] titulos) y el de JTable (Vector datos, Vector titulos) ojo que el vector primero es un vector de vectores. Yo los TM siempre los hago heredando de abstractablemodel) empiezo definiendo los tres mtodos abstractos y luego voy ampliando hasta completar los siete que hay que hacer.

11

EJERCICIOS CURSO JAVA

Fjate en los eventos del gui slo invocan mensajes al tablemodel. (si no tienes table model como atributo del frame tendrs que sacarlo de la tabla todo el rato, fjate que es instructivo y yo se lo hago) El table model dependiendo de que este en edicin o no muestra no slo el arraylist de personas que le llega, (inicialmente lo lleno en el main y se lo mando con 2 o 3 datos de personas para no empezar preocupndome de los null ni de insertar, slo de actualizar que es ms fcil y luego ya lo mando vaco o nulo incluso) Una vez que tengo esta parte funcionando me dedico al jtree, lo creo con un array de objects pero eso es inflexible o sea que uso los defaultmutabletreenodes que pueden ser hojas o nodos padres segn se les aadan ms nodos dinmicamente. Fjate que cada mutabletreenode puede arropar un objeto comercial al que hay que coger con getUserObject(). Fjate que el nodo principal raz es una cadena, esto me obliga a tener cuidado cuando luego pinche con el ratn para sacar el men de edicin. Pero bueno el cdigo creo que es fcil, sino te lo cuento desayunando. El siguiente paso es despus de contar ficheros, serializar el nodo raz y voila!! Se guarda todo de golpe. (hacer ejemplo cuando cuentes serializacion de campos transient que no se guardan). Momento en el ponemos el JFileChooser en el men abrir y guardar. Ese es el objetivo de la semana.
13.Codificar un programa que implemente este GUI usando el API de JDBC y una tabla diseada en la base de datos con los campos que se muestran.

12

EJERCICIOS CURSO JAVA

Notas: Habilitar y deshabilitar botones para apoyar la lgica de la aplicacin. Precargar el driver JDBC del fabricante en el mtodo main.

EJERCIO EXTRA. Codificar un programa que implemente este GUI a partir de una clase Crculo que herede de java.awt.Component.

Notas: Sobrescribir en la clase circulo al menos los mtodos paint(Graphics g) y getPreferredSize(). Para que el panel (Container) repinte sus contenidos (Components) hay que invocar el mtodo validate() del panel.

13