Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ISP Superior
Pascal
objetivos 5
programa 5
bibliografía 7
clases
clase 1 | 8
clase 2 | 24
clase 3 | 42
clase 4 | 94
clase 5 | 124
clase 6 | 154
clase 7 | 178
clase 8 | 194
clase 9 | 215
clase 10 | 236
clase 11 | 254
clase 12 | 264
evaluación integradora 278
Nosotros estaremos allí para despejarle todas las dudas que puedan surgirle de
forma tal que se sienta seguro para dar un paso más adentrándose al conoci-
miento.
Importante:
• Recordar que las clase 7 y 8 tienen prácticas que serán base para el teó-
rico del parcial 2.
• Por otro lado, la clase 9 es base de algunas preguntas del teórico del final.
¡Adelante!
programa
Módulo 1: Lenguaje de Programación Java. Revisión PII
• Desarrollado en las Clases 1 y 2
Objetivos específicos
● Revisar los aspectos más importantes de la programación en Java para afian-
zar las bases del lenguaje.
● Revisar los distintos modelos de diseño para lograr una representación fiel de
la situación a desarrollar
● Aplicar los modelos según el caso para acortar la brecha entre el modelo real
y el modelo virtual.
Contenidos
Estructuras de Estáticas de Datos. Variable única. Arreglos Unidimensionales.
Arreglos multidimensionales. Código Java para cada caso.
Estructuras de Programación: Secuencial. Condicional. Repetitivas. Código Java
para cada caso.
Objetivos específicos
• Conocer las estructuras más importantes a la luz del desarrollo de siste-
mas, para dominar el ejercicio de la programación lógica.
• Determinar la necesidad de la aplicación de estas estructuras, para otor-
gar cierto grado de análisis al código que se desarrolle.
Contenidos
Estructuras de datos dinámicas. Lineales: pilas, colas y listas. No lineales: árbo-
les y grafos. Ordenamientos: Tipo de ordenamientos. Ordenamientos en Java
Objetivos específicos
• Reconocer los aspectos más importantes de la programación orientada
a objetos en Java, para lograr abstracciones que representen a la realidad del
cliente.
• Reconocer los distintos modelos de diseño y su sintaxis, para afianzar técni-
cas de desarrollo de software.
Contenidos
POO y resolución de problemas. Objetos y mensajes. Diagramas de secuencia.
Comportamiento y su implementación. Encapsulamiento y Polimorfismo (nocio-
nes).
Objetivos específicos
• Aprender la relación entre los objetos y sus formas de comunicación,
para obtener modelos fieles al entorno del cliente.
• Reconocer los diferentes estados y transiciones por las cuales pasa un
objeto y su relación con los eventos, para lograr un desarrollo eficiente.
Contenidos
JDBC. SWING. SERVLET. Concepto. Aplicaciones. Tipos.
Objetivos específicos
• Aplicar los contenidos vistos en las clases anteriores, para abordar el
desarrollo como solución problemas reales.
• Reconocer las ventajas y desventajas de este tipo de programación, para
poder realizar recomendaciones adecuadas a los clientes.
Contenidos
Introducción a la tecnología WEB con J2EE. Modelo cliente-servidor. Acceso a
Datos. Conceptos y ejemplos. Práctica final.
bibliografía
Material básico:
• Material de estudio desarrollado en cada Clase.
• DEITEL, Harvey M y DEITEL, Paul J., Cómo programar en Java, 9na.
edición, Prentice-Hall, ISBN: 978-970-26-1190-5, México, 2012.
Material complementario:
clase 1
ESTRUCTURAS ESTÁTICAS DE DATOS
introducción
Lo que buscamos en esta primera clase es que usted, recuerde algunos temas
vistos en varias materias ya cursadas. Vamos a comenzar por las variables y
arreglos, y cómo se programan en Java.
Retomando e integrando conceptos y prácticas podremos resolver problemas
computacionales propios y de terceros.
clase 1
tema 1 TEMA 1: VARIABLE ÚNICA. ARREGLOS UNIDIMENSIONALES. ARREGLOS
MULTIDIMENSIONALES.
Las variables son procesadas para producir salidas. Veamos un ejemplo senci-
llo. Usted quiere hacer un bizcochuelo. A la hora de agregar los huevos puede
hacerlo de dos maneras, de a uno (variable única) o todos juntos (arreglo de
huevos)
● Bidimensionales
Ordenamientos en Arreglos
Por esa causa existen diversos algoritmos que permiten ordenar los arreglos.
Algunos más eficientes que otros, pero todos eficaces.
Algoritmos de Búsqueda
Así como existen algoritmos para ordenar, están los propios para buscar dentro
de un arreglo.
Contamos con, la secuencial, binaria y la hash. Veamos cada una de ellas.
Lo que acabamos de ver es solo una parte de todo este gran tema, que profun-
dizaremos en la clase 5, cuando ya tengamos en claro otra serie de estructuras
de programación.
Recordemos que Java posee dos grandes categorías de tipos para las variables:
● Tipo Primitivo: Las variables de tipos primitivos almacenan directamente
un valor que siempre pertenece al rango de ese tipo. Por ejemplo una
variable int almacena un valor entero como 1, 2, 0, -1, etc.
Los nombres de variables en Java se pueden crear con mucha libertad. Pueden
ser cualquier conjunto de caracteres numéricos y alfanuméricos, sin algunos
caracteres especiales como operadores o separadores ( ,.+-*/ etc.).
Existe una serie de palabras reservadas las cuales se usan de una manera par-
ticular en Java y por lo tanto no se pueden utilizar como nombres de variables.
Actividad
Actividad
int[] numeros;
Con esa línea se crea la variable tipo Array (arreglo). Con numeros = new
int[5]; creamos el objeto Array y le indicamos cuántos elementos tendrá el
arreglo.
Ejemplo
Actividad
Actividad 4: ¡A desarrollar!
Actividad
Solución:
Solución
Solución
Actividad 4: ¡A desarrollar!
Solución
package actividad4;
import java.util.*;
Llegamos al final de la clase y hemos revisado dos temas que son la base de la
programación, la estructura básica de los datos que usan en un desarrollo.
En la clase siguiente nos embarcaremos en las estructuras de programación.
Espero me acompañen.
No hay lugar a duda que un paso depende del anterior y que deben hacerse en
ese orden.
También los conocemos como ciclos, ellos nos permiten representar acciones
que se dan de manera reiterada.
De una manera muy concisa vamos a revisar este tema. Para poder abordar el
mismo, vamos a ver un ejemplo de cada caso. Al finalizar tendrá una serie de
ejercicios para resolver.
Estructura Secuencial
Recordemos el flujo:
Podemos ver que se pide el análisis de una variable SÓLO determinar si es par y
luego del análisis avisar de esa situación.
Su código es:
Su flujo se ve así:
Su flujo se ve así:
Podemos ver que, se debe hacer una selección entre diferentes valores que
puede asumir el ingreso.
Su código es:
Su flujo se ve así:
Su flujo se ve así:
Su flujo se ve así:
Su flujo se ve así:
Si quieren revisar las operaciones que se pueden hacer con las variables les
invito a revisar el Módulo 3 - PII, allí encontrarán todo lo necesario para poder
hacer la actividad que les propongo a continuación.
Soluciones
1
clase 2
Como hemos visto a lo largo de la clase, podemos representar la mayoría de
conclusiones las situaciones de la vida cotidiana, usando estructuras de programación bási-
cas. Pero debemos seguir avanzando, dado que hay situaciones complejas,
que requieren otro tipo de estructuras de almacenamiento y programación. Nos
vemos la clase que viene.
clase 3 Pilas
tema 1
Para comenzar con este tema mira con atención la siguiente figura:
¡Si!, yo dije lo mismo, ¡qué delicia!, cómo no desayunar o merendar una PILA
de churros. En este caso si nosotros queremos comer un churro, lo sacamos de
arriba para que no se desmorone y si queremos agregar uno lo apilamos, por la
misma razón.
La idea es poder generar los nodos de manera dinámica a medida que se vayan
necesitando maximizando el uso de la memoria.
http://codigolibre.weebly.com/blog/pilas-en-java
Actividad
Actividad
Actividad
Actividad
Como vimos en el tema anterior, existen librerías Java que nos permiten trabajar
con estructuras dinámicas lineales. En el caso de las colas contamos con la libre-
ría llamada QUEUE.
Con esta librería o interfaz podemos crear colas y gozar de métodos para el uso
de las mismas.
Como vemos, hay dos métodos para cada operación y pueden retornar dos valo-
res, null o una excepción.
https://www.youtube.com/watch?v=E3NUfYCz868
¿Qué podemos ver? ¿Qué hacen los niños? Creo que todos han respondido
niños tomados de la mano.
Si nosotros pasamos al terreno de la informática encontramos estructuras que
simulan esta situación, dichas estructuras son conocidas como listas.
Existen de distinto tipo:
● Lista Enlazada
○ Lista de Enlace Simple
○ Lista de Enlace Doble
○ Lista de Enlace Circular
Características:
/**
* Clase que define los elementos que debe tener un Nodo de la lista.
*/
public class Nodo {
// Variable en la cual se va a guardar el valor.
private int valor;
// Variable para enlazar los nodos.
private Nodo siguiente;
/**
* Constructor que inicializamos el valor de las variables.
*/
public void Nodo(){
this.valor = 0;
this.siguiente = null;
}
// Métodos get y set para los atributos.
/**
* Clase que define las operaciones básicas que debe tener una lista simple.
*/
public class Lista {
// Puntero que indica el inicio de la lista o conocida tambien
// como cabeza de la lista.
private Nodo inicio;
// Variable para registrar el tamaño de la lista.
private int tamanio;
/**
* Constructor por defecto.
*/
public void Lista(){
inicio = null;
tamanio = 0;
}
/**
* Consulta si la lista esta vacia.
* @return true si el primer nodo (inicio), no apunta a otro nodo.
*/
public boolean esVacia(){
return inicio == null;
}
/**
* Consulta cuantos elementos (nodos) tiene la lista.
* @return numero entero entre [0,n] donde n es el numero de elementos
* que contenga la lista.
*/
public int getTamanio(){
return tamanio;
}
/**
* Agrega un nuevo nodo al final de la lista.
* @param valor a agregar.
*/
public void agregarAlFinal(int valor){
// Define un nuevo nodo.
Nodo nuevo = new Nodo();
// Agrega al valor al nodo.
nuevo.setValor(valor);
// Consulta si la lista esta vacia.
if (esVacia()) {
// Inicializa la lista agregando como inicio al nuevo nodo.
inicio = nuevo;
// Caso contrario recorre la lista hasta llegar al ultimo nodo
//y agrega el nuevo.
} else{
System.out.println(“\nElimina la lista”);
lista.eliminar();
En este tipo de lista enlazada cada nodo tiene dos enlaces: uno apunta al nodo
anterior, o apunta al valor NULL o a la lista vacía si es el primer nodo; y otro que
apunta al siguiente nodo siguiente, o apunta al valor NULL o a la lista vacía si es
el último nodo.
Listas Circulares
Una lista circular es una lista lineal en la que el último nodo apunta al primero (no
existe null).
https://www.youtube.com/watch?v=1IxIZ9qXEgw
● LISTAS →
https://www.youtube.com/watch?v=MlzW9Jp9hkk&list=PLPO
v7bTzpLUuiyROxEKLiOYqmCjo_VHQv&index=12
● COLAS →
https://www.youtube.com/watch?v=pefbUlZC2BA&index=13&
list=PLPOv7bTzpLUuiyROxEKLiOYqmCjo_VHQv
clase 3
tema 4
EJERCITAMOS
3) Un supermercado nos pide que hagamos una pequeña aplicación que alma-
cene los productos pasados por el escaner.
La aplicación debe almacenar Productos (clase), cada producto al crearse con-
tiene una cantidad, un precio (estos dos generados aleatoriamente). El nombre
del producto será básico (producto1, producto2, producto3, etc.).
El precio ya viene con los impuestos incluidos.
Calcular el precio total de una lista de entre 1 y 8 productos (aleatorio). Mostrar un
ticket con todo lo vendido y el precio final como se hacen en los supermercados.
Más o menos con este formato, lo importante son los datos, no el estilo:
Cantidad Precio Total
Producto1 5 3.5 17.5
Producto2 7 2.5 17.5
Precio final 35
Solución
Solución:
Solución:
Solución
1) Un cine de un pueblo pequeño nos propone hacer una aplicación para contro-
lar las personas de una cola de un cine en los grandes estrenos de películas.
Un conjunto de personas esperaran la cola para sacar una entrada, tendremos
que calcular la entrada según la edad de la persona (minimo 5 años).
La edad de las personas se generan aleatoriamente entre 5 y 60 años. Les
recomiendo realizar un método en el main para generar Personas en la cola.
Al final, deberemos mostrar la cantidad total recaudada. El número de personas
de la cola se elige al azar entre 0 y 50.
Recuerda que al final la lista debe quedar vacía, una vez que una persona paga
su entrada ya no está en la cola.
Los precios son:
● Entre 5 y 10 años → $100
● Entre 11 y 17 años → $150
● Mayor de 18 → $200
Solución
package ejercicio_listaenlazada_1;
/**
* Constructor por defecto
* @param edad
*/
public Persona(int edad){
this.edad=edad;
}
/**
* Devuelve la edad
* @return Edad acutal
*/
public int getEdad() {
return edad;
}
/**
* Modifica la edad
* @param edad Valor edad
package ejercicio_listaenlazada_1;
/**
*
* @param <T>
*/
public class Nodo<T> {
private T dato;
private Nodo<T> siguiente;
/**
* Constructor por defecto
*/
public Nodo(){
siguiente=null;
}
/**
* Le pasamos un dato al nodo
* @param p
*/
public Nodo(T p){
siguiente=null;
dato = p;
}
/**
* Le pasamos un dato y su siguiente nodo al nodo
* @param t Dato a insertar
* @param siguiente Su sisguiente nodo
*/
public Nodo(T t, Nodo<T> siguiente){
this.siguiente=siguiente;
dato = t;
}
public T getDato() {
return dato;
}
package ejercicio_listaenlazada_1;
public class CineApp {
//Generamos la cola
generarCola(cola);
//Recorremos la cola
while(!cola.estaVacia()){
//Comprobamosla edad
if(edadActual>=5 && edadActual<=10){
recaudacion=1;
}else if(edadActual>=11 && edadActual<=17){
recaudacion=2.5;
}else{
recaudacion=3.5;
}
recaudacionTotal+=recaudacion;
//Mostramos el resultado
System.out.println(“La recaudación es de “+recaudacionTotal+”
euros”);
/**
* Genera una cola de personas
* @param cola
*/
public static void generarCola(ListaEnlazada<Persona> cola){
int numeroPersonas=generaNumeroAleatorio(1,50);
for(int i=0;i<numeroPersonas;i++){
cola.insertarUltimo(new Persona(generaNumeroAleatorio(5, 60)));
}
/**
* Genera un numero aleatorio entre dos numeros.
* Entre el minimo y el maximo incluidos
* @param minimo Número mínimo
* @param maximo Número máximo
* @return Número entre minimo y maximo
*/
public static int generaNumeroAleatorio(int minimo, int maximo){
int num=(int)Math.floor(Math.random()*(minimo-
(maximo+1))+(maximo+1));
return num;
}
package ejercicio_listaenlazada_1;
public class CineApp {
//Generamos la cola
generarCola(cola);
//Recorremos la cola
while(!cola.estaVacia()){
//Mostramos el resultado
System.out.println(“La recaudación es de “+recaudacionTotal+”
euros”);
/**
* Genera una cola de personas
* @param cola
*/
public static void generarCola(ListaEnlazada<Persona> cola){
int numeroPersonas=generaNumeroAleatorio(1,50);
for(int i=0;i<numeroPersonas;i++){
cola.insertarUltimo(new Persona(generaNumeroAleatorio(5, 60)));
}
/**
* Genera un numero aleatorio entre dos numeros.
* Entre el minimo y el maximo incluidos
* @param minimo Número mínimo
* @param maximo Número máximo
* @return Número entre minimo y maximo
*/
public static int generaNumeroAleatorio(int minimo, int maximo){
int num=(int)Math.floor(Math.random()*(minimo-
(maximo+1))+(maximo+1));
return num;
}
2) Realiza el ejercicio anterior pero el lugar de usar una lista enlazada, usar la
clase ArrayList. Usa un iterador para recorrer el ArrayList. Usa la misma clase
Persona del ejercicio anterior.
Solución
package ejercicio_listaenlazada_2;
/**
* Constructor por defecto
* @param edad
*/
public Persona(int edad){
this.edad=edad;
}
/**
* Devuelve la edad
* @return Edad acutal
*/
public int getEdad() {
return edad;
}
/**
* Modifica la edad
* @param edad Valor edad
*/
public void setEdad(int edad) {
this.edad = edad;
}
package ejercicio_listaenlazada_2;
import java.util.ArrayList;
import java.util.Iterator;
generarCola(cola);
//Creamos el iterator
Iterator<Persona> it=cola.iterator();
//Recorremos la cola
while(it.hasNext()){
espectadorActual=it.next();
//Comprobamosla edad
if(edadActual>=5 && edadActual<=10){
recaudacion=1;
}else if(edadActual>=11 && edadActual<=17){
recaudacion=2.5;
}else{
recaudacion=3.5;
}
recaudacionTotal+=recaudacion;
//Mostramos el resultado
System.out.println(“La recaudación es de “+recaudacionTotal+”
euros”);
int numeroPersonas=generaNumeroAleatorio(1,50);
for(int i=0;i<numeroPersonas;i++){
cola.add(new Persona(generaNumeroAleatorio(5, 60)));
}
}
/**
* Genera un numero aleatorio entre dos numeros.
* Entre el minimo y el maximo incluidos
* @param minimo Número mínimo
* @param maximo Número máximo
* @return Número entre minimo y maximo
*/
public static int generaNumeroAleatorio(int minimo, int maximo){
3) Un supermercado nos pide que hagamos una pequeña aplicación que alma-
cene los productos pasados por el escaner.
La aplicación debe almacenar Productos (clase), cada producto al crearse con-
tiene una cantidad, un precio (estos dos generados aleatoriamente). El nombre
del producto será básico (producto1, producto2, producto3, etc.).
El precio ya viene con los impuestos incluidos.
Calcular el precio total de una lista de entre 1 y 8 productos (aleatorio). Mostrar
un ticket con todo lo vendido y el precio final como se hacen en los supermerca-
dos. Más o menos con este formato, lo importante son los datos, no el estilo:
Cantidad Precio Total
Producto1 5 3.5 17.5
Producto2 7 2.5 17.5
Precio final 35
Solución
package ejercicio_listaenlazada_3;
/**
* @param <T>
*/
public class Nodo<T> {
private T dato;
private Nodo<T> siguiente;
/**
* Constructor por defecto
*/
public Nodo(){
siguiente=null;
}
/**
* Le pasamos un dato al nodo
* @param p
*/
public Nodo(T p){
siguiente=null;
dato = p;
}
/**
* Le pasamos un dato y su siguiente nodo al nodo
* @param t Dato a insertar
* @param siguiente Su sisguiente nodo
*/
public Nodo(T t, Nodo<T> siguiente){
this.siguiente=siguiente;
public T getDato() {
return dato;
}
}
package ejercicio_listaenlazada_3;
/**
* @param <T>
*/
public class Nodo<T> {
private T dato;
private Nodo<T> siguiente;
/**
* Constructor por defecto
*/
public Nodo(){
siguiente=null;
}
/**
* Le pasamos un dato al nodo
* @param p
*/
public Nodo(T p){
siguiente=null;
dato = p;
}
/**
* Le pasamos un dato y su siguiente nodo al nodo
* @param t Dato a insertar
* @param siguiente Su sisguiente nodo
*/
public Nodo(T t, Nodo<T> siguiente){
this.siguiente=siguiente;
dato = t;
}
}
package ejercicio_listaenlazada_3;
/**
* @param <T>
* Lista enlazada simple
*/
public class ListaEnlazada<T>{
//Atributos
private Nodo<T> primero;
/**
* Constructor por defecto
*/
public ListaEnlazada(){
listaVacia();
}
/**
* Vacia la lista
*/
private void listaVacia(){
primero = null;
}
/**
* Indica si la lista esta vacia o no
* @return True = esta vacia
*/
public boolean estaVacia(){
return primero == null;
}
/**
* Inserta un objeto al principio de la lista
* @param t Dato insertado
*/
public void insertarPrimero(T t){
Nodo<T> nuevo = new Nodo<>(t);
/**
* Inserta al final de la lista un objeto
* @param t Dato insertado
*/
public void insertarUltimo(T t){
if (estaVacia()) {
insertarPrimero(t);
}else {
rec_aux = primero;
/**
* Quita el primer elemento de la lista
*/
public void quitarPrimero(){
Nodo<T> aux;
if (!estaVacia()){
aux=primero;
primero = primero.getSiguiente();
aux=null; //Lo marcamos para el recolector de basura
}
}
/**
* Quita el ultimo elemento de la lista
*/
public void quitarUltimo(){
Nodo<T> aux=primero;
if(aux.getSiguiente()==null)
//Aqi entra, si la lista tiene un elemento
listaVacia();
/**
* Devuelve el último elemento de la lista
* @return Último elemento
*/
public T devolverUltimo(){
T elemen = null;
Nodo<T> aux;
if (!estaVacia()){
aux = primero;
//Recorremos
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
}
elemen = aux.getDato();
}
return elemen;
}
/**
* Devuelve el primer elemento de la lista
* @return Primer elemento, null si esta vacia
*/
public T devolverPrimero(){
T elemen = null;
if (!estaVacia()){
elemen = primero.getDato();
}
return elemen;
}
/**
* Devuelve el número de elementos de la lista
* @return Número de elementos
*/
public int cuantosElementos(){
Nodo<T> aux;
int numElementos=0;
aux = primero;
//Recorremos
/**
* Devuelve el dato del nodo en la posicion pos
* @param pos
* @return dato del nodo en la posicion indicada
*/
public T devolverDato(int pos){
Nodo<T> aux=primero;
int cont=0;
T dato=null;
if(pos<0 || pos>=cuantosElementos()){
System.out.println(“La posicion insertada no es correcta”);
}else{
//recorremos
while(aux!=null){
if (pos == cont){
//Cogemos el dato
dato=aux.getDato();
}
aux=aux.getSiguiente();
cont++;
}
}
return dato;
/**
* Devuelve el nodo de la posicion indicada
* @param pos
* @return Nodo de la posicion indicada
*/
public Nodo<T> devolverNodo(int pos){
Nodo<T> aux=primero;
int cont=0;
if(pos<0 || pos>=cuantosElementos()){
System.out.println(“La posicion insertada no es correcta”);
}else{
//recorremos
while(aux!=null){
if (pos == cont){
//Devuelvo aux, con esto salimos de la función
return aux;
}
}
}
return aux;
/**
* Inserta un nuevo nodo en la posicion indicada con el su dato
* @param pos
* @param dato
*/
public void introducirDato(int pos, T dato){
Nodo<T> aux=primero;
Nodo<T> auxDato=null; //Debemos crear un nodo para insetar el dato
Nodo<T> anterior=primero; //Debemos crear un nodo para insetar el
dato
int contador=0;
if(pos<0 || pos>cuantosElementos()){
System.out.println(“La posicion insertada no es correcta”);
}else{
if(pos==0){
insertarPrimero(dato);
}else if(pos==cuantosElementos()){
insertarUltimo(dato);
}else{
//Recorremos
while(aux!=null){
if (pos == contador){
//Creo el nodo
auxDato=new Nodo<>(dato, aux);
//El siguiente del anterior a aux es auxDato
anterior.setSiguiente(auxDato);
}
//Actualizo anterior
anterior=aux;
contador++;
aux=aux.getSiguiente(); //Actualizo siguiente
}
}
}
/**
if(pos<0 || pos>=cuantosElementos()){
System.out.println(“La posicion insertada no es correcta”);
}else{
//Recorremos
while(aux!=null){
if (pos == cont){
//Modificamos el dato directamente
aux.setDato(dato);
}
cont++;
aux=aux.getSiguiente(); //Actualizamos
}
}
/**
* Borra un elemento de la lista
* @param pos Posición de la lista que queremos borrar
*/
public void borraPosicion(int pos){
Nodo<T> aux=primero;
Nodo<T> anterior=null;
int contador=0;
if(pos<0 || pos>=cuantosElementos()){
System.out.println(“La posicion insertada no es correcta”);
}else{
while(aux!=null){
if (pos == contador){
if (anterior==null){
primero = primero.getSiguiente();
}else {
//Actualizamos el anterior
anterior.setSiguiente(aux.getSiguiente());
}
aux=null;
}else{
anterior=aux;
aux=aux.getSiguiente();
contador++;
}
}
}
}
/**
T dato=devolverPrimero();
quitarPrimero();
return dato;
}
/**
* Indica la posición del primer dato que se encuentre
* @param t dato buscado
* @return Posición del dato buscado, -1 si no se encuentra o esta vacia
*/
public int indexOf (T t){
Nodo<T> aux=primero;
if (estaVacia()){
return -1;
}else{
int contador=0;
boolean encontrado=false;
/**
* Indica la posición del primer dato desde la posicion indicada
* @param t dato buscado
* @param pos
* @return Posición del dato buscado, -1 si no se encuentra o esta vacia
*/
public int indexOf (T t, int pos){
Nodo<T> aux;
if (estaVacia()){
return -1;
}else{
/**
* Indica si un dato existe en la lista
* @param t Dato a comprobar
* @return Si el dato existe, devuelve true
*/
public boolean datoExistente(T t){
boolean existe=false;
Nodo<T> aux=primero;
if(aux.getDato().equals(t)){
existe=true;
}
//Actualizamos
aux=aux.getSiguiente();
}
return existe;
}
/**
* Muestra el contenido de la lista
*/
public void mostrar(){
System.out.println(“Contenido de la lista”);
System.out.println(“---------------------”);
while(aux!=null){
System.out.println(aux.getDato());//mostramos el dato
aux=aux.getSiguiente();
}
/**
* Devuelve el contenido de la lista en un String
* @return contenido de la lista
*/
@Override
public String toString(){
String contenido=””;
Nodo<T> aux=primero;
while(aux!=null){
contenido=aux.getDato()+”\n”; //guardamos el dato
aux=aux.getSiguiente();
}
return contenido;
}
}
package ejercicio_listaenlazada_3;
/**
public class SupermercadoApp {
//Recorremos la lista
for(int i=0;!productos.estaVacia();i++){
productoActual=productos.devolverYBorrarPrimero();
precioTotal+=productoActual.precioFinal();
ticket+=”Producto”+(i+1)+”\t”+productoActual.getCantidad()+
“\t”+productoActual.getPrecio()+
“\t”+productoActual.precioFinal()+”\n”;
System.out.println(ticket);
/**
* Genera productos que se almacenan en la lista
* @param lista
*/
public static void generarProductos(ListaEnlazada<Producto> lista){
int numeroPersonas=generaNumeroAleatorio(1,8);
int cantidad;
double precio;
for(int i=0;i<numeroPersonas;i++){
cantidad=generaNumeroAleatorio(1,10);;
precio=generaNumeroRealAleatorio(0.05, 50);
lista.insertarUltimo(new Producto(cantidad, precio));
}
/**
* Genera un numero aleatorio entre dos numeros.
* Entre el minimo y el maximo incluidos
* @param minimo Número mínimo
* @param maximo Número máximo
* @return Número entre minimo y maximo
*/
public static int generaNumeroAleatorio(int minimo, int maximo){
int num=(int)Math.floor(Math.random()*(minimo-
(maximo+1))+(maximo+1));
return num;
}
/**
* Genera un numero aleatorio entre dos numeros reales.
* Entre el minimo y el maximo incluidos
* Devuelve un numero con dos decimales.
* @param minimo Número mínimo
* @param maximo Número máximo
* @return Número entre minimo y maximo
*/
public static double generaNumeroRealAleatorio(double minimo, double
maximo){
double num=Math.rint(Math.floor(Math.random()*(minimo-((maximo*10
0)+1))+((maximo*100)+1)))/100;
return num;
1. Realiza una pila utilizando una lista enlazada como estructura de datos.
La pila debe permitir:
a. - Insertar un objeto en la pila (push).
b. - Recuperar un objeto de la pila (pop).
c. - Obtener el objeto de la cima (top) de la pila, sin extraerlo.
d. -Averiguar si hay algún objeto almacenado en la pila.
e. - Devolver el número de objetos almacenados en la pila.
Soluciòn
/*
* LinkedStack.java
*
*/
class Node {
Object elem;
Node Next;
public Node(Object o) {
elem = o;
Next = null;
}
}
Node end;
int size;
public LinkedStack() {
end = null;
size = 0;
}
return size;
}
if (end == null)
return null;
else
return end.elem;
}
} // class LinkedStack
2. Realiza una cola utilizando una lista enlazada como estructura de datos.
La cola debe permitir:
a. - Insertar un objeto en la cola (enqueue).
b. - Recuperar un objeto de la cola (dequeue).
c. - Obtener el primer objeto (first) de la cola, sin extraerlo.
d. - Averiguar si hay algún objeto almacenado en la cola (isEmpty).
e. - Devolver el número de objetos almacenados en la cola (size).
Soluciòn
/*
* LinkedQueue.java
*
*/
class Node {
Object elem;
Node Next;
public Node(Object o) {
elem = o;
Next = null;
}
}
Node first;
Node end;
int size;
public LinkedQueue() {
} // class LinkedQueue
clase 3 Habiendo trabajado con las estructuras de datos dinámica lineales, ya estamos
conclusiones listos para afrontar, estructuras no lineales.
clase 4 Árboles
tema 1
Miremos la imagen
¿Qué podemos ver? Sí, no se equivoca, es un árbol. Ahora le pido que se detenga
en el árbol, el mismo tiene raíz, ramas, si se le dan los cuidados habituales crece
de una manera armoniosa, es decir no hay una rama que crezca más que otra
todos los niveles van adquiriendo mayor tamaño, de una manera proporcional.
Resulta que en informática, existe una estructura de datos que tiene el mismo
comportamiento. Por esa causa se denomina árbol. Es una estructura de datos
dinámica y no lineal.
Gráficamente lo podemos ver así:
Tipos de Nodos
Topología de Nodos
Todos los árboles tienen cierta manera de crecer y ello define un camino, profun-
didad y altura de los mismos. Veamos de qué se trata esto:
Veamos algunos ejemplos gráficos para tener una idea conceptual de lo que esta-
mos hablando.
● Árboles AVL: están siempre equilibrados de tal modo que para todos los
nodos, la altura de la rama izquierda no difiere en más de una unidad de
la altura de la rama derecha o viceversa.
Recorridos de Árboles
Preorden:
1. Visitar la Raíz
2. Recorrer el subárbol izquierdo
3. Recorrer el subárbol derecho
Postorden:
1. Recorrer el subárbol izquierdo
2. Recorrer el subárbol derecho
3. Visitar la raíz
https://www.youtube.com/watch?v=Vsuo0eKJHEQ
package pruebaarbol;
import pruebaarbol.model.Nodo;
public class Pruebaarbol {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Se asignan los valores a los nodos = 1,2,3,4,5 y 6 dentro del arbol
//Nodo raiz = 1
Nodo raiz = new Nodo(1);
//Nodo2 Izquierdo = 2
Nodo nodo2 = new Nodo(2);
//Nodo3 Derecho = 3
Nodo nodo3 = new Nodo(3);
//Se asigna el valor 6 al nodo que sera hijo del nodo 3 a la derecha
nodo3.setNodoDerecho(new Nodo(6));
//Se asigna el valor 5 al nodo que sera hijo del nodo 3 a la izquierda
nodo3.setNodoIzquierdo(new Nodo(5));
//Se asigna el valor 4 al nodo que sera hijo del nodo 4 a la izquierda
nodo2.setNodoIzquierdo(new Nodo(4));
//Metodo Preorden
private static void preOrden(Nodo raiz) {
if (raiz != null) {
System.out.print(raiz.getDato() + “ - “);
preOrden(raiz.getNodoIzquierdo());
preOrden(raiz.getNodoDerecho());
}
}
//Metodo Inorden
private static void inorden(Nodo raiz) {
if (raiz != null) {
inorden(raiz.getNodoIzquierdo());
System.out.print(raiz.getDato()+ “ - “);
inorden(raiz.getNodoDerecho());
}
}
//Metodo PostOrden
private static void posOrden(Nodo raiz) {
if (raiz != null) {
posOrden(raiz.getNodoIzquierdo());
posOrden(raiz.getNodoDerecho());
System.out.print(raiz.getDato() + “ - “);
}
}
Actividad
Resulta que en informática, existe una estructura de datos que tiene el mismo
comportamiento. Se denomina grafo. Es una estructura de datos dinámica y no
lineal.
Partes de un Grafo
TIPOS DE GRAFOS
● Constructores de Grafo
RECORRIDOS DE GRAFOS
Profundidad
Amplitud
Ejemplo de Uso
Esta vez vamos a practicar pero pensando en el examen final, por ese motivo,
realizaremos con una serie de ejercicios de orden teórico - práctico. Los destina-
dos a examen
Por ello vamos a analizar el caso de Facebook. Mire atentamente esta imagen
clase 4
claves de corrección Actividad 1: Marque con una cruz la respuesta correcta
clase 4 Con esta clase hemos visto la mayoría de las estructuras de datos que son de
conclusiones utilidad a la hora de desarrollar una aplicación. Cuando nos piden un desarrollo a
veces es necesario decidir por un tipo de estructura o bien realizar una combina-
ción de algunas de ellas.
Espero que haya sido de utilidad, pues a partir de ahora las vamos a usar.
clase 5
Tipo de ordenamientos
tema 1
Para empezar esta clase, miremos estas imágenes:
¿En cuál de las dos situaciones encontraríamos más rápido un juguete? Seguro
que respondieron lo mismo.
La imagen que muestra cierto orden y criterio, permite identificar más rápido el
objeto y de esa manera la búsqueda es más eficiente.
Ordenamiento de “Burbuja”
Tomamos los primeros dos elementos, se los compara según el criterio de orden
y si no están ordenados se intercambian los lugares:
Actividad 1: ¡A trabajar!
Con la lista de valores que tiene este ítem y las imágenes realice
Actividad el resto de las pasadas (puede usar imágenes).
Es una mejora de burbuja, hace dos recorridos. Uno de inicio a fin y otro de fin a
inicio, eso me asegura que hace la mitad de las comparaciones o eso pretende.
Como hicimos con el método anterior observemos las imágenes que siguen.
Comenzamos con una lista de números desordenada:
Una vez que hizo la primera pasada de izquierda a derecha, luego lo hace de
derecha a izquierda.
Se selecciona el segundo dato como clave y se lo compara con los valores ubi-
cados a su izquierda y se inserta en el lugar correspondiente según un criterio
(menor que, por ejemplo)
Debemos destacar que los criterios de ordenamientos por casillero deberían ser
los mismos, pues en caso contrario se produciría más desorden que ordenar. Es
decir todos de menor a mayor o todos de mayor a menor.
Primero se debe averiguar cuál es el intervalo dentro del que están los datos a
ordenar (valores mínimo y máximo). Luego se crea un vector de números ente-
ros con tantos elementos como valores haya en el intervalo [mínimo, máximo],
y a cada elemento se le da el valor 0 (0 apariciones). A partir de ahí se recorren
todos los elementos a ordenar y se cuenta el número de apariciones de cada
elemento (usando el vector que hemos creado). Para terminar debemos recorrer
este vector para tener todos los elementos ordenados.
clase 5
tema 2 Tipo de ordenamientos en Java
Ordenamiento de “Burbuja”
Dijimos que funciona comparando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambiándolos de posición si están en el orden equivocado.
Se debe revisar varias veces toda la lista hasta que no se necesiten más inter-
cambios, lo cual significa que la lista está ordenada.
El código para ordenar un array sería:
Es una mejora del burbuja, hace dos recorridos. Uno de inicio a fin y otro de fin a
inicio, eso me asegura que hace la mitad de las comparaciones o eso pretende.
Como hicimos con el método anterior observemos las imágenes que siguen.
Veamos pues su código:
Primero se debe averiguar cuál es el intervalo dentro del que están los datos a
ordenar (valores mínimo y máximo). Luego se crea un vector de números ente-
ros con tantos elementos como valores haya en el intervalo [mínimo, máximo],
y a cada elemento se le da el valor 0 (0 apariciones). A partir de ahí se recorren
todos los elementos a ordenar y se cuenta el número de apariciones de cada
elemento (usando el vector que hemos creado). Para terminar debemos recorrer
este vector para tener todos los elementos ordenados.
public ArbolBinarioOrdenado() {
raiz=null;
}
Actividad
clase 5 Practicando
tema 3 En este momento vamos a comenzar a practicar. Resuelva el siguiente caso:
Enunciado:
Actividad Se pide que realice un programa ordenador de arreglos. El mismo
consiste en la carga de un vector, que se debe mostrar el conte-
nido del mismo, agregar un elemento al vector y vaciarlo.
Por otra parte debe presentar un menú de opciones con los
siguientes métodos de ordenamiento:
“1. Burbuja Derecha Izquierda”
“2. Burbuja de derecha a Izquierda”
“3. Inserción Directa”
“4. Selección Directa”
“5. Metodo Shell”
“6. Ordenamiento rápido”
LECTURA COMPLEMENTARIA
● Para poder afrontar los ejercicios, deben haber leído tema
1 y tema 2 de esta clase.
Leer ● Si quieren profundizar les recomiendo lean del material
complementario Weiss, Mark Allen. Estructuras De
Datos En Java. Pearson Educación, 2013.
clase 5 Actividad 1: con la lista de valores que tiene este ítem y las imágenes realice el
claves de corrección resto de las pasadas (puede usar imágenes).
Solución
Pasada 2
Pasada 4
Actividad 3: ¡A resolver!
}
public static void Insercion (int[] vector) {
for (int i=1; i < vector.length; i++) {
int aux = vector[i];
int j;
for (j=i-1; j > =0 && vector[j] > aux; j--){
vector[j+1] = vector[j];
}
vector[j+1] = aux;
}
}
}
Solución
}
public static void Burbuja(int[]matrix,String[]equipos){
int temp;
String tempe;
for(int i=1;i < matrix.length;i++){
for (int j=0 ; j < matrix.length- 1; j++){
if (matrix[j] < matrix[j+1]){
temp = matrix[j];
matrix[j] = matrix[j+1];
matrix[j+1] = temp;
tempe = equipos[j];
equipos[j] = equipos[j+1];
equipos[j+1] = tempe;
}
}
}
}
//a = Inicio ; b = Final
public static void Rapido(int matrix[], int a, int b){
matrix = new int[matrix.length];
int buf;
int from = a;
int to = b;
int pivot = matrix[(from+to)/2];
do{
while(matrix[from] < pivot){
from++;
}
while(matrix[to] > pivot){
to--;
}
if(from < = to){
buf = matrix[from];
matrix[from] = matrix[to];
matrix[to] = buf;
from++; to--;
}
Actividad: Ordenar [50, 26, 7, 9, 15, 27] usando el método de ordenamiento que
desee.
clase 5 En esta clase pudimos ver que no siempre se usa el mismo algoritmo de ordena-
conclusiones miento, pues dada la situación, los datos o el desarrollo a veces el que es más
eficiente en un caso, no lo es en otro.
Luego de ver este audiovisual, le habrá quedado claro, que cuando trabajamos
con encapsulamiento, herencia y polimorfismo, estamos dentro del paradigma
orientado a objetos (ver IPOO)
Para ello vamos a retomar algunos conceptos básicos vistos en la materia IPOO
de la carrera, los repasaremos y así podremos avanzar.
Una vez que hemos repasado las bases, vamos a encarar el tema de la clase.
Ahora definiremos los términos más importantes:
Abstracción
Encapsulamiento
Supongamos que creamos una clase, una serie de programadores tienen acceso
a dicha clase y la utilizan a su antojo, luego dicha clase comienza a comportarse
de una manera inesperada debido a que los valores que algunas variables han
tomado no fueron anticipados lo cual genera ciertas dificultades y para corregir el
problema se crea una versión más nueva de dicha clase.
En la POO las clases no se encuentran aisladas, sino que pueden interactuar con
otras clases compartiendo atributos y métodos que puedan existir entre estas.
Por ejemplo la clase CELULAR hereda a la clase CELULAR_NUEVOy CELU-
LAR_MALOGRADO. CELULAR tendría los datos comunes entre ambos.
El diagrama de clases y el resultado del test son del tipo que mostramos a con-
tinuación:
https://www.youtube.com/watch?time_
continue=64&v=FqQSwOSC830
Qué bueno es ejercitar, eso nos permite fortalecer, mente y espíritu. Si somos
desarrolladores practicar es base de nuestra formación.
Actividad 3: ¡A ejercitar!
Actividad Modifica la clase de prueba, para utilizar una única línea para
imprimirlo todo, metiendo la instrucción en un método
clase 6
claves de corrección Actividad 1: Productos frescos, productos refrigerados y productos conge-
lados
package comidaHerencia;
package comidaHerencia;
package comidaHerencia;
package comidaHerencia;
Solución
Actividad 3: ¡A ejercitar!
Modifica la clase de prueba, para utilizar una única línea para imprimirlo todo,
metiendo la instrucción en un método
Solución
Ver que se ha podido hacer, porque todos los objetos descienden de Figura, y los
métodos getAncho(), getAlto(), y area(), son métodos definidos en la clase padre.
Actividad 4: A trabajar
Solución
Cree la clase Docente dentro de un paquete demo que tenga como atributos pri-
vados: nombre, apellido, tipo (ciencias y letras), horas:
- Un constructor público que inicialice a todos los atributos.
- Métodos de acceso: set/get para los atributos.
- Un método que retorne el nombre completo (nombre y apellido)
- Un método que retorne el suelto Bruto (“ciencia”=S/3 , “letras”= S/5 por horas)
- Un método que retorne el descuento del 0.10
- Un método que retorne el sueldo neto
Solución
package demo;
public class Docente{
private String nombre, apellido, tipo;
private int horas;
}
public double getDescuento (){
return 0.10* getSueldoBruto ();
}
}
Actividad 6: Investiga, responde y justifica.
clase 6
conclusiones Durante esta clase hemos trabajado con conceptos importantes de la POO. La
misma nos permite percibir el mundo que nos rodea, de otra manera a la hora de
interpretarlo para un desarrollo de software.
Dado que la materia IPOO trabajó las ideas conceptuales de esta forma de pro-
gramación, en P-III veremos la forma de codificar dichos conceptos.
clase 7
Conceptos
tema 1
Generalidades
Cada persona tiene alguna cuestión con las cosas que las rodea. Algunos tienen
afinidad por las estampillas, otros por los trofeos, otros por los juguetes.
Como pueden ver en la imagen, para armar una colección, los objetos deben
compartir ciertas características.
Las colecciones en Java son un ejemplo claro de implementación de código reu-
tilizable utilizando un lenguaje orientado a objetos. Podemos decir que todas las
colecciones son genéricas y que los tipos abstractos de datos se definen como
interfaces.
Cuando detectamos un comportamiento común a varias implementaciones pode-
mos abstraer en clases.
Las mencionadas anteriormente son solo algunas de las cuestiones que vamos
a ver en esta clase.
Operaciones
Existen clases que se implementan con la interfaz List <T>. Las mismas son:
Copia de colecciones
Ahora veamos un ejemplo del uso de TreeSet que nos permite armar conjuntos
ordenados, usando árbol binario balanceado.
Las colecciones de Java son iterables, es decir, podemos recorrer todos sus ele-
mentos. Son utilizadas para que el código que realiza el recorrido no se detenga
en particularidades de la estructura de datos: lista enlazada, lista basada en
arrays, que está recorriendo.
A los objetos iterables se les exige que creen objetos iterador (Iterator) para
realizar la iteración. Los arrays y la interfaz Collection son iterables.
Si nos detenemos en Iterator<T> posee algunos métodos interesantes.
● hasNext(): indica si quedan elementos en la iteración.
● next(): devuelve el siguiente elemento de la iteración.
● remove(): remueve el último elemento que devuelve la iteración.
Este tipo de recorridos, permite recorrer el objeto iterable sin manejar el objeto
iterador. Es muy utilizada.
https://www.youtube.com/watch?v=Q9YlFOr-htk
clase 7 Practicando
tema 2
Mayor Práctica = Mejor desarrollo
Las colecciones son de mucha utilidad, por lo cual vamos a hacer una serie de
ejercicios sobre el tema.
Les recomiendo la lectura del tema 1, pues allí encontrarán todo lo necesario para
afrontar cada uno de los enunciados.
Actividad
En esta oportunidad les presentamos ejercicios para que practiquen. Los mismos
no tienen claves de corrección. Les sugerimos consultarlos con su tutor
1. Crea una clase Cuenta con los métodos ingreso, reintegro y transferencia. La
clase contendrá un constructor por defecto, un constructor con parámetros, un
constructor copia y los métodos getters y setters.
2. Crea una clase Contador con los métodos para incrementar y decrementar el
contador. La clase contendrá un constructor por defecto, un constructor con pará-
metros, un constructor copia y los métodos getters y setters.
3. Crea una clase Libro con los métodos préstamo, devolución y toString. La
clase contendrá un constructor por defecto, un constructor con parámetros y los
métodos getters y setters.
4. Crea una clase Fraccion con métodos para sumar, restar, multiplicar y dividir
fracciones.
5. Crea una clase Complejo con métodos para sumar, restar, multiplicar y dividir
números complejos.
8. Crea una clase NIF. Los atributos serán el número de DNI y la letra. La clase
contendrá un método privado que calcule la letra del NIF a partir del número de
DNI
Solución
package Ejercicio;
import java.util.*;
public class colegio {
Map alumno = new HashMap();
public void addAlumno(String nac){
if (alumno.containsKey(nac)){
Integer i = alumno.get(nac);
alumno.remove(nac);
alumno.put(nac, i++);
}
else{
alumno.put(nac,1);
}
}
public void showAll(){
Iterator it = alumno.keySet().iterator();
while (it.hasNext()){
Integer key = (Integer) it.next();
System.out.println(“Numero de alumno: “+key+”
Nacionalidad alumno: “+alumno.get(key));
}
}
public void showNacionalidad(){
for (String k :alumno.keySet()){
System.out.println(k+”->”+alumno.get(k));
}
}
public int cuantos(){
return alumno.size();
}
Solución
package javaList;
import java.util.*;
public class ejercicio2 {
public static void main(String[] args) {
ArrayList listDias = new ArrayList();
listDias.add(“Lunes”);
listDias.add(“Martes”);
listDias.add(“Miercoles”);
listDias.add(“Jueves”);
listDias.add(“Viernes”);
listDias.add(“Sabado”);
listDias.add(“Domingo”);
listDias.add(4,”Juernes”);
ArrayList listaDos = new ArrayList(listDias);
listDias.addAll(listaDos);
System.out.println(listDias.get(3)+”, “+list-
Dias.get(4));
System.out.println(listDias.get(0)+”, “+list-
Dias.get(listDias.size()-1));
System.out.println(listDias);
listDias.remove(“Juernes”);
if(listDias.remove(“Juernes”)){
System.out.println(“Borrado”);
}
else{
System.out.println(“No existe”);
}
Collections.sort(listDias);
System.out.println(listDias);
listDias.clear();
System.out.println(listDias);
}
Solución
package ejercicio3;
import java.util.*;
public class JavaSets {
HashSet FCBarcelona = new HashSet<>();
public void add(){
FCBarcelona.add(“Jordi Alba”);
FCBarcelona.add(“Pique”);
FCBarcelona.add(“Busquets”);
FCBarcelona.add(“Iniesta”);
FCBarcelona.add(“Messi”);
}
HashSet jugadores = new HashSet<>();
public void add2(){
jugadores.add(“Pique”);
jugadores.add(“Busquets”);
}
public void ShowBarcelona(){
int i = 0;
while(it.hasNext()){
if(FCBarcelona.contains(it2.next())){
System.out.println(it.next()+” está
en el conjunto”);
}
else{
System.out.println(it.next()+” no
está en el conjunto”);
}
}
}
package ejercicio3;
Barcelona.add();
Barcelona.contains();
Barcelona.ShowBarcelona();
Barcelona.add2();
Barcelona.jugadoresEnBarcelona();
Barcelona.ShowJugadores();
Barcelona.unir();
Barcelona.borrar();
Barcelona.ShowJugadores();
Barcelona.ShowBarcelona();
}
}
clase 7 Conclusión
conclusiones
Durante esta clase hemos visto una manera económica de reutilizar el código. La
idea es que como desarrolladores logremos módulos y código coleccionables, de
tal manera que con pequeños ajustes se adapten a la nueva situación.
Espero que esta clase les haya sido de utilidad. Nos vemos en la próxima.
En esta clase veremos el manejo de archivos en Java. Los archivos nos permiten
tener los datos a disposición, sin depender de otros factores, como energía eléc-
trica o estado general del hardware.
Ahora bien, al manejar archivos, también debemos tener en cuenta que se pueden
producir errores y por tal motivo Java nos provee de un mecanismo de informa-
ción, que nos permite salvar situaciones complicadas.
clase 8
tema 1 Conceptos y Ejemplos
En la mayoría de los casos tendremos que guardar los datos de nuestro desarro-
llo para poderlos recuperar más adelante. Hay varias formas de hacerlo. Una de
ellas es el uso de archivos.
Un primer tipo de archivo, son los de texto. Con ellos podremos crear desde un
programa en Java y leer con cualquier editor de textos, o bien crear con un editor
de textos y leer desde un programa en Java, o bien usar un programa tanto para
leer como para escribir.
Además, para cerrar el archivo, usaremos “close”, mientras que para abrir usare-
mos un BufferedWriter, que se apoya en un FileWriter, que a su vez usa un “File”
al que se le indica el nombre del archivo. Veamos:
import java.io.*;
class FicheroTextoEscribir
{
public static void main( String[]
) args
{
System.out.println(“Volcando a fichero de texto...”);
try
{
BufferedWriter ficheroSalida = new BufferedWriter(
new FileWriter(new File(“fichero.txt”)));
ficheroSalida.write(“Hola”);
ficheroSalida.newLine();
ficheroSalida.write(“Este es”);
ficheroSalida.write(“ un fichero de texto”);
ficheroSalida.newLine();
ficheroSalida.close();
}
catch (IOException errorDeFichero)
{
System.out.println(
“Ha habido problemas: “ +
errorDeFichero.getMessage() );
}
Para leer de un archivo de texto usaremos “readLine()”, que nos devolverá una
cadena un “string”. Si ese string es null, significa que el archivo llegó al fin y no se
ha podido leer. Por eso, lo habitual es usar un “while” para leer todo el contenido
de un archivo.
Usaremos un BufferedReader, que se apoyará en un FileReader:
import java.io.*;
class FicheroTextoLeer
{
if (! (new File(“fichero.txt”)).exists()
)
{
System.out.println(“No he encontrado fichero.txt”);
return;
}
try
{
BufferedReader ficheroEntrada = new BufferedReader(
new FileReader(new File(“fichero.txt”)));
String linea=null;
while ((linea=ficheroEntrada.readLine()) != null) {
System.out.println(linea);
}
ficheroEntrada.close();
}
catch (IOException errorDeFichero)
{
System.out.println(
“Ha habido problemas: “ +
errorDeFichero.getMessage() );
}
}
}
import java.io.*;
class FicheroBinarioLeer
{
public static void main( String[]
) args
{
// Cantidad de “a” en un fichero de cualquier tipo
// Mirando errores solo con try-catch
System.out.println(“Contando \”a\”...”);
int contador = 0;
try
{
FileInputStream ficheroEntrada2 =
new FileInputStream(new File(“fichero.bin”));
int dato;
while ((dato = ficheroEntrada2.read()) != -1) {
if (dato == 97) // Codigo ASCII de “a”
contador++;
}
ficheroEntrada2.close();
}
catch (Exception errorDeFichero)
{
System.out.println(
“Ha habido problemas: “ +
errorDeFichero.getMessage() );
}
System.out.println(“Cantidad de \”a\”: “ + contador);
}
}
Si tenemos que leer muchos datos de un archivo de cualquier tipo, acceder byte
a byte puede resultar muy lento. Lo que se podría hacer es usar un array de bytes
de tal forma que con “read”, le podemos indicar en qué array queremos guardar
los datos y desde donde hasta donde.
import java.io.*;
class FicheroBinarioEscribir
{
try
{
InputStream ficheroEntrada3 = new FileInputStream(
new File(“fichero.in”));
OutputStream ficheroSalida3 = new FileOutputStream(
new File(“fichero2.out”));
System.out.println(“Terminado!”);
}
}
try{
//acciones
}catch(clase_maneja_excepciones variable){
//acciones
}
El código que esta dentro del bloque try produce una excepción, se interrumpe el
flujo y pasa al bloque catch, veamos un ejemplo:
import java.io.IOException;
import java.io.FileReader;
public class ExcepcionApp {
try{
//si el nombre del fichero no existe, lanza el catch
FileReader fr=new FileReader(“casa”);
import java.io.IOException;
import java.io.FileReader;
import java.io.FileNotFoundException;
public class ExcepcionApp {
FileReader fr=null;
try{
//si el nombre del fichero no existe, lanza el catch
fr=new FileReader(“casa”);
Podemos añadir un bloque finally después del bloque catch, este nos permitirá
que se produzca o no una excepción se ejecute lo que haya en este bloque.
Veamos un ejemplo:
import java.io.IOException;
import java.io.FileReader;
public class ExcepcionApp {
FileReader fr=null;
try{
//si el nombre del fichero no existe, lanza el catch
fr=new FileReader(“casa”);
try{
prueba();
}catch(IOException e){
System.out.println(“Error E/S: el fichero no
existe”);
}
}
public static void prueba() throws IOException{
}
}
https://www.youtube.com/watch?v=U3l9Y0vvOJg
clase 8
Prácticas
tema 2
Actividad
5. Crea una aplicación que pida por teclado un número de números alea-
torios enteros positivos y la ruta de un fichero. Este fichero contendrá la
cantidad de números aleatorios enteros positivos que se ha pedido por
teclado. Escribe los números usando un DataOutputStream y muestra
por pantalla estos números leyéndolos con un DataInputStream. El rango
de los números aleatorios estará entre 0 y 100, incluyendo el 100. Cada
vez que ejecutemos la aplicación añadiremos números al fichero sin
borrar los anteriores, es decir, si cuando creo el fichero añado 10 núme-
ros y después añado otros 10 al mismo, en el fichero habrá 20 números
que serán mostrados por pantalla.
clase 8
claves de corrección
Actividad 1: Actividades de repaso
Solución
import java.io.FileReader;
import java.io.IOException;
public class Ejercicio1App {
public static void main(String[] args) {
final String nomFichero=”D:\pruebas.txt”;
try(FileReader fr=new FileReader (nomFichero)){
int valor=fr.read();
while(valor!=-1){
//Si el caracter es un espacio no lo escribe
if(valor!=32){
System.out.print((char)valor);
}
valor=fr.read();
}
}catch(IOException e){
System.out.println(“Problemas con el E/S “+e);
}
}
}
}catch(IOException e){
System.out.println(“Problemas en la escritura
E/S “+e);
}
}
}catch(IOException e){
System.out.println(“Problema con la E/S “+e);
}
}
3. Crea una aplicación que pida la ruta de dos ficheros de texto y de una
ruta de destino (solo la ruta, sin fichero al final). Debes copiar el contenido
de los dos ficheros en uno, este tendrá el nombre de los dos ficheros
separados por un guion bajo, este se guardara en la ruta donde le haya-
mos indicado por teclado. Para unir los ficheros en uno, crea un método
donde le pases como parámetro todas las rutas. En este método, aparte
de copiar debe comprobar que si existe el fichero de destino, nos mues-
tre un mensaje informándonos de si queremos sobrescribir el fichero. Te
recomiendo usar la clase File y JOptionPane. Por ejemplo, si tengo un
fichero A.txt con “ABC” como contenido, un fichero B.txt con “DEF” y una
ruta de destino D:\, el resultado sera un fichero llamado A_B.txt en la ruta
D:\ con el contenido “ABCDEF”. Puedes crear submétodos para realizar
la copia de ficheros, piensa también como podrias optimizar esta copia,
si los ficheros tuvieran mucho contenido. Recuerda que debes controlar
las excepciones que puedan aparecer. En caso de error, mostrar una
ventana de dialogo con información del error.
Solución
import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio3App {
//Creamos dos objetos File para que nos sea mas sen-
cillo manejarlos
File fichero1=new File(rutaFichero1);
File fichero2=new File(rutaFichero2);
rutaDestino+=nombreFicheroFinal;
int eleccion=-1;
if(destino.exists()){
eleccion=JOptionPane.showConfirmDialog(null,
“El fichero ya existe, ¿Quieres sobrescribir el fichero “+des-
tino.getName()+”?”,
“Sobrescribir”,
JOptionPane.OK_CANCEL_OPTION, JOp-
tionPane.INFORMATION_MESSAGE);
}
if(eleccion!=JOptionPane.CANCEL_OPTION){
/*
* Lo creamos aquí, ya que si lo hacemos arriba
* siempre existira porque se crea al abrir
el Stream
*/
}
}catch(IOException e){
JOptionPane.showMessageDialog(null, e.getMessage(),
String linea=br.readLine();
while(linea!=null){
bw.write(linea);
linea=br.readLine();
}
}
}
Solución
import java.io.*;
import javax.swing.JOptionPane;
copiaFicheros(origen, destino);
}
public static void copiaFicheros (String origen, String
destino){
}catch(IOException e){
JOptionPane.showMessageDialog(null, e.getMessage(),
“Error”, JOptionPane.ERROR_MESSAGE);
}
}
5. Crea una aplicación que pida por teclado un número de números alea-
torios enteros positivos y la ruta de un fichero. Este fichero contendrá la
cantidad de números aleatorios enteros positivos que se ha pedido por
teclado. Escribe los números usando un DataOutputStream y muestra
por pantalla estos números leyéndolos con un DataInputStream. El rango
de los números aleatorios estará entre 0 y 100, incluyendo el 100. Cada
vez que ejecutemos la aplicación añadiremos números al fichero sin
borrar los anteriores, es decir, si cuando creo el fichero añado 10 núme-
ros y después añado otros 10 al mismo, en el fichero habrá 20 números
que serán mostrados por pantalla.
Solución
import java.io.*;
import javax.swing.JOptionPane;
String ruta=JOptionPane.showInputDialog(“Escribe la
ruta del fichero”);
String numeros=JOptionPane.showInputDialog(“Escribe
el numero de numeros aleatorios”);
int numNumerosAleatorios=Integer.parseInt(numeros);
}catch(EOFException e){
System.out.println(“Fin del fichero”);
}catch(IOException e){
JOptionPane.showMessageDialog(null, “Error: “+e.
getMessage() , “Error”, JOptionPane.ERROR_MESSAGE);
}
}
public static void escribeFichero (DataOutputStream dos,
int numNumerosAleatorios) throws IOException{
}
public static void leeFichero (DataInputStream dis)
throws IOException{
Solución
import javax.swing.JOptionPane;
import java.io.*;
String matricula=JOptionPane.showInputDialog(“Introduce
la matricula”);
String marca=JOptionPane.showInputDialog(“Introduce
la marca”);
String texto=JOptionPane.showInputDialog(“Introduce
el tamaño del deposito”);
double tamañoDeposito=Double.parseDouble(texto);
String modelo=JOptionPane.showInputDialog(“Introduce
el modelo”);
muestraDatos(dis);
}catch(EOFException e){
}catch(IOException e){
String matricula,
String marca,
double tamañoDeposito,
dos.writeUTF(matricula);
dos.writeUTF(marca);
dos.writeDouble(tamañoDeposito);
dos.writeUTF(modelo);
while(true){
clase 8 En esta clase hemos visto manejo de archivos y extensiones, que nos permitió
conclusiones facilitar la tarea a la hora del procesamiento de datos para un determinado desa-
rrollo.
Trabajar con archivos, nos da la posibilidad de crear software más complejo, con
mayores prestaciones.
Obviamente esto no es todo, nos preparemos para la clase que viene, donde los
datos pueden provenir de distintas fuentes.
En esta clase vamos a trabajar la posibilidad de obtener los datos desde una base
de datos.
clase 9
Concepto. Aplicaciones. Tipos.
tema 1
Java JDBC es una API Java para conectar y ejecutar una consulta a una base
de datos. API JDBC utiliza controladores JDBC para conectarse con la base de
datos.
Antes de JDBC, ODBC API era la API de base de datos para conectar y ejecutar
consultas a una base de datos. Sin embargo, la API de ODBC utiliza controlador
ODBC que está escrito en lenguaje C. Es por ello que Java ha definido su propia
API (API JDBC) que utiliza controladores JDBC (escrito en lenguaje Java).
El driver nativo API utiliza las bibliotecas de cliente de la base de datos. El contro-
lador convierte método JDBC en llamadas nativas de la API de base de datos. No
está escrito completamente en Java.
Hay 5 pasos para conectar cualquier aplicación java con la base de datos en
Java utilizando JDBC. Son los siguientes:
● Registrar la clase controlador
● Crear de la conexión
● Declarar el objeto de consulta
● Ejecutar consultas
● Cerrar de la conexión
La creación de la conexión
Ejecutar la consulta
El método executeQuery() de la interfaz Statement se usa para hacer consultas
a la base de datos.. Este método retorna el objeto de ResultSet que nos permite
recuperar registros de la base de datos.
Cerrar la conexión
Especificaciones Importantes
Clase DriverManager
Interfaz de Conexión
Para que pueda ampliar la información de este tema con una serie
de ejemplos les facilito la siguiente webgrafía:
● https://www.adictosaltrabajo.com/tutoriales/tutorial-
basico-jdbc/
● https://www.tutorialspoint.com/jdbc/
clase 9
tema 2 Ejemplo JDBC
Java JDBC es una API Java para conectar y ejecutar una consulta a una base
de datos. API JDBC utiliza controladores JDBC para conectarse con la base de
datos.
Ahora vamos a ver dos ejemplos en MySql (recordar que en el tema anterior se
sugirió ver un enlace al respecto)
1. Incluir el jar con el Driver de la base de datos → Cada motor tiene el suyo,
descargar desde aquí http://dev.mysql.com/downloads/connector/j/#downloads
2. Cargar el driver
Ejemplo 1
Este primer ejemplo consiste en una aplicación que permite almacenar una nueva
cuenta en la base de datos siempre y cuando el código de la cuenta no esté ya en
la base de datos. En este ejemplo se usan PreparedStatements.
package ejemplo1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.JLabel;
import org.apache.log4j.Logger;
public CreaCuenta(Ventana v) {
this.v = v;
try {
// Driver para conectar con MySQL
Class.forName(“com.mysql.jdbc.Driver”);
// Conexión con la base de datos
cn = DriverManager.getConnection(“jdbc:mysql://
localhost:3306/cuentas”, “root”, “”);
String sqlBusqueda = “SELECT codigo FROM cuentas
WHERE codigo=?”;
pstBuscarCodigo = cn.prepareStatement(sqlBusqu
eda);
String sqlNuevaCuenta = “INSERT INTO cuentas
VALUES (?,?,?,?)”;
pstInsertarCuenta = cn.prepareStatement(sqlNuev
aCuenta);
@Override
public void actionPerformed(ActionEvent e) {
try {
pstBuscarCodigo.setString(1, codigo);
// Si el codigo no esta en la bd se añade la
cuenta
ResultSet rs = pstBuscarCodigo.executeQuery();
if (!rs.next()) {
pstInsertarCuenta.setString(1, codigo);
pstInsertarCuenta.setString(2, nombre);
pstInsertarCuenta.setString(3, email);
pstInsertarCuenta.setDouble(4, saldo);
pstInsertarCuenta.executeUpdate();
lbMensaje.setText(“Cuenta agregada correc-
tamente”);
} else {
lbMensaje.setText(“El codigo indicado ya
esta en la base de datos”);
}
} catch (SQLException ex) {
log.error(“Error “ + ex.getErrorCode() + “: “ +
ex.getMessage());
}
}
}
// Ejecuta la
transaccion
cn.commit();
t.setLbResultado(“Transeferencia completada.”);
} else {
// Deshace los cambios hechos dentro de la transaccion
cn.rollback();
t.setLbResultado(“Error:
La transeferencia no se ha completado.”);
}
Esta actividad es parte del Examen Final de la materia. Para poder rendir
el mismo, usted deberá completar esta actividad y subir su proyecto e
indicaciones a la plataforma.
2. Crear un objeto conexión (Connection) → Para crear este objeto hay que
indicar la situación del fichero de base de datos, el usuario y la contraseña de
dicha base de datos. El objeto conexión abre el fichero de la base de datos.
PREPARANDO NETBEANS
En este ejercicio se pide crear una pequeña aplicación de bases de datos que
permita mostrar los datos de los trabajadores almacenados en la base de datos
BBDD. Para ello vamoa seguir los siguientes pasos:
2. En la parte superior de la ventana añade un botón con el texto Ver Datos Tra-
bajadores que se llame btnVerDatos.
● https://www.youtube.com/watch?v=Nt9gfoM7UJQ
● https://www.youtube.com/watch?v=nbAYB6HyTQI
4. Ahora lo único que tiene que hacer es copiar el archivo de base de datos
BBDD.MDB que se encuentra en Mis Documentos dentro de la carpeta Base.
(debe crear una base de datos en Access con ese nombre para poder trabajar en
este proyecto)
6. Volvemos a NetBeans.
Cuando se realiza una consulta a una base, la idea es que devuelva un conjunto
de valores solicitados, en este caso usando select * from trabajadores
order by nombre, debería traer el conjunto de trabajadores ordenados en
forma alfabética.
Por lo cual el objeto ResultSet r, trae ese resultado.
El resultado será:
Al ejecutar el programa:
CONCLUSIÓN
Para crear un programa Java que pueda usar una base de datos será necesario
realizar los siguientes pasos:
Para que pueda ampliar la información de este tema con una serie
de ejemplos les facilito la siguiente webgrafía:
● https://www.adictosaltrabajo.com/tutoriales/tutorial-
basico-jdbc/
● https://www.tutorialspoint.com/jdbc/
clase 9 En esta oportunidad, no contamos con clave de corrección, pues todas las prác-
claves de corrección ticas y actividades están resueltas dentro de la clase.
clase 9
conclusiones Hemos visto a manera de introducción, el tratamiento de datos a través de bases
de datos JDBC.
clase 10
Conceptos y Ejemplos
tema 1
Para comenzar veamos la siguiente imagen
Este es un símbolo que nos tiene que guiar a la hora de hacer Interfaces Gráficas
de Usuario (IGUs de ahora en más).
Ahora nos vamos a concentrar en todo lo necesario en Java para lograr un IGU
apropiada para nuestro desarrollo.
Swing es una biblioteca de interfaces gráficas de usuario (GUI)
para Java. Incluida con el entorno de desarrollo de Java (JDK).
Es una extensión de otra librería gráfica más antigua llamada
Atención AWT. Los paquetes que utiliza son:
Ventanas
Para poder hacer ventanas usamos la clase JFrame. Posee los constructores:
JFrame() y JFrame(String titulo)
Una vez creado el objeto de ventana, debemos establecer su tamaño, la acción
de cierre y visualizarla.
Componentes
Los componentes son aquellas piezas de la IGU que hacen posible la existencia
de botones, rótulos, cajas de texto entre otras cosas.
Layout Managers
Podemos colocar los elementos uno a continuación de otro, usando los métodos:
GridLayout
BorderLayout
Contamos con métodos que nos permiten lograrlo. Cada componente tiene un
método llamado paintComponent, que se encarga de pintarlo en pantalla.
Para realizar un dibujo solo con heredar de un componente (normalmente un JPanel),
y sobreescribir su método paintComponent → void paintComponent(Graphics
g)
Los métodos son los siguientes:
● void drawPolygon(int[] x, int[] y, int puntos)
● void drawRect(int x, int y, int ancho, int alto)
● void fillRect(int x, int y,int ancho, int alto)
● void drawOval(int x, int y,int ancho, int alto)
● void fillOval(int x, int y,int ancho, int alto)
● void drawString(String cad, int x, int y)
● void setColor(Color c)
● void setFont(Font f)
● https://www.youtube.com/watch?v=HrEiL-2cokw
● https://www.youtube.com/watch?v=uxM30tdwIzg
● https://www.youtube.com/watch?v=7XQKvL9WKls
clase 10 Practicando
tema 2
Les recomiendo realizar las siguientes prácticas para lograr buenas inter-
faces. En el Examen Final deberán presentar sus desarrollos usando al
menos 5 IGUs.
3) Crea una mini encuesta gráfica. Daremos una serie de opciones para que el
usuario elija. La encuesta preguntará lo siguiente:
● Elige un sistema operativo (solo una opción, JRadioButton)
○ Windows
○ Linux
○ Mac
● Elige tu especialidad (pueden seleccionar ninguna o varias opciones,
JCheckBox)
○ Programación
○ Diseño gráfico
○ Administración
● Horas dedicadas en el ordenador (usaremos un slider entre 0 y 10)
Para el slider, les recomiendo usar un JLabel, que les diga qué valor tiene el
slider, usad el evento stateChanged.
● https://www.youtube.com/watch?v=HrEiL-2cokw
● https://www.youtube.com/watch?v=AY_RNiaFDzk
● https://www.youtube.com/watch?v=uxM30tdwIzg
● https://www.youtube.com/watch?v=7XQKvL9WKls
● https://www.youtube.com/watch?v=SLyosEYr4JQ
clase 10
claves de corrección
Actividad 1: Nos preparamos para el examen final
1)
Solución 1 → Pincha aquí para descargar el proyecto. Impórtalo en tu Net-
Beans.
2)
Solución 2 → Pincha aquí para descargar el proyecto. Impórtalo en tu Net-
Beans.
3)
Solución 3 → Pincha aquí para descargar el proyecto. Impórtalo en tu Net-
Beans.
4)
Solución 4 → Pincha aquí para descargar el proyecto. Impórtalo en tu Net-
Beans.
5)
Solución 5 → Pincha aquí para descargar el proyecto. Impórtalo en tu
NetBeans.
En esta parte de la materia, nos iniciaremos en el mundo de los que nos permi-
tirán hacer desarrollos para conectar a diferentes servidores web o no. Acompá-
ñenme y veamos juntos de que se trata este tema.
clase 11
Conceptos y Ejemplos.
tema 1
¿Qué son los servlets?
Los Servlets no tienen una interfaz gráfica. Estos pueden incluirse en servidores
que soporten la API de Servlet. Por ejemplo, un servlet podría ser responsable
del procesamiento de datos desde un formulario en HTML, registrar la transac-
ción, actualizar una base de datos, contactar algún sistema remoto y retornar un
documento dinámico o redirigir a otro servlet u alguna otra cosa.
Como podemos ver en la imagen, el usuario hace una petición al servidor vía
su aplicación, el server se conecta con su serlet, provee la página solicitada, la
devuelve al servidor y el usuario lo solicitado.
Para poder lograr esto se deben cumplir algunos requisitos:
● El servidor debe:
○ Contar con una máquina virtual Java.
○ Soportar la API de los servlets Java.
■ Servidores capaces de ejecutar servlets:
● Apache Tomcat
● Java Web Server
● O’Reilly WebSite Professional
● Lotus Domino Go WebServer
● Novell IntraNetWare
● IBM Internet Connection Server – Otros
Sin ahondar en detalles, les mostraré paso a paso como generar un SERVLET
sencillo, queda en ustedes profundizar en función de las necesidades de sus
desarrollos.
10. Finalmente pulsamos el botón Run que aparece en la parte superior para
ejecutar el servlet.
11. Aparecerá:
Para ver otros ejemplos les facilito los siguientes enlaces a audio-
visuales sobre Servlet y sus aplicaciones:
● https://www.youtube.com/watch?v=CZzyi_0ImwI
clase 11
tema 2
Prácticas
Usamos los mismos métodos que en el ejercicio anterior, pero la tabla es tabla-
Matriculas. El método tablaMatriculas muestra el resultado de la consulta reali-
zada.
clase 11
claves de corrección Prácticas
En esta última clase, los voy a introducir al mundo J2EE, a las aplicaciones
empresariales escalable.
clase 12
¿Qué es J2EE?
tema 1
Las aplicaciones web J2EE y los webservices son parte de las aplicaciones web
orientadas al negocio (Oracle BPM y ADF). J2EE (Java 2 Enterprise Edition), es
una plataforma para el desarrollo y la implementación de aplicaciones empresa-
riales multinivel. Esta plataforma se apoya en el lenguaje Java y proporciona:
● Componentes Web :
○ Tales como Servlets (Componente web dinámico)
○ JSP (Java ServerPages: Creación de páginas web dinámicas).
● Componentes Activos:
○ EJB (Enterprise Java Beans : Manejo de persistencia y transac-
ción).
● Servicios:
○ JDBC
○ JTA
○ JNDI
○ JMS
○ JavaMail
○ XML
Ejemplo 1
Software necesario
Comencemos
Una nueva clase de entidad que debe representar Guest en la base de datos fue
creada en el proyecto ( debajo Source Packages > guest).
Utilizar copiar y pegar para reemplazar el nuevo contenido del archivo fuente con
el siguiente código:
package guest;
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@ E n t i t y
public class Guest implements Serializable {
private static final long serialVersionUID = 1L;
// Persistent Fields:
@Id @GeneratedValue
Long id;
private String name;
private Date signingDate;
// Constructors:
public Guest() {
}
// String Representation:
@Override
public String toString() {
return name + “ (signed on “ + signingDate + “)”;
}
}
A default JPA persistence unit (with default settings) was generated in a persis-
tence.xml file that was added to the project (under Configuration Files).
Open the persistence.xml file in a text editor (by right clicking and selecting Edit or
by double click and then moving to the Source or XML tab in the editor window).
Use copy and paste to replace the default content of the persistence.xml file with
the following new content:
</persistence>
Ahora reemplace el contenido del nuevo archivo fuente con el siguiente código:
package guest;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
@ S t a t e l e s s
public class GuestDao {
// Injected database connection:
@PersistenceContext private EntityManager em;
En este paso vamos a añadir un servlet para gestionar las solicitudes libro de
visitas web:
package guest;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name=”GuestServlet”, urlPatterns={“/guest”})
public class GuestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@Override
protected void doPost(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
En este paso vamos a añadir el JSP que genera el resultado de la página libro
de visitas:
● Abrir [New JSP File] hacer clic derecho en el nodo Web Pages
● ( en la ventana [Projects] and selecting New > JSP...
● Enter guest as the jsp file name - use exactly that case sensitive
class name.
● Click Finish to create the new JSP file
Ahora reemplace el contenido del nuevo archivo JSP con el siguiente contenido:
<%@page contentType=”text/html;
charset=ISO-8859-1” pageEncoding=”ISO-8859-1”%>
<%@page import=”java.util.*,guest.Guest”%>
< h t m l >
<head>
<title>JPA Guest Book Web Application Tutorial</title>
</head>
<body>
<form method=”POST” action=”guest”>
<hr><ol> <%
@SuppressWarnings(“unchecked”)
List<Guest> guests = (List<Guest>)
r e q u e s t . g e t A t t r i b u t e ( “ g u e s t s ” ) ;
if (guests != null) {
for (Guest guest : guests) { %>
<li> <%= guest %> </li> <%
}
} %>
</ol><hr>
<iframe src=”http://www.objectdb.com/pw.html?jee-netbeans”
frameborder=”0” scrolling=”no”
width=”100%” height=”30”> </iframe>
</body>
</html>
Actividad
Esta actividad formará parte del Examen Final, por lo tanto deberá ser
presentada en esa instancia. Esta aplicación es parte de examen.
Se pide que modifique la aplicación anterior de tal manera que, supongamos que
es un libro de visitas de la Iglesia de Candonga - Provincia de Córdoba - Argen-
tina, usted llega de visita con el guía turístico. El guía le facilita una aplicación,
donde se debe cargar:
• Nombre
• Apellido
• Dirección de Procedencia
• Edad
• Ocupación
clase 12
claves de corrección Actividad 1: Actividad final
Les facilito unos videotutoriales, que los ayudarán a integrar todos los contenidos
vistos y así hacer las modificaciones necesarias en la aplicación dada. Espero les
sea de utilidad.
● https://www.youtube.com/watch?v=BvyCo_za0s8
● https://www.youtube.com/watch?v=q10XMtDjTtg
● https://www.youtube.com/watch?v=5MKod5t_p0E
clase 12
conclusiones Hemos terminado. Espero hayan acumulado saberes para luego aplicarlos en
sus desarrollos. Recuerden que cada uno de los temas puede ampliarse, siem-
pre hay más por aprender. Todos los desarrolladores, debemos en cierta medida
aprender a buscar las fuentes documentales de cada lenguaje o software que nos
toque enfrentar.