Programación Java
Programación Java
Módulo 1
Introducción a Java
HTML5: Fundamentos Web
Introducción a Java
¿Qué es Java?
Java es una tecnología pensada para desarrollar ● Sintaxis basada en C/C++: aporta simplicidad
aplicaciones de gran envergadura, altamente ya que es una de las formas de escribir código
escalables, de gran integración con otras más reconocidas y difundidas, además,
tecnologías y muy robustas. permite incorporar rápidamente a los
programadores que conocen este lenguaje.
Sus principales características son:
● Es multiplataforma: significa que su código
● Lenguaje orientado a objetos: respeta
es portable, es decir, se puede transportar por
el paradigma de orientación a objetos,
distintas plataformas. De esta manera, es
permitiendo utilizar sus fundamentos:
posible codificar una única vez una aplicación
herencia, polimorfismo, abstracción,
y luego ejecutarla sobre cualquier plataforma
encapsulamiento, etc.
y/o sistema operativo.
Introducción a Java
Organización
Java está organizada en tres grandes áreas:
● Java Micro Edition (JME) - Mobile / Wireless: ● Java Standard Edition (JSE)- Core / Desktop:
este área tiene como objetivo el desarrollo de su propósito es el desarrollo de aplicaciones
aplicaciones móviles tales como GPS, de escritorio, similares a las aplicaciones tipo
Handhelds (por ejemplo, la conocida Palm), ventanas creadas con Visual Basic o Delphi.
celulares y otros dispositivos móviles Incluye la funcionalidad básica del lenguaje
programables. como manejo de clases, colecciones,
entrada/salida, acceso a base de datos,
manejo de sockets, hilos de ejecución, etc.
Introducción a Java
La historia
En 1990 nace Java bajo el electrodomésticos, es decir, programar una sola
diseño y la implementación de vez y que el programa generado fuera útil para
la empresa Sun Microsystems. cualquier dispositivo.
El fundador de la tecnología es
El proyecto inicial de Java fue técnicamente
James Gosling, quien la desa-
un éxito, aunque comercialmente no tuvo el
rrolló a través de una filial
rendimiento esperado y debió ser relegado
James Gosling dentro de Sun, First Person Inc.
durante unos años.
Gosling tuvo la visión inicial de construir una
lenguaje de programación capaz de ejecutar su
código sobre cualquier set de instrucciones y de
distintos procesadores. Inicialmente, el proyecto
apuntó a la programación unificada de distintos
Introducción a Java
Aparición de Internet
En el año 1993, Internet da el gran salto y pasa Adicionalmente, el lenguaje podía adaptarse
de ser una interfaz textual a una interfaz gráfica. fácilmente a las múltiples plataformas, con lo
cual surge una de las primeras aplicaciones
Java ve una oportunidad y entra fuertemente a
multiplataformas más conocidas: WebRunner
Internet con los Applets, pequeños programas
(hoy HotJava), un navegador multiplataforma
construidos en Java – con todos sus beneficios –
construido en Java.
capaces de ejecutarse dentro de un navegador.
Es aquí donde Java comienza a dar sus primeros
pasos firmes como un lenguaje difundido de
forma masiva. En 1995, el navegador Netscape
Navigator comienza formalmente a soportar los
Applets Java.
Introducción a Java
Siglas
● J2ME = Java2 Micro Edition
El compilador
● Incluido en el JDK
● Comando javac.exe
● Comando java.exe.
"Write once, run anywhere".
¡Sigamos
trabajando!
Introducción a Java
Módulo 1
Sintaxis y semántica Web
HTML5: Fundamentos
de Java
Introducción a Java
Variables
¿Qué es una variable?
Una variable es un nombre que se asocia con El concepto de variable debe verse como un
una porción de la memoria del ordenador en contenedor de información, de este modo
la que se guarda el valor asignado a dicha podríamos escribir en un lenguaje ficticio:
variable. Consiste en un elemento al cual le
a="perro"
damos un nombre y le atribuimos determinado
tipo de información. b="ladra"
Las variables pueden ser consideradas como La variable que nosotros llamamos "a" posee
la base de la programación. Los datos que se un elemento de información de tipo texto que
manejan en nuestro programa se almacenan es "perro". Asimismo, la variable "b" contiene el
en variables. valor "ladra".
Introducción a Java
Podríamos definir una tercera variable que fuese Podríamos de la misma forma trabajar con
la suma de las dos variables anteriores: variables que contuviesen números y construir
nuestro programa:
c=a+b
a=3
Si introdujeramos una petición de impresión de
esta variable en nuestro lenguaje ficticio: b=4
Identificador
● No puede utilizar caracteres "%" o "*" o "@" ● No se pueden utilizar las palabras reservadas
pues son reservados para otras operaciones. como identificadores.
int var = 5;
● de un array:
Carácter
Boolean
Enteros
Una variable entera consiste en cualquier En el primer caso, el compilador reserva una
combinación de cifras precedidas por el signo porción de 32 bits de memoria en el que guarda
“+” (opcional), para los positivos, o el signo “-”, el número 8451.
para los negativos.
Se accede a dicha porción de memoria mediante
Ejemplo: 10, -12, 432, -128 el nombre de la variable “número”.
Int. x,y;
Enteros Largos
long x;
long y=50L;
Flotante
Palabras reservadas
Las palabras reservadas no pueden ser usadas como nombre
de variable.
Operadores
Un operador es una expresión que produce otro
valor así como las funciones o construcciones
que devuelven un valor.
Operadores en Java
Un operador es un símbolo especial que indica
al compilador que debe efectuar una operación
matemática o lógica.
Tipos de operadores
● Operadores aritméticos ● Operadores lógicos
Suma (+), resta (-), multiplicación (*), Los operadores lógicos o también llamados
división (/), resto de la división (%). de comparación devuelven siempre verdadero
(true) o falso (false). Este tipo de operadores
se utilizan con mucha frecuencia en todos los
lenguajes de programación para realizar una
+ - * acción u otra en función de que cierta condi-
ción sea verdadera o falsa. Se utilizan para
construir expresiones lógicas combinando
valores lógicos (true y/o).
/ % En ciertos casos, el segundo operando no se
evalúa porque ya no es necesario.
Introducción a Java
● Operadores lógicos
&& op1&&op2 true si op1 y op2 son true. Si op1 es false ya no se evalúa op2.
|| op1||op2 true si op1 y op2 son true. Si op1 es true ya no se evalúa op2.
& op1&op true si op1 y op2 son true, pero siempre se evalúa op2.
● Operadores de asignación
● Operador condicional ?:
● Operadores relacionales
>> op1>>op2 Desplaza los bits de op1 a la derecha una distancia op2
<< op1<<op2 Desplaza los bits de op1 a la izquierda una distancia op2
Clasificación
● Operadores unarios: aquellos que necesitan
un único operando. Por ejemplo, el operador
incremento (++) o el operador negación (!).
Sentencias
Una sentencia es una orden que se le da al Aquí algunos ejemplos de sentencias:
programa para realizar una tarea específica,
int x=10;
como mostrar un mensaje en la pantalla, declarar
una variable (para reservar espacio en memoria), import java.util.*;
inicializarla, llamar a una función, etc. Las
System.out.println("Hola Mundo");
sentencias acaban con “;”.
En el lenguaje Java, los caracteres espacio en
El carácter “;” separa una sentencia de la
blanco se pueden emplear libremente. Es muy
siguiente. Normalmente, las sentencias se ponen
importante para la legibilidad de un programa
unas debajo de otras, aunque sentencias cortas
la colocación de unas líneas debajo de otras
pueden colocarse en una misma línea.
empleando tabuladores.
Ejercicio 1
Crear un programa en Java que, dado un número
entero de horas, muestre el equivalente en
semanas, días y horas.
Ejemplo de salida:
Semanas: 8
Días: 6
Horas: 12
Java para no programadores
System.out.println(“B”);
x +=y;
y +=x;
System.out.println(x);
System.out.println(y);
…
Java para no programadores
…
Tabla para completar:
System.out.println(“C”);
x-=y ; x y
y-=x ;
System.out.println(x); A
System.out.println(y);
B
System.out.println(“D”);
x*=y;
C
y*=x;
System.out.println(x);
D
System.out.println(y);
System.out.println(“E”); E
x/=y ;
y/=y ;
System.out.println(x);
System.out.println(y);
[/code]
Java para no programadores
…
Java para no programadores
… …
System.out.println(“B”); System.out.println(“E”);
suma=x+y; suma=y+x+x;
resta=x-y; resta=-x-y-y;
System.out.println(suma); System.out.println(suma);
System.out.println(resta); System.out.println(resta);
System.out.println(“C”); [/code]
suma=x+x;
resta=y-y;
System.out.println(suma);
System.out.println(resta);
System.out.println(“D”);
suma=x+y+x;
resta=x-x-20;
System.out.println(suma);
System.out.println(resta);
…
Java para no programadores
x y suma resta
E
Java para no programadores
…
Java para no programadores
… …
System.out.println(“B”); System.out.println(“E”);
multi=x*y; multi=x*(-y);
division=x/y; division=y/(-x);
System.out.println(multi); System.out.println(multi);
System.out.println(division); System.out.println(division);
System.out.println(“C”); [/code]
multi=x*x;
division=y/y;
System.out.println(multi);
System.out.println(division);
System.out.println(“D”);
multi=x*y*x;
division=y/x;
System.out.println(multi);
System.out.println(division);
…
Java para no programadores
x y multi división
E
Java para no programadores
System.out.println(“B”);
n1=15;
n2=2;
n3=n1%n2;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
…
Java para no programadores
…
Tabla para completar:
System.out.println(“C”);
n1=3; n1 n2 n3
n2=20;
n3=n2%n1; A
System.out.println(n1);
System.out.println(n2); B
System.out.println(n3);
C
System.out.println(“D”);
n1=3; D
n2=15;
n3=n2%n1;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
[/code]
Java para no programadores
Ejercicio 6
1. Resolver los enunciados desarrollando el código.
a) n1+n2
b) n3-n1
c) n1*n3
d) n3/n2
Java para no programadores
Ejercicio 7
1. Resolver los enunciados desarrollando el código.
a) El total.
b) El promedio.
Bloques de código
Un bloque de código es un grupo de sentencias
que se comportan como una unidad.
Expresiones
Una expresión es todo aquello que se puede
poner a la derecha del operador asignación “=”.
Por ejemplo:
x=123;
y=(x+100)/4;
Caracteres especiales
La barra representa el carácter de escape.
Son utilizados en chars y strings, por ejemplo:
● n Nueva línea.
● t Tabulador.
● ’ Comilla simple.
● ” Comilla doble.
Introducción a Java
Valores externos
● Pasaje de valores desde la línea de comando.
Valores constantes
Definición Uso de constantes en Java
● Es un identificador que expresa un valor fijo. Cuando se declara una variable de tipo final, se
ha de inicializar. Cualquier intento de modificarla
● Su valor no puede ser modificado ni
en el curso de la ejecución del programa da lugar
eliminado una vez que se ha definido.
a un error en tiempo de compilación.
● Las constantes son como las variables con la
Normalmente, las constantes de un programa se
diferencia de que no pueden ser redefinidas.
suelen poner en letras mayúsculas para
● Tampoco pueden almacenar arreglos de distinguirlas de las que no son constantes.
caracteres. Solo valores escalares.
Algunos ejemplos de declaración de constantes:
Comentarios
Introducción
Tipos de Comentarios
Ejercicio 1
Si variableA, variableB y variableC son de tipo lógicas
o boolean, ¿qué valores deben poseer para que las
siguientes operaciones den los siguientes resultados?:
Ejemplo de salida:
Introducción a Java
System.out.println(“B”);
frase =palabra_1+palabra_2;
System.out.println(palabra_1);
System.out.println(palabra_2);
System.out.println(frase);
…
Introducción a Java
…
Tabla para completar:
System.out.println(“C”);
frase =palabra_1+” \t ”+palabra_2;
System.out.println(palabra_1); palabra_1 palabra_2 frase
System.out.println(palabra_2);
System.out.println(frase); A
System.out.println(“D”); B
frase =palabra_1+” \n ”+palabra_2;
System.out.println(palabra_1); C
System.out.println(palabra_2);
System.out.println(frase); D
System.out.println(“E”);
frase =palabra_1+” \n \t ”+palabra_2;
System.out.println(palabra_1);
System.out.println(palabra_2);
System.out.println(frase);
[/code]
Introducción a Java
System.out.println(“B”);
n3=n1 & n2;
n4=n1 | n2;
System.out.println(n3);
System.out.println(n4);
…
Introducción a Java
…
Tabla para completar:
System.out.println(“C”);
n3=!(n1 & n2);
n1 n2 n3 n4
n4=!(n1 | n2);
System.out.println(n3); A
System.out.println(n4);
B
System.out.println(“D”);
n3=!n1 & n2;
C
n4=!n1 | n2;
System.out.println(n3); D
System.out.println(n4);
E
System.out.println(“E”);
n3=n1^ n2;
n4=n1^ !n2;
System.out.println(n3);
System.out.println(n4);
[/code]
Introducción a Java
Ejercicio 4
a) n1 ^ n2
Ejercicio 5
a) n1 es igual a 5.
b) n2 es igual a 10.
a) remera:59.90$
b) pantalón:99.90$
c) campera:149.90$
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Desafío
Introducción a Java
System.out.println(“B”);
x = x + 5;
y = y + 10;
System.out.println(x);
System.out.println(y);
…
Introducción a Java
…
Tabla para completar:
System.out.println(“C”);
x = x- 5; x y
y = y - 10;
System.out.println(x); A
System.out.println(y);
B
System.out.println(“D”);
x = x* 3;
C
y = y *5;
System.out.println(x);
D
System.out.println(y);
System.out.println(“E”); E
x = x/ 2;
y = y /4;
System.out.println(x);
System.out.println(y);
[/code]
Introducción a Java
System.out.println(“B”);
x += 5;
y -= 15;
System.out.println(x);
System.out.println(y);
…
Introducción a Java
…
Tabla para completar:
System.out.println(“C”);
x++; x y
y--;
System.out.println(x); A
System.out.println(y);
B
System.out.println(“D”);
x*=4 ;
C
y*=-3 ;
System.out.println(x);
D
System.out.println(y);
System.out.println(“E”); E
x/=2;
y/=4 ;
System.out.println(x);
System.out.println(y);
[/code]
Introducción a Java
System.out.println(“B”);
x =x+y;
y =y+x;
System.out.println(x);
System.out.println(y);
…
Introducción a Java
…
Tabla para completar:
System.out.println(“C”);
x=x-y ; x y
y=y-x ;
System.out.println(x); A
System.out.println(y);
B
System.out.println(“D”);
x=x*y;
C
y=x*x;
System.out.println(x);
D
System.out.println(y);
System.out.println(“E”); E
x=y/x ;
y=x/y ;
System.out.println(x);
System.out.println(y);
[/code]
¡Terminaste el módulo!
Todo listo para rendir el examen.
Introducción a Java
Módulo 2
Scanner
HTML5: Fundamentos Web
Introducción a Java
Introducción
En Java, como en muchos otros lenguajes de
programación, existe el concepto de librería:
una clase o conjunto de ellas que posee //bibliotecas importadas
métodos y atributos (variables y/o constantes) import java.util.Scanner;
que nos permiten reutilizar código para un
propósito particular.
Librerías
En la imagen de la siguiente pantalla podemos
apreciar que nuestros proyectos tienen un
apartado JRE System Library que contiene las
librerías que ofrece Java.
Scanner
Hay una utilidad que nos ayuda a
capturar los datos de la consola, para
ello debemos importar la biblioteca
java.util.Scanner.
Métodos
Tipo de Dato Método Cada vez que usemos uno de los métodos de la clase
Scanner, la consola quedará esperando que el usuario
Boolean nextBoolean() ingrese una información. Es recomendable mostrar por
Byte nextByte() pantalla qué dato debe ingresar:
Double nextDouble()
Float nextFloat()
Int nextInt()
Long nextLong()
Short nextShort()
String next()
String nextLine()
N/A close()
¡Sigamos
trabajando!
Introducción a Java
Módulo 2
Casteo
HTML5: Fundamentos Web
Introducción a Java
Introducción
Muchas veces nos encontraremos con la necesidad
de convertir un tipo de dato a otro tipo; Java al ser un
lenguaje de tipado fuerte (cada variable u objeto del
programa se definen como poseedores de un tipo de dato
específico), nos da las herramientas para poder lograr lo
que también se conoce como conversión de tipos.
Casteo implícito
Esto ocurre cuando necesitamos un tipo de dato
byte miByte = 37;
más pequeño en otro más grande, lo podemos
short miShort = miByte;
ver con los números; sabemos que un número
int miInt = miShort;
entero pertenece a los números reales (con
long milong = miInt;
decimales), cuando nos encontremos con la
necesidad de hacer esto, no tendremos que float miFloat = miLong;
Casteo explícito
Este caso sucede cuando queremos asignar un
double miDouble2 = 2.9856;
tipo de dato más grande a un tipo de dato más
float miFloat2 = (float) miDouble2;
pequeño, por ejemplo, un numérico decimal a
long milong2 = (long) miFloat2;
numérico entero. En casos así, necesariamente
int miInt2 = (int) miLong2;
tenemos que escribir entre paréntesis el tipo de
dato al que queremos convertir. short miShort2 = (short) miInt2;
float miByte2 = (byte) miShort2;
Hay que tener en cuenta que lo que pasará es
que el número será truncado cuando hagamos
la conversión de un decimal a un entero.
Introducción a Java
Cuadro de casteo
Convertir desde
Convertir a
boolean no no no no no no no
byte no si cast si si si si
Ejercicio 1
Generar un programa donde se permita al
usuario ingresar por consola números con
decimales simple o de una sola precisión y
realizar las siguientes operaciones:
Métodos
Tipo Método Descripción
Boolean endsWith(String suffix) Prueba si esta cadena termina con el sufijo especificado.
Boolean equalsIgnoreCase(String anotherString) Compara esta cadena con otra cadena, ignorando las consideraciones
de caso.
Static format(String format, Object... args) Devuelve una cadena formateada utilizando la cadena de formato y los
String argumentos especificados.
Int indexOf(int ch) Devuelve el índice dentro de esta cadena de la primera aparición del
carácter especificado.
Introducción a Java
Static join(CharSequence delimiter, Devuelve una nueva cadena compuesta por copias de los elementos
String CharSequence... elements) CharSequence unidas con una copia del delimitador especificado.
Int lastIndexOf(int ch) Devuelve el índice dentro de esta cadena de la última aparición del
carácter especificado.
String replace(char oldChar, char newChar) Devuelve una cadena resultante de reemplazar todas las apariciones
de oldChar en esta cadena por newChar.
String toLowerCase() Convierte todos los caracteres de esta cadena a minúsculas utilizando
las reglas de la configuración regional predeterminada.
String toUpperCase() Convierte todos los caracteres de esta cadena a mayúsculas utilizando
las reglas de la configuración regional predeterminada.
Introducción a Java
Static valueOf(objeto o dato primitivo b) Devuelve la representación de cadena del argumento enviado.
String
Static trim() Devuelve una cadena cuyo valor es esta cadena, con cualquier espacio en
String blanco inicial y final eliminado.
String substring(int beginIndex) Devuelve una cadena que es una subcadena de esta cadena.
Char[] substring(int beginIndex, int endIndex) Devuelve una cadena que es una subcadena de esta cadena.
String toLowerCase() Convierte todos los caracteres de esta cadena a minúsculas utilizando
las reglas de la configuración regional predeterminada.
String toUpperCase() Convierte todos los caracteres de esta cadena a mayúsculas utilizando
las reglas de la configuración regional predeterminada.
Static valueOf(objeto o dato primitivo b) Devuelve la representación de cadena del argumento enviado.
String
Introducción a Java
A=B
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java
Ejercicio 1
Se pide que ingrese por consola dos párrafos y muestre por pantalla lo siguiente:
1. Los párrafos, ¿son iguales con el operador 4. Mostrar los párrafos en minúsculas.
relacional ==?
5. Mostrar la primera letra en mayúscula de
2. Los párrafos, ¿poseen el mismo contenido? cada párrafo.
Sin importar si están en mayúsculas o
6. Unir los párrafos con una coma.
minúsculas.
Math
Muchas veces nos vemos en la necesidad de Para poder incluir una biblioteca o librería
hacer operaciones matemáticas, cálculos, usar deberíamos importarla, pero Math pertenece
constantes, etc. al paquete Lang por lo que no es necesario
hacerlo.
Ahora bien, en el módulo anterior aprendimos
operadores aritméticos, pero se hace un poco
complejo hacer, por ejemplo, la raíz cuadrada
de un número, el exponencial de un número u
cualquier otra operación matemática.
Constantes
Tipo Método Descripción
Static double E Devuelve el valor más aproximado del número e
Static double PI Devuelve el valor más aproximado del número PI
π𝑒
Introducción a Java
Métodos
Tipo Método Descripción
Static double abs(double a) Devuelve el valor absoluto de un valor double introducido como parámetro.
Static float abs(float a) Devuelve el valor absoluto de un valor float introducido como parámetro.
Static int abs(int a) Devuelve el valor absoluto de un valor Entero introducido como parámetro.
Static long abs(long a) Devuelve el valor absoluto de un valor long introducido como parámetro.
Static double acos(double a) Devuelve el arco coseno de un valor introducido como parámetro.
Static int addExact(int x, int y) Devuelve la suma de sus argumentos, lanzando una excepción si el resultado
desborda un int.
Static long addExact(long x, long y) Devuelve la suma de sus argumentos, lanzando una excepción si el resultado
se desborda a long.
Static double exp(double a) Devuelve el número e de Euler elevado a la potencia de un double valor.
Static int multiplyExact(int x, int y) Devuelve el producto de los argumentos, lanzando una excepción si el resultado
desborda un int.
Static double pow(double a, double b) Devuelve el valor del primer argumento elevado a la potencia del segundo
argumento.
Static double random() Devuelve un doublevalor con un signo positivo, mayor o igual que 0.0 y menor que
1.0.
Static double round(double a) Devuelve el long redondeado más cercano al double introducido.
Static float round(float a) Devuelve el int mas cercano y redondeado al float introducido.
Static double sqrt(double a) Devuelve la raíz cuadrada positiva correctamente redondeada de un double valor.
Ejercicio 1
Crear un color de forma aleatoria basado en el
sistema RGB, el utilizado para su representación.
Este se basa en tres colores:
● R: Red (rojo)
Ejercicio 2
Se pide que ingrese por consola una palabra y
realice las siguientes operaciones:
Ejercicio 1
Generar un programa que permita al usuario ingresar por
consola en la misma línea el primer nombre y primer
apellido y realice las siguientes operaciones:
Ejercicio 2
Realizar un programa que permita al usuario ingresar
por consola dos números y realice las siguientes
operaciones:
Ejercicio 3
Introducción
Las estructuras de control de flujo son aquellas
sentencias que, colocando una condición,
producen distintas alternativas.
Bifurcación if
La estructura de control If permite decidir entre Si el resultado es verdadero, se ejecutan las
dos opciones resultantes de la evaluación de sentencias contenidas dentro del “If”.
una sentencia. Si la evaluación es positiva, se
Si el resultado es falso, simplemente se procede
ejecuta una parte del código, de lo contrario,
con la ejecución de la siguiente declaración.
el código dentro de la condición no se ejecuta.
También podemos especificar acciones para Los condicionales pueden anidarse entre sí a una
realizar en caso de que la evaluación sea profundidad arbitraria.
negativa.
Forma de uso
[code] falso
Condición
if (expresionBooleana)
{
sentencias1;
} verdadero
[/code]
Sentencia…
¡Sigamos
trabajando!
Introducción a Java
Módulo 3 - Laboratorio adicional
Introducción a Java
…
[code] System.out.println(“C”);
System.out.println(“A”); int n1=20;
int n1=20; int n2=10;
int n2=10; int n3=(n1==n2)? n1:0;
int n3=(n1>n2)? n1:0; System.out.println(n3);
System.out.println(n3);
System.out.println(“D”);
System.out.println(“B”); int n1=20;
int n1=20; int n2=10;
int n2=10; int n3=(n1!=n2)? n1:0;
int n3=(n1<n2)? n1:0; System.out.println(n3);
System.out.println(n3);
[/code]
…
Introducción a Java
n1 n2 n3
D
¡Sigamos
trabajando!
Introducción a Java
Módulo 3
Estructura if else
HTML5: Fundamentos Web
Introducción a Java
Bifurcación if else
Es la extensión de la sentencia if. Significa “de
lo contrario” y permite la ejecución de un bloque
de código si la condición de la sentencia if
fue falsa.
Forma de uso:
[code] falso
Condición
if (expresionBooleana)
{
sentencias1;
}
verdadero
else
{
sentencias2; Sentencia… Sentencia…
}
[/code]
Introducción a Java
Ejercicio 1
Crear un programa que simule un inicio de sesión con dos
cadenas de caracteres (usuario y contraseña).
Bienvenido al Sistema
Luego, mostrar dos tipos de mensajes en pantalla:
“Bienvenido al Sistema” y “Credenciales incorrectas” en
caso de que el ingreso sea incorrecto.
Credenciales incorrectas
Introducción a Java
Ejercicio 2
Dada la siguiente tabla del tiempo, hacer un
programa que indique qué puede hacer una
persona con dicho pronóstico:
Bifurcación switch
A diferencia de la estructura condicional if, la Tan pronto como un valor coincidente se
estructura switch admite múltiples caminos a encuentra, las declaraciones posteriores se
partir de la evaluación de una sola expresión. ejecutan en secuencia hasta la declaración
break o hasta el final del switch.
La expresión puede ser una variable o cualquier
otro tipo de expresión, siempre y cuando se Su principal característica es que permite
evalúe un valor simple (es decir, un número establecer muchas opciones según el valor
entero, un doble, o una cadena). La construcción de una variable (o expresión), a diferencia de
se ejecuta mediante la evaluación de la expresión la sentencia if, donde solo hay dos opciones
y luego se prueba el resultado contra las (verdadero – falso).
sentencias case.
Introducción a Java
Forma de uso:
[code]
switch (expresion)
{
case valor1: sentencias1; break;
case valor2: sentencias2; break;
case valor3: sentencias3; break;
default: sentencias4;
}
[/code]
Introducción a Java
Diagramación:
default
Condición
Ejercicio 1
Crear un programa que simule la petición de ¡Gracias por contactarte con nosotros!
una opción según el siguiente menú y muestre
¿En qué podemos ayudarte?
en pantalla que ha ingresado a la opción
seleccionada con las opciones siguientes: A) Documentación
B) Cotización
C) Asistencia
D) Siniestros
E) Información de Pagos
F) Otras Consultas
G) Anulación
Ejercicio 2 Pseudocódigo
Etapa 1
Una reconocida Entidad Bancaria está en la Se debe tener en cuenta lo siguiente:
búsqueda de Desarrolladores Backend Java Jr.,
● La Clave Token debe ser un número aleatorio
Ssr. y Sr. Para que puedan postularse, se debe
de 6 dígitos.
crear una aplicación que valide el ingreso a la
plataforma de Online Banking a través de una ● El cliente debe ingresar los campos Usuario,
clave Token. Contraseña y Clave Token (todos obligatorios).
1. Todo el código debe estar en el método 4. Para generar el número aleatorio, utilizar la
principal (main). librería que provee java.lang.Math.
Ejercicio 1 Pseudocódigo
PROGRAMA 1
Dado el siguiente código:
LEER n1,n2,n3
SI n1>n2 y n1>n3
int nro1 = 100, nro2 = 500, nro3 = 250; ENTONCES
INFORMAR "n1 es el mayor"
Informar cuál de los tres números
FIN SI
es mayor.
SI n2>n1 y n2>n3
ENTONCES
INFORMAR "n2 es el mayor"
FIN SI
SI n3>n2 y n3>n1
ENTONCES
"n3 es el mayor"
FIN SI
FIN PROGRAMA
Introducción a Java
INICIO
Diagramación
definir n1, n2, n3
NO
n1>n2 & n1> n3
SI
n1 es el mayor
NO
n2>n1 & n2> n3
SI
n2 es el mayor
NO
n3>n1 & n3> n2
SI
n3 es el mayor
FIN
Introducción a Java
Ejercicio 2 Pseudocódigo
PROGRAMA 2
A partir del siguiente código:
LEER a,b,c
int a = 10, b=-2, c=5; SI a>0 y b>0
ENTONCES
hay 2 números positivos y 1 negativo
INFORMAR a*b
FIN SI
Informar la multiplicación de los dos
SI a>0 y c>0
números positivos. ENTONCES
INFORMAR a*c
FIN SI
SI b>0 y c>0
ENTONCES
INFORMAR a*b
FIN SI
FIN PROGRAMA
Introducción a Java
INICIO
Diagramación
definir a, b, c
NO
a>0 & b>0
SI
informar a*b
NO
a>0 & c>0
SI
informar a*c
NO
b>0 & c>0
SI
informar b*c
FIN
Introducción a Java
Ejercicio 3 Pseudocódigo
PROGRAMA 2
Tomando el siguiente código:
LEER usuario,clave
String usuario = “Pepito”, clave= “1234”; SI usuario=”Pepito” y clave=”EducacionIt”
ENTONCES
Informar los siguientes casos: INFORMAR “Bienvenido pepito!!”
FIN SI
1. Si el usuario es ”pepito” y la clave es ”1234”
SI usuario!=”Pepito” y clave=”EducacionIt”
informar “¡Bienvenido pepito!”.
ENTONCES
INFORMAR “Usuario incorrecto”
2. Si el usuario es ”pepito” y la clave no es FIN SI
“1234” informar “Contraseña incorrecta”.
SI usuario=”Pepito” y clave!=”EducacionIt”
3. Si el usuario no es “pepito” y la clave es ENTONCES
“1234” informar “Usuario incorrecto”. INFORMAR “Contraseña incorrecta!”
FIN SI
Introducción a Java
INICIO
Diagramación
ingresar user, pass
user=”Pepito” & NO
pass=”EducacionIT”
SI
user=”Pepito” & NO
pass!=”EducacionIT”
SI
user!=”Pepito” & NO
pass=”EducacionIT”
SI
FIN
¡Terminaste el módulo!
Estás listo para rendir el examen
Introducción a Java
Módulo 4
Estructuras de
HTML5: Fundamentos Web
control repetitivas
Introducción a Java
Bucles: Introducción
● Permiten repetir la ejecución de un bloque
determinado de código.
Bucle While
● Permite ejecutar un bloque de código
determinado en forma repetitiva “mientras”
(while, en inglés) se cumpla la condición.
Forma de uso:
code]
while (expresionBooleana)
{
Sentencias;
falso
} Condición
[/code]
verdadero
El bucle while evalúa la condición booleana,
si la misma es verdadera, se ejecutan las
declaraciones dentro del bucle. Sentencia
Ejercicio 1
Crear un programa que lea números enteros Consideraciones
(positivos y negativos) del teclado y muestre
● Utilizar bucle while.
la suma de dichos números ingresados, el
programa se detendrá cuando el usuario in-
dique el número 0.
Ejemplo de salida:
Introducción a Java
Ejercicio 2 INICIO
i=1
Imprimir los números del 1 al 10, sin imprimir
números 2, 5 y 9, uno abajo del otro. NO
n < = 10
Requisito: se necesita tener conocimiento del SI
operador AND (&&) y del operador NOT (!=) NO
n!=2 & n!=5
& n!=9
SI
informar n
n ++
FIN
Introducción a Java
Prueba de escritorio
Número de ciclo Condición del if Valor del nro. ¿Se imprime el valor de nro.?
1 V 1
2 F 2
3 V 3
4 V 4
5 F 5
6 V 6
7 V 7
8 V 8
9 F 9
10 V 10
Introducción a Java
Ejercicio 3 INICIO
i=1
Imprimir los números del 1 al 30 sin imprimir
números entre el 10 y el 20 uno abajo del otro. NO
n < = 31
SI
informar n
n ++
FIN
Introducción a Java
Número de ciclo Condición del if Valor del nro. ¿Se imprime el valor del nro.?
1 V 1
Prueba de escritorio 2 V 2
3 V 3
4 V 4
5 V 5
6 V 6
7 V 7
8 V 8
9 V 9
10 V 10
11 F 11
12 F 12
13 F 13
14 F 14
15 F 15
16 F 16
17 F 17
18 F 18
19 F 19
20 V 20
21 V 21
22 V 22
23 V 23
24 V 24
25 V 25
26 V 26
27 V 27
28 V 28
29 V 29
30 V 30
Introducción a Java
Ejercicio 4
INICIO
Imprimir la suma de los números del 1 al 10.
i = 1, suma = 0
NO
n < = 10
SI
suma = suma+n
n ++
informar suma
FIN
Introducción a Java
Prueba de escritorio
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
Introducción a Java
Bucle Do while
● Esta sentencia es igual a la anterior, con la
diferencia de que la condición se evalúa al
final del ciclo.
Forma de uso:
[code]
do Sentencia
{
Sentencias;
} while (expresionBooleana);
[/code]
verdadero
La declaración se ejecuta una vez y luego se Condición
evalúa la expresión. Si es verdadera, se repite la
declaración hasta que la expresión se convierte
en falsa. falso
Bucle For
La sentencia for realiza un bucle un determina- ● Indicación de la condición por la cual finaliza-
do número de veces. rá el bucle (se evalúa esta expresión al inicio
de cada iteración).
La sentencia inicialización se ejecuta al comien-
zo del for. El incremental, después de las ● Modificación de la variable para no entrar en
sentencias. La expresión booleana se evalúa al un bucle infinito (se ejecuta al final de cada
comienzo de cada iteración. iteración).
Forma de uso:
[code]
for (inicialización; expresionBooleana; postAccion)
{
Sentencias;
}
[/code]
no termino termino
Repetir n veces
Sentencias
¡Sigamos
trabajando!
Introducción a Java
Módulo 4 - Laboratorio
Introducción a Java
Ejercicio 1
Crear un programa que ingrese una oración y
muestre cuál es el carácter que más se repite.
Consideraciones
Ejemplo de salida:
Introducción a Java
Ejercicio 2
Imprimir los números del 1 al 10 salteando de Prueba de escritorio
a dos, uno abajo del otro.
5
Introducción a Java
del otro. 1
10
Introducción a Java
Imprimir la suma de los números impares del Número de ciclo Valor del nro. Valor de la suma
1 al 10. 1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
Introducción a Java
Ejercicio 5
Mostrar la resta de la multiplicación de los Prueba de escritorio
números del 1 al 5 con la suma de los números
del 1 al 5.
Número de ciclo Nro Multi Suma Multi - suma
2 2 2 3
3 3 6 6
4 4 24 10
5 5 120 15
Introducción a Java
Ejercicio 6
Imprimir la siguiente figura: Prueba de escritorio
@
Número de ciclo Nro. Salida
@
1 1
@
@ 2 2
3 3
4 4
Introducción a Java
Ejercicio 7
Imprimir la siguiente figura: Prueba de escritorio
@
número de ciclo Nro. Salida
@@
1 1
@
@@ 2 2
@ 3 3
4 4
5 5
Introducción a Java
Ejercicio 8
Imprimir la siguiente figura: Prueba de escritorio
@
Número de ciclo Nro. X Salida
@@
@@@ 1 1 @
@@@@ 2 2 @@
@@@@@
3 3 @@@
4 4 @@@@
5 5 @@@@@
Introducción a Java
Ejercicio 9
Imprimir la siguiente figura: Prueba de escritorio
@@@@@
Número de ciclo I J Salida
@@@@
@@@ 1 1 6
@@ 2 2 5
@
3 3 4
4 4 3
5 5 2
Introducción a Java
Prueba de escritorio
Ejercicio 10
Imprimir la siguiente figura:
@
@@
@@@
@@@@
@@@
@@
@
Introducción a Java
Ejercicio 11
Imprimir la siguiente figura:
@@@@@
@@@
@
@@@
@@@@@
Introducción a Java
Sentencia Break
● A veces es necesario interrumpir la ejecución Forma de uso:
de un bucle for, while o do-while.
[code]
● Es válido para bifurcaciones y bucles. for (inicialización; expresionBooleana;
postAccion)
● Hace que salga inmediatamente del bloque {
Sentencias;
que se está ejecutando.
break;
Sentencias;
}
[/code]
Introducción a Java
Sentencia Continue
● La sentencia continue fuerza al bucle a Forma de uso:
comenzar la siguiente iteración desde el
[code]
principio. for (inicialización; expresionBooleana;
postAccion)
● Válido solo para bucles.
{
Sentencias;
● Fuerza una próxima iteración sin ejecutar
continue;
todas las sentencias que están después. Sentencias;
}
[/code]
Introducción a Java
Forma de uso:
[code]
switch (expresion)
{
case valor1: sentencias1; break;
case valor2: sentencias2; break;
case valor3: sentencias3; break;
default: sentencias4;
}
[/code]
Introducción a Java
Diagramación:
default
Condición
10
Introducción a Java
Ejercicio 2 INICIO
SI
En el primer mes tendrá acumulado 1000 $ más
20 $ de interés ( 2% de 1000 ). En el segundo dinero=dinero”1.02
informar dinero
FIN
Introducción a Java
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
Introducción a Java
Ejercicio 3 INICIO
i = 1, suma = 0
Imprimir la suma de los números pares del
1 al 25. NO
n < = 25
Requisito: se necesita tener conocimientos SI
del operador RESTO (%) NO
n es par?
SI
suma = suma+n
n ++
informar suma
FIN
Introducción a Java
Prueba de escritorio 1 F 1
2 V 2
3 F 3
4 V 4
5 F 5
6 V 6
7 F 7
8 V 8
9 F 9
10 V 10
11 F 11
12 V 12
13 F 13
14 V 14
15 F 15
16 V 16
17 F 17
18 V 18
19 F 19
20 V 20
21 F 21
22 V 22
23 F 23
24 V 24
25 F 25
¡Terminaste el módulo!
Estás listo para rendir el examen
Introducción a Java
Módulo 5
HTML5: Fundamentos
Vectores / Arrays Web
Introducción a Java
Introducción
Una Array es un conjunto de variables indexa- A los elementos del array se accederá a través
das que forman en una sola y sencilla súper de la posición que ocupan dentro del conjunto
variable, y que ofrece una manera fácil de de sus elementos.
pasar varios valores entre las líneas de código,
Este concepto también es conocido como
funciones, e incluso páginas.
Vector. Definir un array en Java es como definir
Durante gran parte de este capítulo, vamos a una variable o atributo, pero al especificar el tipo
ver el funcionamiento interno de los arreglos. lo que hacemos es colocar un par de corchetes [ ]
para indicar que lo que estamos definiendo es
Java posee la capacidad de definir un conjunto
un array.
de variables del mismo tipo, dichas variables
están agrupadas bajo un mismo nombre y se
distinguen por un número (índice). El tamaño
del array se establece cuando se crea.
Introducción a Java
Ejemplo:
O bien
tipo [] identificador;
Donde:
Creación
Los arrays se crean con el operador new de la Ejemplo:
siguiente manera:
[code]
[code] float[] notas= new float[4];
vector= new tipo[elementos]; int[] temperaturas= new int[7];
[/code] [/code]
Usos
Para acceder a los elementos de un array, Ejemplo:
utilizamos índices que indican la posición del
float[] notas = new float[3]
elemento dentro del mismo:
vector[índice]
En Java, el índice de la primera componente de notas [0] notas [1] notas [2]
un vector es siempre 0.
Inicialización en la declaración
Podemos asignarle un valor inicial a los elemen-
tos de un array en la propia declaración.
Ejemplo:
Ejercicio 1
Crear un programa que ingrese una oración que Consideraciones:
realice las siguientes operaciones:
La oración no puede estar vacía.
1. Contar las palabras.
Ejemplo:
Copia de arrays
int pares[]={2,4,6,8,10}; También podemos utilizar una función
predefinida en la biblioteca de estándar de Java:
Para copiar los elementos de un array,
podemos crear un nuevo array y copiar [code]
los elementos uno a uno. System.arraycopy(from, fromIndex, to, toIndex, n);
int []datos= new int[pares.length];
[code] System.arraycopy(pares, 0, datos, 0, pares.length);
int []datos= new int[pares.length]; [/code]
for (i=0; i<pares.length;i++)
{datos[i]=pares[i];}
[/code]
Introducción a Java
Por ejemplo:
Arrays.sort(losValores);
Introducción a Java
[/code]
Introducción a Java
Ejercicio 1
Introducción
Java es un lenguaje versátil que nos permite
aplicar múltiples paradigmas de programación
estructurada, de objetos y funcional.
Procedimientos
Un procedimiento es un bloque de código que
contiene una o más instrucciones, al cual
podemos invocar para que sean ejecutadas. Los
procedimientos nos van a ayudar a hacer nuestro
código más legible y evitar código duplicado.
Características
Definición
Nombre del
Retorno procedimiento Parámetros
System.out.println(i);
}
Instrucciones
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java
Ejercicio 1
Crear un programa que reciba 3 parámetros y
calcule la suma, resta, multiplicación, división y
el resto de dos números con decimales.
Funciones
Una función es un bloque de código que Características
contiene una o más instrucciones que pode-
● Deben retornar un valor.
mos invocar para que sean ejecutadas. Las
funciones nos van a ayudar a hacer nuestro ● Pueden recibir parámetros, aunque no es
código más legible y evitar código duplicado. obligatorio es recomendado.
Definición
Nombre del
Retorno procedimiento Parámetros
return resultado;
}
Instrucciones
Return
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java
Ejercicio 1
Crear un programa que evalúe una oración e Palíndromo y capicúa: palabra o frase que se lee igual
indique si existe una palabra palíndroma o un de izquierda a derecha que de derecha a izquierda.
Ej: reconocer.
número capicúa y muestre por consola cuáles
cumplen con la condición. Aunque son sinónimos, suele usarse palíndroma para
las palabras y capicúa para los números.
Indicaciones
● Debe crear un método que retorne si la Para este ejercicio se evaluaran solamente las
palabra cumple con la condición. palabras y no la frase.
Ejercicio 2
Crear una función suma que reciba dos pará-
metros, uno de tipo entero y otro de tipo double,
que realice la suma y retorne la suma de ambos
como un double.
Introducción a Java
Ejercicio 3
Escribir un programa que tenga un procedimiento
llamado mensaje, que imprima una palabra e
invocar ese procedimiento 5 veces.
Introducción a Java
Ejercicio 4
Escribir una función que retorne un String, que
reciba un parámetro de tipo String llamado
“nombre” y retorne el mensaje “Hola” y el
valor del parámetro enviado.
Debugging
A la hora de encontrar y resolver problemas en ejecutarla línea por línea para ir viendo cómo se
nuestros programas es crucial que seamos modifican el valor de las variables y las acciones
hábiles usando el Debugger. que realiza nuestro programa.
Pasos
Variables Output
Al ejecutar el programa en modo debug, veremos Además, vemos un tab llamado “Output”, que
algunos tabs, por ej. “Variables”, con los cuales nos va mostrando las cosas que fue escribiendo
podremos ver el valor actual de cada variable. nuestro programa a la fuente de salida, en este
caso la consola.
Si este tab no estuviera presente podemos ir a
“Window → Debugging → Variables” (esto Si este tab no estuviera presente podemos ir a
varía entre los distintos IDE). “Window → Output” (esto varía entre los
distintos IDE).
Introducción a Java
Variables
Introducción a Java
Output
Introducción a Java
Etapa 2
1. Por cada intento fallido, debe crear una 5. Crear un método que contenga los ciclos de
nueva Clave Token. pregunta de las credenciales que no posea
retorno alguno.
2. Realizar un método para que retorne cada
Clave Token.
Ejercicio 1
Dado el vector {10,20,5,15,30,20} Prueba de escritorio:
6 6
5. Informar cuántas veces aparece el
número 20.
Introducción a Java
Ejercicio 2
Considerar el vector de inflación: Con estos datos, se pide:
{0.8, 0.1, 0.3, 0.4, 0.3, 0.6, 0.5, 0.3, 0.7, 0.3, 0.2, 0.9} 1. Informar la inflación anual.
Cada ítem del vector representa la inflación 2. Informar la inflación más baja junto con el
de un mes, de tal manera que el primer ítem número de mes. Por ejemplo: Mes 2 = 0.1
del vector, que es 0.8, representa la inflación
de enero y el último ítem del vector, que es 0.9, 3. Informar la inflación más alta junto con el
representa la inflación de diciembre. número de mes. Por ejemplo: Mes 12 = 0.9
Prueba de escritorio
Ejercicio 3
Agregar los cambios que resulten necesarios al
ejercicio anterior para que en los puntos B y C se
informe la inflación junto con el nombre del mes.
¿ Qué es un Paradigma ?
Tipos de Paradigmas
El Paradigma de Objetos
El paradigma de programación orientada a objetos plantea que todo sistema
o proceso informático puede modelarse con Objetos que se encuentren vivos
en algún tipo de Ambiente y se relacionan con otros Objetos enviando y
recibiendo Mensajes.
Es decir, programar bajo este paradigma, implica que nuestros programas,
deberán ser pensados sólo con objetos y mensajes.
Un objeto, en OOP, es un ente completamente abstracto que sabe escuchar,
responder y enviar ciertos mensajes.
Un Mensaje es una comunicación dirigida de un objeto a otro. Información
enviada desde emisor, hasta el receptor. El paradigma de objetos tiene otros
conceptos que completan este esquema de Objeto-Mensaje, que se irán
detallando a lo largo del curso.
Como todo concepto teórico o abstracto que quiera ser llevado a la vida real
o a la práctica, requiere de algún tipo de implementación.
Si queremos desarrollar un software, con la idea teórica o paradigma
únicamente no nos alcanzaría, es necesario tener algo concreto con lo cual
trabajar, una implementación del paradigma.
Un paradigma, en tanto que es un concepto teórico, tiene infinitas
implementaciones. A la vez, por este mismo motivo, una implementación es
una y sólo una instancia posible que responde al Paradigma.
Cuando hablamos de una “implementación” estamos hablando de un lenguaje
de programación orientado a objetos (es decir, que contempla los conceptos
teóricos del paradigma orientado a objetos). Cada uno de estos lenguajes
implementará cada uno de estos conceptos de forma diferente. Por eso es
importante diferenciar los “conceptos del paradigma” de la “implementación
del paradigma”. Es decir, por ejemplo, primero es necesario conocer la
definición de un “objeto” según el paradigma, y luego, conocer la
implementación de un objeto para determinado lenguaje de programación.
Vamos a ir clarificando cada uno de estos conceptos a lo largo de las clases.
La Programación Orientada a Objetos
OOP (Object Oriented Programming en inglés ó en español Programación
orientada a objetos) se basa en el concepto de agrupar código y datos juntos
en una misma unidad llamada clase. Este proceso es usualmente referido
como encapsulamiento o información oculta.
Estas clases son esencialmente la representación de un conjunto de funciones
(llamadas métodos) y variables (llamadas propiedades) designadas para
trabajar juntas y proveer una interfaz específica.
Es importante entender que las clases son una estructura que no puede ser
utilizada directamente, éstas deben ser instanciadas en objetos, los cuales
podrán así interactuar con el resto de las aplicaciones.
Es posible pensar en clases como un plano para crear un auto, mientras el
objeto es de hecho el auto en si mismo, ya que se puede crear en una línea
de producción. Podríamos decir que una clase es una fábrica de objetos.
Características de la OOP
Las características siguientes son las más
importantes:
Abstracción
Denota las características esenciales de un objeto, donde se capturan sus
comportamientos. Cada objeto en el sistema sirve como modelo de un
"agente" abstracto que puede realizar trabajo, informar y cambiar su estado,
y "comunicarse" con otros objetos en el sistema sin revelar cómo se
implementan estas características. Los procesos, las funciones o los métodos
pueden también ser abstraídos y cuando lo están, una variedad de técnicas
son requeridas para ampliar una abstracción. El proceso de abstracción
permite seleccionar las características relevantes dentro de un conjunto e
identificar comportamientos comunes para definir nuevos tipos de entidades
en el mundo real. La abstracción es clave en el proceso de análisis y diseño
orientado a objetos, ya que mediante ella podemos llegar a armar un
conjunto de clases que permitan modelar la realidad o el problema que se
quiere atacar.
Encapsulamiento
Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto
permite aumentar la cohesión de los componentes del sistema. Algunos
autores confunden este concepto con el principio de ocultación,
principalmente porque se suelen emplear conjuntamente.
Principio de ocultación.
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de
objeto expone una interfaz a otros objetos que especifica cómo pueden
interactuar con los objetos de la clase. El aislamiento protege a las
propiedades de un objeto contra su modificación por quien no tenga derecho
a acceder a ellas, solamente los propios métodos internos del objeto pueden
acceder a su estado. Esto asegura que otros objetos no pueden cambiar el
estado interno de un objeto de maneras inesperadas, eliminando efectos
secundarios e interacciones inesperadas. Algunos lenguajes relajan esto,
permitiendo un acceso directo a los datos internos del objeto de una manera
controlada y limitando el grado de abstracción. La aplicación entera se reduce
a un agregado o rompecabezas de objetos.
Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir
el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento
correspondiente al objeto que se esté usando. O dicho de otro modo, las
referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos, y la invocación de un comportamiento en una referencia
producirá el comportamiento correcto para el tipo real del objeto
referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última
característica se llama asignación tardía o asignación dinámica.
Herencia
Las clases no están aisladas, sino que se relacionan entre sí, formando una
jerarquía de clasificación. Los objetos heredan las propiedades y el
comportamiento de todas las clases a las que pertenecen. La herencia
organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los
objetos ser definidos y creados como tipos especializados de objetos
preexistentes. Estos pueden compartir (y extender) su comportamiento sin
tener que volver a implementarlo. Esto suele hacerse habitualmente
agrupando los objetos en clases y éstas en árboles que reflejan un
comportamiento común. Cuando un objeto hereda de más de una clase se
dice que hay herencia múltiple.
UML
El Lenguaje Unificado de Modelado (UML) fue creado para forjar un lenguaje
de modelado visual común y semántica y sintácticamente rico para la
arquitectura, el diseño y la implementación de sistemas de software
complejos, tanto en estructura como en comportamiento.
Es comparable a los planos usados en otros campos y consiste en diferentes
tipos de diagramas. En general, los diagramas UML describen los límites, la
estructura y el comportamiento del sistema y los objetos que contiene.
UML no es un lenguaje de programación, pero existen herramientas que se
pueden usar para generar código en diversos lenguajes usando los diagramas
UML. UML guarda una relación directa con el análisis y el diseño orientados a
objetos.
Motivación
Durante años, los programadores se han dedicado a construir aplicaciones
muy parecidas que resolvían una y otra vez los mismos problemas. Para
conseguir que los esfuerzos de los programadores puedan ser utilizados por
otros programadores se creó la OOP. Que es una serie de normas de realizar
las cosas de manera que otros programadores puedan utilizarlas y adelantar
su trabajo, de manera que consigamos que el código se pueda reutilizar.
Estados
Está compuesto de datos, será uno o varios atributos a los que se habrán
asignado unos valores concretos (datos).
Comportamiento
Está definido por los procedimientos o métodos con que puede operar dicho
objeto, es decir, qué operaciones se pueden realizar con él.
Identidad
Es una propiedad de un objeto que lo diferencia del resto, dicho con otras
palabras, es su identificador.
Un objeto contiene toda la información que permite definirlo e identificarlo
frente a otros objetos pertenecientes a otras clases e incluso frente a objetos
de una misma clase, al poder tener valores bien diferenciados en sus
atributos. A su vez, los objetos disponen de mecanismos de interacción
llamados métodos, que favorecen la comunicación entre ellos. Esta
comunicación favorece a su vez el cambio de estado en los propios objetos.
Esta característica lleva a tratarlos como unidades indivisibles, en las que no
se separa el estado y el comportamiento.
Los métodos (comportamiento) y atributos (estado) están estrechamente
relacionados por la propiedad de conjunto. Esta propiedad destaca que una
clase requiere de métodos para poder tratar los atributos con los que cuenta.
El programador debe pensar indistintamente en ambos conceptos, sin separar
ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito
erróneo de crear clases contenedoras de información por un lado y clases con
métodos que manejen a las primeras por el otro. De esta manera se estaría
realizando una programación estructurada camuflada en un lenguaje de
programación orientado a objetos.
La OOP difiere de la programación estructurada tradicional, en la que los
datos y los procedimientos están separados y sin relación, ya que lo único
que se busca es el procesamiento de unos datos de entrada para obtener
otros de salida. La programación estructurada anima al programador a pensar
sobre todo en términos de procedimientos o funciones, y en segundo lugar
en las estructuras de datos que esos procedimientos manejan. En la
programación estructurada sólo se escriben funciones que procesan datos.
Los programadores que emplean OOP, en cambio, primero definen objetos
para luego enviarles mensajes solicitandoles que realicen sus métodos por sí
mismos.
Origen
Los conceptos de la programación orientada a objetos tienen origen en Simula
67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl
y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. En este centro,
se trabajaba en simulaciones de naves, que fueron confundidas por la
explosión combinatoria de cómo las diversas cualidades de diferentes naves
podían afectar unas a las otras. La idea ocurrió para agrupar los diversos
tipos de naves en diversas clases de objetos, siendo responsable cada clase
de objetos de definir sus propios datos y comportamientos. Fueron refinados
más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC pero
diseñado para ser un sistema completamente dinámico en el cual los objetos
se podrían crear y modificar "en marcha" en lugar de tener un sistema basado
en programas estáticos.
La programación orientada a objetos tomó posición como el estilo de
programación dominante a mediados de los años ochenta, en gran parte
debido a la influencia de C++, una extensión del lenguaje de programación
C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas
de usuario, para las cuales la programación orientada a objetos está
particularmente bien adaptada.
Modelado de Objetos
¿ Qué es un Modelo ?
Un modelo es una posibilidad de visualizar a escala o de una manera simulada
algo que será construido en la realidad. Es posible decir que antes de construir
un edificio se realizan maquetas a escala que representa modelos a seguir,
así como también cuando se construye un auto se confeccionan distintos
planos o modelos a escala para intentar simular o prever su comportamiento.
Académicamente, es posible definirla como una abstracción de la realidad, es
una simplificación de la realidad, con el objetivo final de pasar del modelo a
producto real.
Los modelos pueden ser expresados en distintos niveles de precisión, desde
algo muy genérico presentando una visión, hasta algo mucho más específico
que representa un gran compromiso con el producto a construir.
¿ Qué es un Objeto ?
Un objeto en OOP es un ente completamente abstracto que sabe escuchar,
responder, y enviar ciertos mensajes.
Bajando más a informática, podemos definir un objeto como un ente
computacional, que está dentro del software, y puede representar o no un
ente de la realidad que está fuera de la computadora.
Por ejemplo, un objeto Persona, o un Usuario, puede representar una persona
real, en el manejo de usuarios de una aplicación.
Si seguimos con el ejemplo de Persona, una persona puede comer, vestirse,
trasladarse, leer, y muchas cosas más! Si revisamos la primera definición,
dice que sabe “responder ciertos mensajes” entonces, estos son, los
mensajes de los que hablábamos.
¿ Qué es un Mensaje ?
En una aplicación orientada a objetos, entonces, tenemos objetos que se
piden cosas entre sí. Por lo que, un mensaje, es una comunicación entre dos
objetos, emisor y receptor, donde el emisor le pide algo al receptor, y puede
(o no) obtener algo como respuesta.
Por ejemplo, si a un objeto Persona le pido que me diga su edad, voy a recibir
como respuesta un número que representa la edad de la persona.
Si tengo un objeto Alumno, podría pedirle los cursos que está haciendo
actualmente, ¿y en este caso que me devuelve? Me devuelve un objeto que
representa el conjunto de cursos que está haciendo.
¿ Qué es el Comportamiento ?
Ya dijimos que un objeto era un ente abstracto, que sabía enviar y responder
mensajes. Y que nosotros debemos definir cuáles son los mensajes que un
objeto debe entender.
El comportamiento, es el conjunto de mensajes que un objeto entiende, y a
los que puede o no responder. Lo importante, es que lo entiende.
Con este nuevo concepto, podríamos entonces entender un objeto como:
“Un ente computacional que exhibe comportamiento”.
De esta forma, dado un objeto, por ejemplo Persona, uno podría preguntar,
¿cuál es el comportamiento de una Persona? Y ahí uno debe responder con
todo lo que el objeto persona sabe hacer. Esto, lo define el programador de
ese objeto.
Dicho de otra manera, el “comportamiento” son las cosas que sabe hacer un
objeto, el conjunto de mensajes que un objeto le va a poder enviar.
¿ Qué es un Ambiente ?
Los objetos nacen y mueren, o sea “viven”. En general nacen porque
alguien los creó ¿quién es ese alguien? un objeto! como todo... y se mueren
porque alguien los destruye, esto también dependerá del lenguaje, pero
vamos a hablar de esto más adelante.
Los objetos viven “dentro de la computadora”, en algún lugar determinado,
que es el responsable de contenerlos, manejar su ciclo de vida, dar el
contexto para la creación y el envío de mensajes.
Ejercicio 01
Una empresa se dedica al alquiler de DVD. Dicha empresa tiene un local de atención al público donde
están expuestas las carátulas de los DVD más demandados y las últimas novedades, aunque también
existen listados en papel de todos los títulos que se podrían alquilar. Cuando un cliente solicita en
alquiler un título, se comprueba si hay ejemplares disponibles y si el cliente no tiene problemas por
ejemplares no devueltos, se alquila el DVD quedando constancia de la fecha de alquiler y la fecha
máxima de entrega; de forma que cuando el cliente devuelva el ejemplar se podrá comprobar si se
le tiene que imponer una sanción. Cada cliente puede solicitar un listado de los DVD que ha alquilado
previamente.
Ejercicio 02
Se tienen CLIENTES de los que se guarda un número de cliente, nombre, apellidos, lista de teléfonos,
fax y correo electrónico. Los clientes realizan PEDIDOS. (Un pedido no puede ser realizado por dos
clientes simultáneamente). Cada pedido tiene un número de pedido, una fecha asociada y una
persona de contacto. Cada pedido agrupa varias LÍNEAS DE DETALLE, cada una con una cantidad y
una referencia a un artículo. Los ARTÍCULOS tienen una descripción, una categoria y un modelo.
Varias líneas de detalle correspondientes a uno o varios pedidos (en su totalidad, ó en parte)
constituyen un REMITO. Los remitos contienen una fecha de entrega, una dirección de entrega y el
nombre y apellido del receptor. Uno ó varios remitos constituyen una FACTURA, la cual contiene un
número de factura, el monto, una fecha de cobro y una forma de pago.
Ejercicio 03
Un centro de instalaciones deportivas quiere hacer una aplicación de reservas. En el centro existen
instalaciones deportivas (piscinas, gimnasios, frontones, canchas, etc.). El centro en cuestión tiene
socios, de los cuales se almacenan su dirección, ciudad, provincia, teléfono, nombre y estado. Existen
una serie de artículos que se pueden alquilar junto con las reservas (pelotas, redes, raquetas, etc.).
Cada instalación es reservada por un socio en una fecha dada desde una hora de inicio hasta una
hora de fin siempre y cuando esté al día en sus cuotas. Cada reserva puede tener asociada uno o
varios artículos deportivos que se alquilan a parte. Por ejemplo si yo quiero hacer una reserva para
jugar a voleibol tengo que reservar una instalación cancha más un artículo red, más un artículo
pelota.
Los Atributos
Como mencionamos anteriormente, los atributos son las variables contenidas
por los objetos. Las clases definen los atributos y los objetos los “completan”.
Las variables de una clase definen las características de sus objetos, por
ejemplo:
Ejercicio 01
Una empresa se dedica al alquiler de DVD. Dicha empresa tiene un local de atención al público donde
están expuestas las carátulas de los DVD más demandados y las últimas novedades, aunque también
existen listados en papel de todos los títulos que se podrían alquilar. Cuando un cliente solicita en
alquiler un título, se comprueba si hay ejemplares disponibles y si el cliente no tiene problemas por
ejemplares no devueltos, se alquila el DVD quedando constancia de la fecha de alquiler y la fecha
máxima de entrega; de forma que cuando el cliente devuelva el ejemplar se podrá comprobar si se
le tiene que imponer una sanción. Cada cliente puede solicitar un listado de los DVD que ha alquilado
previamente.
Ejercicio 02
Se tienen CLIENTES de los que se guarda un número de cliente, nombre, apellidos, lista de teléfonos,
fax y correo electrónico. Los clientes realizan PEDIDOS. (Un pedido no puede ser realizado por dos
clientes simultáneamente). Cada pedido tiene un número de pedido, una fecha asociada y una
persona de contacto. Cada pedido agrupa varias LÍNEAS DE DETALLE, cada una con una cantidad y
una referencia a un artículo. Los ARTÍCULOS tienen una descripción, una categoria y un modelo.
Varias líneas de detalle correspondientes a uno o varios pedidos (en su totalidad, ó en parte)
constituyen un REMITO. Los remitos contienen una fecha de entrega, una dirección de entrega y el
nombre y apellido del receptor. Uno ó varios remitos constituyen una FACTURA, la cual contiene un
número de factura, el monto, una fecha de cobro y una forma de pago.
Ejercicio 03
Un centro de instalaciones deportivas quiere hacer una aplicación de reservas. En el centro existen
instalaciones deportivas (piscinas, gimnasios, frontones, canchas, etc.). El centro en cuestión tiene
socios, de los cuales se almacenan su dirección, ciudad, provincia, teléfono, nombre y estado. Existen
una serie de artículos que se pueden alquilar junto con las reservas (pelotas, redes, raquetas, etc.).
Cada instalación es reservada por un socio en una fecha dada desde una hora de inicio hasta una
hora de fin siempre y cuando esté al día en sus cuotas. Cada reserva puede tener asociada uno o
varios artículos deportivos que se alquilan a parte. Por ejemplo si yo quiero hacer una reserva para
jugar a voleibol tengo que reservar una instalación cancha más un artículo red, más un artículo
pelota.
Las Operaciones
Las operaciones son acciones contenidas por el objeto que definen su
comportamiento.
Ejercicio 01
Una empresa se dedica al alquiler de DVD. Dicha empresa tiene un local de atención al público donde
están expuestas las carátulas de los DVD más demandados y las últimas novedades, aunque también
existen listados en papel de todos los títulos que se podrían alquilar. Cuando un cliente solicita en
alquiler un título, se comprueba si hay ejemplares disponibles y si el cliente no tiene problemas por
ejemplares no devueltos, se alquila el DVD quedando constancia de la fecha de alquiler y la fecha
máxima de entrega; de forma que cuando el cliente devuelva el ejemplar se podrá comprobar si se
le tiene que imponer una sanción. Cada cliente puede solicitar un listado de los DVD que ha alquilado
previamente.
Ejercicio 02
Se tienen CLIENTES de los que se guarda un número de cliente, nombre, apellidos, lista de teléfonos,
fax y correo electrónico. Los clientes realizan PEDIDOS. (Un pedido no puede ser realizado por dos
clientes simultáneamente). Cada pedido tiene un número de pedido, una fecha asociada y una
persona de contacto. Cada pedido agrupa varias LÍNEAS DE DETALLE, cada una con una cantidad y
una referencia a un artículo. Los ARTÍCULOS tienen una descripción, una categoria y un modelo.
Varias líneas de detalle correspondientes a uno o varios pedidos (en su totalidad, ó en parte)
constituyen un REMITO. Los remitos contienen una fecha de entrega, una dirección de entrega y el
nombre y apellido del receptor. Uno ó varios remitos constituyen una FACTURA, la cual contiene un
número de factura, el monto, una fecha de cobro y una forma de pago.
Ejercicio 03
Un centro de instalaciones deportivas quiere hacer una aplicación de reservas. En el centro existen
instalaciones deportivas (piscinas, gimnasios, frontones, canchas, etc.). El centro en cuestión tiene
socios, de los cuales se almacenan su dirección, ciudad, provincia, teléfono, nombre y estado. Existen
una serie de artículos que se pueden alquilar junto con las reservas (pelotas, redes, raquetas, etc.).
Cada instalación es reservada por un socio en una fecha dada desde una hora de inicio hasta una
hora de fin siempre y cuando esté al día en sus cuotas. Cada reserva puede tener asociada uno o
varios artículos deportivos que se alquilan a parte. Por ejemplo si yo quiero hacer una reserva para
jugar a voleibol tengo que reservar una instalación cancha más un artículo red, más un artículo
pelota.
Introducción al Paradigma de Objetos
Introducción al
Paradigma de Objetos
Introducción al Paradigma de Objetos
Red: educacionitpiso10
Pass: 43280457 (es el teléfono)
Introducción al Paradigma de Objetos
Los Paradigmas
Un Paradigma es un modelo o patrón en cualquier
disciplina científica
Que es un Modelo ?
Un modelo es una abstracción de la
realidad
Altamente Escalable
Fácil de Mantener
Fácil de Reutilizar
Muy Simple
Introducción al Paradigma de Objetos
Que es un Objeto
Un objeto es una la instancia de una
clase, podemos decir que el objeto
representa algo en particular
Poseen un comportamiento
(realizan operaciones de acuerdo a
sus métodos)
Introducción al Paradigma de Objetos
Ejercicio #1 – Solución
Ejercicio #1 – Codificación
class Banco {
// Atributos aquí
// Métodos aquí
}
Introducción al Paradigma de Objetos
TIPS
Los atributos son características de una clase
Los tipos de datos a utilizar para este ejercicio son: String, int, long, float, double, Date
PREGUNTA
Donde ubicarías los atributos cantidadDeEmpleados, numeroDeCuenta y edad?
Introducción al Paradigma de Objetos
Ejercicio #2 – Solución
Ejercicio #2 – Solución
Ejercicio #2 – Codificación
class ClientePyme {
// Atributos aquí
String razonSocial;
String direccion;
Date fechaDeAlta;
CuentaCorriente cuenta;
// Métodos aquí
}
Introducción al Paradigma de Objetos
Ejercicio #3 – Solución
Banco:
informarCantidadDeEmpleados(), informarCantidadDeSucursales(),
informarSucursales(), calcularFacturacionAnual(),
calcularFacturacionMensual(), informarClientes()
Sucursal:
informarDireccion(), informarCantidadDeEmpleados,
calcularFacturacionMensual(), calcularFacturacionAnual(),
informarClientes(), informarDatosDeCuenta(nroDeCuenta)
Ejercicio #3 – Solución
ClienteCorporacion: infomarMovimientosEnCuentas(), informarDatos()
Ejercicio #3 – Solución
DirectorGeneral: informarDatos()
DirectorRegional: informarDatos()
DirectorDeSucursal: informarDatos()
Introducción al Paradigma de Objetos
Ejercicio #3 – Codificación
class CajaDeAhorro {
// Atributos aquí
float saldo;
// Métodos aquí
void informarSaldo() {
// Imprime el atributo saldo
print(saldo);
}
float obtenerSaldo(){
// Retorna el saldo
return saldo;
}
}
Introducción al Paradigma de Objetos
Ejercicio #3 – Codificación
class CajaDeAhorro {
// Atributos aquí
float saldo;
// Métodos aquí
void depositarDinero(float unMonto) {
// Actualiza el valor del atributo saldo
saldo = saldo + unMonto;
}
Nota: en PHP la sobrecarga tal como se presenta en el material de clases no es posible, por lo que
se podrá profundizar más sobre el tema en el curso de la carrera de PHP correspondiente.
class electrodomestico{
String nombre;
int voltaje;
float precio;
String origen;
encender(){
}
usar(){
}
apagar(){
}
aumentarprecio(){
}
bajarprecio(){
}
}
class alimento{
String nombre;
String origen;
int calorias;
String gusto;
float precio;
int temperatura;
calentar(){
}
enfriar(){
}
preparar(){
}
}
Relaciones entre objetos
Relaciones simples
Se produce cuando una clase se relaciona con otra clase. La relación es única
Por ejemplo: Auto tiene una relación simple con Motor, porque un auto puede
tener un motor únicamente
CASO #1 CASO #2
Relaciones Múltiples
Se produce cuando una clase se relaciona con una o muchas otras clases. La
relación es múltiple
Por ejemplo: Auto tiene una relación múltiple con Rueda, por que un auto
puede tener varias ruedas
CASO #1
CASO #2
La Visibilidad
La visibilidad o accesibilidad determina el alcance que tiene un atributo u
operación. El alcance (scope) de un miembro representa qué partes pueden
acceder a dicho miembro. El alcance está determinado por los modificadores
de visibilidad, presentados como “público” (su simbología es el signo +) y
como “privado” (su simbología es el signo -)
Que un atributo u operación sea privado significa que aquel atributo u
operación solo puede ser accedido desde dentro del objeto que lo contiene.
En cambio si este atributo u operación fuera público podría ser accedido por
cualquier objeto.
En el siguiente ejemplo podemos ver los miembros públicos y privados de la
clase “Auto” diferenciados por los signos “-“ y “+”:
El Encapsulamiento
El encapsulamiento es una de las características representativas de la POO.
Este concepto tiene que ver con la forma correcta de pensar en clases y
objetos. Significa aislar o independizar las clases de nuestro programa de tal
manera que su funcionamiento sea independiente del de las otras clases.
class electrodomestico{
String nombre;
int voltaje;
float precio;
String origen;
encender(){
}
usar(){
}
apagar(){
}
aumentarprecio(){
}
bajarprecio(){
}
}
class alimento{
String nombre;
String origen;
int calorias;
String gusto;
float precio;
int temperatura;
calentar(){
}
enfriar(){
}
preparar(){
}
}
Los Constructores
Toda clase tiene un constructor. Los constructores son operaciones que son
invocadas al instanciar una clase. Los constructores se encargan de inicializar
atributos y configurar todo lo que sea necesario antes de que comience a
existir el objeto.
Al tratarse de operaciones, los constructores pueden contener cualquier
comportamiento, aunque éstas no tengan que ver exactamente con
“construir” el objeto. Es posible tener más de un constructor en una misma
clase; en este caso, cada constructor debe aceptar parámetros distintos para
poder así distinguirlos.
Los constructores suelen llamarse con el mismo nombre de las clases, como
se muestra a continuación:
Los Destructores
Los destructores son funciones miembro especiales que sirven para eliminar
un objeto de una determinada clase. El destructor realizará procesos
necesarios cuando un objeto termine su ámbito temporal, por ejemplo
liberando la memoria dinámica utilizada por dicho objeto o liberando recursos
usados, como archivos, dispositivos, etc.
Los destructores tienen ciertas características:
// Métodos aquí
void acelerar() {
velocidad = velocidad + 10;
}
La relación es única
Por ejemplo: Auto tiene una relación simple con Motor, por que
un auto puede tener un motor únicamente
CASO #1
CASO #2
Introducción al Paradigma de Objetos
TIP: Para este ejercicio asumiremos que cada cliente (cualquier tipo)
puede tener una única cuenta
Introducción al Paradigma de Objetos
Ejercicio #4 – Solución
Ejercicio #4 – Codificación
class ClientePyme {
// Atributos aquí
String razonSocial;
CuentaCorriente cuenta;
class Banco {
// Atributos aquí
String nombre;
GerenteGeneral gerente;
}
Introducción al Paradigma de Objetos
Por ejemplo: Auto tiene una relación múltiple con Rueda, por que
un auto puede tener varias ruedas
CASO #1
CASO #2
Introducción al Paradigma de Objetos
TIP: Para este ejercicio asumiremos que cualquier tipo de cliente puede
tener mas de una cuenta corriente
Introducción al Paradigma de Objetos
Ejercicio #5 – Solución
Ejercicio #5 – Codificación
class ClienteCorporacion {
// Atributos aquí
String razonSocial;
Collection<CuentaCorriente> cuentas;
class Banco {
// Atributos aquí
String nombre;
GerenteGeneral gerente;
Collection<Sucursal> sucursales;
Collection<DirectorRegional> directores;
}
Introducción al Paradigma de Objetos
Que es la Visibilidad
Es la posibilidad de “ver” un atributo o método
Que es la Visibilidad
// Métodos aquí
public void acelerar() {
velocidad = velocidad + 10;
}
Que es el Encapsulamiento
Es el ocultamiento del estado de un objeto
// Métodos aquí
public void setNombre(String n) {
nombre = n;
}
El constructor tiene el mismo nombre que la clase, y para invocarlo hay que
utilizar una palabra clave del lenguaje de programación que se denomina
new
Ejercicio #6 – Constructores
Asumiendo que cada clase cliente cuenta con dos constructores (un constructor
vacío y un constructor que recibe como parámetros un identificador, la razón
social, y la dirección) y un método informarDatos() el cual informa el valor de sus
atributos.
Una clase puede tener todos los constructores que sean necesarios
Que ocurre si hay dos constructores con la misma firma? Por ejemplo:
Alumno(String n){
nombre = n; NO FUNCIONA!
} Al igual que los métodos, si tienen misma cantidad
Alumno(String a){ de parámetros, deben tener diferente tipo de dato
apellido = a;
}
Introducción al Paradigma de Objetos
La clase “Programa”
Quien instancia el primer objeto?
La clase Programa a través de un método llamado main(), que
se invoca automáticamente al ejecutar nuestra aplicación
class Programa {
// código aquí
}
Introducción al Paradigma de Objetos
// Métodos aquí
public void informar(){
print(nombre + apellido);
}
}
Introducción al
Paradigma de Objetos
Módulo 2 - Desafío
Ejercicio 2
Implementar un mecanismo de herencia para los instrumentos musicales, identificar cuáles clases podrían ser
abstractas.
Ejercicio 3
Implementar un mecanismo de herencia para el caso Banco Max, identificar cuáles clases podrían ser abstractas.
Polimorfismo
Otro mecanismo presente en el POO es el polimorfismo. En el POO
encontramos dos tipos de polimorfismo, uno de ellos ya lo vimos y se conoce
comúnmente como "Sobrecarga de Operaciones". El otro, el que veremos
ahora, tiene que ver con la capacidad que tienen las clases de redefinir el
comportamiento de una operación heredada de la clase padre.
Esto significa que, en una clase padre conceptualmente más general, al tener
un método al cual le dimos cierto comportamiento básico, que puede no ser
exactamente lo que debe suceder al invocar este método desde un objeto
correspondiente a una clase hija, debemos sobrescribir esa operación en la
clase hija con la funcionalidad o comportamiento apropiado. Si la clase hija
no redefiniera ese comportamiento, el comportamiento sería el mismo de la
clase padre (tras invocar a dicho método).
Por lo cual, tendríamos una clase padre con la operación “hacerAlgo” que
hace “x” cosa, y una clase hija con la operación “hacerAlgo” que hace “y”
cosa, es decir que la misma operación tiene comportamientos distintos según
la clase
En el siguiente caso:
¿ Dónde se utiliza ?
UML se utiliza dentro del marco de IT, aunque puede utilizarse en proyectos que no son de tecnología
de la información, como ser el modelado de un motor o de una turbina.
En el campo de IT, se utiliza tanto para sistemas monolíticos como para sistemas distribuidos, abarca
desde proyectos pequeños hasta grandes proyectos. Permite realizar la integración del software,
donde representa el correcto enlace de los roles para lograr el éxito de la construcción del sistema.
En proyectos de software, es utilizado desde la gestación hasta la instalación y el testing.
Si bien para utilizar UML es posible realizar los distintos diagramas con papel y lápiz, es conveniente
contar con alguna herramienta del tipo IDE que facilite su construcción, corrección e integración entre
diagramas.
Diagrama de Clases
El Diagrama de Clases tiene como objetivo describir las clases del dominio y sus relaciones. Permite
modelar la estructura del sistema desde un punto de vista estático, modelando las clases desde
distintos enfoques de acuerdo a la etapa del proyecto.
Está compuesto por clases, relaciones entre clases y opcionalmente los paquetes que agrupan a las
clases.
Clases
Una clase describe un conjunto de objetos con propiedades (atributos) similares y un comportamiento común. Los
objetos son instancias de las clases.
No existe un procedimiento inmediato que permita localizar las clases del diagrama de clases. Éstas suelen
corresponderse con sustantivos que hacen referencia al ámbito del sistema de información y que se encuentran
en los documentos de las especificaciones de requisitos y los casos de uso.
Dentro de la estructura de una clase se definen los atributos y las operaciones o métodos.
Los atributos de una clase representan los datos asociados a los objetos instanciados por esa clase.
Las operaciones o métodos representan las funciones o procesos propios de los objetos de una clase,
caracterizando a dichos objetos.
El diagrama de clases permite representar clases abstractas. Una Clase abstracta es una clase que no puede
existir en la realidad, pero que es útil conceptualmente para el diseño del modelo orientado a objetos. Las clases
abstractas no son instanciables directamente sino en sus descendientes. Una clase abstracta suele ser situada en
la jerarquía de clases en una posición que le permita ser un depósito de métodos y atributos para ser compartidos
o heredados por las subclases de nivel inferior.
Las clases y en general todos los elementos de los diagramas, pueden estar clasificados de acuerdo a varios
criterios, como por ejemplo su objetivo dentro de un programa. Esta clasificación adicional se expresa mediante un
Estereotipo. Algunos de los autores de métodos OO, establecen una clasificación de todos los objetos que pueden
aparecer en un modelo.
Relaciones
Los tipos más importantes de relaciones estáticas entre clases son los siguientes:
Asociación
Las relaciones de asociación representan un conjunto de enlaces entre objetos o instancias de clases.
Es el tipo de relación más general, y denota básicamente una dependencia semántica. Por ejemplo,
una Persona trabaja para una Empresa. Cada asociación puede presentar elementos adicionales que
doten de mayor detalle al tipo de relación:
Rol, o nombre de la asociación, que describe la semántica de la relación en el sentido indicado. Por
ejemplo, la asociación entre Persona y Empresa recibe el nombre de trabaja para, como rol en ese
sentido.
Multiplicidad, que describe la cardinalidad de la relación, es decir, especifica cuántas instancias de
una clase están asociadas a una instancia de la otra clase. Los tipos de multiplicidad son:
● Uno a uno.
● Uno a muchos.
● Muchos a muchos.
Herencia
Las jerarquías de generalización/especialización se conocen como herencia. Herencia es el
mecanismo que permite a una clase de objetos incorporar atributos y métodos de otra clase,
añadiéndolos a los que ya posee. Con la herencia se refleja una relación “es_un” entre clases. La
clase de la cual se hereda se denomina superclase, y la que hereda subclase. La generalización define
una superclase a partir de otras. Por ejemplo, de las clases profesor y estudiante se obtiene la
superclase persona. La especialización o especificación es la operación inversa, y en ella una clase
se descompone en una o varias subclases. Por ejemplo, de la clase empleado se pueden obtener las
subclases secretaria, técnico e ingeniero.
Agregación. La agregación es un tipo de relación jerárquica entre un objeto que representa la
totalidad de ese objeto y las partes que lo componen. Permite el agrupamiento físico de estructuras
relacionadas lógicamente. Los objetos “son-parte-de” otro objeto completo. Por ejemplo, motor,
ruedas, carrocería son parte de automóvil.
Composición. La composición es una forma de agregación donde la relación de propiedad es más
fuerte, e incluso coinciden los tiempos de vida del objeto completo y las partes que lo componen. Por
ejemplo, en un sistema de Máquina de café, las relaciones entre la clase máquina y producto, o entre
máquina y depósito de monedas, son de composición.
Dependencia
Una relación de dependencia se utiliza entre dos clases o entre una clase y una interfaz, e indica que
una clase requiere de otra para proporcionar alguno de sus servicios.
Diagrama de Objetos
El Diagrama de Objetos tiene como objetivo describir los objetos del dominio y sus relaciones. Permite
representar al sistema en un momento determinado del tiempo, es proporcional a obtener una
fotografía o snapshot del sistema en un momento determinado.
Está compuesto por objetos y relaciones de enlace. También es posible pensarlo como una instancia
de un Diagrama de Clases.
Diagrama de Estados
El Diagrama de Estados tiene como objetivo describir los estados por los cuales puede pasar un
objeto durante su ciclo de vida. Permite modelar tanto estas simples como compuestos y
concurrentes.Está compuesto por estados, pseudo-estados y transiciones entre estados.
Diagrama de Actividades
El Diagrama de Actividades tiene como objetivo describir las acciones que ocurren dentro de un
proceso. Se utiliza principalmente para modelar flujo de trabajo o workflow, con lo cual visualiza las
acciones de manera ordenada.
Está compuesto por acciones simples y concurrentes, y transiciones entre las acciones.
Diagrama de Comunicación
El Diagrama de Comunicación tiene como objetivo describir cómo colaboran o se comunican los
distintos objetos entre sí para conseguir un objetivo. Se lo suele llamar también Diagrama de
Colaboración. Es posible verlo como una extensión del Diagrama de Objetos, ya que es muy parecido
pero tiene como valor agregado los mensajes que se envían entre los objetos.
Está compuesto por objetos, relaciones de enlace y relaciones del tipo llamadas, representando qué
objeto se comunica con que otro. Es semánticamente equivalente al Diagrama de Secuencia.
Diagrama de Secuencia
El Diagrama de Secuencia tiene como objetivo describir cómo colaboran los distintos objetos entre sí
para conseguir un objetivo a lo largo del tiempo. Está directamente relacionado con el Diagrama de
Comunicación ya que el objetivo es el mismo, pero tiene la particularidad de estar obligatoriamente
ordenado en el tiempo.
Está compuesto por objetos y relaciones del tipo llamadas, representando qué objeto se comunica
con que otro.
Es semánticamente equivalente al Diagrama de Comunicación.
Diagrama de Componentes
El Diagrama de Componentes tiene como objetivo describir la relación que existe entre los distintos
componentes del sistema. Está directamente vinculado con el diseño del sistema, permitiendo
modelar las relaciones e interfaces que existen entre los componentes. Está orientado a la
implementación del sistema.
Está compuesto por componentes, interfaces y sus relaciones.
Diagrama de Despliegue
El Diagrama de Despliegue tiene como objetivo describir la arquitectura de un sistema. Es posible
representar la arquitectura desde el punto de vista lógico, basándose en la organización del software,
o desde una punto de vista físico, representando directamente cada unidad de hardware.
Está compuesto por nodos, componentes y sus relaciones.
CLASIFICACIÓN DE DIAGRAMAS
Categorías
Es posible clasificar a los diagramas según si tienen alguna relación con el tiempo o no. Existen dos
posibles categorías, los diagramas estáticos y los diagramas dinámicos.
Diagramas Estáticos
Los Diagramas Estáticos son aquellos que no tienen ninguna relación con el tiempo. Generalmente
representan a estructuras o a posibles acciones pero sin una relación directa con el tiempo.
Estos diagramas son:
● Diagrama de Clases
● Diagrama de Objetos
● Diagrama de Casos de Uso
● Diagrama de Componentes
● Diagrama de Despliegue
Diagramas Dinámicos
Los Diagramas Dinámicos son aquellos que tienen relación con el tiempo. Están directamente
vinculados con acciones que ocurren bajo cierta secuencia, es decir primero una acción, luego otra,
y así sucesivamente.
Estos diagramas son:
● Diagrama de Actividades
● Diagramas de Interacción (es una subcategoría, que incluye a los Diagramas de Secuencia y
Comunicación)
● Diagrama de Estado
Diagramas Estructurales
Los Diagramas Estructurales son aquellos que reflejan relaciones estáticas de una estructura.
Diagramas de Comportamiento
Los Diagramas de Comportamiento son aquellos que reflejan características de comportamiento del
sistema o modelan procesos de negocios.
Ejercicio 2
En base al ejercicio de Herencia de Instrumentos Musicales, realizar el diagrama de clases UML.
Ejercicio 3
En base al ejercicio de Herencia de Figuras Geométricas, realizar el diagrama de clases UML.
Introducción al Paradigma de Objetos
// Obtiene el cliente
ClienteIndividuo c = ClienteIndividuo(“27014589”);
// Realiza el deposito
cda.depositar(2500);
Ejercicio #7 – Codificación
Código de la clase Programa:
class Programa {
// Realiza la extraccion
cc.extraer(20000);
}
Introducción al Paradigma de Objetos
Ejercicio #7 – Codificación
Código de la clase ClienteCorporativo:
class ClienteCorporativo {
// Atributos aquí
private String cuit;
private CuentaCorriente cuenta;
// Constructores
ClienteCorporativo(String c) {
cuit = c;
// busca en la Base de Datos los datos
// de este cliente según el cuit y
// completa los atributos
}
// Métodos aquí
public CuentaCorriente obtenerCuentaCorriente(){
return cuenta;
}
}
Introducción al Paradigma de Objetos
Ejercicio #7 – Codificación
class CuentaCorriente {
Mecanismo de Herencia
Mecanismo que permite que una clase "herede
de otra clase" o "extienda otra clase“, recibiendo
o heredando atributos y operaciones de su clase
"padre".
Subclase Subclase
Introducción al Paradigma de Objetos
Ejercicio #8 – Herencia
A partir de las clases detectadas previamente, identificar
las relaciones de herencia que existen
Ejercicio #8 – Solución
Introducción al Paradigma de Objetos
Ejercicio #8 – Codificación
class Cliente {
// Atributos
String cuit;
String direccion;
// Constructores
// Métodos
}
// Constructores
// Métodos
}
Introducción al Paradigma de Objetos
Que es el Polimorfismo
Es la posibilidad de que una clase presente un comportamiento distinto de
acuerdo a una situación
Polimorfismo sin redefinición: Una clase que posee varios métodos llamados
iguales pero con diferentes firmas. También llamado Sobrecarga de
Operaciones
Que es el Polimorfismo
Polimorfismo con redefinición: Una subclase hereda métodos de su
superclase pero decide modificarlos por que debería comportarse de forma
diferente. También llamado Redefinición de Métodos o Method Override
// Métodos
public void extraer(int monto) {
saldo = saldo – monto;
}
}
// Métodos
public void extraer(int monto) {
// este método se vuelve a escribir, misma firma pero diferente cuerpo
// aquí el código que contemple la extracción con saldo descubierto
}
}
Introducción al Paradigma de Objetos
class CajaDeAhorroConDescubierto {
// Atributos aquí
public float saldo;
public static int descubierto = 5000;
Asumimos en este caso que todas las
} cajas de ahorro cuentan con el mismo
descubierto
Introducción al Paradigma de Objetos
// Atributos aquí
// Métodos aquí
}
Introducción al Paradigma de Objetos
FIN
Muchas Gracias!
Introducción al
Paradigma de Objetos
Módulo 3 - Desafío
¿Qué es la programación?
Programar no es otra cosa que indicarle a una Dicho de una manera más simple, si el
computadora qué actividades debe realizar, de programador le “dice” a la computadora
qué forma y en qué orden. “Apágate”, la computadora lo hará.
Una definición más formal sería: programar es Es decir, únicamente hará lo que explícitamente
escribir instrucciones para realizar una le digamos que haga.
actividad en algún lenguaje de programación
con la finalidad de que sean ejecutadas por la
computadora para solucionar un problema.
Java Standard Web Programming
¿Qué es Java?
Java es un lenguaje de programación y una
plataforma informática comercializada, por
primera vez en 1995, por Sun Microsystems, así
de fácil resume la propia web de Java qué es esta
tecnología.
Organización de Java
¿Cómo trabaja?
Java es un lenguaje de programación que Java necesita los dos pasos: compilar a un nivel
necesita ser compilado e interpretado, pero intermedio llamado bytecode, que después es
¿qué significa esto? interpretado.
1011010101101101010110101
1011010101101101010110101 10110101011011010
1011010101101101010110101 10110101011011010
10110101011011010
1011010101101101010110101
10110101011011010
1011010101101101010110101
Java Standard Web Programming
Sintaxis
Como cualquier lenguaje de programación, Java
tiene su propia estructura y reglas de sintaxis. Yo voy a salir a correr
Es un derivado del lenguaje C, por lo que sus
reglas de sintaxis son similares.
Poco a poco, veremos que hay varias formas de Yo correr a voy salir
escribir palabras en Java por lo que se tocarán
estos conceptos de forma genérica.
Comentarios
Sabemos que hay ciertas reglas para escribir en Comentarios de documentación
este lenguaje, pero ¿qué pasa si nos toca revisar Comienzan con barra y doble asterisco “/**”.
un código realizado por otro desarrollador, o si Cada línea intermedia debe poseer un asterisco
simplemente examinamos algo hecho por “*” al principio. Para finalizar el comentario se
nosotros que no hemos visto hace tiempo? utiliza un asterisco con barra “*/”.
situación. Brindan la posibilidad de crear bloques Comienzan con barra y asterisco “/*”. Finalizan
de comentarios que ayuden a escribir y a con asterisco y barra: “*/”.
explicar el código.
Comentarios de una sola Línea
Cuando el compilador de Java ve estas Se realizan con doble barra “//”.
estructuras, omite la evaluación de la sintaxis.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Nomenclatura
Así como al escribir una carta o un correo
debemos colocar los nombres de personas en
mayúsculas, o comenzar una oración en
mayúsculas; en Java también hay ciertos
estándares que aunque no dan error es bueno
seguirlos.
Todas las letras del nombre se encuentran El nombre viene porque se asemeja a las dos
en mayúsculas. jorobas de un camello, y se puede dividir en
dos tipos:
Ejemplo: EJEMPLODENOMENCLATURA
Es usado por lo general para las constantes. ● Upper Camel Case: Es cuando la primera letra
de cada una de las palabras es mayúscula.
Maven
¿Cómo se comienza un proyecto y qué estructura Beneficios
tendrá?
● Gestión de dependencias (librerías) y sus
Los IDE proporcionan diferentes formas de crear versiones.
un proyecto, pero en el mundo IT es bueno
● Construcción de proyectos (de código a
regirse por estándares y buenas prácticas.
entregable .war, .ear, .zip, y otros).
Maven solventa esto y brinda muchos beneficios.
● Estructura única de proyecto compatible con
todos los entornos de desarrollo y sistemas de
integración continua.
Java Standard Web Programming
Proyecto
Recursos JAVA
Otros Recursos
Recursos WEB
Primer Programa
Este es el primer programa que todo
desarrollador realiza cuando toma contacto con
un nuevo lenguaje de programación.
Mostrar información
Como se observa en el slide anterior, se mostró un mensaje
en la consola del IDE con la utilidad System.out.println().
También es posible hacerlo System.out.print().
Los dos métodos son útiles para mostrar texto por pantalla
y la única diferencia es que println() muestra el texto y
luego deja un salto de línea, mientras que print()
no lo hace.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1
Variables y constantesWeb
HTML5: Fundamentos
Java Standard Web Programming
Introducción
Para manejar y/o manipular información, dentro Al espacio de memoria que guardará un dato
de un sistema, necesitamos almacenarla en (variable) se le debe asignar un identificador
algún lugar mientras se procesa. Ese lugar será “Nombre”.
una base de datos o un archivo que persista en el
tiempo para que, luego, se pueda recuperar.
Identificador
Se puede decir que gran parte del tiempo que
dedicamos a programar es para darle un nombre Reglas de nomenclatura:
a las variables y constantes. Aunque se puede ● No deben contener espacios.
asignar cualquier identificador, es recomendable
● Los únicos caracteres permitidos son
utilizar nombres significativos que describan
el guión bajo “_” y el “$” .
para qué se usarán.
● Pueden contener números y letras.
Ejemplos
● Si posee números, estos no deben ir
● Variables al inicio del identificador.
numero1, edad, nombre, $contador, etc.
● Constantes
IMPUESTO, VERSION, y otros.
Java Standard Web Programming
Para constantes
{ }
● Upper Case con Snake Case:
DIAS_SEMANA, URL_BUSCADOR, etc.
Java Standard Web Programming
Sintaxis
Tipos de datos
Primitivos Objetos
Son los elementales y fundamentales dentro de Son tipos de estructuras o datos especiales, que
Java. Se pueden dividir en: se comprenderán mejor más adelante.
Tipos de datos
Secuencias de escape
Suministran un mecanismo que permite expresar
códigos de caracteres que, de otro modo, no se
permitirían en los string.
Java Standard Web Programming
Secuencias de Escape
Secuencia Descripción
\' Comilla simple. Permite mostrar por pantalla el carácter comilla simple.
\\ Barra inversa.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1
Operadores
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
En esta sección, aprenderemos a manipular la
información y a realizar preguntas a las variables
que almacenamos y para eso tenemos los
operadores: símbolos matemáticos que indican
que debe ser llevada a cabo una operación
específica sobre un cierto número de operandos
(cantidad de elementos).
Java Standard Web Programming
Operadores
Operadores Jerarquías
Recuerda:
Módulo o resto
Es el número que queda después de haber
dividido un número no divisible.
Dividendo 17 5 Divisor
Resto 2
Java Standard Web Programming
Operadores de asignación
Esencialmente, son un grupo que permite asignar
un valor a una variable:
Operadores de comparación
Comparan dos valores y devuelven Verdadero o Falso.
Operadores incrementales
Son operadores unarios (un único operando). Ayudan a
incrementar y a disminuir el valor de una variable numérica.
Operadores lógicos
Son usados para concatenar dos o más expresiones
con operadores relacionales.
! Not !op1
Java Standard Web Programming
Ejercicios
1. Declarar e iniciar 2 variables que permitan
realizar y mostrar, en consola, las
operaciones básicas matemáticas (suma,
resta, división y multiplicación).
If
La estructura condicional más simple en programación es el
if y consiste en evaluar una o más condiciones que deben
estar entre paréntesis “()”. Si la evaluación devuelve true,
se ejecutarán las sentencias que están dentro del bloque.
Java Standard Web Programming
Introducción
Inicio del
programa
En Java las instrucciones se ejecutan de forma
lineal. En algunos momentos, se necesitará
ejecutar un código de acuerdo a si se cumple o no
una pregunta que se le hará al programa. no se cumple se cumple
Condición
Fin del
programa
Java Standard Web Programming
If - Else
El if solo garantiza que, si se cumple la
condición, se ejecutará la solución planteada en
el bloque ¿Qué ocurre si no se cumple y se
necesita otra solución?
Ejemplo
Java Standard Web Programming
If anidados
En el caso en que se deban evaluar múltiples
opciones y mostrar una solución distinta para
cada una de ellas, Java proporciona el
anidamiento de condicionales.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Switch
Es una estructura de selección que ayuda a Al entrar en una de las condiciones y no
evaluar múltiples opciones que puede poseer encontrar la sentencia “break” se ejecutarán
una variable o constante. todas las instrucciones de los demás casos, por
eso es importante usar la sentencia “break”, en
Este bloque es un poco distinto ya que comienza
algunos casos omitimos esta sentencia para
con los dos puntos “:” y finaliza con la palabra
simular un operador lógico OR.
“break”, adicionalmente el break le indicará al
software que salga del switch y deje de evaluar.
Java Standard Web Programming
Switch
Java Standard Web Programming
Operador Ternario
Aunque es un operador, se parece más a una
estructura condicional que podemos usar
cuando nos encontramos con un if-else, en
cada bloque hay una sola sentencia y lo que
cambia la sentencia es la misma variable.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1 - Laboratorio
Java Standard Web Programming
Ejercicios
Introducción
Los ciclos, también conocidos como “estructuras Determinados
repetitivas”, permiten ejecutar varias veces los
Son aquellos ciclos que sabemos de antemano la
mismos bloques o sentencias mientras se
cantidad de iteraciones máximas que va a tener
cumplan una o varias condiciones.
por ejemplo el ciclo for.
A cada entrada en el ciclo (bucle) se le conoce
como iteración.
Indeterminados
Ejemplo
Java Standard Web Programming
Ciclo
Inicio del
programa
Sigue el
programa
Fin del
programa
Java Standard Web Programming
While
Esta estructura es muy similar a la que vimos en
el condicional if, la diferencia radica en que si se
cumple la condición ejecutará las sentencias y/o
bloques que se encuentren dentro, volverá al
inicio y evaluará la condición nuevamente. Esto
se realizará hasta que la condición deje de
cumplirse.
Java Standard Web Programming
Do while
Trabaja de forma muy similar al while. La única
diferencia es que la condición se evalúa al final
del bloque.
Ejemplo
Java Standard Web Programming
For
En el siguiente código se observa que, aunque sabemos que
el while está entre los ciclos indeterminados, la cantidad
máxima de iteraciones es 10, además, para que el bucle no
se vuelva infinito, la variable a comparar en el condicional se
incrementa al final del bloque.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Break y Continue
Como ya se mencionó en la definición del La otra sentencia “continue” le indica al
condicional switch, la sentencia “break” provoca programa que omita todas las instrucciones
que la ejecución salga de la estructura. En este que se encuentren después de esta palabra
caso, hace exactamente lo mismo: le indica al dentro del bucle y salte a la siguiente iteración.
programa que salga del ciclo inmediato al
que pertenece.
ciclo { ciclo {
sentencia1; sentencia1;
break; continue;
sentencia2; sentencia2;
} }
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1
Arreglos
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
En ocasiones, será necesario utilizar muchas
Números
variables que pueden tener el mismo sentido.
Para esos casos, Java proporciona un tipo de índice 0 1 2
objeto llamado arreglo.
Valor 23.3 24.6 16.0
Se almacena un conjunto de variables, que
pertenecen al mismo tipo, bajo un mismo
Nombres
identificador.
índice 0 1 2 3
Al tener todos los valores bajo un mismo nombre
se accede a cada elemento a través de un Valor Octavio Mariana Analia Ariel
índice que comienza con el número cero, por lo
tanto el último elemento se encuentra en el índice
(longitudArreglo - 1)
Java Standard Web Programming
Arreglos Unidimensionales
Se pueden crear arreglos unidimensionales y también de
dos dimensiones (Matrices). En este curso solo veremos los
de una sola dimensión, pero ambos son muy parecidos.
Nombre Descripción
Introducción
Existe una utilidad que ayuda a capturar los Para poder obtener los datos ingresados por el
datos de la consola. Para ello, se debe importar usuario, se necesita crear un elemento con la
la biblioteca “java.util.Scanner”. siguiente estructura:
Java Standard Web Programming
Métodos
Cada vez que se use uno de los métodos de la Tipo de Dato Método
clase Scanner, la consola se quedará esperando
boolean nextBoolean()
que el usuario ingrese una información.
byte nextByte()
Es recomendable mostrar por pantalla un
mensaje que indique qué dato debe ingresar: double nextDouble()
float nextFloat()
int nextInt()
long nextLong()
short nextShort()
String next()
String nextLine()
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1 - Laboratorio
Java Standard Web Programming
Ejercicio
Generar un programa que le pida al usuario: Bonus avanzado
Ejemplo
Ejemplo
8 9 10 4
Java Standard Web Programming
Ejemplo
8 9 10 4
Java Standard Web Programming
Ejemplo
4 9 10 8
Java Standard Web Programming
Ejemplo
Ejemplo
9 8
4 8 10 9
Java Standard Web Programming
Ejemplo
10 8
4 8 9 10
Java Standard Web Programming
Ejercicio 1
Crear un programa que genere números enteros 4. Si el número es divisible por 3 y 5 mostrar
aleatorios entre 1 y la cantidad de elementos. FizzBuzz.
Mostrar cuáles son divisibles entre 3 y 5, con las
5. De lo contrario: mostrar el número.
siguientes condiciones:
Ejemplo
i
Java Standard Web Programming
Ejercicio 2
Crear un programa que multiplique dos Ejemplo de salida
números, con las siguientes condiciones:
Pilares de la POO
La programación Orientada a Objetos se basa en
4 pilares fundamentales:
Clase
Los tipos de datos que nos proporcionan los También, se pueden definir como una plantilla o
lenguajes de programación no son suficientes molde, en la que existen dos categorías de
para representar algo en la vida real. miembros a tener en cuenta:
1. Atributos (Datos).
Por ejemplo: un automóvil. Un automóvil necesita
mucho más que una cadena de caracteres, un 2. Métodos (Algoritmos).
número entero e incluso hasta un arreglo para que
podamos diferenciarlo de otros automóviles. En resumen, una clase es un conjunto de objetos
con características similares.
Atributos
Para crear una clase, se debe pensar en qué es lo Los atributos son características individuales
que hace único a cada objeto, es decir, cuáles son que diferencian un objeto de otro y determinan
los datos que diferencian una cosa de otra. Si su apariencia, estado u otras cualidades.
vemos un automóvil, ¿qué lo hace único entre
Suelen ser llamadas como: Variable de Instancia,
tantos? Podría ser su color, marca, patente u
Miembro de Instancia o Campo de Instancia.
otras características.
Métodos
Luego de definir los atributos, se debe analizar Cuando se llama a un método, la ejecución del
qué pueden hacer estos nuevos “tipos de datos”. programa pasa al método, ejecuta las
instrucciones que se encuentren en él y continúa
Por ejemplo: un automóvil puede encenderse, a partir del punto donde se produjo el llamado, es
apagarse y mostrar su información. decir, sigue su flujo natural.
Mensajes
Ejemplo
Métodos Atributos
(Acciones) (Características)
■ Encender() ■ Color
■ Apagar() ■ Marca
■ MostrarAtributos() ■ Patente
Java Standard Web Programming
Ejemplo
Paquete
Clase Identificador
Atributos
Métodos
Java Standard Web Programming
Instancia y objeto
Recordemos un poco; al crear una variable o
constante debemos definir: el tipo de dato, su
identificador y su valor inicial. Con eso logramos
poder acceder a ella más adelante y cambiar su
valor. Lo mismo ocurre con un objeto, lo primero
que debemos hacer es declarar: tipo de dato,
identificador y asignarle un espacio de memoria.
Esto significa: indicarle al software que debe
guardar bajo un mismo nombre una serie de
atributos y comportamientos.
Java Standard Web Programming
Ejemplo
Identificador
Declaración
Instancia
Cambiamos
los atributos
o asignamos
valores
Métodos
Java Standard Web Programming
Ejercicios
1. Realizar un sistema que agregue personas a
una lista. Se deben solicitar los siguientes
datos:
○ Nombre.
○ Apellido.
○ Tipo de documento.
○ Número de documento.
○ Edad.
Introducción
Recordemos que los métodos son un conjunto
de instrucciones definidas dentro de una clase,
que realizan una determinada tarea y a las que
podemos invocar mediante un nombre.
Parámetros y argumentos
Para que estos bloques de código sean mucho
más genéricos y los podamos aprovechar para
resolver varios temas con el mismo propósito,
los métodos proporcionan una forma de {
=
intercambiar información. }
Java Standard Web Programming
Parámetros Argumentos
Son la declaración de uno o más tipos de datos Son los valores que se envían al llamar al
(Variables u Objetos). método.
Tipos de métodos
Existen diferentes tipos de métodos:
Son métodos que pueden realizar operaciones y Son métodos que realizan operaciones sin
devuelven algo. devolver un valor u objeto concreto.
Se identifican por comenzar con un tipo de dato u Un método es tipo procedimiento en Java si
objeto. La devolución del resultado se expresa comienza con la palabra reservada void.
con la palabra reservada return seguida del
dato u objeto a devolver.
Java Standard Web Programming
Ejemplo
Notas
Sobrecarga de nombres
Muchas veces, se nos presenta que debemos
crear un parámetro para asignar el valor a una
variable de instancia y nos surge la necesidad de
pensar en un nombre que no “choque” con esa
variable. iTe
iTemostramos
mostramoslalasolución
solución
en
enlalasiguiente
siguientepantalla!
pantalla!
encendido = estado;
}
Java Standard Web Programming
Sobrecarga de métodos
Algo parecido se nos proporciona al definir en una clase
más de un método con el mismo nombre, con la condición
de que no puede haber dos de ellos con el mismo número
o tipo de parámetros.
Nota
Lo que hay que tomar en
cuenta es el nombre del
método y no lo que retorna.
Java Standard Web Programming
Constructor
Es un tipo de método especial que ayuda a
construir un objeto.
Ejemplo
Java Standard Web Programming
Ejercicios
Se realizarán mejoras al laboratorio anterior.
Paquetes
Son carpetas que se encuentran dentro del
proyecto Java que ayudan a organizar y
contener un conjunto de clases relacionadas por
finalidad, ámbito o herencia.
Modificadores de acceso
Permiten dar un nivel mayor de seguridad a las
aplicaciones. Restringen el acceso a diferentes
clases, atributos, métodos, constructores.
Aseguran que el usuario siga la "ruta" que
especificó el desarrollador para acceder a la
información.
Default
Java nos da la opción de no usar un modificador
de acceso. Al no hacerlo, el elemento tendrá un
acceso conocido como default o acceso por
defecto que permite que, tanto la propia clase
como las clases que se encuentren en el mismo
paquete, accedan a dichos componentes (de
aquí la importancia de declararle siempre un
paquete a nuestras clases).
Ejemplo
Java Standard Web Programming
Private
Es el modificador de acceso más restrictivo.
Cualquier elemento de una clase que sea
privado puede ser accedido únicamente por la
misma clase.
Ejemplo
Java Standard Web Programming
Protected
Permite acceder a los componentes solo desde la
misma clase, clases del mismo paquete y clases
que hereden de ella (incluso en diferentes
paquetes).
Ejemplo
Java Standard Web Programming
Public
Es el modificador de acceso más permisivo;
public es lo contrario a private en todos los
aspectos (lógicamente). Quiere decir que si un
componente de una clase es public, tendremos
acceso a él desde cualquier clase o instancia sin
importar el paquete o procedencia.
Ejemplo
Java Standard Web Programming
private
default
protected
public
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Laboratorio
Java Standard Web Programming
Ejercicios
Se realizarán mejoras al laboratorio anterior:
Encapsulamiento
Es uno de los pilares de la POO y su filosofía es
hacer que los atributos de las clases se puedan
editar sólo a través de métodos.
Private
Para encapsular, se deben colocar los atributos de clase
privados, para así ocultarlos.
Java Standard Web Programming
Setter Getter
Del inglés Set, que significa establecer. Sirve Del inglés Get, que significa obtener. Sirve para
para asignar un valor a un atributo, pero de obtener (recuperar o acceder) el valor ya
forma explícita, a través de un parámetro del asignado a un atributo y utilizarlo, estos
mismo tipo. El Setter nunca retorna un valor métodos son de función y devuelven el tipo y el
(Siempre es void). valor del atributo.
Ejercicios
Se realizarán mejoras en el laboratorio anterior:
1. Crear 3 constructores:
Ejemplo
Ejemplo
i
Java Standard Web Programming
Miembros de clase
La palabra reservada static se usa
principalmente para el manejo eficiente de
la memoria de un programa.
Auto2
Java Standard Web Programming
Autos EducacionIT
● Ferrari ● Audi
● Rojo ● Plateado
● ABC-188 ● ZBG-999
Auto1 Auto2
Java Standard Web Programming
Métodos estáticos
Conocidos también como métodos de clase. Hay dos cosas importantes a tener en cuenta:
Como en el caso de las variables estáticas, se
1. El método estático no puede utilizar
puede acceder al método sin la necesidad de
miembros de datos no estáticos ni llamar
crear un objeto de la clase.
directamente a un método no estático.
Un método estático puede acceder a un miembro
2. this y super (que veremos más adelante) no
de datos estáticos y puede cambiar su valor.
se pueden utilizar en un contexto estático.
Java Standard Web Programming
Bloque estático
● Es posible declarar bloques de código como ● Se ejecuta antes que el método principal en
estáticos, de tal manera que sean ejecutados el momento de la carga de clases.
cuando se cargue la clase.
● Si no se declara un bloque de este tipo de
● Se utiliza para inicializar el miembro de forma explícita, la JVM combina todos los
datos estáticos. campos estáticos en un bloque y los ejecuta
durante la carga de clases.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Laboratorio
Java Standard Web Programming
Introducción a Herencia
Como la palabra lo indica, en los lenguajes Esto representa la relación Es-Un, que también
orientados a objetos se pueden heredar se conoce como relación padre-hijo.
características (atributos y métodos) de
otras clases.
Ejemplos:
La idea de la herencia es permitir la creación
● Un Compacto Es-Un Auto.
de nuevas clases basadas en clases existentes
(Súperclases o Clases Padre). ● Un Camión Es-Un Auto.
Auto
-color String
-marca String
-patente String
-patenteString
-encendido boolean
+mostrarAtributos
Compacto Camion
Herencia en Java
La herencia se implementa mediante la palabra
reservada extends después del identificador de
la nueva clase, seguido del identificador de la
clase padre.
Constructores
Los constructores no se heredan, así que al Si la superclase o clase padre no posee el
momento de instanciar un objeto de una clase constructor por defecto, ninguno de los hijos
hija se ejecuta el constructor de la clase padre. podrá instanciarse con un constructor de ese
Esto se hace de manera implícita si la clase padre tipo (simple).
posee el constructor simple o por defecto, de lo
contrario debemos indicar qué constructor de la
El orden en que se llaman los constructores es
clase padre se debe invocar al construir un objeto
desde la clase que ocupa el nivel más alto en la
de la clase hija. jerarquía de herencia y se continúa de forma
ordenada con el resto de las subclases.
Se hace con la sentencia super(), que invoca a
uno de los constructores de la superclase, que
será elegido en función de sus parámetros.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Instanciamos los
objetos
Métodos con los
propios
constructores
de la clase.
disponibles
Java Standard Web Programming
Métodosheredados
Métodos
heredados
de de la
la clase Auto.
clase Auto.
Métodos propios
Métodos propios
de la clase.
de la clase.
Java Standard Web Programming
… … …
… … … …
…
Java Standard Web Programming
final
A través de final se puede indicar que ninguna
Una clase puede poseer la palabra clave final
otra clase puede heredar de esta Patente. Tiene
si se desea eliminar la posibilidad de herencia
en esa clase.
sentido ya que ¿qué objeto de la vida real tiene la
relación Es-Una patente?
Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Laboratorio
Java Standard Web Programming
1. Realizar un sistema que agregue alumnos 2. La clase alumno tendrá un atributo donde se
con los atributos heredados de persona a le asignará una lista de cursos.
una lista y se le soliciten los siguientes datos:
3. Crear 1 solo constructor con todos los datos.
○ Id (numérico entero único).
4. Utilizar el método toString de la clase
○ Nombre. Persona y redefinirlo en la clase hija.
○ Apellido.
○ Tipo y número de documento (crear una
clase para este dato), no debe poder
heredarse.
○ Edad.
Java Standard Web Programming
Ejemplos
Java Standard Web Programming
toString
Ya sabemos que a través de la herencia podemos Por lo que a partir de este momento no tendremos
disponer de los métodos y atributos más el método mostrarDatos
de una clase padre y también sabemos que, y sobreescribiremos al método toString que
por defecto, las clases heredan de la súper representa la misma lógica.
clase Object, por lo que tenemos disponibles
Veamos los ejemplos de los siguientes slides.
también sus métodos.
super
Esta palabra reservada hace referencia a su Pero también sirve para invocar un método de
padre más inmediato. La hemos visto cuando nuestro padre en la clase y es muy usada en los
quisimos utilizar en nuestro constructor el toString.
constructor de nuestro padre.
Java Standard Web Programming
Métodos finales
Un método puede tener la palabra reservada final
cuando queremos evitar que las clases
derivadas o clases hijas cambien la
implementación o comportamiento
(sobreescribir) de un método.
Introducción a casteo
Muchas veces nos encontraremos con la Existen dos tipos de casteo:
necesidad de convertir un tipo de dato a otro
● Implícito.
tipo. Al ser un lenguaje de tipado fuerte (cada
variable u objeto del programa se definen como ● Explícito.
poseedores de un tipo de dato específico), Java
nos brinda herramientas para poder lograr lo que
también se conoce como conversión de tipos.
Java Standard Web Programming
Casteo implícito
Casteo explícito
Cuadro de casteo
Convertir
desde
¿Cómo se utilizan?
será true, cualquier otro valor será falso. char Character char
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Miembros de Instancia
● Objeto.xxxvalue(): devuelve el valor
envuelto por el objeto en el tipo especificado,
xxx representa el primitivo a obtener.
Java Standard Web Programming
Miembros de clase
● Envoltorio.valueOf(String) o
Envoltorio.valueOf(primitivo): devuelve
un tipo de objeto (de las clases envoltorio)
a partir de un String o dato primitivo.
Boxing
Boxing
Unboxing
Introducción a abstracción
Es el proceso mediante el cual se procede a Al pensar en la jerarquía de herencia se
seleccionar los aspectos más relevantes y crea una clase con los atributos y métodos
genéricos de un grupo de objetos y a identificar esenciales para tener como “Plantilla Base”.
los comportamientos más comunes. Es uno de
los pilares más importantes y claves en la POO
y aunque no lo habíamos mencionado, ya hemos
realizado parte de este proceso anteriormente,
por ejemplo, en la clase Auto.
Abstracción
En este proceso, puede ocurrir que, luego de
abstraer el objeto y al momento de plasmarlo o
codificarlo en una clase, se descubre que sería
incongruente instanciar uno con solo unas pocas
características y comportamiento. En ese caso, se
crean clases hijas más específicas que sí
terminen de cumplir con los requerimientos de
nuestro software.
Métodos abstractos
Además de impedir que una clase abstracta sea
instanciada, también es posible crear métodos
abstractos. Un método abstracto es aquel que
solo posee firma (modificador de acceso, tipo
de retorno, identificador y parámetros) y no
posee el cuerpo (algoritmo), esto completa la
idea de la abstracción ya que, en muchos
momentos, vamos a querer que nuestras clases
hijas implementen un mismo método pero, según
sea el caso, se comporte diferente.
Java Standard Web Programming
Ejercicio de abstracción
Mejoras al laboratorio anterior:
Introducción a interfaces
Con la teoría y ejemplos que hemos realizado con
la abstracción, específicamente con los métodos
abstractos, vimos que al heredar de una clase
con estas características, se obligaba a
implementar estos métodos de la clase padre
y así las clases hijas se convertirían en clases
concretas con definición (cuerpo) en los métodos.
El concepto de abstracción se puede ampliar
mucho más ya que se puede pensar en clases
totalmente abstractas a la hora de analizar
un problema y definir una serie de métodos
genéricos que algunas clases podrían
implementar.
Java Standard Web Programming
Interface
Cuando hablamos de clases totalmente
abstractas podemos recurrir a una variante de las
clases llamadas interface.
Herencia en interfaces
Una interface puede heredar de otra. De esta
manera, se modulariza más el software. ¿Por qué Analizamos y llegamos a esta conclusión:
se realiza de esta manera y no se hace una sola 1. Cualquier objeto puede tener un Mantenimiento
interfaz con todos los métodos? Periódico (Autos, Personas, Objetos) pero no
todos los objetos van a tener Mantenimiento
Ejemplo Mecánico. Esto justificaría la interfaz cuyo
nombre es MantenimientoPeriodico.
En el ejemplo del siguiente slide, se crea la
2. Todos los objetos que pasan por un
interfaz llamada Mantenimiento Periódico
Mantenimiento Mecánico deben lavarse, pero
que posee solo el método lavar y que se puede no se crearía un método lavar con las mismas
implementar en otras clases. También, una características que en la interfaz llamada
interfaz con métodos para Mantenimiento MantenimientoPeriodico, sino que se
Mecánico. reutilizaría el método heredando de esa interfaz.
Java Standard Web Programming
Java Standard Web Programming
Interfaces en Java 8
La versión del JDK 8 añade numerosas Con Java 8 es posible, además de crear métodos
novedades importantes al lenguaje. Entre ellas abstractos, crear métodos concretos, pero
se destaca la implementación de características deben ser obligatoriamente Miembros de Clase
del Paradigma Funcional, que veremos más (static) o por Defecto (default). De esta forma,
adelante. Por ahora, nos enfocaremos en lo que no es necesario modificar las clases que hayan
trae en materia de interfaces. implementado la interfaz antes de la introducción
de los nuevos métodos ofreciendo además una
Uno de los problemas que presentan las
implementación por defecto de estos nuevos
interfaces que son totalmente abstractas es que,
métodos, que será heredada por dichas clases,
a la hora de modificarlas y crear métodos nuevos,
permitiendo su uso implícitamente de estos
el JDK exige implementar esos métodos en todas
nuevos métodos.
las clases que heredaron de la interfaz.
Java Standard Web Programming
Java Standard Web Programming
Introducción a Polimorfismo
El concepto científico de polimorfismo se refiere El polimorfismo es uno de los más importantes
a aquello que puede adoptar múltiples formas. porque simplifica la codificación y resuelve
En POO (programación orientada a objetos), muchas casuísticas a la hora de solucionar un
a la posibilidad de definir clases diferentes determinado problema.
en la misma jerarquía de herencia, que tienen
métodos o atributos denominados de forma
idéntica (sobreescritura de miembros), pero
que se comportan de manera distinta.
No podemos decir que haya un pilar
(Encapsulamiento, Herencia, Abstracción y
Polimorfismo) que sea más importante que otro,
pero sí podemos decir que hay conceptos más
simples que otros.
Java Standard Web Programming
Ejemplo
Casteo de objetos
Como en los casteos vistos antes, se puede De esta forma no podemos alcanzar los métodos
convertir un tipo de objeto en otro, siempre y ni atributos de la clase Familiar que no estén
cuando pertenezcan a la misma jerarquía de en la clase Auto, por lo que necesitaríamos
herencia. En este caso, vemos que declaramos convertirlo en un objeto Familiar. En este caso,
un objeto de la Clase Auto pero lo instanciamos vemos el casteo de forma explícita.
como Familiar.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
ForEach
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción a ForEach
Originalmente, Java no ofrecía un bucle de estilo Inicio del
programa
for-each (por cada uno). Sin embargo, con el
lanzamiento de JDK 5, el bucle for se mejoró
para proporcionar esta opción. Es también
no se cumple se cumple
conocido como el bucle for extendido. Condición
Fin del
programa
Java Standard Web Programming
Sintaxis
for común
foreach
Funcionamiento
Este bucle recorre un arreglo de principio a fin de forma secuencial:
Java Standard Web Programming
Características
Crear un programa que permita manejar los 3. Los productos perecederos poseen un atributo
Productos y Clientes de un almacén con las que indica la cantidad de días que le quedan
siguientes condiciones: para vencer.
1. Existen dos tipos de productos (Perecederos 4. Crear un método que calcule el precio del
y No Perecederos). inventario y que tenga en cuenta que los
productos perecederos tienen un 30% menos
2. Ambos tipos de productos poseen
de valor “oferta” si poseen menos de 10 días
descripción, precio y cantidad de inventario.
por vencer.
Estos atributos pueden ser nulos.
5. Los clientes poseen nombre, apellido, tipo
y número de documento.
Java Standard Web Programming
6. Crear un método utilitario que imprima la 7. Para mostrar, en consola, los datos básicos
lista de productos en oferta como texto: de los objetos: usar el método toString.
Hola {nombre}: Nota: se debe cumplir con todos los puntos dictados
Esta semana tenemos las siguientes ofertas en el módulo 3 del curso.
para ti:
- {descripcion} Antes: {precio}
Después:{oferta}.
Java Standard Web Programming
Segunda parte
Vamos a mejorar el código que creaste en la 5. En la base de datos se ha definido que todas
primera parte del ejercicio: las entidades (Clientes y Productos, por
ahora) tendrán un atributo obligatorio id que
1. La clase que posee el método utilitario que
es un entero de gran longitud. En el programa,
imprime el mensaje no se debe poder
se deberá garantizar que se implemente un
instanciar.
método que retorne y dé valor a dicho atributo
2. El ciclo del método utilitario que imprime el en las entidades.
mensaje debe ser un forEach.
6. El programa va a tener un auto
3. No se puede instanciar la clase padre incrementable id de tipo para cada entidad o
Producto. clase (Clientes y Productos) por lo que se
debe implementar un método que lo
4. El método getPrecioInventario() debe ser encapsule.
un método que tenga cuerpo solo en las
clases hijas.
Java Standard Web Programming
1. Las CA y CC poseen Banco, Sucursal, Número 4. El número de producto no se puede pedir por
de Producto. el constructor.
Introducción
En los sistemas pueden ocurrir eventos
excepcionales que corten el flujo correcto
y provoquen comportamientos inesperados.
Una excepción es un error que se presenta en
nuestro software. Puede ser más o menos grave.
finally
Métodos
Cuando se captura un error, se crea un Tipo Método Descripción
objeto del tipo indicado en la cláusula
Devuelve una breve descripción
catch. Esto nos permite usar métodos de String toString()
del objeto que capturó el error.
esa clase para tener un detalle más amplio
Devuelve la clase que capturó
del error. String getClass()
el error.
Error Exception
Virtual Reflective
IO Runtime
Machine … … Operation
Exception Exception
Error Exception
Checked Exceptions
Son las excepciones que deben ser capturadas Esta excepción tiene sentido, la clase FileReader
o delegadas (punto que veremos más adelante) es una clase que trata de leer un archivo y el JDK
obligatoriamente por nosotros ya que, de lo nos sugiere capturar un error en el caso que la
contrario, dará un error en tiempo de compilación. dirección indicada esté errada o no exista el
archivo a leer.
Todas estas excepciones tienen como padre la
superclase Exception.
UnChecked Exceptions
Son las excepciones que tienen como Las excepciones de la superclase Error son las
superclase a la clase RuntimeException. que el sistema no puede hacer nada con ellas.
No es necesario capturarlas, pero al saltar Se clasifican como errores irreversibles y, en su
una excepción de este tipo -como todas las mayoría, provienen de la JVM.
excepciones-, corta el flujo de ejecución. Se
Veamos el ejemplo de la siguiente pantalla.
suelen llamar excepciones del programador
ya que siempre debemos estar al tanto de que
ciertos errores pueden suceder.
Por ejemplo: error al capturar un dato de tipo numérico
porque el usuario ingresa una cadena, o en un ciclo que RuntimeException
recorre un arreglo porque se intenta acceder a un índice
fuera del tamaño establecido.
Java Standard Web Programming
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4 - Laboratorio
Java Standard Web Programming
Throws
Podemos delegar que se encargue del error Dentro del método cargarArchivo no se manejó
quien invoque al método con la palabra la excepción sino que simplemente se le delegó
reservada throws y este agregue su try catch a quien lo invoque. Veamos el código en la
o vuelva a delegarlo, esto solo puede usarse en siguiente pantalla.
la firma de los métodos.
Ejemplo
Uso en el main
Delegar excepciones
Throw
La palabra reservada throw, sin la “s”, nos
permite lanzar una excepción, literalmente
forzamos el error.
Veamos algunos ejemplos
Al instanciar la nueva excepción se puede
en las próxima pantallas.
aprovechar la sobrecarga del constructor para
enviar el mensaje que necesitamos. Podemos
delegar la excepción que creamos o simplemente
tratarla inmediatamente.
Java Standard Web Programming
Java Standard Web Programming
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4
Excepciones propias Web
HTML5: Fundamentos
Java Standard Web Programming
Introducción
Sabemos que podemos aprovechar el constructor
Java nos permite crear nuestras excepciones,
sobrecargado con el parámetro string de las simplemente creando una clase que herede
clases que manejan excepciones, para mandar la excepción deseada, en la mayoría
nuestros mensajes de forma personalizada. Pero de los casos, de la clase Exception.
a veces, vamos a necesitar crear clases propias
que manejan las excepciones y hacer nuestro
código más profesional.
Java Standard Web Programming
Java Standard Web Programming
Excepciones propias
Como las demás excepciones,
podemos crearlas con la palabra
reservada throw, delegarlas con la
sentencia throws o manejarlas con
el bloque try, catch, finally.
Java Standard Web Programming
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4
Try with Fundamentos
HTML5: resources Web
Java Standard Web Programming
Introducción
Muchas veces, será necesario cerrar objetos Siempre vamos a intentar cerrar el recurso en el
instanciados cuyo uso ha finalizado. Por bloque del finally, ya que no importa si ocurrió
ejemplo: los archivos. Al tratar de leer un archivo, un problema o siguió como se esperaba, se debe
el sistema toma el objeto, lo carga en memoria, liberar el recurso. Pero, como podemos apreciar
y no libera el recurso hasta que se lo indiquemos. en la siguiente pantalla, el código se hace un
poco engorroso o difícil de interpretar.
Ya vimos que el objeto FileReader tiene la
excepción verificada FileNotFoundException,
pero el método close de la misma clase también
posee una excepción verificada IOException que
{…}
indica que puede no cerrar el recurso por algún
problema (interrupción de la comunicación, etc.).
Java Standard Web Programming
Java Standard Web Programming
InputStream
Object Reader FileReader
Reader
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4 - Laboratorio
Java Standard Web Programming
Introducción
Muchas veces, surge la necesidad de definir un tipo de dato
en un objeto que debería estar delimitado por una lista de
constantes.
(;)
Java Standard Web Programming
Enumerados
Para esos casos, existen los objetos Enum en Java. Un objeto de este tipo es type-safe (de tipo
Aunque se pueden explicar de forma simple: los seguro). Significa que un enumerado tiene su
enumerados son una lista de constantes; el propio Namespace (espacio de nombres), solo
concepto es un poco más complejo y completo. puede contener los valores definidos por la
lista. Por lo tanto, una enumeración le brinda una
Es una clase especial que se define de forma
manera de definir con precisión un nuevo tipo de
particular. En lugar de la palabra reservada
dato que tiene un número fijo de valores válidos.
class se debe colocar la palabra reservada enum.
Esto le indica a Java que esta clase hereda de
Enum del paquete java.Lang y, como en todas
las clases en Java, se heredan los atributos y
métodos de la clase heredada.
Java Standard Web Programming
Ejemplo
Como estándar de
nomenclatura para los
enumerados se recomienda
el UPPER CASE como para
todo lo que sea constante.
Java Standard Web Programming
Métodos
int ordinal() Devuelve la posición del enum según este declarado comenzando desde cero.
Enum[] values() Devuelve un arreglo con todos los elementos que se encuentren en el enum.
Ejemplo
Java Standard Web Programming
Constructor
Aunque ya aclaramos que los enum son una Lo que está ocurriendo es que los enumerados
clase, debemos indicar que no se pueden tienen los constructores con el acceso privado,
instanciar: por eso no se pueden instanciar desde otra clase.
Ejemplo
Java Standard Web Programming
Veamos un ejemplo
en la próxima pantalla.
Java Standard Web Programming
Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5
Genéricos
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
Java es un lenguaje de tipado fuerte. Se debe asignar un
tipo de dato a cada atributo y eso permite que, en tiempo
de compilación, no se asigne un valor distinto al tipo de dato
declarado.
Por ejemplo: tenemos una clase que contiene dos atributos de tipo entero
(código y número). Este tipo de objeto puede ser muy útil no solo para
teléfono sino para otros casos, Documento, Domicilio, etc. Tendríamos
que crear N cantidad de clases para cada caso de uso.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Aquí es donde entran las clases genéricas - o los Public class GenericaDosAtributos<K, V> {
también llamados tipos parametrizados -,
private K codigo;
incorporadas desde la versión 5. Permiten crear private V numero;
clases, interfaces y métodos en los que los tipos
public K getCodigo() {
de datos sobre los que queremos operar se
return codigo;
envían como argumentos al instanciar la clase. }
De esta forma la clase trabajará el dato que le
public void setCodigo(K codigo) {
fue enviado.
this.codigo = codigo;
}
public V getNumero() {
return numero;
}
Nomenclatura
Instancias
Java Standard Web Programming
Ventajas
● Lo que hace a las clases genéricas una gran
utilidad es que comprueban los tipos de
datos en tiempo de compilación según el
parámetro enviado a la clase al momento de
declararlo.
Ejemplo
telefono.setCodigo(¨CABA¨);
telefono.setNumero(50124478);
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5
Colecciones
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
Java permite, a través de los arreglos, almacenar Se pueden agregar más Objetos sin indicar un
“agrupar” muchos elementos bajo un mismo tamaño único o inicial; también se reduce el
identificador. El problema es que se debe conocer esfuerzo de programación al tiempo que
de antemano el tamaño que tendrá el arreglo y aumenta el rendimiento.
este no varía. No es posible añadir elementos
Las colecciones son Interfaces y Clases que
nuevos ni eliminarlos. En el mejor de los casos, se
tienen parámetros (Genéricas) por lo que
puede dejar el valor por defecto del dato primitivo
debemos indicarles el tipo de Objeto a
y de ser un Objeto dejarlo en null.
almacenar.
Además de los arreglos convencionales que ya
conocemos, Java proporciona un conjunto de
interfaces y clases (Collections Framework) para
agrupar elementos de forma dinámica.
Java Standard Web Programming
Jerarquía
Estas clases e interfaces están estructuradas en una
jerarquía.
Colecciones
Referencias
Iterable Interfaz
Clase
Collection
AbstractCollection
Métodos Collection
boolean add(E e) Asegura que esta colección contiene el elemento especificado (operación opcional).
boolean addAll(Collection<? extends E> c) Agrega todos los elementos de la colección especificada a esta colección.
void clear() Elimina todos los elementos de esta colección (operación opcional).
boolean equals(Object o) Compara el objeto especificado con esta colección para la igualdad.
int hashCode() Devuelve el valor del código hash para esta colección.
Métodos Collection
boolean remove(Object o) Elimina una sola instancia del elemento especificado de esta colección, si está existe
Elimina de este conjunto todos sus elementos que están contenidos en la colección
boolean removeAll(Collection<?> c)
especificada.
Object[] toArray() Devuelve una matriz que contiene todos los elementos de este conjunto.
Devuelve una matriz que contiene todos los elementos de este conjunto; el tipo de
<T> T[] toArray(T[] a)
tiempo de ejecución de la matriz devuelta es el de la matriz especificada.
Java Standard Web Programming
Ejemplos
Java Standard Web Programming
Iteradores
Algo particular de las colecciones es que no se
pueden recorrer y operar al mismo tiempo
(Eliminar o Actualizar la colección), para eso la
interfaz Collection nos proporciona un método
que devuelve un Iterator.
Interfaz Set
La interfaz Set tiene una peculiaridad, y es que no admite Set
duplicados y es especialmente útil para ir almacenando
datos sin la preocupación de que alguno se repita. Estos
AbstractSet
elementos no se mostrarán de forma ordenada.
La interfaz SortedSet
HashSet
Esta implementación almacena los elementos en una tabla Set
hash (es un contenedor asociativo “tipo Diccionario” que
permite un almacenamiento y posterior recuperación
AbstractSet
eficiente de elementos). Este acceso hace que la clase sea
ideal para búsqueda, inserción y borrado de elementos.
HashSet SortedSet
Representa un conjunto de valores únicos (no puede
LinkedHashSet TreeSet
tener valores duplicados sin ordenar, por ejemplo, si
hacemos un recorrido de los objetos dentro de un
HashSet no siempre los obtendremos en igual orden) y
tiene una iteración más rápida que otras colecciones.
Java Standard Web Programming
Equals y hashCode
public boolean equals(Object obj)
Ejemplo
“Octavio”.equals(“octavio”);
Devuelve false ya que el método es sensible
a las mayúsculas y minúsculas.
Java Standard Web Programming
Pero, ¿cómo sabe Java que un objeto propio es public int hashCode()
igual a otro?
También debemos sobreescribir otro método, el
Primero que nada, debemos saber que este es un hashCode, ya que si dos objetos son iguales se
método que heredamos de la clase Object y que debe generar el mismo número hash para poder
las clases de Java sobreescriben para que los localizar el elemento en la tabla hash.
podamos utilizar. Nosotros debemos hacer lo
Por ejemplo
mismo e indicarle al método cuáles son los
atributos que debe comparar para que un objeto Podemos decir que un Auto es igual a otro si poseen
sea igual a otro. la misma Patente, en otros casos los objetos son
iguales si poseen todos los atributos iguales; siempre
dependerá del caso de uso.
Java Standard Web Programming
Por ejemplo
En Eclipse podemos ir a:
Source > Generate hashCode() and equals()
Ejemplo
Java Standard Web Programming
LinkedHashSet
Esta implementación almacena los elementos en Set
función del orden de inserción lo que la hace un
poco más costosa que HashSet.
AbstractSet
LinkedHashSet TreeSet
Nulo
TreeSet
Esta implementación almacena los elementos Set
ordenándolos en función de sus valores.
Orden
Java proporciona dos interfaces (Comparable<T> Comparable (orden natural)
y Comparator<T> ) para dar un orden a los
Esta interfaz debe ser implementada por la clase
objetos de un tipo creado por el usuario. El
y compara el objeto this con otro que toma
lenguaje ya proporciona un orden natural a los
como parámetro el método compareTo.
tipos envoltorio como Integer y Double o al tipo
inmutable String. El orden natural definido debe ser coherente con
la definición de igualdad. Si equals devuelve
Comparator (orden alternativo)
true compareTo debe devolver cero.
Esta interfaz debe ser implementada en una
nueva clase comparando los dos objetos que
toma como parámetros el método compare.
Java Standard Web Programming
Comparable
Comparator
Interfaz List
HTML5: Fundamentos Web
Java Standard Web Programming
List
List
La interfaz List, a diferencia de Set, sí permite
elementos duplicados y es la interfaz más usada AbstractList
por nosotros ya que implementa una serie de
métodos que la hacen más comprensible y fácil ArrayList AbstractSequentialList
de manejar:
LinkedList
● Acceso posicional a elementos: manipula
elementos en función de su posición en la lista.
La clase AbstractList
La clase AbstractSequentialList
ArrayList AbstractSequentialList
Proporciona una implementación esquelética de
la interfaz dándole acceso secuencial a la LinkedList
colección.
Java Standard Web Programming
Iteradores de lista
Es un iterador Java que nos permite recorrer
una lista de elementos en varias direcciones,
bien como fueron insertados los elementos o en
reversa (hacia adelante o hacia atrás), además,
de proporcionarnos nuevos métodos sin eliminar
los que ya conocemos de los iteradores.
Java Standard Web Programming
Iteradores de lista
ArrayList
Esta es la implementación más típica de la interfaz. List
LinkedList
Esta implementación se basa en una lista List
doblemente enlazada de los elementos, teniendo
cada uno de los elementos un puntero al anterior AbstractList
y al siguiente elemento.
ArrayList AbstractSequentialList
Lista
LinkedList
Nulo
Java Standard Web Programming
LinkedList
ArrayList
Introducción
En el desarrollo de aplicaciones, se puede
presentar la necesidad de implementar un
sistema de colas y/o pilas. Las estructuras que
se verán a continuación proporcionan métodos
para facilitar el proceso de desarrollo.
FIFO
LIFO
Interfaz Queue
La interfaz Queue tiene la peculiaridad de ofrecer La interfaz Deque
métodos para poder trabajar con colas (Queue Double ended queue o cola de dos extremos
en inglés).
Proporciona a sus implementaciones métodos
La clase AbstractQueue para la eliminación e inserción de elementos
Cola abstracta tanto al comienzo como al final de las colas. La
colección LinkedList también implementa esta
Proporciona una implementación esquelética de
interfaz.
la interfaz Queue y, simplemente, agrega
implementaciones para los métodos equals y Queue
hashCode.
Deque AbstractQueue
ArrayDeque PriorityQueue
Java Standard Web Programming
Métodos Queue
Adicionalmente, de los métodos que nos proporciona la
interfaz Collection, Queue añade unos nuevos:
(;)
Ejemplo
Java Standard Web Programming
PriorityQueue
Esta implementación almacena los elementos y los ordena
según una prioridad dada. Si no se le asigna prioridad
asumirá que el orden de los objetos será el orden natural.
Queue
Deque AbstractQueue
ArrayDeque PriorityQueue
Interfaz Deque
HTML5: Fundamentos Web
Java Standard Web Programming
Métodos Deque
Deque añade nuevos métodos a los que ya proporcionan las
interfaces Collection y Queue:
Ejemplo
Java Standard Web Programming
ArrayDeque
Esta implementación almacena los elementos para
trabajarlos como colas si se declaran como Queue o como
colas y pilas si se declaran como Deque o ArrayDeque.
Queue
Deque AbstractQueue
ArrayDeque PriorityQueue
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5 - Laboratorio
Java Standard Web Programming
Introducción
En el desarrollo de aplicaciones, muchas veces, Cuando se intenta agregar un objeto, si la clave
es necesario representar los objetos en una ya existe, lo que hace el mapa es actualizar el
estructura que permita una búsqueda fácil y valor asociado por el nuevo.
optimizada a través de una clave sin necesidad
La clase AbstractMap proporciona una
de recorrerlos.
implementación esquelética de la interfaz Map y
Los mapas, o también llamados diccionarios, simplemente agrega implementaciones para los
permiten almacenar elementos asociando a métodos equals y hashCode.
cada clave un valor.
La interfaz SortedMap permite que las clases que
La interfaz Map no admite claves duplicadas y es la implementen tengan los elementos ordenados.
especialmente útil para almacenar datos sin la
preocupación de que alguna de las claves posea
más de un valor asociado.
Java Standard Web Programming
Jerarquía
Estas clases e interfaces están estructuradas en una Object
jerarquía.
Map
A medida que se va descendiendo a niveles más
específicos aumentan los requerimientos y
SortedMap AbstractMap
comportamientos.
TreeMap HashMap
LinkedHashMap
Referencias
Interfaz
Clase
Java Standard Web Programming
Métodos Map
Métodos Map
Ejemplos
Java Standard Web Programming
Iteradores
Los mapas no son colecciones, por lo tanto no De igual forma, lo único que podemos hacer es
extienden de iterable que es la interfaz que recorrer el mapa pero no podemos eliminar o
implementa el métodos iterator. Lo que sí se modificar objetos ya que tendríamos un
puede hacer es que, a través del método keySet problema de concurrencia.
que nos devuelve una colección Set con las
claves, obtener un iterador.
Java Standard Web Programming
Map.Entry
La interfaz interna Map.Entry<K,V> proporciona ciertos
métodos para acceder a las claves y valores del mapa,
además de permitirnos utilizar el for mejorado o for-each
para el fácil recorrido del mapa. También, proporciona un
método para reemplazar un valor en dicho mapa.
Ejemplo
Java Standard Web Programming
HashMap
Este implementación almacena los elementos en una tabla
hash (es un contenedor asociativo “tipo Diccionario” que Object
permite un almacenamiento y posterior recuperación
eficiente de elementos). Este acceso hace que la clase sea Map
ideal para búsqueda, inserción y borrado de elementos.
SortedMap AbstractMap
A diferencia de la colección HashSet, la tabla hash no está
sincronizada, por eso permite que existan claves null.
TreeMap HashMap
Ejemplo
Java Standard Web Programming
LinkedHashMap
Esta implementación almacena los elementos en Define el concepto de elementos añadiendo una
función del orden de inserción lo que la hace un lista doblemente enlazada en la ecuación que
poco más costosa que HashMap. nos asegura que los elementos siempre se
recorren de la misma forma.
Object
Lista
Map
TreeMap HashMap
LinkedHashMap
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
TreeMap
Esta implementación almacena los elementos ordenándolos
Object
en función de sus claves.
Map
Implementa el algoritmo del árbol rojo – negro: árbol de
búsqueda binaria, también llamado árbol binario ordenado,
por lo que es bastante más lento que HashMap. SortedMap AbstractMap
LinkedHashMap
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5 - Laboratorio 3
Java Standard Web Programming
Ejercicio 1: Colecciones
1. Crear un programa que posea una clase 2. Solicitar por consola una serie de documentos
paramétrica. Esta clase ayudará al proyecto a con su descripción e indicar si están o no
mapear los datos de varias tablas en la base repetidos hasta que el usuario indique que no
de datos, almacenadas con clave y valor. desea seguir agregando elementos, después
Algunas de las claves son números enteros debe mostrar todos los elementos de la
grandes, cadenas de caracteres, y otros. colección.
Cuarta parte
Código del producto Descripción del producto Habilitado
Del segundo ejercicio del desafío del Módulo 4 CC Cuenta Corriente Si
modificar:
CA Caja de Ahorro Si
disponibles y los códigos de errores deben ser FCI Fondo Común de Inversión No
enumerados con descripción.
Código Error Descripción Error
2. Los productos se ordenan por defecto por el
1 Producto no disponible
banco, sucursal y número en ese orden.
2 Producto no existente
Java Standard Web Programming
Quinta parte
1. Ahora, agregar una clase Cliente que 2. Crear un mapa de clientes y pedir por consola
contenga la siguiente información: el tipo y número de documento. Si el cliente
existe, mostrar la información del cliente y la
● tipo de documento,
lista de productos. De lo contrario, mostrar
● número de documento, que no está en el sistema.
● descripción,
● fecha de nacimiento,
● listado de productos.
Java Standard Web Programming
Introducción a SQL
Una vez que se tienen los conocimientos
necesarios para trabajar y desarrollar
aplicaciones en Java, es imprescindible saber
cómo persistir la información que maneja un
sistema. Existen muchas formas de persistir
(que la información perdure en el tiempo)
archivos planos, base de datos, y otros.
Modelo Relacional:
● Filas, o tuplas, y
● columnas o campos.
Java Standard Web Programming
Tablas
Son objetos de base de datos. Los datos se
organizan en un formato de filas y columnas
similar al de una hoja de cálculo. Cada fila
representa un registro que debería ser único
y cada columna un campo dentro del registro.
Java Standard Web Programming
Relaciones
B H I
Motores de
HTML5: Fundamentos Web
Base de Datos
Java Standard Web Programming
Operaciones básicas:
Control de concurrencia
PostgreSQL
RELACIONALES
Java Standard Web Programming
MariaDB y MySQL
La primera versión de MariaDB fue una versión significativa con su diccionario de datos
bifurcación de MySQL con características transaccionales y soporte JSON mejorado.
adicionales, mejoras de rendimiento y Ambos motores de base de datos son
correcciones de errores. Sin embargo, altamente robustos y óptimos y cada uno tiene
aunque ambas implementan el protocolo una fortaleza específica pero para este tema
SQL, MariaDB y MySQL han evolucionado cualquiera de los dos SMDB nos brindará las
de manera diferente, convirtiéndose en bases herramientas adecuadas para persistir y
de datos independientes. recuperar la información de nuestros objetos.
Laptop
Java Standard Web Programming
SQL
Es un lenguaje declarativo estándar de alto nivel SS QS LS
que sirve para la comunicación con las bases
de datos relacionales. Su nombre en inglés
Structured Query Language
Structured Query Language, significa -traducido
al español-: Lenguaje de Consultas Estructurado.
Clasificación
Tipos de Datos
Atributo
En SQL, cada columna, variable local, expresión
y parámetro tiene un tipo de datos relacionado.
-
Un tipo de datos es un atributo que especifica
el tipo de datos que puede contener el objeto:
Tupla
● Numéricos exactos.
● Numéricos aproximados.
● Fecha y hora.
Relación
● Cadenas de caracteres.
● Cadenas de caracteres Unicode.
● Cadenas binarias.
● Otros tipos de datos.
Java Standard Web Programming
Numéricos exactos
tinyint De 0 a 255.
bit Tipo de datos entero que puede aceptar los valores 1, 0 ó NULL.
Java Standard Web Programming
Numéricos exactos
decimal, numeric, p (precisión): el número total máximo de dígitos decimales que se puede almacenar, tanto a la
decimal (p, s) izquierda como a la derecha del separador decimal. La precisión debe ser un valor comprendido
entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.
s (escala): el número máximo de dígitos decimales que se puede almacenar a la derecha del
separador decimal. La escala debe ser un valor comprendido entre 0 y p. Sólo es posible especificar
la escala si se ha especificado la precisión. La escala predeterminada es 0.
char (n) Caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe ser un valor entre 1 y 8.000.
nchar (n) Datos de carácter Unicode de longitud fija, con n caracteres. n debe estar comprendido entre 1 y 4.000.
Datos de carácter Unicode de longitud variable. n indica que el tamaño máximo de almacenamiento
nvarchar (n)
es 231 - 1 bytes.
binary (n) Datos binarios de longitud fija con una longitud de n bytes, donde n es un valor que oscila entre 1 y 8.000.
Tipo de datos para las variables o para los parámetros de resultado de los procedimientos almacenados
cursor
que contiene una referencia a un cursor. Las variables creadas con el tipo de datos cursor aceptan NULL.
Expone números binarios únicos generados automáticamente en una base de datos. El tipo de datos
timestamp
timestamp es simplemente un número que se incrementa y no conserva una fecha o una hora.
Almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, image,
sql_variant
timestamp y sql_variant.
Es un tipo de datos especial que se puede utilizar para almacenar un conjunto de resultados para su
table procesamiento posterior. Table se utiliza principalmente para el almacenamiento temporal de un conjunto
de filas devuelto como el conjunto de resultados de una función con valores de tabla.
xml Almacena datos de XML. Puede almacenar instancias de xml en una columna o una variable de tipo xml.
Java Standard Web Programming
Comentarios
Se utilizan para explicar secciones de sentencias
SQL o para evitar la ejecución de sentencias.
/* ... */
Java Standard Web Programming
Instrucciones
Crear
Eliminar
Modificar
Restricciones
ORIGEN DE
INSERT INTO DATOS ( CAMPOS )
(TABLAS)
VALUES ( VALORES )
Java Standard Web Programming
Seleccionar Registros
LISTA DE
SELECCIÓN
SELECT FROM
(Campos - fórmulas -
sub consultas)
ORIGEN DE DATOS
CONDICIÓN DE
(Tablas - sub WHERE
SELECCIÓN
consultas)
Java Standard Web Programming
Actualizar Registros
ORIGEN DE DATOS
UPDATE SET
(Tablas - subconsultas)
CAMPOS
CONDICIÓN DE
Y NUEVOS WHERE
ACTUALIZACIÓN
VALORES
Java Standard Web Programming
Borrar Registros
Operadores relacionales
Símbolo Descripción
= Igualdad
<> Distinto
Java Standard Web Programming
Operadores lógicos
Operador
AND AND
OR
OR
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6 - Laboratorio
Java Standard Web Programming
Ejercicio de SQL
Mejoras a los laboratorios del módulo anterior:
Ejercicio de SQL
Mejoras a los laboratorios del módulo anterior:
Introducción
Java Database Connectivity (JDBC) es una La API de JDBC se compone de dos paquetes:
API de acceso a bases de datos estándar SQL
● java.sql: paquete para acceder y procesar
que proporciona un acceso uniforme a una gran
datos almacenados en una fuente de datos
variedad de bases de datos relacionales.
(generalmente una base de datos relacional).
JDBC también proporciona una base común para
● javax.sql: paquete que sirve para acceso y
la construcción de herramientas y utilidades de
procesamiento de fuentes de datos del lado
alto nivel. El paquete actual de JDK incluye JDBC.
del servidor.
Java Standard Web Programming
JDBC
JDBC
Consiste en un conjunto de clases e interfaces
escritas en el lenguaje de programación Aplicación Java
Java. JDBC suministra un API estándar
para los desarrolladores y hace posible
Driver JDBC
escribir aplicaciones de base de datos
usando un API puro Java.
Base de Datos
Java Standard Web Programming
Librerías adicionales
Al trabajar con JDBC resulta necesario Pasos a seguir
agregar un jar al proyecto que contiene las
1. Nuestro proyecto trabaja con MariaDB o
clases necesarias que se utilizan para dialogar”
MySQL así que nos dirigimos al repositorio
con un DBMS. Cada DBMS tiene su propio
de Maven y buscamos el Driver de MariaDB:
archivo jar. Recordemos que los proyectos están
MariaDB Java Client.
creados con un arquetipo de Maven y, a través
del archivo pom.xml, podemos gestionar las 2. Seleccionamos la versión, copiamos la
librerías que necesitamos. dependencia y la pegamos en el pom, como
podemos ver en el código del siguiente slide.
Java Standard Web Programming
Java Standard Web Programming
Connection
Esta interfaz provee una sesión de trabajo con una base de datos. Sus métodos, aparte de permitir
modificar y consultar tablas, permiten obtener información sobre su estructura:
void commit() Confirma los cambios realizados provisionalmente por las transacciones.
Statement createStatement() Crea un objeto Statement para enviar sentencias SQL a la base de datos.
Crear la conexión
boolean execute(String sql) Ejecuta la instrucción SQL dada, que puede devolver varios resultados.
ResultSet executeQuery(String sql) Ejecuta la instrucción SQL dada, que devuelve un solo Objeto ResultSet.
Java Standard Web Programming
Insertar Registros
Java Standard Web Programming
ResultSet
Para recuperar la información de una tabla El método executeQuery(String sql) de la
o un origen de datos, Java proporciona la interfaz Statement devuelve el objeto.
interfaz ResultSet. Esta interfaz provee varios
Para poder recuperar cada una de las filas del
métodos para obtener los datos de columna que
objeto, si las hubiera, se utiliza frecuentemente el
corresponden a una fila. Todos ellos tienen el
bucle while con el método next() como
formato get<Tipo>, siendo <Tipo> un tipo de
condición, que devuelve un boolean que indica si
datos Java.
existe una fila a leer. Si existe, mueve el cursor
Ejemplos: getInt, getLong, getString, getBoolean una fila hacia adelante desde su posición actual.
y otros métodos.
Seleccionar Registros
…
Java Standard Web Programming
…
Java Standard Web Programming
Actualizar Registros
Java Standard Web Programming
Borrar Registros
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6
DAO
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
Muchas veces, debemos acceder a los datos DAO
desde diferentes fuentes (archivos planos,
El patrón de diseño DAO, Objeto de Acceso
bases de datos relacionales y no relacionales,
a Datos (Data Access Object) propone separar
servicios WEB, y otros.).
la lógica de negocio (Entidades) de la lógica
Esto representa la implementación de una lógica de acceso a los datos, proporcionando
que se puede llegar a complicar por cada una métodos para insertar, actualizar, eliminar y
de las fuentes, en las clases creadas para las seleccionar esos datos. Este patrón de diseño
entidades. Para solucionar este problema, viene acompañado de otro, el DTO, Objeto de
contamos con el patrón de diseño DAO. Transferencia de Datos (Data Transfer Object):
es un patrón simple que propone la creación de
un objeto que se encargue de la transferencia de
datos entre el servidor y el cliente.
Java Standard Web Programming
DAO
Todo patrón de diseño tiene una estructura. El ● Transfer Object: representa un objeto que
DAO está representado de la siguiente manera: implementa el patrón DTO.
Business Object
Data Sources
…
Java Standard Web Programming
…
Java Standard Web Programming
Transfer Object
…
Java Standard Web Programming
…
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6 - Laboratorio
Java Standard Web Programming
Ejercicio de SQL
Mejoras al laboratorio anterior:
Introducción
Los gestores de base de datos relacionales Muchas veces, necesitaremos ejecutar, más de
(como MySQL, PostgreSQL, SQL Server, y otros) una vez, la misma sentencia pero con valores
proporcionan mecanismos para optimizar el diferentes. Al hacerlo con una declaración
acceso y ejecución de sentencias. preparada, evitamos que el gestor evalúe cada
vez si lo que le enviamos tiene la sintaxis
Uno de estos mecanismos es la declaración
correcta, si los campos y tablas existen y la
preparada; forma con la que le indicamos
conversión al tipo de dato es correcto.
a la base de datos que vamos a utilizar una
sentencia y que la guarde y la “precompile” con
las condiciones necesarias para poder utilizarla.
Java Standard Web Programming
Ejemplo:
…
Java Standard Web Programming
…
Java Standard Web Programming
boolean execute(String sql) Ejecuta la instrucción SQL dada, que puede devolver varios resultados.
ResultSet executeQuery() Ejecuta la instrucción SQL dada, que devuelve un solo Objeto ResultSet.
Ejecuta la instrucción SQL dada, que debe ser de tipo DML y devuelve uno
Int executeUpdate()
(1) si se realizó correctamente o cero (0).
Java Standard Web Programming
Parámetros
La interfaz provee además varios métodos ¿Qué ganamos con esto además de la
setter para establecer los valores de los optimización del proceso? Que al sustituir un
parámetros: setTipoDato(int valor no se arme de manera dinámica el SQL
indiceParametro, TipoDato valorDato). y así se evita la inyección SQL.
Introducción
Al comenzar en el mundo del desarrollo y dar los
primeros pasos en la persistencia de información Inyección SQL
Inyección SQL
con una base de datos relacional, ejecutamos El problema es que al concatenar la información
El problema es que al concatenar la información
sentencias SQL concatenando los valores y así sin validar, puede venir con una Inyección SQL,
sin validar, puede venir con una Inyección SQL,
poder enviar la información pertinente al gestor que no es más que la técnica de introducir código
que no es más que la técnica de introducir código
de base de datos. Esto sucede por lo general malicioso en las declaraciones SQL. Esto puede
malicioso en las declaraciones SQL. Esto puede
perjudicar mucho a nuestros datos.
cuando es necesario generar sentencias perjudicar mucho a nuestros datos.
dinámicas y enviar un valor en el SQL que se le
pide al usuario, por ejemplo: correo, contraseña,
filtros y/o datos en general.
Java Standard Web Programming
Ejemplo:
Java Standard Web Programming
Inyección SQL
A pesar de que parece una tontería que nuestro
código sea así de vulnerable, la inyección SQL
sigue siendo, según la fundación OWASP, el
primero de los riesgos de seguridad en sitios
WEB y aplicaciones.
Séptima parte
Introducción
Java ofrece un paquete completo para gestionar
la comunicación (Lectura y Escritura) de bytes.
File
Antes de comenzar con la lectura y escritura de
archivos, veremos la clase File que se encuentra
también en el paquete Java.io que proporciona
una serie de métodos para obtener información Veamos estos métodos en
de los directorios y archivos que serán de mucha las siguientes diapositivas.
utilidad.
Java Standard Web Programming
boolean canRead() Comprueba si la aplicación puede leer el archivo indicado por esta ruta.
boolean canWrite() Comprueba si la aplicación puede modificar el archivo indicado por esta ruta.
boolean createNewFile() Crea de forma atómica un archivo nuevo y vacío si y solo si aún no existe un archivo
con este nombre.
boolean exists() Comprueba si existe el archivo o directorio indicado por esta ruta.
String getName() Devuelve el nombre del archivo o directorio indicado por esta ruta.
boolean isFile() Comprueba si el archivo indicado por esta ruta es un archivo normal.
boolean isHidden() Comprueba si el archivo nombrado por esta ruta es un archivo oculto.
String[] list() Devuelve una matriz de cadenas que nombran los archivos y directorios en el
directorio indicado por esta ruta.
File[] listFiles() Devuelve una matriz de nombres de ruta abstractos que denotan los archivos en el
directorio indicado por esta ruta.
Algoritmo
Flujos de lectura Flujos de escritura
El algoritmo utilizado, por lo general, para leer El algoritmo utilizado, por lo general, para escribir
flujos de datos es: instanciar el objeto, recorrerlo flujos de datos es: instanciar el objeto, recorrerlo
mientras (while) exista un elemento que leer y, para (for) cada elemento que exista escribir y
por último, cerrar el flujo. por último cerrar el flujo.
Los flujos de lectura proporcionan el método read Los flujos de escritura proporcionan el método
que retorna el byte o carácter a leer. write que escribe el dato u objeto a escribir.
Java Standard Web Programming
Ejemplo
Inicio del
programa
no se cumple se cumple
Condición
Sentencias
Sigue el
programa
Fin del
programa
Java Standard Web Programming
Excepciones
La excepción IOException se encargará de
lanzar errores cuando exista un problema al IOException
tratar de leer un fichero. El problema puede
ocurrir porque se encuentra bloqueado o porque
se interrumpió la comunicación.
La excepción FileNotFoundException se
FileNotFoundException
encargará de lanzar un error si no encuentra el
fichero especificado en la ruta especificada.
Generalmente, está en los constructores.
Java Standard Web Programming
InputStream
La clase abstracta InputStream representa un
flujo de bytes y proporciona los métodos para InputStream
acceder a la información.
Métodos
void close() Cierra este flujo de entrada y libera los recursos del
sistema asociados con el flujo.
byte[] readAllBytes() Lee todos los bytes restantes del flujo de entrada.
Java Standard Web Programming
OutputStream
La clase abstracta OutputStream representa un
flujo de bytes y proporciona los métodos para OutputStream
acceder a la información.
Métodos
void close() Cierra este flujo de entrada y libera los recursos del
sistema asociados con el flujo.
InputStream
OutputStream
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 7
Java IO Fundamentos Web
HTML5:
Java Standard Web Programming
Readable
La interfaz Readable proporciona el método
Readable
de lectura.
Métodos
File reader
Nuestra oferta de formación se encuentra
orientada al desarrollo profesional buscando
potenciar las habilidades personales de los
alumnos. Nos adaptamos rápidamente a los
cambios que exigen las tecnologías de IT, para
generar constantemente productos de valor,
novedosos y de alta calidad.
Appendable
La interfaz Appendable proporciona el método
Appendable
de escritura.
Métodos
File writer
Java Standard Web Programming
Búfer
Es un espacio de memoria en el que se
almacenan datos de manera temporal,
normalmente para un único uso. Se utiliza
principalmente para evitar que el programa o
recurso que los requiere se quede sin datos
durante una transferencia de datos.
BufferedInputStream
BufferedOutputStream
Java Standard Web Programming
BufferedReader
Lee texto de un flujo de entrada de caracteres,
almacena caracteres en el búfer para
proporcionar una lectura eficiente de caracteres:
Ejemplo
BufferedWriter
Escribe texto de un flujo de entrada de
caracteres, almacena caracteres en búfer para
proporcionar una escritura eficiente.
Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 7
Propiedades
HTML5: Fundamentos Web
Java Standard Web Programming
Introducción
La clase Properties permite manipular archivos
que almacenan una serie de valores emparejados
cada uno de ellos a un nombre, similar a los
mapas (Clave,Valor).
Propiedades
La clase abstracta Dictionary representa una
estructura clave, valor. Dictionary<K,V> Map<K,V>
Métodos
String getProperty(String key, String defaultValue) Busca la propiedad con la clave especificada en
esta lista de propiedades.
Métodos
Archivo Properties
Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 7 - Desafío
Java Standard Web Programming
Protocolo HTTP
Petición HTTP
Es un protocolo cliente-servidor, lo que significa
que el cliente envía una petición (request) al
servidor y espera un mensaje de respuesta
Respuesta HTTP
(response) del servidor.
Cliente Servidor
Es un protocolo sin estado, lo que significa que el
servidor no guarda información del cliente, cada
petición es independiente de las demás.
Cliente - Servidor
Una aplicación cliente es el elemento de la
comunicación que pide o solicita un servicio
de red.
Desktop
Smartphone
Base de datos Servidor
API
Ventajas
Escalabilidad Fácil mantenimiento
Request
Para hacer las peticiones, el protocolo HTTP ● POST: se utiliza para enviar una entidad a un
proporciona una serie de métodos llamados recurso en específico, causando a menudo un
verbos para realizar una acción en el recurso cambio en el estado o efectos secundarios en
determinado. Los verbos más utilizados son: el servidor.
● GET: solicita una representación de un recurso ● PUT: reemplaza todas las representaciones
específico. Las peticiones que usan este verbo actuales del recurso de destino con la carga
solo deben recuperar datos, pues la útil de la petición.
información que se envía viaja a través de la
● DELETE: borra un recurso en específico.
URL.
Response
Representa un recurso que generalmente es un Los más comunes que normalmente vemos:
HTML pero puede ser de cualquier otro tipo.
● 404: Recurso no encontrado.
Además de devolver el recurso solicitado, si todo
● 500: Error en el Servidor
salió de forma exitosa, la respuesta devuelve
siempre un código que provee más información.
URL
esquema : ruta
infousuario @ : puerto
Client-Side Processing Web
HTML5: Fundamentos
Java Standard Web Programming
Client-Side Processing
En el desarrollo web, el "lado del cliente" también
conocido como Front End, se refiere a todo lo
que, en una aplicación, se muestra o tiene lugar
en el cliente (dispositivo del usuario final). Esto
incluye lo que ve el usuario, como texto,
imágenes y el resto de la interfaz de usuario.
También, las acciones que realiza una
aplicación dentro del navegador del usuario.
Navegador
Un navegador web es un software que te lleva a
cualquier lugar de Internet. Podemos decir que
un navegador representa en la mayoría de los
casos al cliente que realiza solicitudes al servidor.
Adicionalmente, tiene la responsabilidad de
“comprender” las respuestas provenientes del
servidor, interpretarlas y visualizarlas en pantalla
de modo gráfico.
HTML
Hyper Text Markup Language (lenguaje de
marcas de hipertexto) es el lenguaje de marcado
que usamos para estructurar y dar significado
a nuestro contenido web.
Por ejemplo
Definir párrafos, encabezados y tablas de datos, o
insertar imágenes y videos en la página.
Java Standard Web Programming
CSS
Las hojas de estilo en cascada (CSS, Cascading
Style Sheets) son reglas de estilo que usamos
para dar forma a nuestro contenido HTML,
Por ejemplo
Establecer colores de fondo y tipos de letra, y distribuir
el contenido en múltiples columnas.
Java Standard Web Programming
JavaScript
Es un lenguaje de programación interpretado
que permite crear contenido de actualización
dinámica, controlar multimedia, animar imágenes
y prácticamente todo lo demás.
Server-Side ProcessingWeb
HTML5: Fundamentos
Java Standard Web Programming
Server-Side Processing
En el desarrollo web, el "lado del servidor" también conocido
como Backend es todo lo que sucede en el servidor. Esto
incluye los datos y lógicas que mostrará el cliente al recibir
las respuestas por nuestros servidores.
Introducción
Java proporciona una plataforma de desarrollo
empresarial robusta y tiene una gran presencia
en el mercado laboral.
Java Enterprise Edition (Java EE) se basa en la En la infraestructura de Java EE, se suman reglas
especificación Java SE (utiliza Java SE y añaden en dos niveles:
más funcionalidades).
● En la capa de la aplicación, para gestionar la
lógica empresarial dinámica y el flujo de
tareas.
Excepciones
La excepción IOException se encargará de
lanzar errores cuando exista un problema al
tratar de leer un fichero. Puede ocurrir porque se
Exception
encuentra bloqueado o porque se interrumpió la
comunicación.
IOException ServletException
Paquete javax.servlet
Contiene una serie de clases e interfaces que
Referencias
describen y definen los contratos entre una clase
de servlet y el entorno de ejecución Interfaz
Clase
proporcionado para una instancia de dicha clase
por un contenedor de servlet.
GenericServlet
http.HttpServlet
Java Standard Web Programming
Define métodos que deben implementar todos los Define un servlet genérico independiente del
servlets. protocolo.
Es utilizada por un contenedor de servlet para Provee métodos para responder a solicitudes
pasar información a un servlet durante la HTTP en el contexto de una aplicación web.
inicialización.
Interfaz Serializable
Servlets
Para poder manejar verbos HTTP debemos crear
una clase que extienda directamente de
HttpServlets y sobreescribir los métodos que
vayamos a permitir en nuestra clase.
Java Standard Web Programming
Servlets
protected void doHead(HttpServletRequest req, HttpServletResponse resp) Recibe una solicitud HTTP HEAD de la solicitud.
HttpServletRequest
Esta interfaz nos provee información de la solicitud
para servlets HTTP.
getRequestDispatcher(String Devuelve un RequestDispatcher objeto que actúa como contenedor del recurso
RequestDispatcher
path) ubicado en la ruta dada.
setAttribute(String name,
void Almacena un atributo en esta solicitud.
Object o)
HttpServletResponse
Esta interfaz proporciona una funcionalidad específica
de HTTP al enviar respuestas a los clientes.
Descriptores de implementación
Describen las clases, recursos y configuración El directorio WEB-INF contiene todas las cosas
de la aplicación y la forma en que los usa el relacionadas con la aplicación que no están en la
servidor web para entregar solicitudes web. raíz del documento de la aplicación.
Cuando el servidor web recibe una solicitud para
El WEB-INF no forma parte del árbol de
la aplicación, usa el descriptor de implementación
documentos públicos de la aplicación, por lo que
a fin de asignar la URL de la solicitud al código
ningún archivo contenido en él puede ser servido
que debe manejarla.
directamente a un cliente por el contenedor, sin
El descriptor de implementación es un archivo embargo, el contenido es visible para el código de
llamado web.xml. Se encuentra en el WAR de la Servlet.
app en el directorio WEB-INF/. El archivo es un
archivo XML cuyo elemento raíz es <web-app>.
Java Standard Web Programming
Ejemplo
Java Standard Web Programming
Librerías adicionales
Al trabajar con Java EE resulta necesario agregar
un jar al proyecto que contiene las clases
necesarias que se utilizan para “dialogar” con
los verbos HTTP.
● Tomcat.apache.org
Declaración Descripción
session Objeto de la clase HttpSession que está asociada al request, si es que trabajamos con sessions.
out Objeto de la clase PrintWriter usada para imprimir directamente en la página resultante.
Java Standard Web Programming
Elementos JSP
Para poder incorporar código Java en un documento HTML,
JSP y /o XML se debe encerrar entre llaves angulares y los
símbolos de porcentaje “<% %>”.
● Comentarios.
● Expresiones.
● Scriptles.
● Declaraciones.
● Directivas.
<% %>
Java Standard Web Programming
Comentarios
Expresiones
Scriptles
Declaraciones
Directivas
Son etiquetas a partir de las cuales se genera No producen una salida visible al usuario sino
información que puede usar el motor JSP. que configuran cómo se ejecutará la página JSP.
JSP Servlets
Como habíamos comentado al principio, al
invocar todos los documentos JSP, el servidor
o contenedor Web creará un Servlet por cada
documento que generará la lógica en Java y
Veamos el ejemplo
que terminará mostrando el resultado en HTML.
de la próxima pantalla.
Java Standard Web Programming
RequestDispatcher
HTML5: Fundamentos Web
Java Standard Web Programming
RequestDispatcher
Esta interfaz proporciona la posibilidad de enviar o incluir
objetos a otro recurso (HTML, Servlet o JSP).
void forward(ServletRequest request, ServletResponse response) Reenvía una solicitud de un Servlet a otro recurso.
Introducción
Muchas veces, vamos a necesitar manejar Para solventar esto, Java proporciona los
información relacionada con el cliente conectado elementos necesarios para manejar y manipular
al sistema WEB y esto solo es posible a través de la información que requiera el sistema y así hacer
las sesiones: una serie de comunicaciones entre un seguimiento de un usuario a través de la
un cliente y el servidor en la que se realiza un aplicación.
intercambio de la información.
HttpSession
Esta interfaz provee una forma de identificar
a un usuario en más de una solicitud de página
o visita a un sitio web, y permite almacenar
información sobre ese usuario.
Veamos la tabla de
la próxima pantalla.
Java Standard Web Programming
Ejercicio de Archivos
1. Crear un Formulario HTML con correo
y clave, que sea validado a través de una HTML
colección en Java.
Java 8
En 2014, Java lanza una versión que añade Ya habíamos hablado de los métodos por
novedades importantes al lenguaje y divide el defecto y estáticos en la interfaces que se
antes y después de esta versión. Las novedades agregaron en esta versión y son muy importantes
más importantes que podemos destacar son: para las otras funcionalidades que vamos a ver
en este apartado.
● El agregado del paquete stream.
8
Java Standard Web Programming
Interfaz funcional
Son aquellas interfaces que poseen si y solo
si un solo método abstracto (sin cuerpo).
Lambdas
Para poder implementar el paradigma funcional Input x
se agrega el concepto de lambdas que es un
método anónimo. Básicamente, es un método
abstracto que sólo está definido en una interfaz
(no necesita una clase) y esta debe ser una Función f:
interfaz funcional.
Output f(x)
Java Standard Web Programming
Estructura Lambda
Parámetros: El operador lambda:
Cuerpo:
Ejemplo imperativo
Java Standard Web Programming
Ejemplo declarativo
A simple vista, parece lo mismo o hasta más
complicado, pero la idea es poder cambiar el
comportamiento de los métodos en el momento
que necesitemos sin declararlos previamente.
Introducción a Stream
Es una interfaz que provee clases para procesar
datos de manera funcional como flujo de datos.
No es otra colección.
Excepciones
La excepción RuntimeException es la súper
clase encargada de lanzar un error en tiempo de RuntimeException
ejecución de una aplicación.
La excepción IllegalStateException se
encargará de lanzar un error cuando se intente
acceder a un objeto en un momento inapropiado,
puede ser por uso o por otras causas. IllegalStateException
Stream
La interfaz BaseStream provee un flujo de objetos
que permite el procesamiento paralelo BaseStream<T,Stream<T>>
y secuencial de dicho flujo.
Métodos Stream
Function
Es una función que toma los parámetros, los Ejemplo tradicional: a cada elemento de la colección se
procesa o los opera. le multiplica por dos y se agrega a una nueva colección.
Java Standard Web Programming
Predicate
Es una función que toma los parámetros Ejemplo tradicional: se evalúa cada elemento de la
y evalúa si cumple con la condición indicada. colección y si es par, se agrega a una nueva colección.
Java Standard Web Programming
Consumer
Es una función que toma los argumentos y no Ejemplo tradicional: se envía cada elemento como
retorna nada, simplemente procesa. argumento al método System.out.println().
Java Standard Web Programming
Conceptos
● Las colecciones poseen el método stream() ● Adicionalmente, se debe tener en cuenta que
que retorna un flujo con el contenido de la no se puede realizar más de una operación a
colección. la vez, ya que lanzaría una excepción de tipo
IllegalStateException.
● En Java 8 las Function, Predicate y Consumer
se realizan con expresiones Lambdas: ● Los métodos filter(), map() son operaciones
intermedias.
○ ((Parametros) -> Function).
● Los métodos count() y sum() son operaciones
○ ((Parametros) -> Predicate).
de terminal.
○ ((Parametros) -> Consumer).
Métodos
HTML5: Fundamentos Web
Java Standard Web Programming
forEach
Es un método que se usa para recorrer cada uno de los
elementos y espera como argumento un Consumer. Los
Stream y Colecciones poseen este método de recorrido.
Java Standard Web Programming
Map
Método que se usa para transformar un objeto en otro vía
la aplicación de una función y retornará un nuevo flujo.
Java Standard Web Programming
Filter
Este método filtra elementos en función de un predicado
que se haya enviado.
Java Standard Web Programming
Reduce
Este método recibe una función de acumulación y retorna
un solo valor.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 10 - Laboratorio
Java Standard Web Programming
Ejercicio de SQL
Mejoras a los laboratorios del Módulo 6:
1. Dada una lista de usuarios que contienen los c. Mostrar por consola los correos que
siguientes atributos: Id (autoincrementable), cumplieron la condición del punto a, pero
correo, clave, fecha de creación y activo: la contraseña no es válida.
a. Crear una lista que solo contenga los Nota: la contraseña debe tener entre 8 y 16
usuarios que tienen un patrón de correo caracteres, al menos un dígito, al menos una
minúscula y al menos una mayúscula. No puede
válido y sean del dominio de
tener otros símbolos.
educacionit.com.
Referencia
Java Standard Web Programming
● DDL significa Data Definition Language, y se utiliza para la creación de esquemas y tablas. Los comandos más conocidos
son CREATE, ALTER y DROP.
● DML significa Data Manipulation Language, y se utiliza para la manipulación de datos. Los comandos más conocidos son
SELECT, INSERT, UPDATE, DELETE.
Archivos planos
Los archivos planos son otra forma de persistencia. Si bien es posible guardar casi cualquier informacion, se hace relativamente difícil
poder organizar y consultar de manera eficiente la información deseada.
En caso de objetos, se podrían persistir en archivos planos a través de serialización, y volver a utilizarlos a través de la
deserealización.
Ambos modelos tienen sus propias características, y como consecuencia se genera la problemática de tratar datos de una tabla como
un objeto y viceversa, es decir llevar datos de un objeto a una tabla.
Se genera lo que se conoce como un “gap” entre ambos modelos, dificultando la integración y coordinación de ambos.
1) El problema de la herencia
Uno de los pilares del paradigma OO es la herencia. La herencia representa a la relación “es un”. Es muy común trabajar con
diagramas de clases que poseen una gran jerarquía de clases a través de la herencia.
El modelo relacional está basado en la relación “tiene un”, pero no cuenta con la relación “es un”. La problemática se basa en que
dentro del modelo relacional, no es posible armar una relación de herencia.
2) El problema de la identidad
Para realizar chequeos de identidad en registros, se utiliza la PK (Primary Key) como método de comparación.
Para realizar chequeos de identidad en objetos, se utilizan los métodos equals() y compareTo() según corresponda, como también el
operador == dependiendo del caso.
La problemática surge cuando hay que realizar una actualización en cascada de la PK desde el modelo de objetos – el campo nombre
- ya que el impacto es grande y genera procesamiento adicional que podría ser evitable.
Para evitar este tipo de problemática, la recomendación es utilizar una PK que nada tenga que ver con los datos, posiblemente un
campo auto-numérico, y construir un atributo adicional ID en la clase correspondiente.
Un objeto podría tener a otro objeto como asociado, por ejemplo un Auto tiene un Stereo, entonces es posible decir que la clase Auto
tiene como atributo un objeto del tipo Stereo (obviamente, Stereo tiene sus propios atributos).
Las asociaciones tienen dirección, es decir que cada clase que forma parte de la relación, tiene (o no) una referencia a la otra clase.
En una relación unidireccional, una de las dos clases tiene como referencia a la otra. Por ejemplo, el Auto tiene como referencia al
Stereo, o podría ser al revés también, el Stereo tiene como referencia al Auto.
En una relación bidireccional, ambas clases se tienen como referencia. Por ejemplo, el Auto tiene como referencia al Stereo y el
Stereo tiene como referencia al Auto.
Las claves foráneas no son en su concepción bidireccionales, lo que generaría inicialmente un desacople entre el modelo relacional y
el modelo de objetos.
Un objeto podría tener a un conjunto (una colección) de objetos asociados, por ejemplo un Aula tiene Alumnos. La clase Aula tiene
como atributo un objeto del tipo Set que contiene objetos del tipo Alumno (obviamente, cada Alumno tiene sus propios atributos).
Es normal contar con relaciones del tipo muchos-a-muchos, por ejemplo un Aula posee muchos alumnos, pero un Alumno puede tener
asignada más de un Aula.
En el modelo de objetos, existen únicamente dos clases, pero en el modelo relacional surge una nueva tabla manejar la relación
muchos-a-muchos.
4) El problema de la navegación
La relación entre clases está dada a través de una nueva clase, o colecciones. Por ejemplo, la clase Universidad tiene Facultades, la
Facultad tiene Alumnos, el Alumno tiene Asignaturas, y así sucesivamente.
El problema está en que al realizar la consulta hay que determinar hasta qué nivel de información (es decir hasta qué objetos) traer
como datos.
El problema de la navegación es uno de los problemas que más impacta sobre la performance de la aplicación.
Qué es ORM
Definición
ORM significa Object / Relational Mapping. Es el middleware que maneja la persistencia en la capa de acceso a datos.
Tiene como objetivo manejar la persistencia de objetos de una aplicación dentro de una base de datos, en forma automatizada y
transparente. Utiliza metadatos para describir la relación entre el modelo de clases y el modelo de tablas.
Maneja los casos más comunes, que son los que aparecen en mayor cantidad. Los casos especiales deben ser manejados por el
usuario, aunque éstos deberían ser los mínimos.
El uso de un ORM suele disminuir el tiempo de construcción de una aplicación en un 30%. Se estima que el trabajo de desarrollo de la
capa de acceso a datos disminuye en un 85%.
Organización
Una solución del tipo ORM tiene como partes a:
Ventajas
Las ventajas que provee la utilización de un ORM son las siguientes:
● Independencia de la base de datos. Provee una abstracción de la base de datos utilizada, lo cual permite - en caso de no
utilizar SQL propietario – una fácil migración.
● Productividad. Reduce significativamente el tiempo de desarrollo.
● Fácil mantenimiento. Agrega simplicidad al código, lo que hace que el mantenimiento sea simplificado.
● Menor trabajo. Disminuye de forma importante las cantidad de líneas de código de la aplicación, ya que la mayoría del código
ya está pre-escrito.
Tecnologías ORM
User-defined DAOs
DAO significa Data Access Object. Es un patrón de diseño utilizado para realizar operaciones contra una base de datos, pero
abstrayendo de la lógica de la misma. La lógica de acceso a datos queda encapsulada dentro de una DAO con lo cual no es visible
para usuarios que utilizan el DAO.
El User-defined DAO es un DAO definido por el usuario. El desarrollador puede armar su propio modelo de acceso a datos con la
construcción de diversos DAOs, formando así la DAL (Data Access Layer, o capa de acceso a datos).
Es una de las opciones más utilizadas para la persistencia de datos. En Java puntualmente, se trabaja con SQL y JDBC directamente.
No se necesita ningún contenedor especial para utilizarlos. Son clases planas con funcionalidad.
Tiene como desventaja que se paga el precio de “reinventar la rueda”, debido a que hay que realizar el 100% de la codificación.
Jpa
Sus siglas significan Java Persistence API, es una API de persistencia desarrollada para la plataforma JAVA EE.
JPA es una especificación, lo que significa que por sí sola no se puede implementar. Podemos utilizar annotations de JPA en nuestras
clases, sin embargo sin una implementación nada sucederá. Hibernate es una implementación de JPA, cumple las especificaciones
de JPA y además aporta sus propias annotations y funcionalidades.
Cuando se utilizan las annotations de JPA con Hibernate en realidad se está utilizando la implementación de Hibernate para las
annotations de JPA. El beneficio es que podemos cambiar el ORM que estamos utilizando por cualquier otro que implemente JPA sin
tener que modificar nuestro código.
● Hibernate
● ObjectDB
● TopLink
● CocoBase
● EclipseLink
● OpenJPA
● Kodo
● DataNucleus, antes conocido como JPOX
● Amber
Hibernate
Es un framework – construido en JAVA - que se encarga de manejar la persistencia de datos. Es la implementación de un ORM.
Es un proyecto de código abierto no comercial (inicialmente), bajo los aspectos de la licencia pública GNU. En el año 2003 se une con
JBoss.org y consigue su lado comercial: venta de soporte y capacitación.
Los fuentes/binarios están disponibles en http://www.hibernate.org
Tiene como objetivo ser una solución completa a la problemática de persistencia de datos con tecnología Java, dejando al
desarrollador concentrarse fundamentalmente en los aspectos de negocio. Aumenta fuertemente la productividad y facilita la
administración de la capa de acceso a datos.
Uno de los aspectos importantes de Hibernate es que está construido con clases java básicas, es decir que puedo agregar el
framework a un proyecto propio. No se requiere ningún tipo de container (por ejemplo, un application server).
● PL (Presentation Layer)
● BL (Business Layer o Business Logic)
● DAL (Data Access Layer)
Se la denomina 3TA à 3-Tier Architecture, y provee una separación lógica (no necesariamente física) entre las 3 capas.
La PL, o Capa de Presentación, se encarga de administrar la lógica correspondiente a mostrar la información en pantalla.
Generalmente viene acompañada del uso del patrón de diseño M-V-C.
La BL, o Capa de Negocios, se encarga de administrar la lógica de negocios, aquí es donde reside la implementación de las reglas de
negocio (Business Rules).
La DAL, o Capa de Acceso a Datos, se encarga de manejar cualquier comunicación con la base de datos, ya sea para obtener
información como para escribir.
Como ejemplo y basándonos en tecnología Java, la PL podría estar construida con JSP y Struts, la BL con EJB de tipo session, y la
DAL con Hibernate.
Qué es DAL
DAL significa Data Access Layer, y representa la capa de Acceso a Datos. Se encarga de cualquier comunicación con la base de
datos. Maneja todo tipo de operaciones: operaciones DML tales como los AMBC, como también la posibilidad de manejar DDL.
Generalmente, es un grupo de clases encargadas de realizar tanto la obtención de datos como su persistencia. Le brinda servicios a la
capa de negocios.
Qué es POJO
Un POJO es un Plain Old Java Object, aunque también a veces se lo denomina Plain Ordinary Java Object. Es una clase que se
encarga de manejar la persistencia.
[code]
public Usuario(){
// Setters y getters
...
...
[/code]
● Provee una separación lógica entre las grandes tareas del sistema
● Permite que cada capa se concentre en una única tarea
● Aumenta la organización
● Aumenta la escalabilidad
● Facilita el mantenimiento
Y luego es necesario crear un archivo llamado application.properties que es el archivo utilizado por Hibernate para
configurar su funcionamiento. Debe agregarse en la carpeta src/main/resources.
Propiedades de Hibernate
spring.datasource.driver.class representa el driver a utilizar. Corresponde al nombre de la clase que implementa el driver
JDBC, incluido en el jar correspondiente. Dicho .jar, como ha sido especificado anteriormente, deberá formar parte del CLASSPATH
de la aplicación.
spring.datasource.url representa la url de conexión a utilizar. Especifica el host, el puerto y la base de datos a utilizar. La url de
conexión depende directamente del DBMS.
implementación de SQL es distinta en cada uno de los DMBS propietarios. El dialecto depende directamente del DBMS.
spring.jpa.hibernate.ddl-auto especifica si queremos que hibernate modifique la base de datos, basandose en las entidades
de java. Esto es muy útil en desarrollo pero no recomendable para Producción.
spring.jpa.hibernate.naming-strategy permite definer una estrategia para los nombres de las tablas.
Cuando se utiliza Hibernate Annotations toda la metadata está embebida en la misma clase Java que contiene al POJO, junto con el
código Java, esto ayuda al desarrollador a relacionar la estructura de la tabla y del POJO al mismo tiempo que se escribe el código.
@Entity: A partir de esta annotation indicamos a Hibernate que nuestra clase es persistente. Se recomienda el uso de la annotation
Entity de JPA, la de Hibernate suele traer dificultades. Una vez declarada persistente nuestra clase, todos sus atributos lo serán
también por default.
@Table(name = "ITEM"): A través de esta annotation especificamos un nombre de tabla en caso de diferir al de nuestra clase. De no
indicarlo, Hibernate tomará como nombre de la tabla asociada, el mismo que el de la clase. Esta es una convención, y constituye un
ejemplo sencillo del concepto "convention over configuration".
@Id: A través de esta annotation indicamos que la property mapeada será la PK de nuestra tabla. En este caso se trata de una clave
simple.
@GeneratedValue: Especifica la estrategia de generación de Ids. Hay varias opciones para generadores. En nuestro caso, al no
acompañarla de parámetros adicionales, su valor será AUTO, que decide una estrategia de generación de Ids conveniente
dependiendo del motor subyacente. (ej. Identity).
@Column(name = "ITEM_ID"): En este caso la annotation es opcional, si pretendemos que la columna de la tabla correspondiente se
llame igual que la property. Aquí valen las mismas consideraciones que en el caso de @Table.
@Repository: es una anotación de Spring que especifica que es una clase que trabaja con entidades y es levantada por el container
de Spring como un bean.
Laboratorio 1
Ud debe agregar el objeto Producto al tutorial 1 de las descargas.
Realice los mapeos necesarios para poder utilizar al producto con JPA / Hibernate.
Java Hibernate
Módulo 01 - Desafío
Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.
Java Hibernate
Ejercicio 1
Iniciando con un ORM
Java Hibernate
Ejercicio 2
Generando clases
1. Seguimos trabajando con el proyecto del 4. En las clases creadas en el punto 4, agre-
Ejercicio 1, creamos un paquete llamado gar los atributos que tendremos luego
entidades. como campos en las entidades de la base
de datos, generamos constructor,
2. En el paquete creado en el punto 1 gene-
setters y getters.
ramos las clases Persona y Teléfono.
Java Hibernate
En la sección de Descargas encontrarás los recursos
necesarios para realizar los ejercicios y su resolución
para que verifiques cómo te fue.
Java Hibernate
¡Terminaste el módulo!
Estás listo para rendir el examen
Java Hibernate
ASOCIACIONES
Las asociaciones permiten mapear objetos propios dentro de Hibernate / JPA. Se suelen usar especialmente para las colecciones.
Para ello existen tres tipos de relaciones que generalmente podemos encontrar en un modelo relacional:
Factura
[code]
public c
lass Factura {
p
rivate Long c odigo = null;
p rivate Set<Item> i tems = n
ew HashSet<Item>();
}
[/code]
Item
[code]
public c
lass Item {
p
rivate d = n
Long i ull;
p rivate Factura factura;
p rivate Long c antidad;
p rivate String n ombreProducto;
}
[/code]
Para definir cómo se mapearán las clases hay ciertos aspectos del negocio que primeramente deberíamos tener definidos.
1. En nuestro sistema agregaremos los ítems a la factura, lo que es más común a la hora de trabajar con objetos complejos, en
lugar de a cada ítem setearle la factura asociada.
2. El ciclo de vida del Ítem depende del de la factura. Si no existe la factura no tienen sentido sus ítems. Si se elimina una
factura, se eliminan también sus ítems.
3. Acceso a la información: siempre que traigo los datos de una factura traigo los datos de sus ítems, o accedo a los datos de
los ítems en una segunda instancia. Existen las dos posibilidades, analizaremos las dos situaciones con las opciones que nos
da Hibernate.
Existen otros aspectos que irán surgiendo a medida que avancemos, no obstante por ahora podemos comenzar a atacar el mapeo de
los objetos.
[code]
@Entity
@Table(name = "items")
public c
lass Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = " it_id")
p
rivate Long i
d = null;
@ManyToOne
@JoinColumn(name = " fac_id")
private Factura factura;
Column(name = "
@ it_descripcion")
p rivate String n ombreProducto;
}
[/code]
1) @ManyToOne: Este es el extremo “Many” de la relación. La tabla items tendrá una FK a la tabla facturas. Esta annotation puede
contener diferentes configuraciones con respecto al tipo de cascading y el fetching, las cuales abordaremos más adelante.
2) @JoinColumn(name = "fac_id"): Indica el nombre de la columna de la tabla a través de la cual se establece la relación .
Con este simple mapeo sería suficiente para establecer la relación entre ambas entidades, no obstante nos puede interesar recorrer la
relación en forma bidireccional.
Para ello mapearemos el otro extremo de la relación.
[code]
@Entity
@Table(name = "facturas")
public c
lass Factura {
Id
@
@GeneratedValue(strategy = GenerationType.AUTO)
@ Column(name = "fac_id")
p rivate Long c
odigo = null;
OneToMany
@
@ JoinColumn(name = " fac_id")
p rivate Set<Item> i
tems = n
ew HashSet<Item>();
}
[/code]
Observaciones:
1) @OneToMany: Explicita la relación desde el extremo “one”. Esta annotation puede contener diferentes configuraciones con
respecto al tipo de cascading y el fetching.
De esta forma tenemos el mapeo básico de nuestras entidades, no obstante todavía no tuvimos en cuenta los aspectos conversados
al inicio del mapeo.
El punto uno se refería a la forma en que se iría armando el objeto compuesto, como los ítems se agregarían a la factura:
[code]
Factura f = new Factura();
Item i = new Item();
f.getItems().add(i);
[/code]
El objetivo sería lograr que cuando se persista el objeto factura también se persistan los ítems y queden relacionados mediante la FK.
Por defecto Hibernate asume que los dos extremos de la relación se sincronizan con la base de datos. Con lo cual, tanto si agrego un
ítem a una factura o viceversa, este cambio se persistirá en la base de datos.
Este comportamiento puede ser modificado mediante el concepto de mappedBy para lograr una solución más genérica aplicable a la
mayoría de los casos.
MappedBy
Con esta configuración podemos lograr que las modificaciones que se realicen en la colección del extremo One no se sincronicen con
la BD.
[code]
@OneToMany(mappedBy="factura")
[/code]
[code]
factura.getItems().add(item);
[/code]
[code]
Item.setFactura(factura);
[/code]
Cascading
Este tema se encuentra relacionado con el segundo aspecto a tener en cuenta que planteamos en el inicio.
[code]
Factura fac = new Factura();
Item it = n
ew Item();
fac.getItems().add(it);
DB.save(fac);
[/code]
El ciclo de vida de ambos objetos está relacionado, tanto si agrego como si remuevo un ítem en el momento de persistir la información
en la DB todos los cambios quedan reflejados.
Para ello utilizamos el parámetro Cascade, este parámetro es unidireccional, puede declararse en ambos extremos.
[code]
@OneToMany(cascade = CascadeType.ALL, mappedBy = "factura")
private Set<Item> i
tems = n
ew HashSet<Item>();
[/code]
CascadeType.ALL indica que se propaguen todas operaciones posibles desde la entidad fuente al destino.
Un último aspecto a tener en cuenta con respecto al cascadeo es la existencia de objetos huérfanos, para lograr que al eliminar la
relación entre un ítem y una factura el registro del ítem se elimine de la base de datos es necesario configurar la opción llamada
delete-orphan:
[code]
@OneToMany(cascade = CascadeType.ALL,mappedBy="factura", orphanRemoval=true)
[/code]
Fetching
El tercer punto que abordamos es la forma en que vamos a buscar la información a la base de datos, la diferencia radica en que si
vamos a buscar una factura a la base de datos traemos siempre la información de los ítems, o esta información la traemos en una
segunda instancia.
Existen dos opciones:
Lazy: al traer un ítem, no nos traerá aún la factura asociada. Al traer el ítem se realizará un SELECT y otro cuando se desee obtener
la información de la factura.
Eager: realiza un Join entre la tabla ITEM y FACTURA, para poder cargar ambos objetos en el momento de obtener el ítem desde la
Base de datos.
[code]
@OneToMany(fetch = FetchType.EAGER/LAZY).
[/code]
One-To-One
Es una relación simple “uno a uno” donde una tabla tiene una FK a otra.
Ejemplo:
[code]
@Entity
@Table(name = "CLIENTE")
public c lass Cliente {
…
@ OneToOne
@ JoinColumn(name = " DIR_ID")
p rivate Direccion d ireccion;
…
}
@Entity
@Table(name = "DIRECCION")
public c lass Direccion {
…
@ OneToOne(mappedBy="direccion")
p rivate Cliente cliente;
…
}
[/code]
Many-To-Many
En un modelo relacional las relaciones muchos a muchos se encuentran representadas con una tabla cruzada entre entidades. En un
modelo de objetos no existen entidades para representar estas tablas cruzadas ya que no es necesario para poder resolver la
problemática.
A la hora de mapear esta relación podemos optar por utilizar dos relaciones many-to-one, de la forma ya vista, en caso de que tenga
sentido para nuestro sistema mapear la tabla intermedia, ya sea porque posee información adicional o por algún otro motivo.
Si optamos por ignorar la tabla intermedia podremos mapear una relación many-to-many.
Imaginemos un Producto, asociado al ítem en una relación one-to-many, y a una clase Categoría, en una relación many-to-many con
la clase Producto.
Para obtener los ítems asociados a la categoría a partir de la misma, en forma unidireccional:
[code]
@Entity
@Table(name = "CATEGORIA")
public c
lass Categoria {
…
ManyToMany
@
@ JoinTable(name = "CATEGORIA_ITEM",
joinColumns = {@JoinColumn(name = "CAT_ID")},
inverseJoinColumns = {@JoinColumn(name = "ITEM_ID")}
)
private Set<Item> i tems = n
ew HashSet<Item>();
…
}
[/code]
Bidireccional:
[code]
@ManyToMany(mappedBy = "items")
private Set<Categoria> c ategorias = new HashSet<Categoria>();
[/code]
Laboratorio 2
Ud debe mapear las siguientes asociaciones. Tenga en cuenta que Persona-Telefono es una relaciòn bidireccional.
Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.
Java Hibernate
Ejercicio 1
Iniciando con JPA Annotations
1. Continuamos con el proyecto armado en 3. En ambas clases debemos crear las rela-
el primer desafío, en la clase Persona ciones que tendrán entre entidades a
realizamos un mapeo de pojos hacia la través de las anotaciones.
base de datos, preparando anotaciones
para cada atributo, generando id con
autoincremento automático.
Java Hibernate
Ejercicio 2
Inyectando dependencias
Java Hibernate
En la sección de Descargas encontrarás los recursos
necesarios para realizar los ejercicios y su resolución
para que verifiques cómo te fue.
Java Hibernate
¡Terminaste el módulo!
Estás listo para rendir el examen
Java Hibernate
JPQL
Introducción
JPQL se utiliza para crear consultas contra entidades para almacenar en una base de datos. Está desarrollado en
base a la sintaxis SQL.
Por ejemplo:
[code]
[/code]
Paginación
Definición
La paginación es la posibilidad de trabajar con parte del resultado que satisface una consulta. Muchas veces resulta imposible mostrar
una cantidad importante de registros, y lo que se hace es mostrarlos agrupados por una cantidad. A esta cantidad de registros se la
denomina “Página”.
El método setMaxResults()
El método setMaxResults() establece que cantidad de registros traer. Representa al concepto de página.
El método setFirstResult()
El método setFirstResult() establece cuál será el primer registro a traer, esto se debe a que a veces resulta necesario traer del registro
0 al 100, o tal vez del registro 500 al 600.
PLUS
Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.
Java Hibernate
Ejercicio 1
Desarrollando la persistencia y namedQueries
Java Hibernate
3. Creamos una clase Cliente dentro de un nuevo
paquete entidades, en él generamos atributos
acorde a los campos dentro de la tabla cliente en la
base de datos.
Java Hibernate
Ejercicio 2
Practicando la persistencia
Java Hibernate
3. En la clase principal preparar las anotaciones
necesarias y empezar a rellenar datos usando listas,
creando objetos y recorrer iteradores.
Java Hibernate
En la sección de Descargas encontrarás los recursos
necesarios para realizar los ejercicios y su resolución
para que verifiques cómo te fue.
Java Hibernate
¡Terminaste el módulo!
Estás listo para rendir el examen
Java Hibernate
MAPEO DE HERENCIA DE CLASES
Problemática
No es posible modelar la herencia en un modelo de datos, lo cual produce un gap entre el modelo relacional y el modelo de objetos.
SQL no provee soporte para herencia.
Soluciones
Una tabla por clase concreta
Esta propuesta es la solución más sencilla. Se utiliza una clase concreta por cada tabla. Por cada atributo de la clase, existe un campo
en la tabla correspondiente.
Es la solución ideal si no se tienen en cuenta conceptos como herencia y polimorfismo. Descarta el uso de relaciones de herencia y
polimorfismo del modelo relacional.
La clave primaria es a su vez la clave foránea correspondiente a la superclase. Para obtener los datos de una subclase, es necesario
hacer un join entre la tabla que representa a la superclase y la tabla que representa a la subclase.
La única restricción que posee es que los atributos de las subclases deben quedar como campos que pueden estar en NULO.
Para confeccionar esta relación, dentro del modelo relacional será necesario construir la siguiente tabla denominada transportes:
[code]
@Entity
@Table(name = "transportes")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="tr_discriminador",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(value="T")
public class Transporte {
@Id
@GeneratedValue
@Column(name = "tr_id")
private Long transporteId;
@Column(name = "tr_largo")
private int largo;
@Column(name = "tr_ancho")
private int ancho;
@Column(name="tr_au_patente")
private String patente;
// Constructors and Getter/Setter methods,
}
[/code]
El código presentado en negrita es el código necesario para representar la relación de herencia dentro de hibernate. El discriminador
se utiliza para guardar un valor en la tabla que identificará si un registro corresponde a un Transporte o a un Auto.
La clase Transporte es la superclase, por tal motivo los valores para las annotations @Inheritance y @DiscriminatorColumn se definen
en la misma.
@Inheritance – Define la estrategia a utilizar, se define en la superclase de la jerarquía. Los valores posibles son JOINED,
SINGLE_TABLE y TABLE_PER_CLASS.
@DiscriminatorColumn – Es utilizada para definir la columna que será utilizada como discriminador, se utiliza en las estrategias
SINGLE_TABLE and JOINED. La estrategia de mapeo y la columna del discriminador se especifican solamente en la superclase de la
jerarquía.
Si la annotation para @DiscriminatorColumn no está definida, y una columna para el discriminador es necesaria, los valores por
defecto son "DTYPE" para el nombre y DiscriminatorType.STRING para el tipo.
@DiscriminatorValue – Es utilizada para especificar el valor de la columna discriminadora para las entidades de cada tipo. La
annotation DiscriminatorValue puede ser solamente especificada en una clase concreta.
Laboratorio #04 – Recorrido del tutorial
Bajar el archivo de tutorial y recorrerlo junto con el instructor
Java Hibernate
Módulo 04 - Desafío
Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.
Java Hibernate
Ejercicio 1
Iniciando con Mapeos de Herencia
1. Vamos a generar un nuevo proyecto con 3. También armamos la clase Persona, la cual
maven, ajustamos nuestro pom con las tendrá los atributos de los campos a crear
dependencias mysql y creamos el archivo dentro de la entidad o tabla persona dentro
application.properties para ajustar datos de la base de datos, tenga en cuenta que
de conexión a la base de datos. esta será la superclase. Agregamos
constructor, setters y getters.
2. Creamos un paquete herencia en el cual
armamos una interfaz PersonaDAO que 4. Sumar las anotaciones necesarias
extienda de CrudRepository. tomando en cuenta las inherencias y
discriminaciones por columna.
Java Hibernate
Ejercicio 2
Prácticas finales
Java Hibernate
En la sección de Descargas encontrarás los recursos
necesarios para realizar los ejercicios y su resolución
para que verifiques cómo te fue.
Java Hibernate
¡Terminaste el módulo!
Estás listo para rendir el examen
Java Hibernate