[go: up one dir, main page]

0% encontró este documento útil (0 votos)
7 vistas1283 páginas

Programación Java

Java es un lenguaje de programación orientado a objetos, multiplataforma y con manejo automático de memoria, diseñado para desarrollar aplicaciones escalables y robustas. Se organiza en tres áreas: Java Micro Edition (JME) para móviles, Java Standard Edition (JSE) para aplicaciones de escritorio y Java Enterprise Edition (JEE) para aplicaciones empresariales. Su historia comienza en 1990 con la empresa Sun Microsystems, y ha evolucionado constantemente, siendo ampliamente utilizado en el desarrollo de software.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas1283 páginas

Programación Java

Java es un lenguaje de programación orientado a objetos, multiplataforma y con manejo automático de memoria, diseñado para desarrollar aplicaciones escalables y robustas. Se organiza en tres áreas: Java Micro Edition (JME) para móviles, Java Standard Edition (JSE) para aplicaciones de escritorio y Java Enterprise Edition (JEE) para aplicaciones empresariales. Su historia comienza en 1990 con la empresa Sun Microsystems, y ha evolucionado constantemente, siendo ampliamente utilizado en el desarrollo de software.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 1283

Introducción a 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

● Manejo automático de memoria: no hay que


preocuparse por liberar memoria manualmente, ya que
es un proceso que la misma tecnología se encarga de
monitorear y, así, eliminar el espacio ocupado que no
está siendo usado. Este proceso se denomina Garbage
Collector.

● Evolución permanente: la tecnología está en constante


evolución debido a la gran cantidad de “consumidores”
que posee. Java es uno de los lenguajes más utilizados
en el mundo y SUN pretende estar a la altura de la
situación ofreciendo constantemente nuevas entregas.
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

● Java Enterprise Edition (JEE) - Enterprise /


Server: su objetivo es el desarrollo de
aplicciones empresariales de gran
envergadura. Contempla ambientes Web,
como los manejados por servidores de
aplicación. Las tecnologías principales
incluidas en este área son Servlets, JSP y EJB,
entre otras.
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

¿Por qué el nombre Java?


Inicialmente la intención fue nombrar al lenguaje
de programación con el nombre de Oak, pero
este ya estaba registrado. La leyenda cuenta que
una visita a la cafetería le dio rápida solución al
problema.

En las confiterías norteamericanas hay un café


denominado Java, en el que está inspirado el
nombre del lenguaje de programación. El logotipo
de Java es justamente una taza de café.
Introducción a Java

Siglas
● J2ME = Java2 Micro Edition

● J2SE = Java2 Standard Edition

● J2EE = Java2 Enterprise Edition

● JRE = Java Runtime Environment

● JVM = Java Virtual Machine

● SDK = Software Development Kit

● JDK = Java Development Kit


Introducción a Java

El compilador
● Incluido en el JDK

● Comando javac.exe

● Transforma archivos .java en .class


Introducción a Java

Java Virtual Machine (JVM)


● No es un compilador, es un intérprete de Java.

● Archivos .class se denominan bytecodes.

● Bytecodes: instrucciones de máquina para


la JVM.

● Interpreta el bytecode y lo convierte a código


propio del CPU.

● JRE solo para ejecutar aplicaciones Java.

● 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

Imprimir (c) c=a+b

El resultado podría ser: Imprimir (c)

Perro ladra El resultado sería: 7


Introducción a Java

Hay varios tipos de variables que requieren


distintas cantidades de memoria para guardar
datos.

Todas las variables deben declararse antes de


usarse. La declaración consiste en una sentencia
en la que figura el tipo de dato y el nombre que
asignamos a la variable. Una vez declarada se le
podrán asignar valores.

Identificador

Un identificador es un nombre que identifica a


una variable, a un método o función miembro,
a una clase. Cada lenguaje tiene reglas para
componer los identificadores, que veremos a
continuación.
Introducción a Java

Definición de variables en Java


Identificador (nombre)

● Puede comenzar con "_" o "$". ● Distingue entre mayúsculas y minúsculas.

● No puede utilizar caracteres "%" o "*" o "@" ● No se pueden utilizar las palabras reservadas
pues son reservados para otras operaciones. como identificadores.

● Puede incluir, pero no comenzar por un


número.

● No puede incluir el carácter espacio en blanco.


Introducción a Java

Tipos de variables Tipos de dato:

Una variable es algo que cambia o varía. ● Primitivos


Int, long, float, double, etc.
En Java, una variable almacena datos. Los tipos
de variables definen el tipo de dato que puede ● Objetos *
ser almacenado en una variable y los límites
de los datos.

A toda variable que se use en un programa se


le debe asociar (generalmente, al principio del
programa) un tipo de dato específico.

Un tipo de dato define todo el posible rango


de valores que una variable puede tomar al
(*) Se profundizará en Java Standard e Introducción
momento de ejecución del programa y a lo
al Paradigma con orientación a Objetos.
largo de toda su vida útil.
Introducción a Java

Ejemplos de declaración y definición:

● de una variable simple:

int var = 5;

● de un array:

int[] vec = new int[10]; vec[0] = 150; vec[1] = 500;

int vec[] = new int[10]; vec[0] = 150; vec[1] = 500;

int[] vec = {150,500,3,4,5,6};

Un array es un objeto que tiene una variable miembro llamada length.


Introducción a Java

Tipos de datos primitivos

Boolean 1 byte. Valores true y false

Char 2 bytes. Unicode. Comprende el código ASCII

Byte 1 byte. Valor entero entre -128 y 127

Short 2 bytes. Valor entero entre -32768 y 32767

Int 4 bytes. Valor entero entre -2.147.483.648 y 2.147.483.647

Long 8 bytes. Valor entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807

Float 4 bytes (entre 6 y 7 cifras decimales equivalentes).


De -3.402823E38 a -1.401298E-45 y de 1.401298E-45 a 3.402823E38

Double 8 bytes (unas 15 cifras decimales equivalentes). De -1.79769313486232E308 a -4.94065645841247E-324


y de 4.94065645841247E-324 a 1.79769313486232E308
Introducción a Java

Carácter

● En Java los caracteres no están restringidos a


los ASCII si no son Unicode.

● Un carácter está siempre rodeado de comillas


simples como 'A', '9', 'ñ', etc.

● El tipo de dato char sirve para guardar estos


caracteres.

Boolean

Una variable booleana solamente puede guardar


uno de los dos posibles valores: true (verdadero)
y false (falso).
Introducción a Java

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”.

Como ejemplos de declaración de variable


enteras tenemos:

Int. Numero = 8451;

Int. x,y;

Int. es la palabra reservada para declarar una


variable entera.
Introducción a Java

Enteros Largos

Son valores enteros que van desde


-9.223.372.036.854.775.808 a
9.223.372.036.854.775.807

long x;

long y=50L;

En la primera línea definimos la variable x


como long.

En la segunda línea asignamos a la variable y


el valor 50, que es un número de tipo int. Por
defecto, le ponemos el sufijo L, en mayúsculas o
minúsculas, para indicar que es de tipo long.
Introducción a Java

Flotante

Las variables del tipo float o double (coma Ejemplo:


flotante) se usan para guardar números en
float x=16.2f;
memoria que tienen parte entera y parte
decimal. float y=9f;

double PI=3.14159; double z=21.0;

double g=9.7805, c=2.9979e8; double g=7d;

El primero es una aproximación del número real


p, el segundo es la aceleración de la gravedad a
nivel del mar, el tercero es la velocidad de la luz
en m/s, que es la forma de escribir 2.9979 108. El
carácter punto “.”, separa la parte entera de la
parte decimal, en vez del carácter coma “,” que
usamos habitualmente en nuestro idioma.
Introducción a Java

Conceptualmente, hay infinitos números de


valores entre dos números reales. Ya que los
valores de las variables se guardan en un número
prefijado de bits, algunos valores no se pueden
representar de forma precisa en memoria. Por lo
tanto, los valores de las variables en coma flotan-
te en un ordenador solamente se aproximan a
los verdaderos números reales en matemáticas.

La aproximación es tanto mejor cuanto mayor


sea el tamaño de la memoria que reservamos
para guardarlo. De este hecho, surgen las
variables del tipo float y double.
Introducción a Java

Palabras reservadas
Las palabras reservadas no pueden ser usadas como nombre
de variable.

El lenguaje Java tiene la siguiente lista de palabras reservadas:

abstract double int strictfp boolean else


interface super break extends long switch
byte final native synchronized case finally
new this catch float package throw
char for private throws class goto
protected transient const if public try
continue implements return void default import
short volatile do instanceof static while
¡Sigamos
trabajando!
Introducción a Java
Módulo 1
Operadores
HTML5: Fundamentos Web
Introducción a Java

Operadores
Un operador es una expresión que produce otro
valor así como las funciones o construcciones
que devuelven un valor.

Existen operadores de comparación, de negación,


de incremento y decremento.

Las operaciones matemáticas se comportan de


igual manera en PHP. Las operaciones * y /
tienen precedencia sobre la suma y la resta y se
pueden utilizar paréntesis para expresiones más
complejas.
Introducción a Java

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.

En todo lenguaje de programación existe un


conjunto de operadores que permiten realizar
operaciones con los datos. Nos referimos a
operaciones aritméticas, comparaciones,
operaciones lógicas y de otro tipo, por ejemplo,
concatenación de cadenas, operaciones
algebraicas entre valores, números, etc.
Introducción a Java

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

Operador Utilización Resultado

&& 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.

! !op true si op1 es false y false si op1 es true.

& op1&op true si op1 y op2 son true, pero siempre se evalúa op2.

| op1|op2 true si op1 u op2 son true. Siempre se evalúa op2.


Introducción a Java

● Operadores de asignación

Operador Utilización Expresión equivalente

= op1=op2 op1 = op2

+= op1+=op2 op1 = op1 + op2

-= op1-=op2 op1 = op1 - op2

*= op1*=op op1 = op1 * op2

/= op1/=op2 op1 = op1 / op2

%= op1%=op2 op1 = op1 % op2


Introducción a Java

● Operador concatenación de caracteres ● Operadores incrementales y decrementales

Se utiliza para concatenar cadenas de ○ incremento (++)


caracteres. Por ejemplo: ○ decremento (--)

"Se han comprado " + variableCantidad +


"unidades";

● Operador condicional ?:

También denominado inline-if. Uso:


expresionBooleana ? res1 : res2

Evalúa expresionBooleana y devuelve res1 si


el resultado es true o res2 si el resultado es
false. Ejemplo:
a=100; b=50; String z = (a<b) ? “a es menor”
: “a es mayor”;
Introducción a Java

● Operadores relacionales

Sirven para realizar comparaciones de Operador Uso El resultado es true


igualdad, desigualdad y relación de menor
> op1>op2 Si op1 es mayor que op2
o mayor. El resultado de estos operadores es
siempre un valor booleano (true o false). >= op1>=op2 Si op1 es mayor o igual que op2

< op1<op2 Si op1 es menor que op2

<= op1<=op Si op1 es menor o igual que op2

== op1==op2 Si op1 y op2 son iguales

!= op1!=op2 Si op1 y op2 son diferentes


Introducción a Java

● Operadores aplicables a bits

Operador Utilización Resultado

>> 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

& op1&op2 Operador AND a nivel de bits.

| op1|op Operador OR a nivel de bits.

^ op1^op2 Operador XOR a nivel de bits (1 si solo uno de los operandos es 1)

~ op1~op2 Operador complemento (invierte el valor de cada bit)


Introducción a Java

Clasificación
● Operadores unarios: aquellos que necesitan
un único operando. Por ejemplo, el operador
incremento (++) o el operador negación (!).

● Operadores binarios: precisan dos


operandos. Por ejemplo, el operador suma (+)
o el operador AND (&&).

● Operadores ternarios: demandan tres


operandos. En Java, el único operador ternario
es el operador condicional (?:).
Introducción a Java

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.

El editor del IDE nos ayudará plenamente en


esta tarea sin apenas percibirlo.
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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:

Cantidad de horas totales: 1500

Semanas: 8
Días: 6
Horas: 12
Java para no programadores

Ejercicio 2: operadores aritméticos


con asignación compacta
1. Analizar el código a continuación y completar la
[code]
tabla correspondiente. System.out.println(“A”);
int x = 5;
2. Luego, realizar la codificación para confirmar que int y=10;
la ha completado correctamente. System.out.println(x);
System.out.println(y);

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

Ejercicio 3: operadores aritméticos con asignación


múltiple (suma y resta)
1. Analizar el código a continuación y completar la
[code]
tabla correspondiente.
System.out.println(“A”);
2. A continuación, realizar la codificación para int x = 5;
confirmar que la ha completado correctamente. int y=10;
int suma=0;
int resta=0;
System.out.println(x);
System.out.println(y);
System.out.println(suma);
System.out.println(resta);


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

Tabla para completar:

x y suma resta

E
Java para no programadores

Ejercicio 4: operadores aritméticos con asignación


múltiple (producto y división)
1. Analizar el siguiente código y completar la tabla
[code]
correspondiente.
System.out.println(“A”);
2. Luego, realizar la codificación para confirmar que int x = 5;
la ha completado de manera correcta. int y=10;
int multi=1;
int division=1;
System.out.println(x);
System.out.println(y);
System.out.println(multi);
System.out.println(division);


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

Tabla para completar:

x y multi división

E
Java para no programadores

Ejercicio 5: operador resto

1. Analizar el código que sigue y completar la tabla [code]


correspondiente. System.out.println(“A”);
int n1=20;
2. Luego, realizar la codificación y confirmar que se int n2=2;
ha completado correctamente la tabla. int n3=n1%n2;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);

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.

2. Dados n1=5, n2=10 y n3=20, informar:

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.

2. Dados n1=10, n2=20 y n3=30, informar:

a) El total.

b) El promedio.

c) El resto entre n2 y n1.


¡Sigamos
trabajando!
Introducción a Java
Módulo 1
Aspectos adicionales Web
HTML5: Fundamentos
Introducción a Java

Bloques de código
Un bloque de código es un grupo de sentencias
que se comportan como una unidad.

Un bloque de código está limitado por las llaves


de apertura “{“ y cierre “}”.
Introducción a Java

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;

La primera expresión asigna un valor a la


variable x.

La segunda, realiza una operación.


Introducción a Java

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.

● Argumentos que puede recibir el método


main() de una clase.

● Se utiliza el arreglo String[] args dentro del


método main.

● Accedemos desde Netbeans, Properties del


proyecto > Running Project > Arguments.
Introducción a Java

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:

final double PI=3.141592653589;


final int IVA MAX_DATOS=21;
Introducción a Java

Comentarios
Introducción

Un comentario es un texto adicional que se


añade al código para explicar su funcionalidad a
otras personas que lean el programa o al propio
autor como recordatorio.

Son una parte importante de la documentación


de un programa y son ignorados por el
compilador, por lo que no incrementan el tamaño
del archivo ejecutable. Se pueden añadir
libremente al código para que pueda entenderse
mejor.
Introducción a Java

Tipos de Comentarios

En línea, por ejemplo: En bloque, ejemplo:

int num = 5; // este es el comentario /*


Esto es un comentario
Habitualmente, usaremos comentarios en una
Este es otro comentario
sola línea //, ya que no tiene el inconveniente de
*/
que necesitemos aprender los símbolos de
comienzo y terminación del bloque u olvidarnos Como podemos observar, un comentario en
de poner este último, dando lugar a un error en varias líneas es un bloque de texto situado entre
el momento de la compilación. el símbolo de comienzo del bloque /*, y otro de
terminación del mismo */.
En la ventana de edición del Entorno integrado de
desarrollo (IDE) los comentarios se distinguen
del resto del código por el color del texto.
Introducción a Java

Para el Javadoc se utilizan:

/** Acá van los comentarios */

Los comentarios de documentación son un


bloque de texto situado entre el símbolo de
comienzo del bloque “/**” y el símbolo de
terminación “*/”.

El programa Javadoc utiliza estos comentarios


para generar la documentación del código.
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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?:

● (variableA && variableB) || (variableA && variableC) = true

● !(variableA || variableB) && variableC = false


Introducción a Java

Ejemplo de salida:
Introducción a Java

Ejercicio 2: cadenas de caracteres

1. Analizar el código a continuación y completar [code]


la tabla correspondiente.
System.out.println(“A”);
String palabra_1 =”Hola”;
2. A continuación, realizar la codificación para
String palabra_2 =”Mundo”;
confirmar que ha completado la tabla de forma String frase =””;
correcta. System.out.println(palabra_1);
System.out.println(palabra_2);
System.out.println(frase);

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

Ejercicio 3: operadores lógicos

1. Analizar el código que sigue y completar la tabla [code]


System.out.println(“A”);
correspondiente.
boolean n1=true;
boolean n2=false;
2. Luego, realizar la codificación para confirmar que
boolean n3=!n1;
ha completado la tabla correctamente. boolean n4=!n2;
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println(n4);

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

1. Resolver los enunciados desarrollando el código.

2. Dados n1=true, n2=false y n3=true, informar:

a) n1 ^ n2

b) (n1 & !n2) | n3

c) (n1 | n2) & !n3


Introducción a Java

Ejercicio 5

1. Resolver los enunciados desarrollando el código.

2. Declarar dos variables n1=5 y n2=10.

3. Utilizando concatenación entre las variables y los


literales, mostrar en pantalla la siguiente expresión:

a) n1 es igual a 5.

b) n2 es igual a 10.

c) n1 más n2 es igual a 15.


Introducción a Java

Ejercicio 6: uso de constantes

1. Haciendo uso de la constante IVA=21, calcular


el precio con IVA de los siguientes productos
e informar:

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

¿Qué son los desafíos?


● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Introducción a Java

Ejercicio 1: asignación básica

1. Analizar el código a continuación y completar la [code]


System.out.println(“A”);
tabla correspondiente.
int x = 10;
int y=20;
2. Luego, realizar la codificación para confirmar que
System.out.println(x);
la ha completado de forma correcta. System.out.println(y);

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

Ejercicio 2: asignación compacta

1. Analizar el código a continuación y completar la [code]


System.out.println(“A”);
tabla correspondiente.
int x = 10;
int y=20;
2. A continuación, realizar la codificación para
System.out.println(x);
confirmar que la ha completado de forma correcta. System.out.println(y);

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

Ejercicio 3: operadores aritméticos

1. Analizar el código a continuación y completar la [code]


System.out.println(“A”);
tabla correspondiente.
int x = 10;
int y=20;
2. Después, realizar la codificación para confirmar
System.out.println(x);
que la ha completado correctamente. System.out.println(y);

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.

Para recurrir a una librería interna o externa


en Java debemos utilizar la palabra reservada
import seguida del nombre de la clase y el
paquete donde se encuentra.
Introducción a Java

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.

Algo particular que pasa en Java es que hay


clases que no necesitan importarse, como
cuando utilizamos System.out.print. Esto se
debe a que esta clase se encuentra dentro del
paquete java.lang y no necesitamos importarla.

En cambio, con las otras utilidades o librerías


debemos hacerlo siempre.
Introducción a Java
Introducción a Java

Scanner
Hay una utilidad que nos ayuda a
capturar los datos de la consola, para
ello debemos importar la biblioteca
java.util.Scanner.

Para poder obtener los datos ingresados


por el usuario debemos crear este
elemento con la siguiente estructura:
Introducción a Java

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.

Existen dos tipos de casteo: implícito y explícito.


Introducción a Java

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;

escribir ningún tipo de código o sentencia. double miDouble = miFloat;

Algo particular que pasa con los char, es que


podemos asignarlos directamente a un int o a
un numérico más grande ¿Y esto por qué? Java char miChar = ‘P’;
devolverá el valor ASCII del carácter dado. int miInt = miChar;
Introducción a Java

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

Ahora bien, al contrario de lo que pasa de un


char a un int, la conversión de int a char no
es compatible por si sola, por lo que
tendremos que hacerla de forma explícita.

int miInt2 = (int) miLong2;


char miChar = (char) miInt2;
Introducción a Java

Cuadro de casteo
Convertir desde
Convertir a

boolean byte short char int long float double

boolean no no no no no no no

byte no si cast si si si si

short no cast cast si si si si

char no cast cast si si si si


Valor Descripción
int no cast cast cast si si* si*
no no hay posibilidad de conversión
long no cast cast cast cast si* si* si casting es implícito
float no cast cast cast cast cast si casting implícito pero se puede
si*
producir pérdida de precisión
double no cast cast cast cast cast cast
cast casting explícito
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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:

1. Realizar la multiplicación, división, suma


y resta.

2. Mostrar los resultados con doble precisión


(20 decimales) y sin decimales.
Introducción a Java

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 2
Clase
HTML5:String
Fundamentos Web
Introducción a Java

String y qué podemos hacer


Anteriormente habíamos conocidos los datos
primitivos en Java y el tipo de dato string que
nos ayuda representar una cadena de caracteres.
Ahora bien, los string no son un tipo de dato
Ho l a Mu n d o
primitivo sino un objeto.

Por ahora, solo diremos que los objetos son un 0 1 2 3 4 5 6 7 8 9


tipo de dato más complejo, que posee atributos
(variables y/o constantes) y métodos que nos
serán de gran utilidad a lo largo del desarrollo
del software.
Introducción a Java

Métodos
Tipo Método Descripción

Char charAt(int index) Devuelve el valor de carácter en el índice especificado.

String concat(String str) Concatena la cadena especificada al final de esta cadena.

Boolean contains(CharSequence s) Devuelve verdadero si y solo si esta cadena contiene la secuencia


especificada de valores de caracteres.

Boolean endsWith(String suffix) Prueba si esta cadena termina con el sufijo especificado.

Boolean equals(Object anObject) Compara esta cadena con el objeto 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

Tipo Método Descripción

Boolean isEmpty() Devuelve verdadero si, y solo si, length() es 0

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.

Int length() Devuelve la longitud de esta cadena.

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

Tipo Método Descripción

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

¿Por qué usar el método equals?


En Java, los operadores relacionales comparan
bit a bit y en los objetos (que profundizaremos
más adelante) se compara no el valor, sino la
posición de memoria, por lo que si comparamos
dos cadenas de texto introducidas por el teclado
con el operador relación ==, nos devolverá false.

Java nos entrega un método equals que solventa


este problema.

A=B
¡Sigamos
trabajando!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


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.

3. Mostrar los párrafos en mayúsculas.

El programa debe visualizarse como en la siguiente referencia.


Introducción a Java
Introducción a Java

A continuación, encontrarás los recursos necesarios para


realizar los ejercicios y su resolución para que verifiques
cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 2
Librería
HTML5: Math
Fundamentos Web
Introducción a Java

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.

Java nos proporciona una librería llamada Math


para realizar la mayoría de estas operaciones
y dos constantes importantes.
Introducción a Java

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 asin(double a) Devuelve el arco seno de un valor introducido.


Introducción a Java

Tipo Método Descripción

Static double atan(double a) Devuelve el arco tangente de un valor introducido.

Static double cbrt(double a) Devuelve la raíz cúbica de un double.

Static double cos(double a) Devuelve el coseno trigonométrico de un ángulo.

Static double exp(double a) Devuelve el número e de Euler elevado a la potencia de un double valor.

Static double log(double a) Devuelve el logaritmo natural (base e ) de un double valor.

Static double log10(double a) Devuelve el logaritmo de base 10 de un double.

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 max(double a, double b) Devuelve el mayor de dos valores double

Static float max(float a, float b) Devuelve el mayor de dos valores float.

Static int max(int a, int b) Devuelve el mayor de dos valores Enteros.

Static long max(long a, long b) Devuelve el mayor de dos valores long.

Static double min(double a, double b) Devuelve el menor de dos valores double.


Introducción a Java

Tipo Método Descripción

Static float min(float a, float b) Devuelve el menor de dos valores float.

Static int min(int a, int b) Devuelve el menor de dos valores enteros.

Static long min(long a, long b) Devuelve el menor de dos valores long.

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 sin(double a) Devuelve el seno trigonométrico de un ángulo.

Static double sqrt(double a) Devuelve la raíz cuadrada positiva correctamente redondeada de un double valor.

Static double tan(double a) Devuelve la tangente trigonométrica de un ángulo.


¡Nos vemos en
el siguiente módulo!
Introducción a Java
Módulo 1 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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)

● G: Green (verde) Color RGB(116, 182,179)


● B: Blue (azul)

A todo el espectro de colores que va desde el


0,0,0 al 255,255,255 se le denomina cubo RGBA,
todo el espectro de colores que va desde el 0,0,0
al 255,255,255 se le denomina cubo RGB.
Introducción a Java

Ejercicio 2
Se pide que ingrese por consola una palabra y
realice las siguientes operaciones:

Generar un número aleatorio entre 97 y 122 y


mostrar qué letra representa el número dado.
Introducción a Java

A continuación, encontrarás los recursos necesarios para


realizar los ejercicios y su resolución para que verifiques
cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 2 - Desafío
Introducción a Java

¿Qué son los desafíos?


● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Introducción a Java

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:

1. Mostrar el nombre y apellido por separado.

2. Mostrar las iniciales en mayúsculas.


Introducción a Java

Ejercicio 2
Realizar un programa que permita al usuario ingresar
por consola dos números y realice las siguientes
operaciones:

1. El usuario debe poder ingresar la cantidad de


decimales que desea ver en el resultado.

2. Sacar la potencia de los números ingresados.


Introducción a Java

Ejercicio 3

Se pide que ingrese por consola dos letras y realice


la siguiente operación:

1. Mostrar la representación ASCII de las letras en


minúsculas y mayúsculas.
Introducción a Java

A continuación, encontrarás los recursos necesarios para


realizar los ejercicios y su resolución para que verifiques
cómo te fue.
¡Terminaste el módulo!
Estás listo para rendir el examen
Introducción a Java
Módulo 3
Estructuras de
HTML5: Fundamentos Web
control de flujo
Introducción a Java

Introducción
Las estructuras de control de flujo son aquellas
sentencias que, colocando una condición,
producen distintas alternativas.

Cada alternativa depende del resultado de la


condición o expresión lógica.

Además, permiten la ejecución condicional de


fragmentos de código.
Introducción a Java

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.

Cuando se procesa un declaración If, se evalúa


la expresión de condición y el resultado es
interpretado como un valor booleano.
Introducción a Java

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

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

Ejercicio 1: Operador condicional


Dados los siguientes códigos, informar los
distintos valores de n3:


[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

Tabla para completar:

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.

La sentencia else se ejecuta solamente si la


expresión if se evalúa como falsa.
Introducción a Java

Forma de uso:
[code] falso
Condición
if (expresionBooleana)
{
sentencias1;
}
verdadero
else
{
sentencias2; Sentencia… Sentencia…
}
[/code]
Introducción a Java

Bifurcación if… else if… else


Es una combinación entre if y else. Es una Forma de uso:
sentencia con su propia condición lógica, en
[code]
caso de que la sentencia if anterior no haya if (expresionBooleana1) {
sido válida. sentencias1;
} else if (expresionBooleana2) {
Se pueden anidar sucesivos else if. sentencias2;
} else if (expresionBooleana3) {
sentencias3;
} else {
sentencias4;
}
[/code]
¡Sigamos
trabajando!
Introducción a Java
Módulo 3 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


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:

Temperatura Tiempo Sugerencia


Referencia:
> 25° Soleado Caminar y tomar sol

> 15° y <=25° Soleado Caminar

<=15° Soleado Caminar con campera Puede salir a esquiar.


<10° Lluvia Quedarse en casa o salir con paraguas y campera

<10° Nieve Esquiar


Introducción a Java

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 3
Estructura switch
HTML5: Fundamentos Web
Introducción a Java

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

Los valores no comprendidos en ninguna senten-


cia case, se pueden gestionar en el default. Si no
está el break, se ejecutan todas las sentencias
case a continuación.

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

case case case


valor1 valor2 valor3

Sentencia 1 Sentencia 2 Sentencia 3 Sentencia 4


¡Sigamos
trabajando!
Introducción a Java
Módulo 3 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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

Escribe la letra de la opción seleccionada.


Introducción a Java

Debe mostrarse un resultado similar a la imagen


de referencia:
Introducción a Java

Ejercicio 2 Pseudocódigo

DEFINIR n1, n2,opcion


Ingresar dos números y ofrecer al usuario un LEER n1
LEER n2
menú con las siguientes opciones: LEER opcion

“1-suma 2-resta 3-producto 4-división”. SI opcion= ’ + ‘ ENTONCES


INFORMAR n1 + n2
FIN SI
Luego, mostrar el resultado de la operación SINO
aritmética elegida. SI opcion = ’ - ‘ ENTONCES
INFORMAR n1 - n2
FIN SI
SINO
SI opcion = ’ * ‘ ENTONCES
INFORMAR n1 * n2
FIN SI
SINO
SI opcion = ’ / ‘ ENTONCES
INFORMAR n1/ n2
FIN SI
¡Sigamos
trabajando!
Introducción a Java
Proyecto integrador - Etapa 1
Introducción a Java

¿Qué es el proyecto integrador?


● Se desarrollará un proyecto a lo largo de todo
el curso.

● Permite reafirmar los conocimientos adquiridos.

● Los ejercicios se realizarán en la clase junto al


profesor/a.
Introducción a Java

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).

● El campo Usuario no distingue minúsculas


o mayúsculas.

● El campo Contraseña es sensible a las


minúsculas y mayúsculas.
Introducción a Java

● El cliente solo posee 3 intentos de logueo. Si


alcanza los 3 intentos fallidos de forma Notas:
consecutiva, la aplicación deberá informar al ● Para realizar esta primera etapa del proyecto se
usuario que debe dirigirse a la sucursal del deben haber completado los módulos 1, 2 y 3
banco más cercana para poder desbloquear ● Deberá incluir: Proyecto Java con una sola clase
sus credenciales. llamada App.java, datos de entrada (Manejo de la
Consola), Variables, Operadores Relacionales
● Por cada intento fallido, la aplicación debe y Lógicos, Condicionales, Ciclos, Métodos de la
preguntar al cliente si desea continuar clase String y Métodos de la librería Math.
colocando las credenciales de manera
correcta.

● Si el cliente coloca las credenciales de forma


correcta, deberá informar que ha ingresado
correctamente al Online Banking.
Introducción a Java

Para realizar este proyecto:

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.

2. La variable Usuario a validar deberá ser el


literal administrador.

3. La variable Contraseña a validar deberá ser


el literal administrador.1234.
Introducción a Java

Pantalla Credenciales Incorrectas


Introducción a Java

Pantalla Usuario Bloqueado


Introducción a Java

Pantalla No desea Continuar


Introducción a Java

Pantalla Ingreso Satisfactorio


Introducción a Java

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 3 - Desafíos
Introducción a Java

¿Qué son los desafíos?


● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Introducción a Java

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

informar “Bienvenido, Pepito!”

user=”Pepito” & NO
pass!=”EducacionIT”

SI

informar “usuario incorrecto”

user!=”Pepito” & NO
pass=”EducacionIT”

SI

informar “clave incorrecta”

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.

● Son para ejecutar n cantidad de veces una


opción de código de programa.

● El bloque de código se puede ejecutar n


cantidad de veces o hasta que se cumpla
una condición específica.
Introducción a Java

Bucle While
● Permite ejecutar un bloque de código
determinado en forma repetitiva “mientras”
(while, en inglés) se cumpla la condición.

● La condición se evalúa al inicio del ciclo.

● Si la condición es válida, ingresa en el ciclo y


ejecuta el código que pusimos en el mismo.

● Cuando deja de cumplirse la condición, el


programa sale del while y continúa con el
resto del programa.

● Se puede no entrar al bucle, dependiendo de


la expresión booleana.
Introducción a Java

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

En cada ciclo del bucle se evalúa la condición


nuevamente, si la condición es falsa, el ciclo
termina.
¡Sigamos
trabajando!
Introducción a Java
Módulo 4 - Laboratorio
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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 de referencia:


Introducción a Java

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

Requisito: se necesita tener conocimientos del SI


operador OR (||) NO
n<=10 & n>=20

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

Número de ciclo Nro. Suma

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 10
Introducción a Java

A continuación, encontrarás los recursos necesarios para


realizar los ejercicios y su resolución para que verifiques
cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 4
Estructura Do while Web
HTML5: Fundamentos
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.

● El bloque de código se ejecuta al menos 1 vez.

● Cuando deja de cumplirse la condición, el


programa sale del do-while y continúa con el
resto del programa.

● Tiene como particularidad que el control está


al final del bucle.

● Se debe entrar al bucle al menos una vez.


Introducción a Java

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

La única diferencia práctica entre el while y


do-while es que, en el do-while su declaración
siempre se ejecutará al menos una vez.
¡Sigamos
trabajando!
Introducción a Java
Módulo 4
Estructura For
HTML5: Fundamentos Web
Introducción a Java

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).

Está compuesta por tres partes:

● Inicialización de la variable que utilizaremos


en la condición (incondicionalmente se ejecuta
solo una vez al principio del ciclo).
Introducción a Java

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

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


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

● No debe incluir el espacio en blanco.

● La oración a ingresar no debe estar vacía.


Introducción a Java

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.

Número de ciclo Valor del nro.

5
Introducción a Java

Ejercicio 3 Prueba de escritorio

Imprimir los números del 10 al 1, uno abajo número de ciclo valor de n

del otro. 1

10
Introducción a Java

Ejercicio 4 Prueba de escritorio

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

Por ejemplo, (1*2*3*4*5) - (1+2+3+4+5). 1 1 1 1

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

Número de ciclo I J Salida for interno Salida for externo


1 6
1 5
1 4
1 3
1 2
2 6
2 5
2 4
2 3
3 6
3 5
3 4
4 6
4 5
5 6
Introducción a Java

Ejercicio 10
Imprimir la siguiente figura:

@
@@
@@@
@@@@
@@@
@@
@
Introducción a Java

Ejercicio 11
Imprimir la siguiente figura:

@@@@@
@@@
@
@@@
@@@@@
Introducción a Java

A continuación, encontrarás los recursos necesarios para


realizar los ejercicios y su resolución para que verifiques
cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 4
Break
HTML5:& Fundamentos
Continue Web
Introducción a Java

Break & Continue


La manera estándar para salir de una estructura
de bucle es que la condición de prueba principal
se convierta en falsa.

Los comandos especiales de Break y Continue


ofrecen una salida lateral opcional de todos los
tipos de bucles: for, while y do-while.

El comando break sale del bucle más interno


que la contiene.

El comando continue salta hasta el final de la


iteración actual del bucle más interno que lo
contiene.
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

Los valores no comprendidos en ninguna senten-


cia case, se pueden gestionar en el default. Si no
está el break, se ejecutan todas las sentencias
case a continuación.

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

case case case


valor1 valor2 valor3

Sentencia 1 Sentencia 2 Sentencia 3 Sentencia 4


¡Sigamos
trabajando!
Introducción a Java
Módulo 4 - Desafíos
Introducción a Java

¿Qué son los desafíos?


● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Introducción a Java

Ejercicio 1 Prueba de escritorio

número de ciclo valor de n


Imprimir los números del 1 al 10 uno abajo
del otro. 1

10
Introducción a Java

Ejercicio 2 INICIO

Una persona desea invertir $1000 en un banco, el mes=1, dinero=1000


cual le otorga un 2% de interés mensual ¿Cuál
será la cantidad de dinero que esta persona
NO
tendrá al cabo de un año? mes < = 12

SI
En el primer mes tendrá acumulado 1000 $ más
20 $ de interés ( 2% de 1000 ). En el segundo dinero=dinero”1.02

mes se le sumará un 2% a la base de 1020 $ del


mes anterior y así sucesivamente. mes ++

informar dinero

FIN
Introducción a Java

Prueba de escritorio nro de ciclo mes dinero

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

número de ciclo condición del if n suma

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:

tipo identificador [];

O bien

tipo [] identificador;

Donde:

● Tipo es el tipo de dato de los elementos del vector.

● Identificador es el nombre de la variable.


Introducción a Java

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]

Entre corchetes se indica el tamaño del vector,


donde tipo debe coincidir con el tipo con el que
se haya declarado el vector. Vector debe ser una
variable declarada como tipo[].
Introducción a Java

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.

El tamaño del array puede obtenerse utilizando


? ? ?
la propiedad vector.length. Por lo tanto, el índi-
ce del último componente es vector.length-1.
notas
Introducción a Java

Inicialización en la declaración
Podemos asignarle un valor inicial a los elemen-
tos de un array en la propia declaración.

Si se conocen los valores de antemano se podría


crear de la siguiente forma:

int[] vec = {150,500,3,4,5,6};

El compilador deduce automáticamente las


dimensiones del array.
Introducción a Java

Ejemplo:

Definimos un array de enteros llamado “losValores”


que tendrá 10 elementos.
[code]
public static void main(String[] args) {
int [] losValores = new int[10];
losValores[0]= 1;
losValores[1]= 34;
losValores[2]= 191;
losValores[3]= 9878;
//….continua hasta 9
losValores[9]= 232;

System.out.print("El valor de la primera posición es: "+ losValores[0]);


}
[/code]
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

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.

2. Indicar si hay palabras repetidas.

3. Ordenar las palabras de forma ascendente


y mostrar el resultado.

4. Ordenar las letras y mostrar el resultado.


Introducción a Java

Ejemplo salida de referencia:


Introducción a Java

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 5
HTML5:
Uso Fundamentos Web
de arreglos
Introducción a Java

Recorrido del array


Para recorrer el array sería, por ejemplo: No es necesario utilizar todos los elementos de
[code]
un vector, por lo que, al trabajar con ellos, se
for(i=0; i<losValores.length; i++) puede utilizar una variable entera adicional que
{System.out.println(losValores[i]);} nos indique el número de datos que realmente
[/code] estamos utilizando.
Si quisiéramos recorrer el array de atrás hacia
adelante sería de la siguiente manera: El tamaño del vector nos dice cuánta memoria se
ha reservado para almacenar datos del mismo
[code] tipo, no cuántos datos del mismo tipo tenemos
for(i=losValores.length-1; i>=0; i--)
realmente en el vector.
{System.out.println(losValores[i]);}
[/code]
Introducción a Java

Ejemplo:

Suma de los n primeros elementos de un vector.


[code]
int suma=0;
int n=losValores.length;
for (i=0; i<n; i++)
{
suma= suma+ losValores[i];
}
System.out.println(suma);
[/code]
Introducción a Java

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

La biblioteca de clases de Java incluye una clase


Nota: es necesario importar la biblioteca.
auxiliar llamada “java.util.Arrays” que incluye
como métodos algunas de las tareas que se import java.util.Arrays;

realizan más a menudo con vectores:

● Arrays.sort(v): ordena los elementos


del vector.

● Arrays.equals(v1,v2): comprueba si dos


vectores son iguales.

● Arrays.toString(v): devuelve una cadena


que representa el contenido del vector.

Por ejemplo:

Arrays.sort(losValores);
Introducción a Java

Búsqueda del número máximo y mínimo de un vector


[code]
int maximo=vec[0],minimo=vec[0];
// si solo voy calcular el maximo y minimo puedo recorrer desde 1
for (int a=1;a<vec.length;a++){
if (vec[a]>maximo)
maximo=vec[a];
if (vec[a]<minimo)
minimo=vec[a];
}
System.out.println("El maximo es : "+maximo);
System.out.println("El minimo es : "+minimo);

[/code]
Introducción a Java

Contar cuántas veces aparece el número 10


[code]

int contador =0;


for(int a=0;a<vec.length;a++){
if (vec[a]==10)
contador ++;
}
System.out.println("El numero 10 aparece :"+contador+" veces")
[/code]
Introducción a Java

Totalizar un vector y calcular el promedio


[code]
int total=0;
for(int a=0;a<vec.length;a++){
total+=vec[a];
}
System.out.println("La suma total es:"+total);
System.out.println("El promedio
es:"+total/vec.length);
[/code]
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


Introducción a Java

Ejercicio 1

Crear un programa que genere números enteros


aleatorios y muestre cuáles son primos y cuáles no.

Debe seguir las siguientes condiciones:

1. La cantidad de números aleatorios será indicada


por el usuario.

2. Los números aleatorios estarán comprendidos entre


1 y el número máximo sugerido por el usuario.
Introducción a Java

Ejemplo salida de referencia:


Introducción a Java

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 5
Funciones y
HTML5: Fundamentos
procedimientos Web
Introducción a Java

Introducción
Java es un lenguaje versátil que nos permite
aplicar múltiples paradigmas de programación
estructurada, de objetos y funcional.

Desde el comienzo del curso fuimos viendo


distintas estructuras de control como el if, while,
for, etc. También hemos empezado a notar que
nuestros programas empiezan a ser cada vez
más largos e incluso a tener código duplicado.

Para atacar estas complejidades veremos cómo


utilizar funciones y procedimientos.
Introducción a Java

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

● No retornan ningún valor (void).

● Pueden recibir parámetros, aunque no es


obligatorio.
Introducción a Java

Definición

Nombre del
Retorno procedimiento Parámetros

public static void ejecutar() {

for (int i = 0; i < 10; i++) {

System.out.println(i);

}
Instrucciones
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


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.

Las consignas para lograrlo son:

● Debe crear un método que no retorne nada,


que reciba los 3 parámetros, 2 números con
decimales y el carácter de operación.

● Debe crear los métodos de las operaciones


que retorne un número con decimales.

● Debe mostrar por consola un mensaje que


indique el resultado y la operación realizada.
Introducción a Java
Introducción a Java

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 5
HTML5: Fundamentos Web
Funciones
Introducción a Java

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.

Tal vez hayas notado que la definición es la


misma que en procedimientos. Su diferencia
radica más conceptualmente ya que una
función debe retornar algún dato e, ideal-
mente, recibir siempre uno o más parámetros.
Introducción a Java

Definición

Nombre del
Retorno procedimiento Parámetros

public static double iva(int valor ) {

double porcentaje = 0.21;

double resultado = valor * porcentaje;

return resultado;

}
Instrucciones

Return
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Laboratorio adicional
Introducción a Java

Para poder realizar este laboratorio,


se recomienda:
● Revisar contenidos previos.

● Descargar los elementos necesarios.


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.

● Debe evaluar si es un número o palabra


e indicarlo.
Introducción a Java
Introducción a Java

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.

Invocar esa función desde nuestro programa


e imprimir el resultado por consola.
Introducción a Java

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 5
HTML5: Fundamentos Web
Debugging
Introducción a Java

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.

Es una herramienta simple integrada en cualquier Características


IDE que nos permite definir un breakpoint
● Deben retornar un valor.
(punto de parada) y ejecutar nuestro programa
en modo debug (depuración). Al hacer esto, ● Pueden recibir parámetros, aunque no es
cuando el programa se detenga, podremos ir a obligatorio es recomendado.
paso a paso por nuestro programa y si llegamos
a una línea que sea una función/procedimiento,
Introducción a Java

Pasos

1. Agregar uno o más breakpoints.

2. Iniciar el programa en modo Debug.

3. Ejecutar nuestro programa línea por línea.

Paso 1: Agregar Breakpoint

En el lado izquierdo del editor de código de la


siguiente pantalla, vemos el número de cada
línea. Al hacer clic sobre el número podemos
indicar que deseamos agregar un breakpoint
en la línea correspondiente.
Introducción a Java
Introducción a Java

Paso 2: Modo Debug

Al apretar el botón derecho para desplegar el menú de


opciones, como se muestra en la referencia de la siguiente
diapositiva, vemos una que se llama “Debug File”, la cual
sirve para ejecutar el programa en modo debug (o sea,
frenando el programa cuando se llega a una línea que
tenga un breakpoint).
Introducción a Java
Introducción a Java

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

Paso 3: Línea a línea

Depurar nos permite ejecutar nuestro programa


línea a línea. Para ello, cada IDE utiliza algún
botón o combinación de teclas para avanzar a la
línea siguiente.

En NetBeans, esa tecla es F8. Podemos consultar


esta tecla en “Debug → Step Over”.
¡Sigamos
trabajando!
Introducción a Java
Proyecto integrador - Etapa 2
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.

3. La Clave Token no deberá repetirse, por lo


que se debe validar si ya ha sido suministrada
anteriormente en la misma ejecución de la
aplicación.

4. Crear un método que valide los datos


ingresados por el cliente y retorne si los datos
son correctos o no.
Introducción a Java

Pantalla Usuario Bloqueado con Clave Token en cada intento


Introducción a Java

Para trabajar en esta etapa del proyecto integrador,


debes haber completado los módulos 4 y 5.

Deberás incluir: Proyecto Java con una sola clase


llamada App.java, Arreglos, Métodos de tipo
Procedimiento y de tipo Función, Condicionales y Ciclos.

A continuación, encontrarás los recursos necesarios


para realizar los ejercicios y su resolución para que
verifiques cómo te fue.
¡Sigamos
trabajando!
Introducción a Java
Módulo 5 - Desafío
Introducción a Java

¿Qué son los desafíos?


● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Introducción a Java

Ejercicio 1
Dado el vector {10,20,5,15,30,20} Prueba de escritorio:

1. Informar el vector de la forma:


Ciclo Nro. Vec[nro.] Total Mayor Cont
"Índice: X, Valor: Y".
1 1
2. Totalizar el vector e informar el total.
2 2

3. Informar el contenido de las posiciones 3 3


impares (por ejemplo, posiciones 1,3,5, etc.) 4 4

4. Informar el mayor número. 5 5

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

4. Informar el promedio de inflación


(inflación total / 2).
Introducción a Java

Prueba de escritorio

Nro. Infla[n] Mes Total Máximo Mínimo


0 0.8
1 0.1
2 0.3
3 0.4
4 0.3
5 0.6
6 0.5
7 0.3
8 0.7
9 0.3
10 0.2
11 0.9
Introducción a Java

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.

Por ejemplo: Mes FEBRERO = 0.1


¡Terminaste el módulo!
Todo listo para rendir el examen
Los Paradigmas

¿ Qué es un Paradigma ?

Un Paradigma es un concepto abstracto, la definición de un modelo o patrón


en cualquier disciplina física.
Todo paradigma nace de la filosofía de una comunidad científica que,
especializada en un tema particular, decide plantear algún nuevo concepto
abstracto o forma de pensar. En este caso en particular, una parte de la
comunidad científica que estudiaba la computación como una rama
matemática y se especializaba en ello, forja esta nueva ideología o forma de
pensar que es el Paradigma de Programación Orientado a Objetos.
En programación, el paradigma, nos determina cómo van a ser los bloques
de construcción de los programas, es decir, los elementos que los
constituyen.

Tipos de Paradigmas

Imperativo: Los programas se componen de un conjunto de sentencias que


cambian su estado. Son secuencias de comandos que ordenan acciones a la
computadora.

Declarativo: Opuesto al imperativo. Los programas describen los resultados


esperados sin mostrar explícitamente los pasos a llevar a cabo para
alcanzarlos.

Lógico: El problema se modela con enunciados de lógica de primer orden.

Funcional: Los programas se componen de funciones, es decir,


implementaciones de comportamiento que reciben un conjunto de datos de
entrada y devuelven un valor de salida.

Orientado a objetos: El comportamiento del programa es llevado a cabo


por objetos, entidades que representan elementos del problema a resolver y
tienen atributos y comportamiento.

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.

¿ Por qué objetos ?


La programación orientada a objetos tiende a ser una simple idea. Esta simple
idea es: en lugar de crear estructuras de datos por un lado y código por el
otro, la idea es asociar piezas de código junto con los datos.
El mercado de lenguajes de programación, tiende a utilizar este paradigma
ya que trae innumerables ventajas con respecto a la programación
estructurada.
A continuación se enumeran algunas de ellas:

● Escalabilidad: Capacidad de crecimiento. Que un sistema sea


escalable, significa que está preparado para poder crecer sin limitaciones. En
casos de desarrollo corporativos como por ejemplo el de un sistema bancario,
donde constantemente se necesitan agregar nuevos módulos y cambios en
su comportamiento, es necesario contar con un lenguaje de programación
que permita fácilmente administrar estos tipos de desarrollos empresariales.
● Mantenimiento: Una de las principales características del paradigma
de objetos, es su capacidad realizar cambios en el programa a muy bajo costo
(esfuerzo del programador). Gracias a una buena organización de las clases
y sus relaciones es posible hacer pequeños pero importantes cambios que
impacten luego en todas las partes del sistema.
● Seguridad: Este paradigma posee lo que se denomina como
encapsulamiento y visibilidad, lo cual permite establecer diferentes niveles de
seguridad dentro de un equipo de desarrolladores, organizando el trabajo en
equipo y limitando la posible existencia de errores o incongruencias
cometidos por los programadores.
● Reutilización: A través de la correcta utilización de jerarquía de
clases, y la redefinición de funciones – polimorfismo, se puede reutilizar un
importante porcentaje de código, evitando escribir subprogramas parecidos
dentro de un mismo desarrollo.
● Simplicidad: Cuando el código de un programa desarrollado con
lenguaje estructurado, crece indefinidamente, se llega a un punto donde el
mismo se vuelve confuso y engorroso. El paradigma de objetos provee
simplicidad al poder organizar la complejidad del mismo a través de su
estructura de clases y 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.

Cómo se piensa en objetos


Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida
real. Por ejemplo vamos a pensar en un auto. Diríamos que el auto es el
elemento principal que tiene una serie de características, como podrían ser
el color, el modelo o la marca. Además tiene una serie de funcionalidades
asociadas, como pueden ser ponerse en marcha, parar o detenerse.
Pues en un esquema OOP el auto sería el objeto, las propiedades serían las
características como el color ó el modelo y los métodos serían las
funcionalidades asociadas como ponerse en marcha o parar.
Estos objetos se podrán utilizar en los programas, por ejemplo en un
programa de concesionarios. Los programas Orientados a objetos utilizan
muchos objetos para realizar las acciones que se desean realizar y ellos
mismos también son objetos. Es decir, el taller de autos será un objeto que
utilizará objetos auto, herramientas, mecánicos, etc.
Los objetos son entidades que combinan estado (atributo), comportamiento
(método) e identidad.

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.

¿Y quién le envía los mensajes?


La respuesta es fácil, otros objetos, recordemos, que en el paradigma de
objetos, sólo tenemos objetos y mensajes, y nada más.

¿Y qué pasa con los números? ¿También son objetos?


Va a depender del lenguaje. En principio, en un lenguaje orientado a objetos,
todo debería ser un objeto, pero esto no es tan así, existen algunos lenguajes
que eligen no respetar eso a rajatabla y modelan algunos conceptos muy
básicos como tipos primitivos, como por ejemplo los números, los booleanos,
los caracteres.

¿ 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.

¿Un objeto entiende cualquier mensaje que se le envía?


No! Nosotros, como programadores de objetos, debemos definir cuáles son
los mensajes que entiende cada objeto.

¿Y qué pasa si le mando un mensaje que no entiende?


Esto dependerá del lenguaje, pero en principio, esto causa un error, ya que
si un objeto no entiende el mensaje que se le está mandando, entonces
nuestro programa no estaría andando bien.

¿ 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.

El Software Orientado a Objetos


Con estos conceptos, podemos decir qué es el software. Es el resultado de la
interacción de un conjunto de objetos que viven en un ambiente y que se
comunican entre sí enviándose mensajes.
Es importante definir software desde el punto de vista de la programación
orientada a objetos, ya que esta es la forma que voy a tener de pensar en
una programa, en la construcción de un programa.
Entonces, de ahora en más, para pensar un programa, tenemos que pensar:

● Qué objetos vamos a incluir en la aplicación


● Qué mensajes va a entender cada objeto
● Cómo van a interactuar los objetos entre sí
Introducción al Paradigma de Objetos
Los Objetos y las Clases
En este paradigma todo se lleva a cabo con “clases” y “objetos”. ¿Qué es un
objeto? Un objeto es un conjunto de atributos (estado) y operaciones
(comportamiento).
Debemos entender los objetos como abstracciones de la realidad con ciertas
características representativas. Estos objetos representan (o deberían
representar) ideas del mundo real, ideas concretas como por ejemplo
animales o personas.
En el POO (Paradigma Orientado a Objetos) existen dos conceptos claves que
deben ser comprendidos, los conceptos de clase y objeto.
Las clases son plantillas que contienen atributos y operaciones, se consideran
los moldes para los objetos. Las clases se detectan como sustantivos en
singular el 99% de las veces, esto significa que suelen tener nombres como
“CuentaCorriente” o “Automovil”.

Ahora bién, ¿qué es un objeto exactamente? Un objeto es la instancia de una


clase, podemos decir que el objeto representa algo en particular y la clase
algo en general. Por ejemplo si tuviéramos la clase “Automovil”, podríamos
crear las instancias (objetos) llamados “Renault”, “Volkswagen” o “Ford”.

Si tenemos una clase “CuentaBancaria”, podemos tener infinita cantidad de


objetos de “CuentaBancaria”, pero cada una tendrá sus valores individuales,
aunque todas pertenezcan a esta clase. Decimos que un objeto pertenece a
una clase, cuando es una instanciación de esa clase; es decir, al crear un
objeto de la clase “Banco” y asignarle el nombre “bancoNacion”, el objeto
“bancoNacion” es una instanciación de “Banco”. Continuando con este
ejemplo, podríamos crear más instanciaciones de “Banco” y asignarles
nombres como “bancoRio” o “bancoCityBank”, y todos ellos tendrían algo en
común, que pertenecen a la clase “Banco”, a pesar de que cada objeto tenga
sus distintos valores, como por ejemplo, distinta cantidad de clientes, de
sucursales, etc (representados por los atributos).
A continuación se muestran algunas clases representadas gráficamente:

Las clases están compuestas por atributos y operaciones, y serán


presentadas a continuación.
LABORATORIO - Clases
Dado el siguiente texto, identificar las clases existentes.

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:

En este caso creamos una clase “Automovil” y colocamos atributos color,


modelo, precio, y usado que al adquirir valores en un objeto, lo diferenciarán
a este de otras instancias (objetos) de la clase “Automovil”.
Lo mismo podríamos hacer con una clase “CuentaBancaria”, como se muestra
a continuación:

En este caso la clase “CuentaBancaria” cuenta con un atributo “saldo”.


En resumen, los atributos son las características de una clase.

Los Tipos de Dato


Podemos encontrar la definición de atributo, mediante la cual definimos que
un objeto tiene un conjunto de ”características” que lo describe, y que se
definen en una clase.
Por ejemplo, el atributo nombre, va ser una palabra, es decir, va a ser un
String, de la misma manera, la edad, es un número, es decir, va a ser un
“int”. “int” y “String” son tipos. Un tipo es la forma de describir o almacenar
un dato.
Cuando decimos que tenemos un dato del tipo “int”, estamos diciendo que
podría ser cualquier número de tipo entero.
De la misma manera, un objeto Persona podría tener un atributo “Trabajo”,
donde trabajo es también un objeto con sus propias características, es decir,
el trabajo podría tener un empleador, un nombre, una ubicación, etc. De esta
manera, estamos diciendo que Persona, tiene como atributo “Trabajo”, que
será de qué tipo? De tipo Trabajo!
Acá empezamos a ver la potencia de los objetos.
Anteriormente, nosotros trabajamos con un conjuntos acotado de “tipos”
para las variables (int, String, boolean, etc), ahora, con los objetos, nosotros
podemos crear nuestros propios “tipos”. Cualquier clase que nosotros
creamos, de ahora en más, eso va a ser un nuevo tipo con el que podemos
trabajar.
De la misma manera si creamos un clase “Banco”, de ahora en más vamos a
tener objetos que son instancias de la clase Banco, o también podemos decir
que tenemos objetos del tipo Banco.
LABORATORIO - Atributos
Sobre las clases identificadas en el laboratorio anterior, identificar atributos en
cada una de ellas.

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.

En este caso hemos agregado dos operaciones a la clase “Automovil”. Estas


operaciones le permiten acelerar o frenar, como indican sus respectivos
nombres (cuanto más autoexplicativos sean los nombres, mejor).
Las operaciones son, en el 99% de los casos, verbos.
Las operaciones pueden admitir parámetros. Los parámetros son variables
que utilizará la operación para generar cierto comportamiento. Las
operaciones acelerar y frenar tienen como parámetros dos valores “int”
(números enteros) que representan la velocidad y el tiempo que acelerará o
frenará.
Las operaciones de una clase “CuentaBancaria” podrían ser las siguientes:

Las operaciones “depositar” y “extraer” tienen un solo parámetro, este


parámetro representa el monto a extraer o depositar.
En resumen, las operaciones son acciones contenidas por un objeto que
definen su comportamiento.
LABORATORIO - Métodos
Siguiendo los laboratorios anteriores, indentificar los métodos que pueda tener cada
una de las clases.

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

Mapa del Curso


Modalidad del curso
Los Paradigmas
Modelado de Objetos
Introducción al Paradigma de Objetos
- Clases y Objetos
- Atributos, Tipos, Operaciones, Encapsulamiento
- Constructores
- Herencia
Introducción a UML
Proyecto Integrador
Introducción al Paradigma de Objetos

Modalidad del Curso: Por qué sin uso de PC ?

Este curso tiene como objetivo comprender y realizar el Análisis


Orientado a Objetos de un sistema, y no la implementación de los
objetos en un Lenguaje de Programación.

La codificación de los objetos se enseña en los cursos de las


carreras JAVA, .NET, PHP, todos con uso de PC.

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

Un Paradigma de Programación es una propuesta


tecnológica que es adoptada por una comunidad de
programadores cuyo núcleo central es incuestionable en
cuanto a que unívocamente trata de resolver uno o varios
problemas claramente delimitados.

El Paradigma de Programación Orientada a Objetos es la


implementación de un Paradigma de Programación
Introducción al Paradigma de Objetos

Que es un Modelo ?
Un modelo es 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 Sistemas de Información deben


ser modelados previo a ser
construidos
Introducción al Paradigma de Objetos

El Modelado Orientado a Objetos


Consiste en interpretar un sistema como partes independientes
que se comunican entre sí

Las partes independientes se denominan Objetos

La comunicación entre los objetos se realiza a través de


Mensajes
Introducción al Paradigma de Objetos

El Software Orientado a Objetos

 Altamente Escalable

 Fácil de Mantener

 Fácil de Reutilizar

 Muy Simple
Introducción al Paradigma de Objetos

Que es una Clase


Es una plantilla, es un molde que permite construir objetos

Representa ideas del mundo real, en forma genérica

Dentro de un sistema, las clases suelen detectarse como


sustantivos en singular

Poseen atributos y métodos

Ejemplos de clases: Auto, Empleado, CajaDeAhorro, Alumno


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 estado (de acuerdo a sus


atributos)

Poseen un comportamiento
(realizan operaciones de acuerdo a
sus métodos)
Introducción al Paradigma de Objetos

Ejercicio 1 – Detección de Clases

Identificar las clases iniciales y necesarias para construir


un sistema de gestión bancaria

TIP: las clases se detectan como sustantivos en singular


Introducción al Paradigma de Objetos

Ejercicio #1 – Solución

Banco – Sucursal – GrupoFinanciero – Servicio


ClientePyme – ClienteCorporacion – ClienteIndividuo
CuentaComercial – CajaDeAhorro – CuentaCorriente
DirectorGeneral – DirectorRegional – DirectorDeSucursal
Introducción al Paradigma de Objetos

Ejercicio #1 – Codificación

class Banco {

// Atributos aquí

// Métodos aquí

}
Introducción al Paradigma de Objetos

Que son los Atributos


Son características que posee una clase

Son variables contenidas y establecidas por los objetos, y


normalmente cuentan con un tipo de dato asociado

Las atributos de una clase definen las características de sus


objetos

Las clases definen los atributos, y los objetos “los completan”


Introducción al Paradigma de Objetos

Que es un Tipo de Dato


Es la forma de describir y/o almacenar un dato

Los tipos de datos numéricos mas conocidos son: int, long,


float, double

Los tipos de datos de tipo caracter mas conocidos son: String,


char

Para valores true/false el tipo de dato utilizado es boolean y


para fechas se utiliza Date

Pueden ser otras clases!


Introducción al Paradigma de Objetos

Ejercicio #2 – Detección de Atributos


A partir de las clases detectadas anteriormente, identificar los
atributos que considere necesarios en cada clase.

Cada atributo deberá tener establecido un tipo de dato. Deberá


identificar al menos tres atributos por clase.

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

Sucursal: nombre, numero, direccion, cantidadDeEmpleados,


cantidadDeClientes
ClientePyme: razonSocial, direccion, fechaDeAlta, cuentaCorriente
ClienteCorporacion: razonSocial, direccion, fechaDeAlta,
cuentaCorriente
ClienteIndividuo: nombre, apellido, direccion, fechaDeAlta,
cajaDeAhorro
Introducción al Paradigma de Objetos

Ejercicio #2 – Solución

Servicio: nombre, descripcion, fechaDeAlta


GrupoFinanciero: nombre, descripcion, fechaDeAlta

CajaDeAhorro: moneda, numero, cbu, saldo


CuentaCorriente: moneda, numero, cbu, saldo, giroEnDescubierto

DirectorGeneral: nombre, apellido, fechaDeNacimiento, fechaDeIngreso


DirectorRegional: nombre, apellido, fechaDeNacimiento,
fechaDeIngreso
DirectorDeSucursal: nombre, apellido, fechaDeNacimiento,
fechaDeIngreso
Introducción al Paradigma de Objetos

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

Que es una Operación


Las operaciones son acciones contenidas en
una clase, y definen su comportamiento

Dentro de un sistema, las operaciones suelen detectarse como verbos

Desde la perspectiva de Diseño y Programación, se denominan Métodos

Desde la perspectiva de Análisis, se denominan Operaciones

Puede tener opcionalmente valores de entrada (Parámetros) y valores de


salida (Valores de Retorno)

Procedimientos (no retornan un valor) vs. Funciones (retornan un valor)


Introducción al Paradigma de Objetos

Que es un Valor de Entrada o Parámetro


Los parámetros son valores enviados a una operación

La operación toma los parámetros como valores de entrada, y


así puede realizar las acciones necesarias

Todos los parámetros deben tener un tipo de dato asociado


- Método encender()  sin parámetros
- Método acelerar(int)  recibe como parámetro
la cantidad de “km” a acelerar
- Método frenar(int)  recibe como parámetro la
cantidad de “km” que debe bajar de velocidad
Introducción al Paradigma de Objetos

Que es un Valor de Salida o Valor de Retorno


El valor de salida de una operación es un valor retornado por
la operación luego de realizar cierto procesamiento

Los valores de entrada son datos, y los valores de salida son


considerados información

Todos los valores de salida deben tener un tipo de dato


asociado

Es posible retornar un único valor de salida


Introducción al Paradigma de Objetos

Ejercicio #3 – Detección de Operaciones


A partir de las clases y los atributos detectados en los ejercicios
anteriores, identificar al menos dos operaciones que realiza
cada clase

TIP: las operaciones son verbos


PREGUNTA: en que clase ubicarías las siguientes operaciones ?
 informarSaldo()
 informarSucursales()
 informarClientes()
 depositarDinero(monto),
 informarDatosDeCuenta(nroDeCuenta)
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)

ClientePyme: infomarMovimientosEnCuentas(), informarDatos()


Introducción al Paradigma de Objetos

Ejercicio #3 – Solución
ClienteCorporacion: infomarMovimientosEnCuentas(), informarDatos()

ClienteIndividuo: infomarMovimientosEnCuenta(), informarDatos()

CajaDeAhorro: infomarSaldo(), extraerDinero(monto),


depositarDinero(monto)

CuentaCorriente: infomarSaldo(), extraerDinero(monto),


depositarDinero(monto)

Servicio: informarNombre(), informarDescripcion()


Introducción al Paradigma de Objetos

Ejercicio #3 – Solución

GrupoFinanciero: informarFechaDeAlta(), informarDescripcion()

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;
}

void extraerDinero(float unMonto){


// Actualiza el valor del atributo saldo, NO controla si monto > saldo
saldo = saldo – unMonto;
}
}
Introducción al
Paradigma de Objetos
Módulo 1 - Desafío

Introducción al Paradigma de Objetos


¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados en clase, se
recomienda que el alumno los realice como tarea.
● Permiten practicar y consolidar los conocimientos adquiridos.
● Es recomendable (aunque no obligatorio) realizar
los laboratorios de los desafíos antes de rendir el
examen de la clase.

Introducción al Paradigma de Objetos


Ejercicio 1
Caso: El cliente desea devolver latas, botellas y envases.
El proceso comienza cuando el cliente presiona Cuando el cliente ha depositado todos los
el “botón inicio” en el panel del cliente. Los elementos a devolver, solicita el recibo
sensores incorporados en el panel se activan. presionando el “botón recibo”. El sistema
procesa la información que debe imprimirse en
El cliente puede devolver elementos (botella, el recibo. Por cada tipo de elemento depositado
envase, etc.) a través del panel. Los sensores extrae su valor de devolución y el número de
informan al sistema que un objeto ha sido elementos depositados por el cliente actual. Se
insertado, calibran el elemento depositado y imprime el recibo con el detalle y el total de los
devuelven el resultado al sistema. El sistema elementos devueltos y el proceso finaliza.
utiliza el resultado medido para determinar el
tipo de elemento devuelto.
El total diario de elementos depositados se
incrementa, así como el total de elementos
que el cliente ha depositado.

Introducción al Paradigma de Objetos


Ejercicio 2
Caso: Gestionar todos los trámites académicos de los alumnos.
Se debe desarrollar una aplicación para realizar Debe tenerse en cuenta que una carrera sólo
los trámites de altas, bajas, modificaciones y se da en una sede determinada. Se tienen que
consultas de los datos de los mismos. gestionar las asignaturas que se imparten en una
carrera, teniendo en cuenta que una asignatura
Debemos asignar un número de trámite único sólo se puede dar en un único curso. Algunos de
en el sistema y una fecha de inicio. La los datos que pueden consultarse de una
información mínima que se debe guardar de asignatura son: nombre, cantidad de horas,
un alumno son el DNI, nombre, dirección, la cuatrimestre en el que se dicta y tipo (obligatoria,
carrera en la que está matriculado, así como transversal, optativa). Debe guardarse la
las asignaturas que está cursando actualmente. información de los profesores que dictan las
También se debe almacenar su historial distintas asignaturas de la carrera, como mínimo:
académico, donde deben aparecer todas las DNI, nombre, dirección y departamento al que
asignaturas cursadas y sus respectivas notas y pertenece. También se podrá consultar las
exámenes finales. distintas asignaturas que imparte.

Introducción al Paradigma de Objetos


Ejercicio 3
Caso: Gestionar productos asociados a los clientes de un banco.
Los productos que gestiona el banco son: debe almacenar la siguiente información: DNI,
cuentas bancarias, fondos de inversión y nombre, dirección y teléfono.
carteras de valores.
Los fondos de inversión deben tener un nombre,
Las cuentas deben tener: número de cuenta, importe, rentabilidad y la fecha de apertura y
fecha de apertura, saldo y tipo de interés y los vencimiento.
datos de sus clientes. El banco tiene dos tipos
de cuentas: corrientes y cajas de ahorro. Las carteras de valores están compuestas por
los valores asociados, almacenando el nombre
Las cuentas corrientes pueden tener tarjetas de del valor, el número de títulos y el precio de
crédito asociadas. Solo estas cuentas pueden cotización.
tener el resto de los productos asociados.
Las tarjetas de crédito deben almacenar el tipo
Las cajas de ahorro deben tener el número de (Visa, MasterCard, etc.), el número, el titular y la
meses que estarán abiertas. De los clientes se fecha de caducidad.

Introducción al Paradigma de Objetos


¡Terminaste el módulo!
Estás listo para rendir el examen

Introducción al Paradigma de Objetos


La Sobrecarga de Operaciones
Así como es posible tener más de un constructor (que es una operación), es
posible tener más de una operación con el mismo nombre dentro de la misma
clase. Para poder hacer esto es necesario que se cumplan las mismas
condiciones que para los constructores, es decir, que cada sobrecarga de
operación tenga distintos tipos de parámetros.
¿Para qué podría servir tener varias operaciones con el mismo nombre pero
con distintos parámetros? Por ejemplo, si quisiéramos crear una operación
llamada ”extraer()” que extraiga un determinado saldo de una cuenta,
podríamos querer utilizarla sin determinar un tipo de moneda (utilizando la
moneda del país como “por defecto”), o determinando un tipo de moneda
para hacer la extracción de ese tipo de moneda (euro, dólar, etc).
La sobrecarga de operaciones nos permite utilizar el mismo nombre de
operación para dos operaciones distintas, es decir, que aceptan distintos
parámetros y tienen distinta funcionalidad. Sin la existencia de este
mecanismo, se debería crear una operación distinta por cada “versión” de
nuestra operación. Sin la sobrecarga de operaciones, las operaciones están
limitadas a los parámetros de una sola definición de operación.

Si quisiéramos aplicar la sobrecarga de operaciones en una clase “Automóvil”:

La operación “acelerar()” tiene dos definiciones, en una acepta como


argumento la cantidad de tiempo que debe acelerar, y en la otra la cantidad
de tiempo que debe acelerar y si el auto utiliza turbo o no, representado por
el segundo parámetro de tipo booleano
En resumen, la sobrecarga de operaciones es la capacidad de poder crear
comportamientos distintos para la misma operación aceptando distintos tipos
de parámetros.
LABORATORIO - Sobrecarga
Sobre el ejercicio de encapsulamiento y generación de getters y setters, sobrecargar
al menos un método.

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

Se puede presentar como:


“… un Auto tiene un Motor …”

2 Formas de representar relaciones simples gráficamente:

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

Se puede presentar como:


“… un Auto tiene de una a muchas Rueda(s) …”
“… una Universidad tiene de uno a muchos Alumno(s) …”

Se dice que una Universidad tiene una colección de alumnos

2 Formas de representar relaciones simples gráficamente:

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 “+”:

Esto mismo se puede aplicar con la clase “CuentaBancaria”:

Una de las dudas que surgen a la hora de entender los modificadores de


acceso es “¿por qué debería de tener un miembro privado?”. Hacer que un
atributo sea privado se utiliza para tratar con datos o valores los cuales no
queremos que sean accedidos más que por el objeto contenedor. Las
operaciones privadas cobran sentido como procesamientos internos del
objeto que no queremos sean accedidas por otros objetos (tanto porque no
tiene sentido que la accedan otros objetos como porque podría resultar
peligroso para la integridad del objeto contenedor).
El porqué de utilizar miembros privados se aclarará a continuación junto con
el tema “Encapsulamiento”.
En resumen, la visibilidad determinan el alcance (scope) del atributo u
operación en cuestión.

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.

La clase “Automóvil” posee un atributo privado que representa la velocidad y


posee una operación pública que le permite interactuar con otros objetos.
Esta operación recibe como parámetro un valor que representa la velocidad
que se le quiere asignar a dicho automovil. Si esta operación recibiera un
valor negativo, podría pasarlo a un número positivo, mantener la velocidad
anterior o hacer cualquier otra cosa evitando que aparezcan errores en el
objeto por un dato inválido (velocidad negativa). Si en vez de utilizar un
atributo privado y una operación pública, utilizáramos directamente un
atributo público, este tipo de casos no podrían ser manejados y se atentaría
contra la integridad del objeto.
La ocultación puede visualizarse mejor en el siguiente gráfico:
El gráfico representa que los atributos están encerrados por operaciones, es
decir que los atributos son privados y las operaciones son públicas. Esto
significa que para poder acceder a un atributo es necesario utilizar una
operación, es decir que no hay posible acceso al atributo sino no se utiliza
una operación.
A continuación se presenta el encapsulamiento con la clase
“CuentaBancaria”:

Para poder modificar el atributo saldo, es necesario hacerlo a través de las


operaciones depositar o extraer.
En resumen, el encapsulamiento es la capacidad que tienen las clases de
permitir que ciertos miembros sean accesibles y ciertos miembros no lo sean,
y así lograr ocultar el estado interno de sus instancias.

Las principales ventajas que ello aporta son:


● Se facilita a los programadores que vayan a usar el tipo de dato el
aprendizaje de cómo trabajar con él, pues se le pueden ocultar todos
los detalles relativos a su implementación interna y sólo dejarle visibles
aquellos que puedan usar con seguridad. Además, así se les evita que
cometan errores por manipular inadecuadamente miembros que no
deberían tocar.

● Se facilita al creador del tipo la posterior modificación del mismo, pues


si los programadores no pueden acceder a los miembros no visibles,
sus aplicaciones no se verán afectadas si éstos cambian o se eliminan.
Gracias a esto es posible crear inicialmente tipos de datos con un
diseño sencillo aunque poco eficiente, y si posteriormente es necesario
modificarlos para aumentar su eficiencia, ello puede hacerse sin afectar
al código escrito.

La encapsulación se consigue añadiendo modificadores de acceso en las


definiciones de miembros y tipos de datos.
LABORATORIO - Encapsulamiento
Dadas las siguientes clases, encapsularlas y generar los métodos getters y setters.

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:

Por lo tanto la clase “Automóvil” tendrá un constructor llamado “Automovil()”,


y la clase “CuentaBancaria” tendrá un constructor llamado
“CuentaBancaria()”. En los ejemplos anteriores los constructores no tienen
parámetros.
En resumen, un constructor es una operación que es invocada al instanciar
una clase.

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:

● También tienen el mismo nombre que la clase a la que pertenecen,


pero tienen el símbolo ˜ delante.
● No tienen tipo de retorno, y por lo tanto no retornan ningún valor.
● No tienen parámetros.
● No pueden ser heredados.
● Deben ser públicos, no tendría ningún sentido declarar un destructor
como privado, ya que siempre se usan desde el exterior de la clase, ni
tampoco como protegido, ya que no puede ser heredado.
● No pueden ser sobrecargados, lo cual es lógico, puesto que no tienen
valor de retorno ni parámetros, no hay posibilidad de sobrecarga.
● Una clase no puede tener más de un destructor. Además, si se omite
el destructor, el compilador lo crea automáticamente.
El sistema en tiempo de ejecución llama automáticamente a un destructor de
la clase cuando la instancia de esa clase cae fuera de alcance o cuando la
instancia se borra explícitamente.
Introducción al Paradigma de Objetos

Que es la Sobrecarga de Operaciones


Es la aparición de métodos dentro de una misma clase que se
llaman igual, pero realizan acciones (levemente) diferentes

Normalmente varían en cantidad y/o tipo de parámetros

Por ejemplo, en la clase Auto podríamos encontrar variantes


del método acelerar(), por ejemplo:

 acelerar()  acelera 10km/h


 acelerar(int km)  acelera de acuerdo al parametro “km”
 acelerar(int km, boolean tieneNitro)  idem caso anterior, pero si el
parámetro “tieneNitro” es verdadero acelera el doble!
Introducción al Paradigma de Objetos

Sobrecarga de Operaciones – Codificación


class Auto {
// Atributos aquí
int velocidad;

// Métodos aquí
void acelerar() {
velocidad = velocidad + 10;
}

void acelerar(int km) {


velocidad = velocidad + km;
}

void acelerar(int km, boolean tieneNitro){


if(tieneNitro == false){
acelerar(km);
} else {
acelerar(km*2);
}
}
}
Introducción al Paradigma de Objetos

Que son las 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, por que
un auto puede tener un motor únicamente

Se puede presentar como:

“… un Auto tiene un Motor …”


Introducción al Paradigma de Objetos

Que son las Relaciones Simples


2 Formas de representar relaciones simples gráficamente:

CASO #1

CASO #2
Introducción al Paradigma de Objetos

Ejercicio #4 – Relaciones Simples

A partir de las clases detectadas previamente, identifique las


relaciones simples que existen entre las mismas.

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

ClientePyme tiene una CuentaCorriente

ClienteCorporacion tiene una CuentaCorriente

ClienteIndividuo tiene una CajaDeAhorro

Banco tiene un DirectorGeneral

Sucursal tiene un DirectorDeSucursal


Introducción al Paradigma de Objetos

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

Que son las 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

Se puede presentar como:

“… un Auto tiene de una a muchas Rueda(s) …”


“… una Universidad tiene de uno a muchos Alumno(s) …”
Se dice que una Universidad tiene una colección de alumnos
Introducción al Paradigma de Objetos

Que son las Relaciones Múltiples


2 Formas de representar relaciones simples gráficamente:

CASO #1
CASO #2
Introducción al Paradigma de Objetos

Ejercicio #5 – Relaciones Múltiples

A partir de las clases detectadas previamente, identifique las


relaciones múltiples que existen entre las mismas

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

Banco tiene de uno a muchas Sucursal(es)

Banco tiene de uno a muchos DirectorRegional(es)

ClienteCorporacion tiene de uno a muchas CuentaCorriente(s)

GrupoFinanciero tiene de uno a muchos Banco(s)

Sucursal tiene de uno a muchos Servicio(s)


Introducción al Paradigma de Objetos

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

Si un atributo o método es privado (-)  solo puede verse dentro


de la clase

Si un atributo o método es publico (+)  puede verse desde otras


clases

La visibilidad es establecida por los modificadores de visibilidad:


private y public
Introducción al Paradigma de Objetos

Que es la Visibilidad

El atributo velocidad es privado, solo El atributo saldo es privado, solo


puede modificarse a través de los puede modificarse a través de los
métodos acelerar() y frenar() métodos depositar() y extraer()
Introducción al Paradigma de Objetos

Que es la Visibilidad – Codificación


class Auto {
// Atributos aquí
private int velocidad;

// Métodos aquí
public void acelerar() {
velocidad = velocidad + 10;
}

public void acelerar(int km) {


velocidad = velocidad + km;
}

public void acelerar(int km, boolean tieneNitro){


if(tieneNitro == false){
acelerar(km);
} else {
acelerar(km*2);
}
}
}
Introducción al Paradigma de Objetos

Que es el Encapsulamiento
Es el ocultamiento del estado de un objeto

El estado (atributos) podrá accederse


únicamente a través de sus operaciones
(métodos)

En la clase, los atributos deben ser privados y


los métodos para acceder a los atributos
deben ser públicos

El atributo saldo esta encapsulado, solo puede


accederse a través de los métodos depositar()
y extraer()
Introducción al Paradigma de Objetos

Que son los Setters y los Getters


Son métodos de acceso públicos a atributos
privados

Representan la única forma de acceder a los


atributos

Setter  método utilizado para setear un valor a


un atributo

Getter  método utilizado para obtener un valor


de un atributo

Los IDEs generalmente permiten generar los


setters y los getters de forma automática!
Introducción al Paradigma de Objetos

Setters y Getters – Codificación


class Banco {
// Atributos aquí
private String nombre;
private int cantidadDeEmpleados;

// Métodos aquí
public void setNombre(String n) {
nombre = n;
}

public String getNombre() {


return nombre;
}

public void setCantidadDeEmpleados(int c) {


cantidadDeEmpleados = c;
}

public int getCantidadDeEmpleados() {


return cantidadDeEmpleados;
}
}
Introducción al Paradigma de Objetos

Objetos vs. Clases


La clase representa un
concepto, es un molde, una
plantilla

Los objetos representan


instancias de una clase. Seria
como tomar una plantilla (una
clase) y personalizarla
(completar sus atributos)
Introducción al Paradigma de Objetos

Constructores para Construir Objetos


Los objetos son construidos a partir de una clase. Todos los objetos
dependen de una clase

Para construir un objeto es necesario utilizar un constructor

El constructor es “un método” de la clase que se invoca al construir un


objeto, y en su interior tiene un conjunto de acciones a realizar

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

FORMA GENERICA: NombreDeClase nombreDeObjeto = new Constructor();


EJEMPLO: Auto a = new Auto();
Introducción al Paradigma de Objetos

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.

Suponiendo que se ejecuta el siguiente código, cual es la salida en pantalla?

ClientePyme c1 = new ClientePyme();


c1.informarDatos(); CASO #1
ClientePyme c2 = new ClientePyme(3020,
“Pirulo SRL”, “Av Maipu 2587”); CASO #2
c2.informarDatos();

ClienteCorporacion c3 = new ClienteCorporacion(3084, “Ford SA”,


“Lavalle 1256 piso 10 oficina 30”) CASO #3
c3.informarDatos();
Introducción al Paradigma de Objetos

Constructores – Conceptos Avanzados


Como se llama cuando una clase tiene mas de un constructor?
Sobrecarga de constructores

Una clase debe tener al menos un constructor. Si no se agrega un constructor,


normalmente se asume que posee el constructor vacio

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 {

public static void main(String[] args) {

// código aquí

// todo el código ubicado aquí se ejecuta automáticamente


// al ejecutar nuestra aplicación

}
Introducción al Paradigma de Objetos

Interacción entre “Programa” y alumnos


class Alumno { class Programa {
// Atributos aquí
private String nombre; public static void main(String[] args) {
private String apellido; 1
Alumno a1 = new Alumno();
// Constructores Alumno a2 = new Alumno(“Juan”, “Perez”);
Alumno() { 2
} a1.informar();
a2.informar();
Alumno(String n, String a){ 3
nombre = n; }
apellido = a; }
}

// Métodos aquí
public void informar(){
print(nombre + apellido);
}
}
Introducción al
Paradigma de Objetos
Módulo 2 - Desafío

Introducción al Paradigma de Objetos


¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados en clase, se
recomienda que el alumno los realice como tarea.
● Permiten practicar y consolidar los conocimientos adquiridos.
● Es recomendable (aunque no obligatorio) realizar
los laboratorios de los desafíos antes de rendir el
examen de la clase.

Introducción al Paradigma de Objetos


Ejercicio 1
1. Codificar todas las clases detectadas en cada una
de las consignas de los ejercicios del desafío del
primer módulo.
2. Identificar relaciones simples y múltiples entre
las clases y codificarlas.
3. Agregar los modificadores de visibilidad a cada
una de las propiedades y métodos de las clases.

Introducción al Paradigma de Objetos


Ejercicio 2
Encapsular y codificar los correspondientes getters y
setters en al menos una propiedad.

Introducción al Paradigma de Objetos


Ejercicio 3
Crear objetos a partir de las clases detectadas y
codificadas, y mostrarlas en alguna interfaz básica
(consola o navegador, en caso de PHP).

Introducción al Paradigma de Objetos


¡Terminaste el módulo!
Estás listo para rendir el examen

Introducción al Paradigma de Objetos


Mecanismo de Herencia
El mecanismo de herencia es otro de los conceptos clave de la POO, y uno de
sus puntos fuertes. Este mecanismo nos permite que una clase "herede de
otra clase" o "extienda otra clase" recibiendo o heredando todos los atributos
y operaciones de su clase "padre".
En el siguiente diagrama podemos ver cómo está compuesto un típico árbol
de herencia simple:
En el diagrama anterior vemos como una clase puede tener tanto
“superclases” como “subclases”. Esto significa que una clase hereda de una
“superclase” o clase padre, y es heredada por “subclases” o clases hijas. La
flecha indica “quien hereda a quien”, es decir, el origen de la flecha es la clase
hija y el destino de la flecha es la clase padre.
Se considera clases hijas a las clases que heredan directamente de una clase
y subclases tanto a las clases hijas como al resto de clases que tengan menor
jerarquía en el árbol de herencia; se considera clase padre a la clase de la
que se hereda directamente.
Cuando una clase hereda de otra, todas las operaciones y atributos pasan a
estar disponibles en la clase hija, es decir que partimos de todos estos
elementos e incluso podemos agregar nuevos o modificar estos ya heredados.
Con las clases heredadas ampliamos la descripción de un concepto de la vida
real, lo volvemos más específico. Se mencionará algo más sobre esto más
adelante.
Para comprender mejor la herencia y la naturaleza de las clases heredadas,
es necesario entender que una clase hija es más específica conceptualmente
que la clase padre, a la vez que la clase padre es más general
conceptualmente que la clase hija. Esto lo podemos visualizar mejor de la
siguiente manera:
En este diagrama podemos ver a la clase padre “Vehículo” y su árbol de
herencia. Por comodidad no hemos colocado las clases hijas de las clases
“VehículoAereo” y “VehículoAcuatico”. ¿Qué tendrían en común las clases
“Avion” y “Motocicleta”? Que ambas clases tienen como superclase a la clase
vehículo, es decir, ambas SON “Vehículo”.
Es importante destacar que una clase ES UN cualquiera de sus superclases,
es decir: “Motocicleta” ES UN “VehículoTerrestre” y ES UN “Vehículo”.
Con cada subclase, se amplía la cantidad de elementos de dicha clase con
respecto a sus superclases, volviéndola más específica. Así, por ejemplo, la
clase vehículo hace referencia a cualquier tipo de transporte, en cambio la
clase “VehículoTerrestre” hace referencia a cualquier tipo de transporte que
se desplace en un medio sólido, y la clase “Automóvil” hace referencia a un
tipo de transporte específico. Podríamos ir más allá en el árbol de herencia y
crear clases para cada modelo de automóvil y hacer que extiendan a la clase
“Automóvil”.
Otro árbol de herencia podría ser el siguiente:

En este caso, la clase padre es “CuentaBancaria” y las clases hijas son


“CajaDeAhorro” y “CuentaCorriente”, donde “CajaDeAhorro” ES UNA
“CuentaBancaria” y “CuentaCorriente” ES UNA “CuentaBancaria”
Resumiendo, el mecanismo de herencia es la capacidad que tienen las clases
de recibir el comportamiento (operaciones) y estado (atributos) de otras
clases.
LABORATORIO - Herencia
Ejercicio 1
Implementar un mecanismo de herencia de herencia para las figuras geométricas, identificar cuáles clases podrían
ser abstractas.

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:

La clase “AutomovilDeCarrera” debe reemplazar el comportamiento de la


operación “acelerar()” heredado de la clase “Automóvil”, ya que el tipo de
aceleración es completamente distinta. Lo mismo sucede con las siguientes
clases:
En este caso, las operaciones “extraer()” de ambas clases deben tener
comportamientos distintos debido a que el límite de dinero a extraer es
distinto en cada clase. La clase “CajaDeAhorro” no tiene la posibilidad de
extraer en descubierto, sin embargo la clase “CajaDeAhorroConDescubierto”
permite extraer dinero aun cuando ya no hay mas saldo en la caja. Es decir
que ambas clases permiten extraer dinero pero de formas distintas.
En resumen, el polimorfismo es el mecanismo que permite que un objeto sea
tratado como alguna de sus superclases conservando los miembros de su
propia clase.
INTRODUCCIÓN A UML
¿ Qué es UML ?
UML es un lenguaje gráfico que permite modelar, visualizar y documentar sistemas. Está compuesto
por distintos diagramas que permiten ir representando las distintas vistas de un sistema, cada
diagrama tiene un objetivo bien definido.
UML significa Unified Modeling Language o Lenguaje Unificado de Modelado, y está basa en tres
principios fundamentales:
Es un Lenguaje: está formado por elementos y reglas bien definidas, que poseen su propia sintaxis
y semántica
Está Unificado: unifica los distintos criterios utilizados antes de su creación, es decir que toma las
mejores propuestas de herramientas previas para presentar una propuesta sumamente abarcativa e
integradora
Permite Modelar: está basado en la construcción de modelos que permite representar abstracciones
de la realidad.
UML está estrechamente ligado con el paradigma de objetos, lo que permite construir sistemas de
información de una forma mucho más intuitiva, integrada y sencilla con el proceso de desarrollo.
UML no es una metodología que presenta los pasos a seguir para realizar un desarrollo, sino que es
un lenguaje gráfico de modelado.

¿ Cómo nace UML ?


La historia cuenta que UML da sus primeros pasos con la unión de los “tres amigos”: Booch,
Rumbaugh y Jacobson.
En los años 80 cada uno utilizaba un lenguaje propietario aunque como denominador común tenían
como objetivo el desarrollo de sistemas, con previa modelización. A partir de los años 90 comienzan
a intercambiar ideas para intentar unificar criterios.
Booch es el fundador de Rational Software Corp, y recluta en el año 1995 a Rumbaugh y Jacobson
para comenzar a determinar una especificación genérica, sencilla y abarcativa. Así es como las
grandes empresas de tecnologías de información – entre ellas Rational - deciden formar un consorcio
para la construcción de un Lenguaje Unificado de Modelado: UML. La primer versión de UML, la 1.0,
sale a la luz en el año 1997, y a partir de 1998 un organización llamada OMG (Object Management
Group) se encargó de generar nuevas revisiones. En el año 1998 UML se establece como Standard
de facto en la industria del Software.

¿ 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.

INTRODUCCIÓN A LOS DIAGRAMAS DE UML


Introducción
UML está organizado en una serie de diagramas que tienen objetivos bien definidos, con una sintaxis
y semántica determinada, que intentan representar / modelar distintas vistas de un sistema.

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.

Los tipos son:


● Objetos Entidad
● Objetos límite o interfaz
● Objetos de control.

Éstos son estereotipos de clases. Un estereotipo representa una la meta-clasificación de un elemento.


Dependiendo de la herramienta utilizada, también se puede añadir información adicional a las clases
para mostrar otras propiedades de las mismas, como son las reglas de negocio, responsabilidades,
manejo de eventos, excepciones, etc.

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 Casos de Uso


El Diagrama de Casos de Uso tiene como objetivo describir las acciones del sistema desde el punto
de vista del usuario. Representa las formas que tiene un usuario de utilizar un sistema, y se puede
utilizar como un “contrato” entre cliente y proveedor de software para determinar la funcionalidad
del sistema, es decir los requisitos funcionales.
Está compuesto por actores (agentes externos al sistemas, pueden ser usuarios u otros sistemas),
casos de uso y distintos tipos de relaciones. Es posible construir diagramas con diferentes niveles de
detalle.

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.

Estos diagramas son:


● Diagrama de Clases
● Diagrama de Objetos
● Diagrama de Componentes
● Diagrama de Despliegue

Diagramas de Comportamiento
Los Diagramas de Comportamiento son aquellos que reflejan características de comportamiento del
sistema o modelan procesos de negocios.

Estos diagramas son:


● Diagrama de Casos de Uso
● Diagrama de Comunicación
● Diagrama de Secuencia
● Diagrama de Actividades
● Diagrama de Estados
LABORATORIO - UML
Ejercicio 1
En base al ejercicio de Herencia, realizar el diagrama de clases UML del caso banco MAX.

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

Interacción entre Objetos - Ejemplo


Asumiendo que un cliente individual utiliza el cajero automático para realizar un
deposito de $2500, ingresa su dni numero 27.014.589 como pin y realiza el
deposito.

La interacción básica sería:

// Obtiene el cliente
ClienteIndividuo c = ClienteIndividuo(“27014589”);

// Obtiene la caja de ahorro del cliente


CajaDeAhorro cda = c.obtenerCajaDeAhorro();

// Realiza el deposito
cda.depositar(2500);

El código completo correspondiente se presenta a continuación:


Introducción al Paradigma de Objetos

Interacción entre Objetos - Ejemplo


class Programa { class ClienteIndividuo {
public static void main(String[] args) { // Atributos aquí
1 private String dni;
ClienteIndividuo c1 = new ClienteIndividuo(“27014589”); private CajaDeAhorro cuenta;
CajaDeAhorro cda = c1.obtenerCajaDeAhorro();
cda.depositar(2500); // Constructores
ClienteIndividuo(String d) {
} 3 2
dni = d;
} // busca en la Base de Datos los datos
// de este cliente según el dni y
// completa los atributos
class CajaDeAhorro {
}
// Atributos aquí
private float saldo;
// Métodos aquí
public CajaDeAhorro obtenerCajaDeAhorro(){
// Metodos aquí
return cuenta;
public void depositar(float monto) {
}
saldo = saldo + monto;
}
}
Introducción al Paradigma de Objetos

Ejercicio #7 – Uso de Objetos


Suponiendo que un cliente corporativo desea realizar una extracción de una
cuenta corriente, teniendo en cuenta los siguientes datos:

el cuit de la empresa es 30-12345678-1


desea extraer $20.000
en la cuenta hay disponible $18.000
el giro en descubierto es de $5.000

Realizar el código en forma genérica utilizando las clases Programa,


ClienteCorporativo y CuentaCorriente

TIP: el giro en descubierto es el monto máximo que el banco le presta al cliente en


caso de que el saldo en su cuenta sea cero. Es decir que si el cliente no tiene fondos en
la cuenta, y desea realizar una extracción o un pago, puede utilizar automáticamente
hasta $5.000
Introducción al Paradigma de Objetos

Ejercicio #7 – Codificación
Código de la clase Programa:

class Programa {

public static void main(String[] args) {

// Obtiene el cliente de acuerdo a su cuit


ClienteCorporativo cliente = new ClienteCorporativo(“30-12345678-1”);

// Obtiene la cuenta corriente del cliente


CuentaCorriente cc = cliente.obtenerCuentaCorriente();

// 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 {

private float saldo;


private float saldoDescubierto;

public void extraer(float monto) {


if ( saldo >= monto ) {
saldo = saldo - monto;
print(“Extraccion ok”);
}
else {
montoExcedente = monto - saldo;
if ( montoExcedente <= saldoDescubierto) {
saldo = 0;
saldoDescubierto = saldoDescubierto - montoExcedente;
print(“Extraccion ok”);
}
else {
print(“No hay fondos suficientes”);
}
}
}
}
Introducción al Paradigma de Objetos

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".

La clase principal se denomina: superclase o clase


padre

La clase que hereda se denomina: subclase o


clase hija o clase derivada

La relación se interpreta como “ES UN”

Ejemplo: un Auto ES UN VehiculoTerrestre


Introducción al Paradigma de Objetos

Mecanismo de Herencia - Ejemplo


Introducción al Paradigma de Objetos

Mecanismo de Herencia - Ejemplo


Superclase
Las subclases Autobus y Moto
heredan de la superclase
VehiculoTerreste los atributos
altura, anchura, largo, y también la
operación encender()

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

TIP: Si consideras útil y/o necesario, puedes proponer nuevas


clases.
Introducción al Paradigma de Objetos

Ejercicio #8 – Solución
Introducción al Paradigma de Objetos

Ejercicio #8 – Codificación
class Cliente {
// Atributos
String cuit;
String direccion;
// Constructores
// Métodos
}

class ClientePyme extends Cliente {


// Atributos - Los atributos heredados no se vuelven a codificar!
String razonSocial;

// 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

2 Tipos de Polimorfismo: sin redefinición y con redefinición

Polimorfismo sin redefinición: Una clase que posee varios métodos llamados
iguales pero con diferentes firmas. También llamado Sobrecarga de
Operaciones

3 versiones del método acelerar()


Introducción al Paradigma de Objetos

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

Cualquier tipo de Automovil


acelera igual que un
AutomovilDeCarrera ?

Extraer dinero de una caja de


ahorro sin descubierto se
realiza de la misma forma que
desde una caja con
descubierto ?
Introducción al Paradigma de Objetos

Que es el Polimorfismo - Codificación


class CajaDeAhorro {
// Atributos
float saldo;

// Métodos
public void extraer(int monto) {
saldo = saldo – monto;
}
}

class CajaDeAhorroDescubierto extends CajaDeAhorro {


// Atributos
float saldoDescubierto;

// 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

Atributos de Instancia y de Clase


Atributos de Instancia: son atributos que pertenecen a un objeto en
particular

Atributos de Clase: son atributos que pertenecen a la clase y no a un objeto


o instancia de clase. Esto significa que son atributos compartidos por todos
los objetos. También llamados atributos estáticos

Para definir un atributo estático se utiliza la palabra clave static

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

Métodos de Instancia y de Clase


Métodos de Instancia: son métodos que pertenecen a un objeto en
particular e impactan en el comportamiento de ese objeto únicamente

Métodos de Clase: son métodos que pertenecen a la clase y no a un objeto


o instancia de clase. Esto significa que son métodos compartidos por todos
los objetos. También llamados métodos estáticos

Para definir un método estático se utiliza la palabra clave static


class CajaDeAhorroConDescubierto {
// Atributos aquí
public float saldo;
private static int descubierto = 5000;
// Metodos aquí
public static int leerDescubierto() {
return descubierto;
}
}
Introducción al Paradigma de Objetos

Clases Abstractas y Clases Concretas


Las Clases Concretas
- son clases que se pueden instanciar
- por ejemplo la clase Alumno existe para generar diversos objetos del tipo Alumno

Las Clases Abstractas


- son clases que no se pueden instanciar
-representan conceptos muy genéricos de la realidad
- por ejemplo la clase Vehiculo o la clase Persona son conceptos muy abstractos,
seria difícil pensar en armar un objeto a partir de estas clases

Codificación: abstract class Persona {

// Atributos aquí

// Métodos aquí

}
Introducción al Paradigma de Objetos

Generación Automática de Código


El mecanismo de generación automática de código se
denomina Ingeniería Directa

Existen herramientas que permiten generar código fuente


a partir de diagramas, por ejemplo el Enterprise Architect

Estas aplicaciones permiten generar código fuente en


diversos lenguajes, como ser: C#, VB.NET, PHP, Java,
Actionscript, y mas
Introducción al Paradigma de Objetos

FIN
Muchas Gracias!
Introducción al
Paradigma de Objetos
Módulo 3 - Desafío

Introducción al Paradigma de Objetos


¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados en clase, se
recomienda que el alumno los realice como tarea.
● Permiten practicar y consolidar los conocimientos adquiridos.
● Es recomendable (aunque no obligatorio) realizar
los laboratorios de los desafíos antes de rendir el
examen de la clase.

Introducción al Paradigma de Objetos


Ejercicio 1
Rediseñar e implementar jerarquía de clases (herencia)
entre las clases en las que sea posible hacerlo.

Introducción al Paradigma de Objetos


Ejercicio 2
1. Implementar Polimorfismo con redefinición
(sobreescritura de métodos).
2. Implementar Polimorfismo sin redefinición
(sobrecarga de métodos).

Introducción al Paradigma de Objetos


Ejercicio 3
1. Crear objetos a partir de las clases modificadas y
mostrarlas en alguna interfaz básica (consola o
navegador, en caso de PHP).
2. Hacer que los objetos ejecuten sus métodos
simples, sobrecargados y sobreescrito.

Introducción al Paradigma de Objetos


¡Terminaste el módulo!
Estás listo para rendir el examen

Introducción al Paradigma de Objetos


Java Standard
Web Programming
Módulo 1
Introducción
HTML5: Fundamentos Web
Java Standard Web Programming

¿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.

Nació con el objetivo de ser un lenguaje de


programación de estructura sencilla que
pudiera ser ejecutado en diversos sistemas
operativos (Multiplataforma) por lo que puede
ser utilizado en proyectos de gran envergadura.
Java Standard Web Programming

Organización de Java

JSE JME JEE


Java Standard Edition Java Platform, Micro Edition Java Enterprise Edition
Java Standard Web Programming

JSE (Java Standard Edition) JME (Java Platform, Micro Edition)

Ofrece un entorno de desarrollo de aplicaciones Ofrece un entorno flexible y sólido para


de escritorio, similares a las aplicaciones tipo aplicaciones que se ejecutan en dispositivos
ventanas creadas con Visual Basic o Delphi. móviles e integrados: teléfonos móviles, TDT,
reproductores Blu-ray, dispositivos multimedia
Incluye la funcionalidad básica del lenguaje como
digitales, módulos M2M, impresoras y más.
manejo de clases, colecciones, entrada/salida,
acceso a base de datos, manejo de sockets, hilos
de ejecución, etc.
Java Standard Web Programming

JEE (Java Enterprise Edition)

Es un conjunto de tecnologías y especificaciones


relacionadas que están orientadas hacia el
desarrollo de aplicaciones empresariales a gran
escala, extiende de JSE y lo complementa para lo
antes indicado.
Java Standard Web Programming

¿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.

La diferencia entre un lenguaje compilado (C, Un archivo Java posee la extensión


C++, GO) y otro interpretado (JavaScript, Ruby) es NombreArchivo.java y después de compilado se
que el compilado requiere un paso adicional crea otro: NombreArchivo.class, que es el archivo
antes de ser ejecutado: la compilación, que en bytecode.
convierte al código que escribes en lenguaje de
máquina. En cambio, un lenguaje interpretado se
convierte a lenguaje de máquina a medida que es
ejecutado.
Java Standard Web Programming

Para poder interpretar este bytecode debes tener


instalado JRE (Java Runtime Environment).

Si deseas compilar código Java no es suficiente


con instalar el JRE, necesitas el JDK (Java
Development Kit) que incluye el compilador,
entre otras herramientas de desarrollo.

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.

¡Resulta fundamental mantener


una sintaxis correcta!
Java Standard Web Programming

Bloques de código y sentencias


● Bloque de código: es un conjunto de
sentencias delimitadas por llaves “{ }”.

En algunos casos, lo que se necesita ejecutar


es tan simple que solo se requiere ejecutar
una sentencia en el bloque. Para estos casos,
es posible omitir las llaves. Esto, al principio,
suele confundir pero, con el tiempo, se logrará
más seguridad para hacerlo de esa manera.

● Sentencia: es la unidad mínima de ejecución


de un lenguaje de programación para resolver
un problema en particular y siempre debe
terminar con un punto y coma “;”.
Java Standard Web Programming

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 “*/”.

Los lenguajes de programación contemplan esta Comentarios de Múltiples Líneas

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.

Estos estándares nos ayudan a escribir palabras


compuestas en general, además, nos ayudan a
leer más cómodamente el código y que sea más
fácilmente entendible.
Java Standard Web Programming

Upper Case Camel Case

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.

Snake Case Ejemplo: EjemploDeNomenclatura


Es usado para nombrar las clases.
Cuando cada una de las palabras, se separa
● Lower Camel Case: Igual que la anterior con la
por un guión bajo “_”.
excepción de que la primera letra es
Ejemplo: ejemplo_de_nomenclatura minúscula.
Es usado también para variables.
Ejemplo: ejemploDeNomenclatura
Es usado para paquetes, variables y métodos.
Java Standard Web Programming

IDE (Integrated Development Environment)


Aunque podemos usar el editor de texto básico
que trae el sistema operativo para construir
programas en Java, en ese caso, debemos
realizar comandos de consola como Javax
(Compilar) y Java (Interpretar).

Existen aplicaciones que hacen el trabajo más


fácil, eficaz, y evitan que se comentan errores de
sintaxis. Eclipse es uno de esos programas.
Consiste en un editor de código, un compilador,
depurador y un constructor de interfaz gráfica,
en algunos casos.
Java Standard Web Programming

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

Archivo Configuración XML


Java Standard Web Programming

Primer Programa
Este es el primer programa que todo
desarrollador realiza cuando toma contacto con
un nuevo lenguaje de programación.

Primero se debe crear el método main, que en


Java es un estándar utilizado por la JVM para
iniciar la ejecución de cualquier programa, es
como la llave de encendido de un automóvil, por
allí empieza todo.
Java Standard Web Programming

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.

Para este propósito los lenguajes de


programación tienen: variables (pueden cambiar
su valor a los largo del tiempo) y constantes (no
cambian su valor una vez asignado) que se
almacenarán de forma temporal en la memoria
de la computadora.
Java Standard Web Programming

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

También es recomendable usar las convenciones


cuando se necesitan nombres compuestos.

Para variables compuestas

● Lower Camel Case o Snake Case:


razonSocial, nombre_apellido.

Para constantes
{ }
● Upper Case con Snake Case:
DIAS_SEMANA, URL_BUSCADOR, etc.
Java Standard Web Programming

Sintaxis

Recordemos que sintaxis es el conjunto de reglas


que brinda un lenguaje para trabajar con él.
Java Standard Web Programming

La forma en que se declaran variables y constantes


en Java es:

Sin darle valor inicial

1. Palabra reservada final (solo para constantes).


2. Tipo de dato.
3. Identificador.
4. Punto y coma.

Con un valor inicial

1. Palabra reservada final (solo para constantes).


2. Tipo de dato.
3. Identificador.
4. Valor.
5. Punto y coma.
Java Standard Web Programming

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.

● numéricos enteros, Por lo pronto, se verá el más usado de todos los


● numéricos con punto flotante, objetos en Java: el string.
● booleanos y
● de carácter.
Java Standard Web Programming

Tipos de datos

Tipo Definición Espacio en Memoria Valores

byte Entero 1 byte -128 a 127

short Entero 2 bytes -32768 a 32767

int Entero 4 bytes 2*109

long Entero 8 bytes Muy grande


Primitivos
float Decimal simple 4 bytes Muy grande

double Decimal doble 8 bytes Muy grande

char Carácter simple 2 bytes [caracteres simples]

boolean Verdadero y Falso 1 byte [true/false]

Objetos String Cadena de caracteres Depende de la cantidad de caracteres Cadena de Caracteres


Java Standard Web Programming

¿Cómo asignamos valores?

● Numéricos enteros: literal del número.

● Números decimales: literal del número con el


punto como separador de decimales. Algo
particular que pasa con los float es que
necesitan la letra “f” al final del número, ya
que para Java todos los datos con decimales
son de tipo double y así los diferenciamos.

● Booleanos: literales true o false.

● Carácter: carácter encerrado entre ‘ ’.

● Cadena de caracteres: cadena encerrada


entre “ ”.
Java Standard Web Programming

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

\n Salto de línea. Sitúa el cursor al principio de la línea siguiente.

\b Retroceso. Mueve el cursor un carácter atrás en la línea actual.


Tabulador horizontal. Mueve el cursor hacia adelante una distancia
\t
determinada por el tabulador.
\r Ir al principio de la línea. Mueve el cursor al principio de la línea actual.

\f Nueva página. Mueve el cursor al principio de la siguiente página.

\" Comillas. Permite mostrar por pantalla el carácter comillas dobles.

\' 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

Operador Símbolo Ejemplo Paréntesis


()
Suma + num1 + num2
Multiplicación
Resta - num1 - num2
* / y División

Multiplicación * num1 * num2 + - Suma y Resta

División / num1 / num2


% Módulo o Resto
Módulo o Resto % num1 % num2
Java Standard Web Programming

Recuerda:

El símbolo de suma “+” sirve también para


concatenar (“pegar”) cadenas de texto.
Java Standard Web Programming

Módulo o resto
Es el número que queda después de haber
dividido un número no divisible.

Dividendo 17 5 Divisor

3x5 -15 3 Cociente

Resto 2
Java Standard Web Programming

Operadores de asignación
Esencialmente, son un grupo que permite asignar
un valor a una variable:

Símbolo Descripción Ejemplos

= Asignación num1 = num2 num1 = 5

+= Suma y asignación num1 += num2 (num1 = num1 + num2)

-= Resta y asignación num1 -= num2 (num1 = num1 - num2)

*= Multiplicación y asignación num1 *= num2 (num1 = num1 * num2)

/= División y asignación num1 /= num2 (num1 = num1 / num2)

%= Resto y asignación num1 %= num2 (num1 = num1 % num2)


Java Standard Web Programming

Operadores de comparación
Comparan dos valores y devuelven Verdadero o Falso.

Símbolo Descripción Ejemplo

== Igualdad num1 == num2

!= Distinto num1 != num2

< Menor que num1 < num2

> Mayor que num1 > num2

<= Menor o igual que num1 <= num2

>= Mayor o igual que num1 >= num2


Java Standard Web Programming

Operadores incrementales
Son operadores unarios (un único operando). Ayudan a
incrementar y a disminuir el valor de una variable numérica.

Símbolo Descripción Ejemplos

num ++ primero utiliza la variables y después incrementa.


++ Para incrementar de uno en uno
++ num primero incrementa el valor y después la usa.

num -- primero utiliza la variables y después la disminuye.


-- Para disminuir de uno en uno
-- num1 primero disminuye el valor y después la usa.
Java Standard Web Programming

Operadores lógicos
Son usados para concatenar dos o más expresiones
con operadores relacionales.

Símbolo Descripción Ejemplo

&& And op1 && op2


En algunos casos no es
|| Or op1 || op2 necesario evaluar la segunda
condición, pero de ser así
& And Inclusivo op1 & op2 utilizaríamos los operadores
inclusivos para ello.
| Or Inclusivo op1 | op2

! Not !op1
Java Standard Web Programming

Para saber qué valores booleanos pueden devolver estas


preguntas anidadas con los operadores lógicos, debemos
saber la tabla de la verdad.

Condición 1 Condición 2 And Or

Verdadero Verdadero Verdadero Verdadero

Verdadero Falso Falso Verdadero

Falso Verdadero Falso Verdadero

Falso Falso Falso Falso


¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


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).

2. Declarar e iniciar 4 variables e indicar el


promedio de las 4.
Java Standard Web Programming

A continuación su resolución para que puedas


verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1
Condicionales
HTML5: Fundamentos Web
Java Standard Web Programming

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

La idea es que la solución del problema


contemple todos los posibles casos que podrían Sentencias
presentarse.
Sigue el
programa

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?

Para eso está la estructura if-else que, de no


cumplirse la condición o condiciones en el if,
ejecutará lo que se encuentre en el bloque
del else.
Java Standard Web Programming

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar el laboratorio anterior.


Java Standard Web Programming

Ejercicios

1. Declarar e iniciar 3 variables enteras y comparar


cuál de las 3 es la mayor.

2. Como en el laboratorio anterior, declarar 2 variables


que permitan realizar operaciones básicas
matemáticas y mostrar el resultado en consola. Esta
vez, el usuario debe poder elegir qué operación
realizar.

3. Hacer el punto anterior con switch. Se deberá


ingresar el carácter “s” para sumar, “r” para restar,
“m” para multiplicar y “d” para dividir.
Java Standard Web Programming

A continuación, encontrarás su resolución para que


puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1
Ciclos
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Existen dos clasificaciones: {


=
}

Indeterminados

No sabemos a ciencia cierta la cantidad de


iteraciones que realizará, estos ciclos son el
while y do while.
Java Standard Web Programming

Ejemplo
Java Standard Web Programming

Ciclo

Inicio del
programa

Algo muy importante en los ciclos es


que se debe garantizar que en algún
no se cumple se cumple
Condición momento deje de cumplirse la
condición. De esa manera, se podrá
salir de él; de lo contrario quedaría en
un bucle infinito.
Sentencias

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.

Esto permite que las sentencias se ejecuten al


menos una vez, a diferencia del “while” que
evalúa la condición al principio y puede que
nunca se ejecuten las sentencias que contiene.
Java Standard Web Programming

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

Para este tipo de situaciones tenemos el ciclo


for, que posee una forma más cómoda de hacer Esta estructura tiene algo en
lo mismo. particular: se puede omitir lo
que contiene entre los
paréntesis, pero sin dejar de
colocar los punto y coma.

Ejemplo
Java Standard Web Programming

Ejemplo
Java Standard Web Programming

De esta manera, se logra que las sentencias que están


dentro del bloque se ejecuten infinitamente, ¿por qué la
estructura permite esto?

Algunas veces, según la solución, necesitamos que el


bloque de incremento o bloque “despuesSentencias” se
ejecute antes, otras veces, que la variable inicial sea usada
después de haber terminado el ciclo.
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.

Hay dos formas de declarar un arreglo en Java:

● Las dos son correctas pero se recomienda


la primera.

● Se utiliza con más frecuencia, en diferentes lenguajes.


Java Standard Web Programming

También hay dos maneras de inicializarlos:

1. La primera la utilizamos cuando tenemos los


valores iniciales definidos.

2. Se utiliza una nueva sentencia “new” seguido


del tipo de dato y, entre corchetes {}, se
especifica la longitud del arreglo. Esto le
indica a Java que construya un nuevo arreglo
y después se le asignan los valores
correspondientes en el índice indicado.
Java Standard Web Programming

Acceder a los datos


Para acceder a cada uno de los elementos que posee el
arreglo debemos indicar su posición a través del índice.

Es decir, se accede al arreglo: elemento por elemento.

Existe una estructura mucho más cómoda para hacer eso:


los bucles. Específicamente, uno donde se conozca la
cantidad de iteraciones a realizar.
Java Standard Web Programming

Aunque es posible colocar el número en el ciclo


directamente, no es recomendable. Para evitarlo se accede
a un atributo que poseen los arreglos que indica su
longitud. Se utiliza el identificador del arreglo seguido de
“.length”.
Java Standard Web Programming

Utilidades para los arreglos


Existen métodos que ayudan a trabajar con
arreglos en Java. Para utilizarlos, primero se debe
importar la biblioteca “java.util.Arrays”.

Nombre Descripción

copyOf Copia un arreglo y lo devuelve en un nuevo arreglo.

copyOfRange Copia un arreglo dado un rango y lo devuelve en un


nuevo arreglo.

equals Indica si dos arreglos son iguales.

sort Ordena el arreglo de forma natural.

toString Muestra el contenido del arreglo.


Java Standard Web Programming

Utilidades para los arreglos


Java Standard Web Programming

Valores por defecto


¿Qué ocurre si se inicializa el arreglo con un Para evitar errores, Java inicializa los arreglos de
tamaño n y luego se decide acceder a los la siguiente manera:
elementos, antes de asignarle valores?
1. Para números el valor cero “0” o “0.0”.

2. Para caracteres el espacio en blanco ‘ ’.

3. Para booleanos el valor false.

4. Para los objetos “string” la ausencia de


valor, y se mostrará la palabra “null”, que es
distinto de vacío.
Bonus
HTML5:Consola
Fundamentos Web
Java Standard Web Programming

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar los laboratorios anteriores.


Java Standard Web Programming

Ejercicio
Generar un programa que le pida al usuario: Bonus avanzado

● Cantidad de notas. ● Ordenar las notas con su respectivo nombre.

● Nota y nombre de cada alumno.

Este programa debe mostrar:

● Promedio de las notas.

● Cuál es la nota mayor y cuál la menor de


todas las ingresadas e indicar el nombre del
alumno que obtuvo cada una de ellas.
Guía de resolución
HTML5: Fundamentos Web
Java Standard Web Programming

¿Cómo podemos ordenar si hay dos


arreglos involucrados?

Existen varios algoritmos para este tipo de


problemas, uno es el Burbuja.

Se recorre todo el arreglo. Se van comparando Algoritmo


Burbuja
dos elementos al mismo tiempo y si están en el
orden incorrecto se intercambian.

Este proceso se deberá repetir recorriendo todo el


arreglo hasta que no ocurra ningún intercambio.
Java Standard Web Programming

Ejemplo

Aunque sabemos que tenemos la utilidad sort el


inconveniente que se presenta en este ejercicio es
que, al ordenar el arreglo de notas y ordenar el
arreglo de nombres de los alumnos, no habrá
congruencia con lo ingresado por el usuario ya
que los dos arreglos quedarán ordenados de 9 8 10 4
forma natural.

Por esa razón, necesitaremos de este u otro


algoritmo. Para este ejemplo, imaginamos un
arreglo de números enteros no ordenados.

Este algoritmo necesita usar dos ciclos, uno para


posicionarse en un elemento y el otro que
recorra los demás elementos y compare.
Java Standard Web Programming

Ejemplo

Se comparan uno a uno los valores que posee


9 8 10 4
el arreglo.

Los elementos en color .cian. están en el ciclo


principal y los de color .azul. en otro ciclo interno.

9 es mayor que 8, entonces se procede al 9 8


intercambio de los valores.

8 9 10 4
Java Standard Web Programming

Ejemplo

En este caso, la condición no se cumple,


8 9 10 4
entonces el intercambio no es necesario.
El arreglo sigue igual que en el paso anterior.
=

8 9 10 4
Java Standard Web Programming

Ejemplo

Aquí se observa que 8 es mayor que 4, entonces


8 9 10 4
se procede a intercambiar los valores.

Adicionalmente, se llega al final del bucle interno


(.azul.). En la próxima iteración (ciclo principal),
nuestro pivote de comparación (.cian.) será el
índice 1 del arreglo. 8 4

4 9 10 8
Java Standard Web Programming

Ejemplo

Ahora, no se cumple la condición, por lo que no


8 9 10 4
se realiza el intercambio. El arreglo queda igual
a como estaba en el paso anterior.

Observamos, como se mencionó anteriormente, =


que ya no se está comparando el primer
elemento con los otros sino que el ciclo principal 8 9 10 4
hizo su segunda iteración y el segundo ciclo
comenzó de nuevo.
Java Standard Web Programming

Ejemplo

9 es mayor que 8, entonces se procede al


4 9 10 8
intercambio de los valores.

9 8

4 8 10 9
Java Standard Web Programming

Ejemplo

Esta sería la última iteración en la que se deben


4 9 10 8
intercambiar valores, ya que 10 es mayor que 8.

10 8

4 8 9 10
Java Standard Web Programming

A continuación encontrarás su resolución para que


puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 1 - Desafío
Java Standard Web Programming

¿Qué son los desafíos?

● Son ejercicios complementarios a los realizados en


clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
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:

1. Solicitar al usuario que ingrese la cantidad de


elementos a generar.

2. Si el número es divisible por 3 mostrar Fizz.

3. Si el número es divisible por 5 mostrar Buzz.


Java Standard Web Programming

Ejemplo

i
Java Standard Web Programming

Ejercicio 2
Crear un programa que multiplique dos Ejemplo de salida
números, con las siguientes condiciones:

1. Solicitar al usuario que ingrese dos números


enteros.
i
2. No se debe usar el operador de multiplicación
(*) ni la función Math.multiplyXXXXXX.
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que puedas verificar cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 2
Introducción
HTML5: Fundamentos Web
Java Standard Web Programming

¿Qué es un paradigma de programación?


Es una forma o estilo de programación de
software. Existen diferentes maneras de diseñar
un lenguaje de programación, y varios modos de
trabajar para obtener los resultados que
necesitan los programadores.

Un paradigma de programación es un conjunto


de métodos sistemáticos aplicables en todos los
niveles del diseño de programas para resolver
problemas computacionales.
Java Standard Web Programming

Programación Orientada a Objetos (POO)


Es una forma especial de programar más cercana
a cómo expresaríamos las cosas en la vida real
que otros tipos de programación.

Se basa en la idea natural de un mundo lleno de


objetos y la resolución de problemas se realiza
mediante el modelo de objetos.

Dicho de una forma más simple, es una forma de


descomponer un problema para solucionarlo de
un modo distinto.
Java Standard Web Programming

Pilares de la POO
La programación Orientada a Objetos se basa en
4 pilares fundamentales:

Encapsulamiento Herencia Abstracción Polimorfismo

Todo pilar debe tener bases que debemos aprender:

Clase Atributos Métodos Objeto Instancia


Java Standard Web Programming

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.

Las clases ayudan a definir este nuevo “tipo de


dato” con una estructura que le daremos para
solucionar un problema planteado.
Java Standard Web Programming

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.

Para declarar esos datos, se pueden utilizar los


tipos que ya conocemos (numéricos, caracteres y
booleanos) y también utilizar otros objetos.
Java Standard Web Programming

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.

La idea principal de los métodos es no escribir


A esto llamamos métodos, a un conjunto de una misma instrucción varias veces, si la vamos a
instrucciones definidas dentro de una clase, que utilizar más de una vez.
realizan una determinada tarea y a las que
podemos invocar mediante un nombre.
Java Standard Web Programming

Mensajes

Los objetos interactúan enviándose mensajes


unos a otros.

Tras la recepción de un mensaje el objeto


actuará. La acción puede ser el envío de otros
mensajes, el cambio de su estado, o la ejecución
de cualquier otra tarea que se requiera que haga
el objeto.

En resumen: a un objeto se le envía un mensaje


cuando una instancia utiliza un método.
Java Standard Web Programming

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

Pero como ahora el dato es más complejo que


una simple cadena de caracteres debemos Entonces, ahora podemos decir que:
hacerlo de una forma diferente:
● Una instancia es una ocurrencia de
● Tipo de dato: clase de donde tomará el molde la clase. Se logra cuando le decimos
o plantilla. a Java que cree un new Auto().

● Identificador. ● Al momento de crear un objeto se


produce la instanciación.
● La sentencia “new”.
● Un objeto es una instancia de una
● Volver a decir el tipo de dato, como en los
clase específica.
arreglos.
● Y cerrar con paréntesis “( )”

Auto auto1 = new Auto();


Java Standard Web Programming

Ejemplo
Identificador

Declaración
Instancia

Cambiamos
los atributos
o asignamos
valores

Métodos
Java Standard Web Programming

Cómo se destruye un objeto en Java


Quien se encarga de destruir o liberar la memoria
de los objetos que ya no se utilizan es el Garbage
Collector (GC) y lo hace de forma automática
administrando la memoria.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


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.

2. Al finalizar de pedir los datos, se deben


mostrar todos por consola. También, indicar
si la persona es mayor o menor de edad.
Java Standard Web Programming

A continuación, encontrarás su resolución para


que puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2
Métodos
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Cuando se llama a un método, la ejecución del


programa pasa al método, ejecuta las
instrucciones que se encuentren en él y la
ejecución continúa a partir del punto donde se
produjo el llamado, es decir, sigue su flujo natural.
La idea principal de los métodos es no escribir
una misma instrucción varias veces, si la vamos
a utilizar más de una vez.
Java Standard Web Programming

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.

void cambiarEstado(boolean estado) { //Encender el Auto


auto1.cambiarEstado(true); Argumentos
encendido = estado;
} //Apagar el Auto
boolean encendido = false;
auto1.cambiarEstado(encendido);
Parámetros
Java Standard Web Programming

Tipos de métodos
Existen diferentes tipos de métodos:

Tipo función Tipo procedimiento

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

Aunque es poco común, los métodos de


tipo procedimiento admiten la palabra
return, aunque no tendría ninguna
relevancia se comportará de la misma
manera en ambos casos: saldrá de la
función en ejecución.

La única diferencia consistirá en que


junto con la instrucción return se
devolverá (o no) un valor.
Java Standard Web Programming

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!

void cambiarEstado(boolean estado) {

encendido = estado;
}
Java Standard Web Programming

Este problema proporciona la capacidad de


void cambiarEstado(boolean encendido) {
sobrecargar o utilizar un nombre idéntico en el
parámetro para asignárselo a una variable de this.encendido = encendido;
instancia. }

Cuando esto ocurre, se debe anteponer la


palabra reservada this. antes de la variable de
instancia y esto le indicará a Java que se está
haciendo referencia al atributo de la clase y no
al parámetro.
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.

La diferencia principal entre este método y los


vistos anteriormente es que llevan el mismo
nombre de la clase, además, no devuelven
ningún tipo de dato (sin return) ni llevan la
palabra reservada void.

Se puede decir que los constructores son de tipo


procedimiento ya que solo ejecuta las
instrucciones que se encuentren dentro del
bloque.
Java Standard Web Programming

Ejemplo
Java Standard Web Programming

Cuando la clase no tiene constructores o simplemente no


fueron declarados, Java asume por defecto el constructor
simple, por lo que podemos instanciar al objeto sin ningún
problema.

Cuando se definen constructores con


parámetros en una clase, Java deja de
ofrecer el constructor simple o por
defecto de manera implícita por lo que si
quieres instanciar un objeto con dicho
constructor deberás especificarlo en
la clase.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Descargar los elementos necesarios.


Java Standard Web Programming

Ejercicios
Se realizarán mejoras al laboratorio anterior.

1. Crear una clase para el tipo y número de


documento.

2. Crear un constructor con todos los datos y


utilizarlo en el ejercicio.
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2
Paquetes y modificadores
HTML5: Fundamentos
de acceso Web
Java Standard Web Programming

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.

Los paquetes resuelven el problema del conflicto


entre los nombres de las clases. Al crecer el
número de clases hay probabilidad de designar
con el mismo nombre a dos clases diferentes.
Además, las clases, atributos y métodos tienen
ciertos privilegios de acceso y los paquetes
ayudan con esto.
Java Standard Web Programming

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.

Es muy posible que nuestras aplicaciones sean


utilizadas por otros programadores o usuarios
con cierto nivel de experiencia. Con los
modificadores de acceso nos aseguramos de
que no se modifiquen valores en forma
incorrecta. Se colocan primero, al crear una clase,
atributo o método.
Java Standard Web Programming

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).

Las clases, atributos, métodos y constructores


pueden tener este tipo de acceso.
Java Standard Web Programming

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.

Este modificador no puede ser asignado a las


clases, ya que no tiene sentido crear una para
que nadie pueda acceder a ella.
Java Standard Web Programming

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).

Como nos pasa con el modificador de acceso


private, una clase no puede estar protected.
Java Standard Web Programming

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.

Las clases, atributos, métodos y constructores


pueden tener este tipo de acceso.
Java Standard Web Programming

Ejemplo
Java Standard Web Programming

Cuadro comparativo de acceso

Modificador La misma clase Mismo paquete Subclase Otro paquete

private

default

protected

public
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Descargar los elementos necesarios.


Java Standard Web Programming

Ejercicios
Se realizarán mejoras al laboratorio anterior:

1. Ahora, la edad la asignará el sistema de


forma aleatoria y no se podrá acceder ni
pedir desde el constructor.

2. Crear un constructor con todos los datos


públicos que posea la clase y utilizarlo en el
ejercicio.

Nota: las clases deben estar en un paquete entidades y


sus miembros deben ser públicos, a excepción de los
indicados en los requerimientos.
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2
Encapsulamiento
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Básicamente, el encapsulamiento se usa para


dar más seguridad a las aplicaciones, para
evitar que la información se filtre y para dar
mucho más orden en las clases.

Es simplemente la capacidad de ocultar los


atributos de una clase.
Java Standard Web Programming

Private
Para encapsular, se deben colocar los atributos de clase
privados, para así ocultarlos.
Java Standard Web Programming

Acceder o modificar esos atributos


No es posible acceder directamente a los datos
configurados como private. Es necesario crear
métodos para modificarlos y accederlos.

Estos métodos se crean en base a un estándar de


identificación. Se denominan Setters y Getters,
y siempre son public.
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.

El Getter de los atributos boolean cambia la


palabra get por is al ser un tipo de dato
verdad/falso es más lógico preguntar “esfalso”,
“esverdadero”.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Descargar los elementos necesarios.


Java Standard Web Programming

Ejercicios
Se realizarán mejoras en el laboratorio anterior:

1. Crear 3 constructores:

○ constructor por defecto,

○ constructor sin edad y que le asigne la


edad automáticamente,

○ y un constructor con todos los datos.

2. Se utilizarán los métodos setter para asignar


valores y getter para mostrarlos.
¡Recuerda! Todos los datos deben ser
privados.
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que puedas verificar cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 2 - Desafío
Java Standard Web Programming

¿Qué son los desafíos?

● Son ejercicios complementarios a los realizados en


clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
Java Standard Web Programming

Ejercicio 1: Credenciales de usuario


Crear un programa que solicite las credenciales
de un usuario que tiene correo y clave, con las
siguientes condiciones:

1. El correo debe ser del dominio web


“educacionit.com”. Nota
2. La clave debe iniciar en mayúscula y contener Cumplir con todos los puntos dictados
un símbolo. en el Módulo 2 del curso.

3. Válido (“*”, “.”, “-”, “_”).

4. Pedir los datos hasta que estén correctos.


Java Standard Web Programming

Ejemplo

Indique el correo electronico del instituto: octavio.robleto@educacionit.com


Indique la clave: Octavio.1234
Usuario [correo: octavio.robleto@educacionit.com, clave: Octavio.1234]
Java Standard Web Programming

Ejemplo

i
Java Standard Web Programming

Ejercicio 2: Datos de personas


Crear un programa que pida una lista de personas
[tipo de documento, número de documento, nombre y
apellido], con las siguientes condiciones:

1. Verificar que no se repita la misma persona en la Nota


lista [tipo y número de documento].
Cumplir con todos los puntos dictados
en el Módulo 2 del curso.
2. Debe ser un documento válido:

● Documento Nacional de Identidad (DNI)


● Libreta Cívica - (LC)
● Libreta de Enrolamiento (LE)
● Pasaporte (PA)
● Cédula de Identidad (CI)
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que puedas verificar cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 3
Introducción
HTML5: Fundamentos Web
Java Standard Web Programming

Miembros de clase
La palabra reservada static se usa
principalmente para el manejo eficiente de
la memoria de un programa.

Cuando una clase, método o variable es


declarada como estática se puede acceder
a ella sin la necesidad de tener que instanciar
un objeto de la clase.

Los casos más conocidos son el método main


y la salida por consola System.out.
Java Standard Web Programming

Variables y constantes estáticas


Conocidas también como variables y/o
constantes de clase se pueden acceder sin la
necesidad de instanciar un objeto de la clase,
se usa en la mayoría de los casos para datos
en común. Por ejemplo, el nombre de la empresa,
la versión del programa, y otros.

Obtiene memoria solo una vez en el área de clase


en el momento de la carga de la clase. Es una
palabra reservada adicional y no limita que se le
pueda asignar un modificador de acceso según
sea nuestro requerimiento.
Java Standard Web Programming

¿Mejora el manejo de memoria?


Ejemplo
● Ferrari
Para este ejemplo imaginemos que necesitamos
● Rojo
indicar el mismo nombre de la concesionaria a ● ABC-188
todos los autos. ● Autos EducaciónIT

Con una constante estática asignamos un solo Auto1


espacio de memoria para todos los objetos. En
cambio, cuando hacemos a esa constante
● Audi
miembro de instancia (único para cada objeto): ● Plateado
reserva un espacio de memoria por cada uno de ● ZBG-999
● Autos EducaciónIT
los objetos (más memoria).

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con miembros de clase


Mejoras al laboratorio final del Módulo 2:

1. Se requiere que el sistema le asigne, a través de


una variable de clase, un id auto incrementable.

2. Utilizar el método mostrarAtributos.

3. Mostrar cuántas personas se asignaron.


Java Standard Web Programming

A continuación encontrarás su resolución para que


verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Herencia
HTML5: Fundamentos Web
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.

Una clase que hereda de otra clase existente


puede reutilizar métodos y campos de la clase
principal. Además, también puede agregar
nuevos métodos y campos (en la clase actual).
Java Standard Web Programming

Auto

-color String
-marca String
-patente String
-patenteString
-encendido boolean

+mostrarAtributos

Compacto Camion

-puestos int -ejes int


-disponible boolean
Java Standard Web Programming

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.

En Java la Herencia es simple, lo que significa que


solo se puede heredar de una sola clase.

Algunos lenguajes de programación permiten la


herencia múltiple.
Java Standard Web Programming
Java Standard Web Programming

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

Instancia y uso de los métodos y atributos

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

Jerarquía de herencia en Java


Java no escapa en sí de la herencia, esto
Object
representa una gran ventaja a la hora de utilizar
métodos y atributos propios de la API de Java ya
que todas las clases heredan por defecto de la …
súper clase Object.

… … …

… … … …


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?

Aunque al programar sabemos que no


Imaginemos que la Patente no solo es un dato deberíamos nunca heredar de estas clases, es
alfanumérico sino que posee asociado al número importante indicarlo ya que en una organización
un atributo que indica que se encuentra activa. o empresa no somos los únicos programadores
Esto nos llevaría a crear una clase para solo la y con esto evitamos posibles errores.
patente y usarla en la clase Auto para tener un
Veamos el código de la siguiente pantalla.
código más ordenado y reutilizar el objeto,
más adelante.
Java Standard Web Programming

Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar el laboratorio anterior.


Java Standard Web Programming

Ejercicio con herencia


Mejoras al laboratorio anterior:

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

5. Mostrar cuántas personas se asignaron.

6. Adicionalmente, se requiere crear una clase


Profesor que herede de la clase Persona y
tenga un atributo para asignarle un pago,
esta clase se usará para el siguiente módulo.

Nota: todos los datos


deben ser objetos.
Java Standard Web Programming

A continuación, encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Sobreescritura
HTML5: Fundamentos Web
de Miembros
Java Standard Web Programming

Introducción a la sobreescritura de Miembros


La Sobreescritura de Miembros o Métodos,
también conocida como Reescritura de Métodos
es un concepto que se puede aplicar cuando se
hereda en los Lenguajes Orientados a Objetos.
Cuando una subclase hereda todos los
métodos accesibles de la clase padre puede
redefinir el comportamiento de dichos métodos
si así lo requiere. Una subclase sobrescribe un
método
de su superclase cuando define un método con
la misma firma del método de su padre, es decir,
las mismas características (tipo de retorno,
identificador, número y tipo de argumentos).
Java Standard Web Programming

Sobreescritura (overriding methods)


La idea es poder agregar o cambiar el
comportamiento de los métodos que posee Tomemos como ejemplo el método
el padre. Se pueden llegar a confundir los mostrarDatos de la clase Auto.
conceptos de sobrecarga y sobreescritura. La Veamos el código de la próxima patalla.
diferencia es que para sobrecargar un método
hay que duplicar su nombre (en la misma clase)
con el mismo tipo de retorno, pero utilizar una
lista de argumentos diferente. Por otro lado, al
sobreescribir un método no solamente el nombre y
el tipo de retorno deben ser iguales, también la
lista de argumentos.
Java Standard Web Programming

Este método es heredado por las clases Compacto y


Camion pero como es un método de la clase padre no
posee los atributos adicionales de sus clases hijas, por lo
que necesitaríamos crear un método adicional para cada
clase con los atributos correspondientes.
Java Standard Web Programming

¿Por qué sobreescribir?

La idea principal es extender la funcionalidad Es común ver la notación @Override en los


de los objetos sin tener que escribir métodos métodos sobreescritos pero no es obligatoria. Es
nuevos (nombres distintos pero con mismo fin) recomendable que esté presente para identificar
y así poder identificarlo correctamente. fácilmente que el método se encuentra en una
de nuestras clases padres y ha sido
Podemos crear los métodos denominados reescrito por el desarrollador.
mostrarDatosCamion y mostrarDatosCompacto
pero recordemos que la idea es aprovechar las
herramientas de la POO, ser lo más genéricos
posible y que sea de fácil entendimiento para
cualquier desarrollador, por lo que dependiendo del
objeto instanciado se entenderá de forma correcta
que mostrarDatos devolverá una cadena de
caracteres que describe los
atributos de dicho objeto.
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.

El método toString es un método de la clase


Object que devuelve una cadena de caracteres
con la representación de lo que es el objeto, toString
símil a nuestro método mostrarDatos.
Java Standard Web Programming
Java Standard Web Programming
Java Standard Web Programming

Cuando el método toString no se encuentra Es conveniente indicar que no es necesario invocar


sobreescrito en las clases, en la cadena de al método toString, es decir, colocar
herencia, al invocarlo mostrará el nombre de la el nombre del objeto o colocar el nombre del
clase del objeto instanciado, el paquete al que objeto.toString() es equivalente, ambas formas
pertenece seguido de un arroba y un número invocan al toString más cercano en
hexadecimal que representa la posición de la cadena de herencia.
memoria donde se encuentra dicho objeto.

Ejemplo: Veamos un ejemplo


en la próxima pantalla.
com.educacionIT.javase.entidades.Camion@16f65612
Java Standard Web Programming

Al ser un método que reescribimos normalmente en todas


nuestras clases, los IDE proporcionan un atajo para darle
esta representación en cadena de caracteres: nombre de la
clase y encerrado entre corchetes los atributos de la clase.
Java Standard Web Programming

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.

Este método se utiliza con frecuencia y en Java


existen muchos métodos finales. La clase Object
no escapa de esto, tiene varios métodos finales
queJava no quiere que redefinamos como lo
podemos hacer con el toString.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Casteo
HTML5: Fundamentos Web
Java Standard Web Programming

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

Ocurre cuando necesitamos un tipo de dato más


pequeño en otro más grande. Lo podemos ver
con los números: sabemos que un número entero
pertenece a los números reales (con decimales)
cuando nos encontremos con la necesidad de
hacer esto no tendremos que escribir ningún tipo
de código o sentencia:
Java Standard Web Programming

Algo particular que pasa con los char es que


podemos asignarlos directamente a un int o a
un numérico más grande, y esto ¿Por qué? Java
devolverá el valor ASCII del carácter dado:
Java Standard Web Programming

Casteo explícito

Sucede cuando queremos asignar un tipo de


dato más grande a un tipo de dato más
pequeño. Por ejemplo, un numérico decimal a
numérico entero. En estos casos necesariamente
tenemos que escribir entre paréntesis el tipo de
dato al que queremos convertir.

Hay que tomar en cuenta que lo que pasará es


que el número será truncado cuando hagamos
la conversión de un decimal a un entero.
Java Standard Web Programming

Al contrario de lo que pasa de un char a un int,


la conversión de int a char no es compatible
por sí sola. Debe hacerse de forma explícita:
Java Standard Web Programming

Cuadro de casteo
Convertir
desde

Convertir a boolean byte short char int long float double


boolean no no no no no no no

Valor y descripción: byte no si cast si si si si


● no: no hay posibilidad de short no cast cast si si si si
conversión.
char no cast cast si si si si
● si: casting es implícito.
int no cast cast cast si si* si*
● si*: casting implícito pero se
puede producir pérdida de long no cast cast cast cast si* si*
precisión.
float no cast cast cast cast cast si
● cast: casting explícito.
double no cast cast cast cast cast cast
Clases
HTML5:Envoltorio
Fundamentos Web
Java Standard Web Programming

Clases Envoltorio (Wrapper)


Muchas veces, nos encontramos con otro tipo de Además, brinda una variedad de métodos
problemas, a la hora de querer convertir un dato. de utilidad que los primitivos no poseen,
Por ejemplo: un valor numérico dentro de una la mayoría de estos están relacionados con
cadena de caracteres cuando le pedimos desde varias conversiones. Otro punto importante es
una caja de texto valores al usuario. También que permite usar el null, a diferencia de los
nos vamos a encontrar, más adelante, con primitivos que si no los asignamos nos da un
objetos en Java que no permiten el uso de los valor por defecto en los objetos donde se utilicen.
valores primitivos.

Java provee una forma de envolver los primitivos


en un objeto (wrapper class) por cada uno de
los 8 tipos que existen.
Java Standard Web Programming

¿Cómo se utilizan?

Cada una de estas clases envoltorio (menos Primitivo Envoltorio Constructor

Character) tienen dos constructores: byte Byte byte o string


short Short short o string
● uno que admite el tipo primitivo como
int Integer int o string
parámetro,
long Long long o string
● y otro que admite un String. boolean Boolean boolean o string
float Float float o string
Para el constructor del Boolean cuando el String
es true (sin importar mayúsculas o minúsculas) double Double double o string

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.

Este método es mucho más eficiente de usar que


los constructores, además, dichos constructores
están obsoletos a partir de la versión 9 de Java.

Para todas las clases es igual, para Short


sería (Short.valueOf(primitivo) o el
denominado Short.valueOf(cadena), etc.,
excepto para Character que solo posee el
llamado Character.valueOf(primitivo).
Java Standard Web Programming

● parseXXX(String): es un método que permite


convertir la cadena de caracteres en el valor
que corresponda donde XXX representa el
envoltorio consecuente a ese valor.

No está disponible en el Character.


Recordemos que existe un método de la clase
String que nos devuelve un carácter de la
posición deseada (charAt(posicion)).

Como se observa, al castear un carácter a un


entero lo que nos devolvió fue el número ASCII
que representa este número pero, ¿qué pasa si
necesitamos el valor numérico literal de ese
char? Tenemos el método denominado
Character.getNumericValue(char).
Java Standard Web Programming

Boxing
Boxing

Es posible asignar directamente un dato


primitivo a su respectivo envoltorio sin
instanciar el objeto: a esto se lo conoce como
boxing. Java advierte lo que se desea hacer
y convierte el tipo básico en un objeto antes
de terminar de asignarlo.

Unboxing

Lo mismo pasa al asignar un envoltorio a su


respectivo primitivo, por lo que no es necesario
utilizar el xxxvalue(). Esto sería unboxing.
Java Standard Web Programming
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Abstracción
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Cuando se crea un programa, lo primero que se


hace es un análisis de las clases que se van a
desarrollar para crear los objetos.
Java Standard Web Programming

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.

Para evitar instanciar un objeto tan genérico


recurrimos a la palabra reservada abstract
después del modificador de acceso y antes de la
palabra reservada class:
Java Standard Web Programming

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

Solo las clases abstractas pueden poseer


métodos abstractos, si codificamos un método
abstracto y la clase no es abstracta, nos dará
un error en tiempo de compilación.

¿Qué se gana con esto? La ventaja es que para


las clases que hereden de una clase abstracta
con métodos abstractos el JDK obligará a
implementar los métodos en dichas clases
(apoyándonos en el concepto de sobreescritura
de miembros) siempre y cuando las clases hijas
no sean abstractas.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar el laboratorio anterior.


Java Standard Web Programming

Ejercicio de abstracción
Mejoras al laboratorio anterior:

1. Se requiere un sistema que agregue ○ Atributos de Profesor: nombre, apellido, tipo y


a una lista y muestre la información de: número de documento, fecha de nacimiento,
fecha del cargo, sueldo, lista de cursos.
○ Empleados: Director, Profesor,
Administrativo, Alumnos. ○ Atributos de Administrativo: nombre,
apellido, tipo y número de documento, fecha
○ Atributos de Director: nombre,
de nacimiento, fecha del cargo, sueldo.
apellido, tipo y número de documento,
fecha de nacimiento, fecha del cargo, ○ Atributos de Alumno: nombre, apellido,
carrera y sueldo. tipo y número de documento, fecha
de nacimiento, fecha de ingreso, lista de
cursos.
Java Standard Web Programming

2. Mostrar todos los atributos a través del


método toString.

3. Debe existir un método en todas las clases


que indique qué tipo de persona es y que
muestre solo su nombre y apellido.

4. Ingresar una lista de Alumnos y una lista de


Profesores en dos vectores distintos.
Java Standard Web Programming

A continuación, encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Interfaces
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Recordemos que Java solo permite la herencia


simple (heredar de una sola clase) pero con las
interfaces podemos simular la herencia múltiple.
Java Standard Web Programming

● Métodos: todos los métodos deben ser Implementación


abstractos y de acceso público.
Una de las grandes ventajas que ofrecen las
● Atributos: todos los atributos deben ser interfaces, como vimos anteriormente, es que
miembros de clase (estáticos), constantes podemos simular la herencia múltiple. De ser
(finales) y de acceso público. necesario, podemos heredar de una clase
abstracta y de varias interfaces a la vez. Se
Ya que estos son requisitos para que no nos de
hace con la palabra reservada implements
errores en tiempo de compilación, se puede omitir
seguida del nombre de las interfaces separadas
el modificador de acceso public, la palabra
por comas, si llegaran a ser más de una.
reservada static y la palabra reservada final
ya que están implícitos en la interface. Veamos un ejemplo en la siguiente pantalla.
Java Standard Web Programming
Java Standard Web Programming

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

De ser necesario un cambio en


el algoritmo por clase, podemos
seguir apoyándonos en la
sobreescritura de miembros.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3
Polimorfismo
HTML5: Fundamentos Web
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

Polimorfismo por asignación


Un mismo objeto puede hacer referencia a más de un tipo
de clase. El conjunto de las que pueden ser referenciadas
está restringido por la herencia o la implementación
(Interfaces).
Java Standard Web Programming

Polimorfismo por sobrecarga


Recordemos este tema que ya vimos en la parte Ejemplo
de métodos. Se pueden codificar varios métodos
Imaginemos dos métodos sumar con la misma
bajo un mismo nombre con diferentes
cantidad de parámetros y de tipo numérico. En
parámetros. Eso indica que, al momento de
ambos casos son enteros pero a la hora de
invocar un método, el JDK entiende a qué método
invocarlos el JVM interpreta correctamente a cuál
llamar. Pero esto parece tener poco sentido
llamar. Veamos el código del siguiente slide.
cuando vemos que los métodos tienen cantidad
de parámetros distintos o de diferente tipo.
Java Standard Web Programming
Java Standard Web Programming

Polimorfismo por Sobreescritura (Con Redefinición)


Esto ocurre cuando un objeto puede ser declarado de una
clase padre, pero instanciado como una subclase o clase
hija y se hace referencia a un método sobreescrito.
Java Standard Web Programming

Debemos tomar en cuenta que un objeto


instanciado como un hijo solo puede invocar
los métodos que ambos posean. Aquí es
donde más toma importancia la abstracción
asegurando que nuestros objetos tengan
sentido con el polimorfismo.
Java Standard Web Programming

Polimorfismo sin Redefinición


Esto ocurre cuando en diferentes clases Ejemplo
se implementa el mismo método pero el
Podemos observar que en nuestra concesionaria
comportamiento es totalmente distinto
se pueden vender Autos y Patentes. El método
y no está en la jerarquía de herencia.
posee la misma firma pero son dos ventas de
índole distinta.
Java Standard Web Programming
Java Standard Web Programming

Polimorfismo y una de sus principales ventajas


En muchas oportunidades, hemos utilizado Posee un parámetro que recibe un Object que al
polimorfismo sin darnos cuenta. Por ejemplo: al ser el padre de todo, puede convertirse en
usar el método de impresión por consola de Java cualquiera de sus hijos incluyendo las clases
(cuando enviamos un objeto propio y este propias de nuestro sistema.
termina llamando al método toString del objeto
enviado). ¿Cómo es posible esto, si Java no tiene
en sus librerías las clases que yo desarrollé?

Ejemplo

Si se observa el método println de la clase


PrintStream no tiene un parámetro Auto,
Patente, ni otro personalizado.
Java Standard Web Programming

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

Aunque se le conozca como for-each en otros


lenguajes de programación en Java su sintaxis Sentencias
no posee la palabra each.
Sigue el
programa

Fin del
programa
Java Standard Web Programming

Sintaxis
for común

Para recorrer un arreglo usábamos el for, que


vimos en clases anteriores, donde se declaraba
una variable para poder iterar cada uno de los
elementos.
Java Standard Web Programming

foreach

La palabra reservada for, seguida de paréntesis


que encierran la condición (Tipo de elemento
con su identificador : arreglo o colección) y las
llaves que encerraran el grupo de instrucciones
a efectuar por cada iteración.
Java Standard Web Programming

Funcionamiento
Este bucle recorre un arreglo de principio a fin de forma secuencial:
Java Standard Web Programming

Características

● Como recorre completamente el arreglo o


colección, la única forma de salir de él, antes
de terminar de pasar por cada uno de los
elementos, es con break.

● Al no tener un índice o valor por defecto no


funciona para modificar datos dentro del
arreglo, a menos que usemos un contador
dentro del for por lo que no
tendría lógica usarlo.

● Es ideal para mostrar datos de un arreglo o


colección, y se lee mucho más fácil.

● Una vez que se comprende, es más simple y


cómodo de trabajar.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar el laboratorio anterior.

● Descargar los elementos necesarios.


Java Standard Web Programming

Ejercicio de abstracción y polimorfismo


Continuar mejorando el laboratorio anterior:

1. Ingresar todas las posibles personas del


sistema (Coordinador, Profesor,
Administrativo o Alumno).

2. Todas las clases deben implementar un


método guardar, modificar o eliminar.

3. Utilizar solo un tipo de objeto para guardar


los elementos.
Java Standard Web Programming

A continuación, encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 3 - Desafío
Java Standard Web Programming

Ejercicio 1: Gestión de un almacén


Primera parte

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

Ejercicio 2: Productos bancarios


Primera parte

Crear un programa que pueda almacenar los 3. El número de producto se genera


productos de una entidad bancaria (CA, CC automáticamente e incrementa de uno en uno
y TC), con las siguientes condiciones: por producto.

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.

2. Las Tarjetas de Crédito poseen Banco,


Sucursal, Número de Producto y Clave de
Seguridad.
Java Standard Web Programming

5. Hacer un método que genere un formato para Segunda parte


cada uno de los números de productos y
Ahora, vamos a hacer las siguientes mejoras:
reciba la estructura que debe imprimir:
1. El método que genera el número de producto
CC y CA (###-#-#####/#)
debe ser único en todo el programa.
y TC (#### #### #### ####).
2. La clase Producto no se debe instanciar.
5. El toString debe mostrar el formato correcto.

6. Para este desafío, el Banco y la Sucursal son


números enteros.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 4
Bloque
HTML5:try-catch-finally
Fundamentos Web
Java Standard Web Programming

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.

En Java, no se pueden evitar pero sí gestionar. Así


se evita la interrupción abrupta del sistema,
mediante el tratamiento adecuado del problema.
De esta manera, se tendrá un software más
robusto y estable.
Java Standard Web Programming
Java Standard Web Programming

Try, catch y finally


Este bloque está conformado para capturar los catch
errores y ejecutar las instrucciones deseadas.
Contendrá el código necesario para gestionar el
try error. Si se presenta un error en el bloque try el
catch lo capturará creando un objeto según el
Contendrá las instrucciones que pueden
tipo de excepción esperada, es por ello que este
provocar el error. De este tipo de bloque sólo se
bloque contiene un parámetro y se pueden crear
puede crear uno por grupo.
tantos bloques catch crea conveniente.

No es obligatorio tener un catch pero es


recomendable hacerlo.
Java Standard Web Programming

finally

Contendrá el código que se ejecutará suceda o


Existen muchos tipo de excepciones
no un error. No es obligatorio, y de ser requerido
y es imposible enumerarlas todas,
solo puede existir uno al final del try, en el caso aprenderemos poco a poco de cuales
de que no posea bloque catch. Si lo posee, existen y cuándo utilizarlas según van a
finally debe ubicarse al final de todo el grupo. apareciendo y obtenemos experiencia.
Java Standard Web Programming
Java Standard Web Programming

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.

Devuelve un mensaje con un


String getMessage()
detalle del error capturado.

Imprime la pila de errores que


void printStackTrace()
se produjo.

Devuelve la causa del error


String getCause() o null si la causa es inexistente
o desconocida.
Java Standard Web Programming
Java Standard Web Programming

Jerarquía de las Excepciones

Object Checked Exceptions

Throwable UnChecked Exceptions

Error Exception

Virtual Reflective
IO Runtime
Machine … … Operation
Exception Exception
Error Exception

Virtual Class Not File Not


Arithmetic Runtime Null Pointer
Machine Found Found
Exception Exception Exception
Error Exception Exception
Java Standard Web Programming

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.

Es posible observar, en el ejemplo de la siguiente


pantalla, que el IDE muestra un error al tratar
de instanciar un objeto del tipo FileReader con
el constructor que recibe como argumento la
dirección de un archivo, en este caso el JDK Exception

indica qué tipo de problema puede ocurrir


(FileNotFoundException).
Java Standard Web Programming
Java Standard Web Programming

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con excepciones


Mejoras al laboratorio final del módulo anterior:

1. El sistema debe estar preparado ahora para


que el usuario indique una fecha no
apropiada (letras o números fuera del
aceptado) y vuelva a pedir el dato.
Java Standard Web Programming

A continuación encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con excepciones


Mejoras al laboratorio final del módulo anterior:

1. El sistema debe estar preparado ahora para


que el usuario indique una fecha no
apropiada (letras o números fuera del
aceptado) y vuelva a pedir el dato.
Java Standard Web Programming

A continuación encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4
Throws
HTML5: Fundamentos Web
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

Recordemos que al instanciar un objeto del tipo throws


FileReader con el constructor que recibe como
argumento la dirección de un archivo, el JDK nos
indica qué tipo de problema puede ocurrir
(FileNotFoundException).
Java Standard Web Programming
Java Standard Web Programming

Uso en el main

Cuando se utiliza en el main se delega a la máquina


virtual de Java que tratará de manejar la excepción
y detendrá el software:
Java Standard Web Programming

Delegar excepciones

No solamente podemos delegar excepciones chequeadas


sino también excepciones que sabemos que pueden
ocurrir, para que quien invoque el método esté al tanto
de que puede ocurrir un error.
Throw
HTML5: Fundamentos Web
Java Standard Web Programming

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

try with resources


Java 7 incorpora la sentencia denominada La mayoría de las clases relacionadas con
try-with-resources con el objetivo de entrada y salida implementan la interfaz
cerrar los recursos de forma automática en AutoCloseable.
la sentencia try-catch-finally y hacer más
Por ejemplo: las relacionadas con el sistema de
simple el código. Para ello, la clase del objeto a ficheros y flujos de red como InputStream, también
trabajar debe tener implementada la interfaz las relacionadas con la conexión de base de datos
AutoCloseable. Por medio de ella, Java detecta mediante JDBC con Connection.
que posee el método close y lo invoca al terminar
de utilizar el recurso.
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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar el laboratorio anterior.


Java Standard Web Programming

Ejercicio con excepciones propias


Mejoras del laboratorio anterior:

1. Debes crear una excepción propia donde


indique que solo son válidos los documentos:
DNI, PAS, LE, CI.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 4 - Desafío
Java Standard Web Programming

Ejercicio 1: Imprimir datos


Crear una clase Impresora que posea las
siguientes características:

1. Poseer un atributo que indique la impresora a 4. Debe poseer un método Imprimir y el


utilizar y el documento (arreglo de String) a documento no debe estar vacío.
imprimir.
5. Al finalizar la impresión, garantizar cerrar
2. No debe tener el constructor por defecto. el recurso, por lo que se debe utilizar el
try with resources.
3. Solo están permitidas las impresoras
(Canon, HP, Epson, Brother y Samsung).
Java Standard Web Programming

Ejercicio 2: Productos bancarios


Tercera parte A continuación, una lista de productos disponibles, no
disponibles y los códigos de errores:
Continuamos ayudando al Banco a gestionar sus
productos. A partir del Ejercicio 2 del Desafío del Productos disponibles Productos no disponibles
módulo anterior, modificar:
CC FCI
1. Controlar los posibles errores al asignar un CA PF
tipo de producto con una excepción nueva y
que evalúe el código del error enviado
Código Error Descripción Error
(entero) y retorne un mensaje indicando el
error. 1 Producto No disponible
2 Producto Inexistente
Java Standard Web Programming

A continuación encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 5
Enumerados
HTML5: Fundamentos Web
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.

Por ejemplo: para determinar el color de un automóvil, en la mayoría de


los casos, asignaremos como atributo del Auto un String:
Java Standard Web Programming

Podría ocurrir que se coloque un color que no esté definido,


aceptado o simplemente se comentan errores al momento
de asignarlo.

(;)
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

Tipo Método Descripción

String toString() Devuelve una breve descripción del objeto enum.

String name() Devuelve el nombre del enumerado.

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.

Devuelve la constante enum del valor de cadena especificado si existe,


Enum valueOf():
de lo contrario mostrará un error.
Java Standard Web Programming

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.

Colores color = new Colores();

Cada elemento del enum es un objeto. Quiere


decir que cada una de esas constantes que
añadimos al enumerado al final se están
instanciando de forma implícita dentro de la clase
enum. Si le colocamos los paréntesis del
constructor por defecto no presentará error.
Java Standard Web Programming

Atributos en los enum


Se podrían otorgar atributos a nuestros objetos
enumerados, pero solo se deben asignar al
instanciarse dentro del enum. Deberemos crear un
constructor que soporte dichos atributos y crear
los métodos getter para poder obtenerlos.

Solo puede existir un constructor en el


enumerado y cada objeto del enum debe poseer
siempre la misma cantidad de atributos.
Java Standard Web Programming

Ejemplo
Java Standard Web Programming

Enumerados y los switch


Además de sus múltiples ventajas, los enumerados pueden
utilizarse literalmente en los switch. Esto hace que este tipo
de clases nos de más opciones y así se eviten menos errores
en los casos necesarios.

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.

Esto tiene sus ventajas, pero ¿qué pasa si en algún


momento necesitamos una estructura (clase) genérica que
nos ayude a solventar varios problemas, como una clase
con dos atributos?

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

¿Qué ocurre si necesitamos un código que sea un string o


un número que sea un double?

Sería posible resolver declarando los tipos de datos como


Object ya que, por polimorfismo, se convierte en
cualquiera de sus hijos, incluyendo estructuras nuevas y
todos los datos primitivos, lo que exigiría más código y
esfuerzo de nuestro lado para castear cada caso de uso o
preguntar si el objeto es una instancia del tipo de dato
deseado.

El problema que tenemos con Object es que debemos


hacer unas validaciones para que no asignen el dato
incorrecto.
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;
}

public void setNumero(V numero) {


this.numero = numero;
}
}
Java Standard Web Programming

Nomenclatura

Letra Valor Descripción

E Element Usado bastante por Java Collections Framework.

K Key Clave, usado en mapas.

N Number Para números.

T Type Representa un tipo, es decir, un objeto.

V Value Representa el valor, también se usa en mapas.

S, U, V, etc. Usado para representar otros tipos.


Java Standard Web Programming

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.

● También ayudan a reducir el código


eliminando, las comprobaciones de tipos y los
casting excesivos.

● Y parte de lo más importante es la


reutilización de código.
Java Standard Web Programming

Ejemplo

GenericaDosAtributos<Integer, Integer> telefono = new GenericaDosAtributos<>();

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.

A medida que se va descendiendo a niveles más


específicos aumentan los requerimientos y
comportamientos.
Java Standard Web Programming

Colecciones
Referencias

Iterable Interfaz
Clase
Collection

AbstractCollection

Set List Queue

AbstractSet AbstractList Deque AbstractQueue

HashSet SortedSet ArrayList AbstractSequentialList ArrayDeque PriorityQueue

LinkedHashSet TreeSet LinkedList


Java Standard Web Programming

Métodos Collection

Tipo Método Descripción

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 contains(Object o) Devuelve verdadero si esta colección contiene el elemento especificado.

Devuelve verdadero si esta colección contiene todos los elementos de


boolean containsAll(Collection<?> c)
la colección especificada.

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ás métodos en la siguiente pantalla.


Java Standard Web Programming

Métodos Collection

Tipo Método Descripción

boolean isEmpty() Devuelve verdadero si esta colección no contiene elementos.

Iterator<E> iterator() Devuelve un iterador sobre los elementos de esta colección.

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.

Int size() Devuelve el número de elementos en esta colección.

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.

Tipo Método Descripción

boolean hasNext() Devuelve true si la iteración tiene más elementos.

E next() Devuelve el siguiente elemento en la iteración.

void remove() Elimina de la colección subyacente el último


elemento devuelto por este iterador.
Interfaz Set
HTML5: Fundamentos Web
Java Standard Web Programming

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 clase AbstractSet HashSet SortedSet

Proporciona una implementación esquelética de la interfaz LinkedHashSet TreeSet


Set y simplemente agrega implementaciones para los
métodos equals y hashCode.

La interfaz SortedSet

Permite que las clases que la implementen tengan los


elementos ordenados.
Java Standard Web Programming

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)

Hemos visto que es posible comparar con el


método equals una cadena de caracteres. Este
método devuelve true o false según sea el caso.

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

Los IDE nos proporcionan alguna manera de


generar de forma automática estos métodos.

Por ejemplo

En Eclipse podemos ir a:
Source > Generate hashCode() and equals()

En el panel seleccionamos los atributos que queremos


que se tengan en cuenta en estos métodos.

Es importante aclarar que si los atributos a


comparar también son objetos propios debemos
sobreescribir en esos objetos dichos métodos, de
lo contrario la interfaz no detectará que son
iguales.

Además, podemos utilizar el método equals a


partir de ahora cuando lo creamos conveniente.
Java Standard Web Programming

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

Lista HashSet SortedSet

LinkedHashSet TreeSet
Nulo

Define el concepto de elementos añadiendo una


lista doblemente enlazada en la ecuación que
nos asegura que los elementos siempre se
recorren de la misma forma.
Java Standard Web Programming

TreeSet
Esta implementación almacena los elementos Set
ordenándolos en función de sus valores.

Implementa el algoritmo del árbol rojo – negro: AbstractSet

árbol de búsqueda binaria, también llamado


árbol binario ordenado o árbol binario ordenado. HashSet SortedSet
Por eso, es bastante más lento que HashSet.
LinkedHashSet TreeSet
Este orden podrá ser Natural o Alternativo.
Java Standard Web Programming

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

Los métodos compareTo y compare comparan dos objetos


o1 y o2 (en compareTo o1 es this) y devuelve un entero
que es:

● Negativo si o1 es menor que o2.


● Cero si o1 es igual a o2.
● Positivo si o1 es mayor que o2.

Si el atributo a comparar es un String podemos


apoyarnos en el método compareTo, de lo contrario con
una resta entre atributos numéricos basta.
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.

● Búsqueda de elementos: busca un elemento


concreto de la lista y devuelve su posición.

● Iteración sobre elementos: mejora el Iterador


por defecto.
Java Standard Web Programming

La clase AbstractList

Proporciona una implementación esquelética de List


la interfaz dándole comportamiento a los
nuevos métodos que utilizaremos.
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

Métodos de las listas


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

Tipo Método Descripción


void add(E e) Inserta el elemento especificado en la lista
boolean hasPrevious() Devuelve true si este iterador de lista tiene más elementos al
recorrer la lista en la dirección inversa.
Int nextIndex() Devuelve el índice del elemento que sería devuelto por una llamada
posterior a next().
E previous() Devuelve el elemento anterior de la lista y mueve la posición del
cursor hacia atrás.
Int previousIndex() Devuelve el índice del elemento que sería devuelto por una llamada
posterior a previous().
void set(E e) Reemplaza el último elemento devuelto por next()o previous() con
el elemento especificado
Java Standard Web Programming

ArrayList
Esta es la implementación más típica de la interfaz. List

Se basa en un array redimensionable que aumenta su


tamaño según crece la colección de elementos. AbstractList

Es la que mejor rendimiento tiene sobre la mayoría de ArrayList AbstractSequentialList


situaciones y como podemos observar se parece mucho
a la forma que trabajamos los arreglos comunes con LinkedList

acceso por índice.


Java Standard Web Programming

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

Si estas dos implementaciones recorren la colección como


fueron insertados ¿Cuál debo usar?

LinkedList

Permite inserciones o eliminaciones en mejor tiempo


utilizando los iteradores, pero solo acceso secuencial de
elementos.

ArrayList

Permite un acceso de lectura aleatorio rápido, para que


puedas obtener cualquier elemento en un tiempo más
óptimo. Pero agregar o eliminar desde cualquier lugar
menos el final requiere desplazar todos los últimos
elementos.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5
Colecciones
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Las colas y las pilas representan una estructura


lineal de objetos en los que se pueden agregar o
eliminar los elementos únicamente desde uno
de los dos extremos.
Java Standard Web Programming

FIFO

Los elementos de una cola se eliminan de la


colección en la misma forma en que fueron
LIFO
insertados, a esta estructura se les conoce como
FIFO (First In, First Out).

LIFO

Los elementos de una pila se eliminan de la


colección en el orden inverso al que se
insertaron, a esta estructura se les conoce como FIFO
estructura LIFO (Last Input, First Out).
Interfaz Queue
HTML5: Fundamentos Web
Java Standard Web Programming

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:

(;)

Tipo Método Descripción

Devuelve el elemento que se encuentre al


E element()
principio de la cola.

boolean offer(E e) Inserta un elemento al final de la cola.

Elimina el elemento que se encuentre al


E peek()
principio de la cola.

Elimina el elemento que se encuentre al


E poll()
principio de la cola.
Java Standard Web Programming

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:

Tipo Método Descripción Queue

boolean offerFirst(E e) Inserta un elemento al principio de la cola.


Deque AbstractQueue
boolean offerLast(E e) Inserta un elemento al final de la cola.

Elimina el elemento que se encuentre al principio de ArrayDeque PriorityQueue


E peekFirst()
la cola.
Elimina el elemento que se encuentre al principio de
E pollFirst()
la cola.

E peekLast() Elimina el elemento que se encuentre al final de la cola.

E pollLast() Elimina el elemento que se encuentre al final de la cola.


Java Standard Web Programming

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con colecciones


Colecciones

Mejoras del laboratorio anterior: ● No permitir agregar elementos duplicados


(Personas con Documentos iguales).
1. Para las excepciones creadas previamente,
considerar ahora: ● Mostrar la lista ordenada por tipo y número
de documento.
● Al imprimir el tipo de documento, mostrar:

○ DNI = Documento nacional de


identidad.
○ PAS = Pasaporte.
○ LE = Libreta de enrolamiento.
○ CI = Cédula de identidad.
Java Standard Web Programming

A continuación encontrarás su resolución para que


verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con colecciones


Continuar mejorando el laboratorio anterior:

1. Mejorar el método que recibe fecha para que reciba


un String con el formato dd/mm/aaaa.
Por ejemplo: 15/03/1983.

2. Se pide que, después de ingresadas, todas las


personas sean atendidas para tomar la asistencia
del instituto por orden de edad de mayor a menor.
Debes imprimir quién será atendido y quién está
siendo atendido.
Java Standard Web Programming

A continuación encontrarás su resolución para que


verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5
Mapas
HTML5: Fundamentos Web
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

Tipo Método Descripción


boolean isEmpty() Devuelve verdadero si este Mapa no contiene elementos.
void clear() Elimina todos los elementos del mapa.
Int size() Devuelve el número de elementos del mapa.

Asocia el valor especificado con la clave especificada en


V put(K key, V value) este mapa, si existía ya la clave reemplaza el valor y
retorna el objeto reemplazado

Agrega todos los elementos del mapa especificado a este


void putAll(Map<? extends K,? extends V> m)
mapa

Devuelve el valor que contenga la clave especificada o null


V get(Object key)
si no existe

Más métodos en la siguiente pantalla.


Java Standard Web Programming

Métodos Map

Tipo Método Descripción


Devuelve verdadero si este mapa contiene la clave
boolean containsKey(Object key)
especificada.

Devuelve verdadero si este mapa contiene el objeto


boolean containsValue(Object value)
especificado.

Compara el objeto especificado con esta colección para la


boolean equals(Object o)
igualdad.
int hashCode() Devuelve el valor del código hash para esta colección.
Elimina la asignación de una clave de este mapa si esta
V remove(Object key)
presenta y retorna el valor eliminado.
Set<Map.Entry<K,V>> entrySet() Devuelve una vista de colección del mapa en una colección
Collection<V> values() Devuelve una colección con los objetos del mapa.
Set<K> keySet() Devuelve en una colección Set las claves del mapa.
Java Standard Web Programming

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.

Tipo Método Descripción

K getKey() Devuelve la clave de la iteración correspondiente.

E getValue() Devuelve el valor de la iteración correspondiente.

Reemplaza el valor de la iteración correspondiente y


V setValue(V value)
retorna el valor reemplazado.
Java Standard Web Programming

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

Representa un par Clave, Valor donde las claves son


LinkedHashMap
únicas (no puede tener claves duplicadas) sin ordenar (por
ejemplo, si hacemos un recorrido de los objetos dentro del
mapa no siempre los obtendremos en igual orden) y tiene
una iteración más rápida que otros mapas.
Java Standard Web Programming

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

SortedMap AbstractMap Nulo

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

Este orden podrá ser Natural o Alternativo. TreeMap HashMap

LinkedHashMap
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5 - Laboratorio 3
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio con colecciones


Mejorar el laboratorio anterior:

1. Se ha solicitado el siguiente cambio en la lista


de cursos:

○ No almacenar directamente el nombre del


curso, sino, el id del curso.

○ Este diccionario deberá asignar un id


(número único) auto incrementable a
cada curso.

2. Al momento de ingresar el nombre del curso,


el sistema validará que el curso existe, de lo
contrario volverá a pedir el curso.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 5 - Desafío
Java Standard Web Programming

¿Qué son los desafíos?

● Son ejercicios complementarios a los realizados en


clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.
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.

Tablas del sistema: 3. Crear una colección ordenada no repetida de


teléfonos por código.
● Documentos (Tipo cadena, descripción
cadena).

● Teléfonos (Código número, País cadena).


Java Standard Web Programming

Ejercicio 2: Productos bancarios


Avanzamos un poco más en la mejora del A continuación una lista de productos disponibles y no
sistema para el Banco. disponibles y los códigos de errores:

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

1. Las listas de productos disponibles, no PF Plazo Fijo No

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

Ejercicio 3: Cola de personas según prioridades


1. Crear un programa que posea una clase Consideraciones:
Persona con las siguientes características:
● No permitir duplicados por documento.
documento, nombre, apellido, edad.
● Las personas mayores a 55 años se atienden
2. El programa debe simular una cola virtual y
primero. Tomar en cuenta que, si hay más de
asignar un orden de llegada a cada persona.
una persona que cumpla este requisito, deberá
ser atendida según cómo ingresaron.

● Mostrar por consola quién se atendió y quién


se está por atender cada 2 segundos.
Java Standard Web Programming

A continuación, encontrarás su resolución para


que puedas verificar cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 6
Introducción a SQL
HTML5: Fundamentos Web
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.

Dentro de las bases de datos, hay muchos


modelos para trabajar. En este curso, hablaremos
y aprenderemos el Modelo Relacional.
Java Standard Web Programming

Modelo Relacional:

Se basa en relacionar los objetos entre sí


para que tengan un significado implícito.

Consiste en el almacenamiento de datos


en tablas compuestas por:

● 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

Enlace entre dos tablas, donde la clave


principal de una tabla se asocia con la A B C C D E E F G

clave externa de otra tabla utilizando


las relaciones de la base de datos.

B H I
Motores de
HTML5: Fundamentos Web
Base de Datos
Java Standard Web Programming

Motores de Base de Datos


Un motor de Bases de Datos es un conjunto de
Podemos definir que estos motores sirven para
programas que permiten el almacenamiento,
definir, construir y manipular una base de datos.
modificación y extracción de la información
en una base de datos. Además, proporciona
herramientas para añadir, borrar, modificar y
analizar los datos. Los usuarios pueden acceder
a la información con herramientas específicas de
consulta y/o de generación de informes, o bien
mediante aplicaciones al efecto.
Java Standard Web Programming

Operaciones básicas:

1. Definir una base de datos: consiste en


+
especificar los tipos de datos, estructuras
y restricciones para los datos que se C R U D
almacenarán.
Create Read Update Delete
2. Construir una base de datos: es el proceso (Crear) (Leer) (Actualizar) (Borrar)
de almacenar los datos sobre algún
medio de almacenamiento.

3. Manipular una base de datos: incluye


funciones como consulta, actualización, +
y otras.
A B M C

Alta Baja Modificación Consulta


Java Standard Web Programming

Control de concurrencia

Se refiere a que los DBMS (Sistemas de


Administración de Bases de Datos) permiten
que muchas transacciones accedan a una
misma base de datos a la vez. Esto asegura
que las transacciones concurrentes no
interfieran entre sí.
Java Standard Web Programming

Motores de Base de Datos

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.

MariaDB se ha convertido en una solución de


base de datos completa con SQL distribuido,
almacenamiento en columnas y tablas
temporales, mientras que MySQL 8.0 fue una
Java Standard Web Programming

Enfoque Cliente - Servidor


SMDB
Aplicación servidor

Es el elemento de la comunicación que responde


a las peticiones de los clientes y proporciona el
servicio requerido.
Server

Aplicación cliente API

Es el elemento de la comunicación que pide o


solicita un servicio de red.
Desktop Smartphone

Laptop
Java Standard Web Programming

● Escalabilidad: es posible aumentar la ● Seguridad: SQL Server permite administrar


capacidad de clientes y servidores por permisos a todo. Permisos a nivel de servidor,
separado. Cualquier elemento puede ser a nivel de base de datos, seguridad en tablas,
aumentado (o mejorado) en cualquier permitir o no lectura de datos, escritura de
momento, o se pueden agregar nuevos nodos datos, ejecución de procedimientos.
a la red (clientes y/o servidores).

● Fácil mantenimiento: al estar distribuidas


las funciones y responsabilidades entre
varias computadoras independientes,
es posible reemplazar, reparar, actualizar,
o incluso trasladar un servidor, mientras
que sus clientes no se verán afectados por el
cambio. Hoy día es frecuente también tener
servidores en la nube.
SQL
HTML5: Fundamentos Web
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.

Lenguaje de Consultas Estructurado


Java Standard Web Programming

Clasificación

DDL DML DCL TCL

Data Definition Data Manipulation Data Control Transactional


Language Language Language Control Language
Definición Manipulación Control Control
de Datos de Datos de Datos Transaccional

CREATE SELECT GRANT COMMIT


ALTER INSERT REVOKE ROLLBACK
DROP UPDATE
TRUNCATE DELETE
Java Standard Web Programming

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

Tipo de dato Intervalo

bigint De -263(-9.223.372.036.854.775.808) a 263 - 1 (9.223.372.036.854.775.807).

int De -231 (-2.147.483.648) a 231 - 1 (2.147.483.647).

smallint De -215 (-32.768) a 215 - 1 (32.767).

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

Tipo de dato Intervalo

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.

Con precisión máxima 1038+1 y 1038 - 1.

money Tipos de datos que representan valores monetarios o de moneda: de -922.337.203.685,4775808


a 922.337.203.685,4775807.

smallmoney De - 214,7483648 a 214,7483647.


Java Standard Web Programming

Numéricos aproximados y de fecha y hora

Tipo de dato Intervalo

float De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308.

double De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38.

datetime Del 1 de enero de 1753 hasta el 31 de diciembre de 9999.

smalldatetime Del 1 de enero de 1900 hasta el 6 de junio de 2079.


Java Standard Web Programming

Cadenas de: Caracteres, Unicode y Binarias

Tipo de dato Intervalo

char (n) Caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe ser un valor entre 1 y 8.000.

Caracteres no Unicode de longitud variable. n indica que el tamaño de almacenamiento máximo


varchar (n)
es de 231 - 1 bytes.

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.

Datos binarios de longitud variable. n indica que el tamaño de almacenamiento máximo es


varbinary (n)
de 231 - 1 bytes.
Java Standard Web Programming

Otros tipos de datos

Tipo de dato Intervalo

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.

uniqueidentifier Es un GUID (Globally Unique Identifier, Identificador Único Global).

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.

● Los comentarios de código multilínea están


envueltos en /* ... */

● Los comentarios de una línea pueden


comenzar con la almohadilla o numeral #
o también con dos guiones consecutivos.

/* ... */
Java Standard Web Programming

Instrucciones
Crear

create instrucción se usa para crear objetos


en la base de datos (Base de Datos, Tablas, y
otros).
Java Standard Web Programming

Eliminar

drop instrucción se usa para eliminar


objetos en la base de datos (Base de Datos,
Tablas, y otros).
Java Standard Web Programming

Modificar

alter instrucción se usa para agregar,


eliminar y modificar columnas en una tabla.
Java Standard Web Programming

Restricciones

Es uno o una combinación de campos que le


Clave Primaria indica a la tabla que ese registro (fila) es único.

Es uno o una combinación de campos que


Clave Foránea le indica a la tabla que debe existir.
Registros
HTML5: Fundamentos Web
Java Standard Web Programming

Operaciones con registros


Insertar Registros

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

ORIGEN DE DATOS CONDICIÓN DE


DELETE FROM WHERE
(Tablas) ELIMINACIÓN
Java Standard Web Programming

Operadores relacionales

Símbolo Descripción

= Igualdad

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

<> 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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar los laboratorios anteriores.


Java Standard Web Programming

Ejercicio de SQL
Mejoras a los laboratorios del módulo anterior:

1. Crear una base de datos que pueda


almacenar la información de todos los objetos
involucrados en el sistema.

2. Debe ser posible, pedir por consola los datos


de un Director y se debe poder agregar
a la base de datos.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar los laboratorios anteriores.


Java Standard Web Programming

Ejercicio de SQL
Mejoras a los laboratorios del módulo anterior:

1. Crear una base de datos que pueda


almacenar la información de todos los objetos
involucrados en el sistema.

2. Debe ser posible, pedir por consola los datos


de un Director y se debe poder agregar
a la base de datos.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6
JDBC
HTML5: Fundamentos Web
Java Standard Web Programming

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:

Tipo Método Descripción

void commit() Confirma los cambios realizados provisionalmente por las transacciones.

void close() Libera la conexión a la base de datos.

Statement createStatement() Crea un objeto Statement para enviar sentencias SQL a la base de datos.

Crea un objeto PreparedStatement para enviar sentencias SQL


PreparedStatement prepareStatement(String sql)
parametrizadas a la base de datos.

Deshace todos los cambios realizados en la transacción actual y libera


void rollback()
los bloqueos de la base de datos.

void setAutoCommit(boolean autoCommit) Establece el modo de confirmación automática.

boolean isClosed() Recupera si la conexión se ha cerrado.


Java Standard Web Programming

Crear la conexión

1. Para registrar el driver de la librería descargada lo


primero que debemos hacer es indicar la clase que
nos provee dicha librería.

2. Una vez registrado el driver debemos establecer


la conexión a través de un método estático que
nos provee la clase denominada DriverManager
getConnection(String url, String user, String
password) y nos retorna un objeto de tipo Connection.
Java Standard Web Programming

● La url espera el driver, el nombre de la PC o ● La clave espera por defecto la contraseña


su IP, el puerto de conexión a la base de datos que posee el usuario, dependiendo del tipo
(por defecto en MariaDB y MySQL 3306) y el de instalación puede estar vacía o una clave
nombre de la base de datos. colocada al momento de instalar.

● El usuario espera el nombre del usuario que


se conecta a la base de datos, por defecto en
MariaDB y MySQL es root.
Java Standard Web Programming

Ejecutar instrucciones SQL


La interfaz Statement provee una serie de
métodos que, al ser ejecutados, devuelven
los resultados que producen las sentencias.

Al crear la conexión, el objeto provee - como Veamos la tabla de


pudimos ver en el cuadro de métodos de la próxima pantalla.
Connection - el método createStatement()
que nos devuelve un Statement.

El método execute() se utiliza para ejecutar


sentencias SQL del tipo INSERT, UPDATE o DELETE.
Java Standard Web Programming

Tipo Método Descripció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.

Casi todos toman un solo parámetro, que es el


índice que la columna tiene dentro del ResultSet
o bien el nombre de la columna.
Java Standard Web Programming

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: representa un objeto con la ● Data Source: representa la implementación


lógica de negocio, “Entidades de negocio” de la interfaz.
(Persona, Documento, Alumno, y otros).

● DataAccess Object: representa una capa de


acceso a datos que oculta la fuente y los
detalles técnicos para recuperar los datos.
Representada por lo general por una interfaz.
Java Standard Web Programming

Business Object

Representada por cualquier entidad


necesaria que ayude a resolver la
problemática del negocio.
Java Standard Web Programming

Data Access Object

Representada por una interfaz que contiene


la abstracción de los métodos necesarios
para acceder, modificar, eliminar e insertar
nuestros objetos.

Podemos, sin ningún problema, crear una


interfaz por cada entidad de negocio pero,
para simplificar nuestro código, nos
apoyamos en los genéricos.
Java Standard Web Programming

Data Sources

Representada por un objeto


que implementa los algoritmos
necesarios y el acceso a los datos.

Para este ejemplo, separamos la


conexión y la implementación
para abstraer aún más:
Java Standard Web Programming


Java Standard Web Programming


Java Standard Web Programming

Transfer Object

Representada por una clase que se encarga de instanciar


los objetos para interactuar con nuestro origen de datos.


Java Standard Web Programming


¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Descargar los elementos necesarios.

● Realizar los laboratorios anteriores.


Java Standard Web Programming

Ejercicio de SQL
Mejoras al laboratorio anterior:

1. Se desea pedir por consola los datos de un


Administrativo y que se pueda agregar
a la base de datos.

2. Utilizar sentencias preparadas y crear


el DAO, recordar eliminar la interfaz
Persistencia por este nuevo patrón.
Java Standard Web Programming

A continuación encontrarás los recursos


necesarios para realizar los ejercicios y su
resolución para que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6
Declaración PreparadaWeb
HTML5: Fundamentos
Java Standard Web Programming

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

Ejecutar declaraciones preparadas SQL


La interfaz PreparedStatement, que hereda Al crear la conexión, el objeto provee - como
Statement, proporciona un objeto que representa pudimos ver en el cuadro de métodos de
una instrucción SQL precompilada. Además, Connection - el método denominado
proporciona una serie de métodos que, al ser prepareStatement(String sql) que nos
ejecutados, devuelven los resultados que devuelve un PreparedStatement.
producen dichas sentencias.

Tipo Método Descripción

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.

Estos parámetros están representados por el


signo de interrogación “?”, en el String que
Veamos un ejemplo
contiene el SQL, al usar los métodos setter en la próxima pantalla.
debemos indicar el índice del parámetro a
sustituir comenzando desde el número 1.
Java Standard Web Programming
Inyección SQL
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Aunque existen otros tipos de vulnerabilidades


que tienen que ver con la inyección de código, en
este módulo, aprenderemos a evitar las de tipo
SQL a través de herramientas que ofrecen los
gestores de base de datos y Java.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 6 - Desafío
Java Standard Web Programming

Ejercicio 1: Ciudades argentinas


1. Crear un programa que posea una clase País
y una clase Ciudad con las siguientes
características:

● El país debe tener id y descripción.

● La provincia debe tener id y descripción.

2. Crear un método que busque las ciudades


(para este ejercicio, solo Argentina) por la
coincidencia de una palabra en la base de
datos (MySQL o MariaDB) y las muestre
en consola.
Java Standard Web Programming

Ejercicio 2: Productos bancarios


Sexta parte

Continuamos optimizando el sistema: La tabla debe contener la siguiente información:

1. A lo realizado en el ejercicio 2 del Desafío del ● Id.


módulo anterior, agregar un log que inserte, ● Fecha y hora,
en la base de datos, los errores por el tipo de
● Clase afectada,
producto.
● Producto afectado,
● Descripción del error.
Java Standard Web Programming

Séptima parte

¡Entramos en las últimas etapas antes de


completar el sistema!

1. Agregar al log de base datos el patrón DAO.

2. Obtener el id insertado por cada log y


mostrarlo en la consola.
Java Standard Web Programming

Ejercicio 3: Inyección SQL


En nuestro sistema existe una tabla
permisos (usuario (varchar), módulo(char)
y activo(boolean)).

Para este ejercicio, trataremos de ubicarnos del lado


del usuario malicioso para entender cómo hacen las
cosas y evitar que nos suceda en nuestro código.

1. Intentar que todos los permisos consultados


devuelvan true aunque no lo posean (inyección
SQL) solo usando el operador AND en SQL.
Nota: siempre se debe tener en cuenta lo que el usuario
puede hacer y lo que no debe hacer.
Java Standard Web Programming

A continuación encontrarás su resolución para que


verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 7
Java IO Fundamentos Web
HTML5:
Java Standard Web Programming

Introducción
Java ofrece un paquete completo para gestionar
la comunicación (Lectura y Escritura) de bytes.

El paquete IO Input (Entrada) y Output (Salida)


permite, a través de Streams (Flujos), realizar la
comunicación con la consola, archivos, y otros.

Podemos dividir en dos secciones la


comunicación: Orientados a Carácter y
Orientados a Bytes.
Java Standard Web Programming

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

Métodos de la clase File

Tipo Método Descripción

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 delete() Elimina el archivo o directorio indicado por esta ruta.

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.

String getAbsolutePath() Devuelve la cadena de nombre de ruta absoluta de esta ruta.


Java Standard Web Programming

Métodos de la clase File

Tipo Método Descripción

boolean isDirectory() Comprueba si el archivo indicado por esta ruta es un directorio.

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.

boolean mkdir() Crea el directorio nombrado por esta ruta.


Java Standard Web Programming

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.

La clase FileInputStream reescribe todos los


métodos de la clase InputStream
FileInputStream
proporcionando una implementación más
específica y adecuada.

Esta clase lee la información en byte, que no es


legible para el ser humano, y se utiliza en la BufferedInputStream
mayoría de los casos para leer imágenes, audios,
videos, y otros.
Java Standard Web Programming

Métodos

Tipo Método Descripción


int available() Retorna el número estimado de bytes del fichero
(tamaño del fichero).

void close() Cierra este flujo de entrada y libera los recursos del
sistema asociados con el flujo.

int read() Lee el siguiente byte de datos del flujo de entrada.

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.

La clase FileOutputStream reescribe todos los


métodos de la clase OutputStream
FileOutputStream
proporcionando una implementación más
específica y adecuada.

Esta clase escribe la información en byte y se


utiliza, en la mayoría de los casos, para leer BufferedOutputStream
imágenes, audios, videos, y otros.
Java Standard Web Programming

Métodos

Tipo Método Descripción


int available() Retorna el número estimado de bytes del fichero
(Tamaño del fichero).

void close() Cierra este flujo de entrada y libera los recursos del
sistema asociados con el flujo.

void write(byte[] b) Escribe el arreglo de bytes en el flujo de salida.

void write(int b) Escribe el byte especificado del flujo de salida.


Java Standard Web Programming

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.

La clase abstracta Reader proporciona una


implementación esquelética de la interfaz
Readable y, simplemente, agrega Reader

implementaciones para los métodos read y


close.

La clase InputStreamReader es un puente entre InputStreamReader BufferedReader

los flujos de bytes y los flujos de caracteres: lee


bytes y los decodifica en caracteres en su
representación ASCII a través de un número
FileReader
entero que proporciona la clase FileReader.
Java Standard Web Programming

Métodos

Tipo Método Descripción

int getEncoding() Devuelve el nombre de la codificación de


caracteres que utiliza esta secuencia.

void close() Cierra este flujo de entrada y libera los recursos


del sistema asociados con el flujo.

int read() Lee el siguiente byte de datos del flujo de


entrada.
Java Standard Web Programming

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.

Conocemos el "inside tecnológico" de las


compañías y sabemos qué tecnologías y
metodologías se ajustan mejor a las necesidades
del mercado. Las transmitimos con un alto nivel
académico y un fuerte enfoque en la rápida
adaptación del alumno al ambiente laboral.
Java Standard Web Programming

Appendable
La interfaz Appendable proporciona el método
Appendable
de escritura.

La clase abstracta Writer proporciona una


implementación esquelética de la interfaz
Appendable y, simplemente, agrega Writer

implementaciones para los métodos write


y close.

La clase OutputStreamWriter funciona como un OutputStreamWriter BufferedWriter

puente entre los flujos de bytes, para escribir los


datos como caracteres nos proporcionan la
clase FileWriter.
FileWriter
Java Standard Web Programming

Métodos

Tipo Método Descripción

void close() Cierra este flujo de entrada y libera los recursos


del sistema asociados con el flujo.

void write(int b) Escribe el byte especificado del flujo de salida.


Java Standard Web Programming

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.

Origen Buffer Destino


Java Standard Web Programming

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:

Tipo Método Descripción

void close() Cierra este flujo de entrada y libera los recursos


del sistema asociados con el flujo.

Int read() Lee el siguiente byte de datos del flujo de entrada.

String readLine() Lee una línea de texto.

boolean ready() Indica si el flujo está listo para leerse.


Java Standard Web Programming

Ejemplo

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.

Conocemos el "inside tecnológico" de las


compañías y sabemos qué tecnologías y
metodologías se ajustan mejor a las necesidades
del mercado. Las transmitimos con un alto nivel
académico y un fuerte enfoque en la rápida
adaptación del alumno al ambiente laboral.
Java Standard Web Programming

BufferedWriter
Escribe texto de un flujo de entrada de
caracteres, almacena caracteres en búfer para
proporcionar una escritura eficiente.

Tipo Método Descripción


void close() Cierra este flujo de entrada y libera los recursos
del sistema asociados con el flujo.

void write(int b) Escribe el byte especificado del flujo de salida.

void write(String s) Escribe una cadena de caracteres

void newLine() Escribe un salto de línea.


Java Standard Web Programming

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).

Aunque no pertenece al paquete Java.io será


muy útil para nuestros programas.
Java Standard Web Programming

Propiedades
La clase abstracta Dictionary representa una
estructura clave, valor. Dictionary<K,V> Map<K,V>

La interfaz Map no admite claves duplicadas y


es especialmente útil para ir almacenando datos
sin la preocupación de que alguna de las claves Hashtable<Object,Object>
posea más de un valor asociado.

La clase HashTable reescribe todos los métodos


de la clase Dictionary y Map proporcionando
una implementación. Properties
Java Standard Web Programming

Métodos

Tipo Método Descripción

String getProperty(String key) Busca la propiedad con la clave especificada en


esta lista de propiedades.

String getProperty(String key, String defaultValue) Busca la propiedad con la clave especificada en
esta lista de propiedades.

void load(InputStream inStream) Lee una lista de propiedades (pares de claves y


elementos) del flujo de bytes de entrada.
Java Standard Web Programming

Métodos

Tipo Método Descripción

void load(Reader reader) Lee una lista de propiedades (pares de claves y


elementos) del flujo de caracteres de entrada en
un formato simple orientado a líneas.

Set<String> stringPropertyNames() Devuelve un conjunto de claves en esta lista de


propiedades donde la clave y su valor
correspondiente son cadenas, incluidas claves
distintas en la lista de propiedades
predeterminada si aún no se ha encontrado una
clave con el mismo nombre en la lista de
propiedades principal.
Java Standard Web Programming

Archivo Properties

Un archivo de este tipo almacena la información como


texto con un formato similar al siguiente que, además,
permite comentarios.
Java Standard Web Programming

Ejemplo
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 7 - Desafío
Java Standard Web Programming

Ejercicio 1: Búsqueda en archivo


1. Crear un programa que pida una palabra por
consola y que, dado un archivo, pueda:

a. Buscar la palabra e indicar si existe, de ser


así, indicar fila y columna donde se
encuentra.

b. Encerrar entre dobles llaves angulares


“<<>>” la palabra buscada y guardar el
archivo.
Java Standard Web Programming

Ejercicio 2: Productos bancarios


Octava parte

¡Continuamos con las mejoras!

1. Agregar un archivo de log en la base del


proyecto y guardar cada evento que se
genere con la siguiente estructura:

Fecha Clase: Mensaje - Registrado en la


tabla logs id[ID]
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 8
Cliente
HTML5:- Fundamentos
Servidor Web
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.

Las peticiones se realizan a través de verbos que


definen la acción que se va a realizar en el
recurso del servidor.
Java Standard Web Programming

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

Una aplicación servidor es el elemento de


Laptop
comunicación que responde a las peticiones de
los clientes proporcionando el servicio requerido.
Java Standard Web Programming

Ventajas
Escalabilidad Fácil mantenimiento

Se puede aumentar la capacidad de clientes y Al estar distribuidas las funciones y


servidores por separado. Cualquier elemento responsabilidades entre varias computadoras
puede ser aumentado (o mejorado) en cualquier independientes, se puede reemplazar, reparar,
momento. También, es posible agregar nuevos actualizar, o incluso trasladar un servidor, sin que
nodos a la red (clientes y/o servidores). sus clientes se vean afectados por el cambio.
Actualmente, es frecuente también tener
Seguridad
servidores en la nube.
Permite administrar permisos de forma más
localizada.
Java Standard Web Programming

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.

● HEAD: pide una respuesta idéntica a la de una


petición GET, pero sin el cuerpo de la
respuesta.
Java Standard Web Programming

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.

● Respuestas informativas (100–199).

● Respuestas satisfactorias (200–299).

● Redirecciones (300–399). 404


Page not found
● Errores de los clientes (400–499).

● Errores de los servidores (500–599).


Java Standard Web Programming

URL (Uniform Resource Locator)


Localizador de Recursos Uniformes es una ● Puerto: el puerto en el que está escuchando el
dirección dada a un recurso único en la web. servidor HTTP. Si se omite, se asume que es el
puerto 80.
En teoría, cada URL válida apunta a un único
recurso. ● Ruta: la ruta al recurso que se quiere acceder.

● Esquema: define el protocolo a utilizar. ● Consulta: contiene información adicional para


Por ejemplo: http:, https:, mailto:, el servidor en forma de propiedades
ftp:, y otros. (atributo=valor). Las propiedades se
separan por un ampersand “&”.
● Host: la IP o el nombre del servidor (Dominio)
que se quiere acceder. ● Fragmento: la referencia a una ubicación
interna del documento.
Java Standard Web Programming

URL

esquema : ruta

// anfitrión ? consulta # fragmento

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.

Para el desarrollo del lado del cliente, lo más


utilizado es: HTML para darle estructura, CSS
para estilizar y JavaScript para la lógica y
validación.
Java Standard Web Programming

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.

Es importante tener presente que los


navegadores solo saben procesar texto plano,
HTML, CSS y JavaScript.
Java Standard Web Programming

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.

Las tecnologías utilizadas en el lado del servidor son mucho


más diversas que las del lado del cliente.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 8
Java EE Fundamentos Web
HTML5:
Java Standard Web Programming

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.

● En la capa de presentación, para personalizar


el flujo de páginas y el flujo de trabajo y para
construir páginas personalizadas basándose
en el estado de la sesión.
Java Standard Web Programming

Proporciona una plataforma para construir Avanzados


aplicaciones transaccionales, seguras,
● Gestión de componentes con Enterprise Java
interoperables y distribuidas con los siguientes
Beans (EJB).
servicios:
● Interfaz de usuario con Java Server Faces
Básicos
(JSF).
● Creación de páginas web con Servlets y Java
● Gestionar transacciones con Java Transaction
Server Pages (JSP).
API (JTA).
● Acceso a bases de datos relacionales con Java
● Envío y recepción de mensajes con Java
Database Connectivity (JDBC).
Message Service (JMS).
● Sistema de mapeo objeto-relacional con Java
Persistence API (JPA).
Java Standard Web Programming

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

La excepción ServletException se encargará de


lanzar un error si encuentra un problema.
Java Standard Web Programming

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.

Servlet ServletConfig Serializable

GenericServlet

http.HttpServlet
Java Standard Web Programming

Interfaz Servlet Clase abstracta GenericServlet

Define métodos que deben implementar todos los Define un servlet genérico independiente del
servlets. protocolo.

Interfaz ServletConfig Clase abstracta HttpServlets

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

Se encarga de transformar los objetos de Java en


bytes para transmitirlos por la red o persistirlos.
Java Standard Web Programming

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

Tipo Método Descripción

Permite a través de este servicio que el servlet


protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes DELETE.

Permite a través de este servicio que el servlet


protected void doGet(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes GET.

protected void doHead(HttpServletRequest req, HttpServletResponse resp) Recibe una solicitud HTTP HEAD de la solicitud.

Permite a través de este servicio que el servlet


protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes de OPTIONS.

Permite a través de este servicio que el servlet


protected void doPost(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes POST.

Permite a través de este servicio que el servlet


protected void doPut(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes PUT.

Permite a través de este servicio que el servlet


protected void doTrace(HttpServletRequest req, HttpServletResponse resp)
maneje solicitudes TRACE.
Java Standard Web Programming

HttpServletRequest
Esta interfaz nos provee información de la solicitud
para servlets HTTP.

Tipo Método Descripción

Devuelve el valor del atributo nombrado como un Object, o null si no existe


Object getAttribute(String name)
ningún atributo del nombre dado.

Devuelve el valor de un parámetro de solicitud como a String, o null si el


String getParameter(String name)
parámetro no existe.

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)

Devuelve la sesión actual asociada con esta solicitud, o si la solicitud no tiene


HttpSession getSession()
una sesión, crea una.
Java Standard Web Programming

HttpServletResponse
Esta interfaz proporciona una funcionalidad específica
de HTTP al enviar respuestas a los clientes.

Tipo Método Descripción

Envía una respuesta de redireccionamiento temporal al cliente utilizando la


void sendRedirect(String location)
URL de ubicación de redireccionamiento especificada y borra el búfer.

Devuelve un PrintWriter objeto que puede enviar texto de caracteres


PrintWriter getWriter()
al cliente.
Java Standard Web Programming

Contenedor Web Java


Java EE también define un modelo de contenedor, Existen dos tipos de servidores:
que aloja y gestiona instancias de componentes
● Servidores de aplicaciones: Contienen todos
de aplicaciones Java EE.
los servicios definidos en el estándar Java EE.
Los contenedores están a su vez alojados en
● Servidores web: Contienen los servicios
servidores Java EE y se encargarán de
esenciales de Java EE (servlets y JSP).
redireccionar las peticiones a un objeto Servlet
en específico.
Java Standard Web Programming

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

Arquetipo de Maven Webapp


Maven-archetype-webapp es un arquetipo que genera un
proyecto de aplicación web.
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.

Recordemos que los proyectos están creados con


un arquetipo de Maven y a través del archivo MVNrepository.com
pom.xml podemos gestionar las librerías que Seleccionamos la versión, copiamos la dependencia
necesitamos. y la pegamos en el pom.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 8
Configuración
HTML5: Fundamentos
Apache TomCat Web
Java Standard Web Programming

Apache Tomcat en el IDE

Descargar la versión de Tomcat .zip compatible


con la versión de tu SO:

● Tomcat.apache.org

¡Instrucciones en las siguientes pantallas!


Java Standard Web Programming

Descomprimir el .zip en alguna carpeta a elección:


Java Standard Web Programming

En Eclipse, desde el menú, seleccionar


Window > Preferences > Add...
Java Standard Web Programming

Aparece una nueva ventana.

Seleccionar la carpeta Apache > Apache Tomcat


v9.0 > Siguiente.
Java Standard Web Programming

Aparecerá una ventana.

Seleccionar la carpeta donde se descomprimió


Apache > Finalizar.
Java Standard Web Programming

También se puede, desde la pestaña Server, seleccionar un


link que especifica que no hay servidores disponibles.
Hacer clic para crear un nuevo servidor.

Quedará disponible como se muestra a continuación:


Java Standard Web Programming

Ahora, es posible ejecutar un proyecto Java WEB


desde el IDE:
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 8 - Desafío
Java Standard Web Programming

Ejercicio 1: Formulario web


Primera parte

1. Crear un formulario Web que valide Usuario


y Contraseña:

a. Si el usuario valida sus credenciales de c. La lista permitida de usuarios es estática


forma correcta, mostrar un HTML que y es:
indique: Credenciales correctas.
Usuario Clave
De lo contrario: Credenciales incorrectas.
user1@educacionit.com user1.1234
b. El HTML debe ser generado desde el user2@educacionit.com user2.1235
Backend.
user3@educacionit.com user3.1236
Java Standard Web Programming

Ejercicio 2: Formulario web


Segunda parte

Basado en el ejercicio anterior, que valida las


credenciales de un usuario con correo y
contraseña, modificar:

1. Ya no se debe validar de una lista estática


sino de una base de datos.

2. Mostrar el mensaje de Credenciales


incorrectas en el mismo HTML del formulario.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 9
Java Server
HTML5: Pages (JSP)
Fundamentos Web
Java Standard Web Programming

Java Server Pages (JSP)


Un JSP se convierte en una clase Servlet y se
Es
Es la soluciónde
la solución deJava
Javaparaparael el desarrollo Web
desarrollo ejecuta en el servidor. El código de Java incluido
dinámico.
Web dinámico.Son Son
documentos
documentos queque
poseen
poseen en el documento JSP pasa a formar parte de esta
elementos (tags) HTML y, además,
elementos (tags) HTML y, además, la capacidadla de
nueva clase y genera una respuesta HTML del
capacidad de incluir
incluir fragmentos fragmentos
de código Java ade código
través de tags
lado del cliente.
Java a través
propios de estade tags propios
tecnología. Estosde esta
fragmentos de
códigos también
tecnología. Estosson llamados Scriptlets.
fragmentos de códigos Recordemos que los clientes Web (navegadores)
también son llamados Scriptlets. no ejecutan otro tipo de código que no sea HTML,
CSS y JavaScript
Java Standard Web Programming

Objetos Implícitos en JSP


JSP proporciona objetos implícitos en cada documento
para ser utilizados como sea necesario. Adicionalmente, se
pueden crear objetos propios o variables de forma explícita.

Declaración Descripción

request Objeto de la clase HttpServletRequest.

response Objeto de la clase HttpServletResponse.

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 “<% %>”.

Los elementos JSP que veremos en los siguientes slides, son:

● Comentarios.

● Expresiones.

● Scriptles.

● Declaraciones.

● Directivas.
<% %>
Java Standard Web Programming

Comentarios

Ayudan a saber más sobre el código.


Java Standard Web Programming

Expresiones

Se usan para enviar valores directamente


a la página web resultante del JSP.
Java Standard Web Programming

Scriptles

Sirven para usar cualquier bloque


o sentencia de Java.
Java Standard Web Programming

Declaraciones

Sirven para definir variables y métodos


que se utilizarán en scriptles y expresiones.
Java Standard Web Programming

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.

Tipo Método Descripción

Incluye el contenido de un fichero en la página


include <%@include file="cabecera.html" %>
mediante el atributo file.

taglib <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Importa bibliotecas de etiquetas (Tag Libraries).

Importa clases y paquetes Java para ser


page import <%@page import="java.util.Map"%>
utilizadas dentro del fichero JSP.

Especifica si utiliza los datos contenidos en


page session <%@page session="true"%>
sesión; por defecto "true".

Especifica la ruta de la página de error que será


page errorPage <%@page errorPage="error.jsp"%> invocada en caso de producirse una excepción
durante la ejecución de este fichero JSP.
Java Standard Web Programming

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).

Tipo Método Descripción

void forward(ServletRequest request, ServletResponse response) Reenvía una solicitud de un Servlet a otro recurso.

void include(ServletRequest request, ServletResponse response) Incluye el contenido de un recurso.


¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 9
Sesiones
HTML5: Fundamentos Web
Java Standard Web Programming

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.

Cada solicitud que se realiza y la respuesta que


se recibe, son totalmente independientes ya que
las peticiones HTTP carecen de estados, como
ya habíamos visto anteriormente.
Java Standard Web Programming

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

Tipo Método Descripción

Devuelve el objeto vinculado con el nombre especificado


Object getAttribute(String name)
en esta sesión de lo contrario devuelve null.

Devuelve un Enumeration que contiene los nombres de


Enumeration<String> getAttributeNames()
todos los objetos vinculados a esta sesión.

Devuelve una cadena que contiene el identificador único


String getId()
asignado a esta sesión.

Devuelve el intervalo de tiempo máximo, en segundos, que


int getMaxInactiveInterval() el contenedor de servlets mantendrá abierta esta sesión
entre accesos de clientes.

Invalida esta sesión y luego desvincula cualquier objeto


void invalidate()
vinculado a ella.

Vincula un objeto a esta sesión, utilizando el nombre


void setAttribute(String name, Object value)
especificado.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 9 - Laboratorio
Java Standard Web Programming

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.

● Realizar los laboratorios anteriores.


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.

2. Si el usuario ingresa los datos correctamente,


se debe mostrar la lista de empleados
administrativos en un JSP.

3. Debe ser posible cerrar la sesión y mostrar


el id de la sesión.

4. Indicar si las credenciales son incorrectas


y si se cerró la sesión de forma correcta.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 9 - Desafío
Java Standard Web Programming

Ejercicio 1: Formulario web


Tercera parte

El cliente requiere cambios a lo realizado en el


desafío del módulo anterior.

1. Crear una sesión para cada usuario que


ingrese con las credenciales correctas.

2. Se debe poder cerrar la sesión creada.

3. Si el usuario ya tiene una sesión, no debe


poder entrar al login y será redirigido al
panel de bienvenida.
Java Standard Web Programming

Ejercicio 2: Formulario Web


Cuarta parte

1. Si el usuario no tiene una sesión creada no


podrá entrar al panel de bienvenida y deberá
redirigirlo al login.

2. El usuario no podrá iniciar sesión en dos


navegadores diferentes al mismo tiempo.
Se deberá mostrar un mensaje que le indique
cerrar la sesión del otro navegador.
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
Java Standard
Web Programming
Módulo 10
Programación funcional
HTML5: Fundamentos Web
Java Standard Web Programming

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.

● La implementación del paradigma de


programación funcional.

8
Java Standard Web Programming

Paradigma funcional Entrada

Recordemos que un paradigma no es más que


una forma de resolver un problema planteado Entrada Parámetros
desde un enfoque diferente.

Este paradigma es declarativo, por lo que nos


enfocaremos en el qué y no en cómo se está
resolviendo el problema, es decir, expresaremos Proceso Función
nuestra lógica sin describir controles de flujo;
ciclos y/o condicionales.

La programación orientada objetos es imperativa


que no es más que determinar el control de flujo Salida Valor de Retorno
(Ciclos y Condicionales) de nuestro software.
Java Standard Web Programming

Interfaz funcional
Son aquellas interfaces que poseen si y solo
si un solo método abstracto (sin cuerpo).

Pueden poseer o no la notación


@FunctionalInterface, que previene que otro
desarrollador agregue más métodos abstractos
generando errores en tiempo de compilación.

Adicionalmente, pueden tener métodos por


defecto y estáticos sin restricciones.
Java Standard Web Programming

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:

● Cuando se tiene un solo parámetro no es ● Operador flecha (->) que separa la


necesario utilizar los paréntesis. declaración de parámetros de la declaración
del cuerpo de la función.
● Cuando no se tienen parámetros, o cuando se
tienen dos o más, es necesario usar
paréntesis.

● Está implícito el tipo de objeto que va a utilizar


por lo que no es necesario declararlo en el
parámetro.
Java Standard Web Programming

Cuerpo:

● Cuando el cuerpo de la expresión lambda


tiene una única línea no es necesario utilizar
las llaves y no se necesita especificar la
sentencia return en el caso de que se deban
devolver valores.

● Cuando el cuerpo de la expresión lambda


tiene más de una línea se hace necesario
utilizar las llaves y es necesario incluir la
sentencia return en el caso de que la función
deba devolver un valor.
Java Standard Web Programming

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.

En este ejemplo, cambiamos el comportamiento


al método para hacer las operaciones que
hicimos en el ejemplo imperativo y, de forma
adicional, comportamiento necesario para que
retorne el módulo. También podemos seguir
agregando sin problemas.
Java Standard Web Programming
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 10
Stream
HTML5: Fundamentos Web
Java Standard Web Programming

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.

También, provee una serie de métodos de orden


superior (funciones que reciben una o más
funciones y retornan otra función o un objeto).

Estas funciones ayudan a transformar, filtrar


y reducir una colección dada.
Java Standard Web Programming

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

Un Stream debe operarse (mediante la


invocación de una operación de secuencia
intermedia o terminal) solo una vez.
Java Standard Web Programming

Stream
La interfaz BaseStream provee un flujo de objetos
que permite el procesamiento paralelo BaseStream<T,Stream<T>>
y secuencial de dicho flujo.

La interfaz Stream provee los métodos


necesarios para hacer operaciones, aunque suele
ser confundida con una colección sabemos que
tienen objetivos muy diferentes. Las colecciones Stream<T>
proporcionan una manera eficaz de acceso y
modificación de datos y los flujos de operaciones.
Java Standard Web Programming

Métodos Stream

Tipo Método Descripción

Devuelve true si todos los elementos coinciden


boolean allMatch(Predicate<? super T> predicate)
con el predicado proporcionado.

Devuelve true si algún elemento coincide con el


boolean anyMatch(Predicate<? super T> predicate)
predicado proporcionado.

Realiza una operación de reducción en los


<R,A> R collect(Collector<? super T,A,R> collector)
elementos usando un Collector.

long count() Devuelve el recuento de elementos.

Devuelve un flujo que consta de los distintos


Stream<T> distinct()
elementos (Object.equals(Object))

static <T> Stream<T> empty() Devuelve true si está vacío el flujo.


Java Standard Web Programming

Métodos Stream (continuación):

Tipo Método Descripción

Devuelve un flujo que consta de los elementos


Stream<T> filter(Predicate<? super T> predicate)
que coinciden con el predicado dado.

Hace una acción para cada elemento de este


void forEach(Consumer<? super T> action)
flujo.

Devuelve un flujo que consta de los resultados


<R> Stream<R> map(Function<? super T,? extends R> mapper)
de aplicar la función dada a los elementos.

Devuelve un flujo ordenado secuencial, cuyos


static <T> Stream<T> of(T... values)
elementos son los valores especificados.

Realiza una reducción en los elementos, al


utilizar el valor de identidad proporcionado y una
T reduce(T identity, BinaryOperator<T> accumulator)
función de acumulación asociativa, y devuelve el
valor reducido.
Java Standard Web Programming

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

Para poder realizar este laboratorio,


se recomienda…

● Revisar contenidos previos.


Java Standard Web Programming

Ejercicio de SQL
Mejoras a los laboratorios del Módulo 6:

1. El método listar se debe sobrecargar y


debe esperar un parámetro que le indique si el
orden es como viene la información desde la
base de datos. Si no fuera así, se debe
ordenar por sueldo (debe ser en Java 8).
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Sigamos
trabajando!
Java Standard
Web Programming
Módulo 10 - Desafío
Java Standard Web Programming

Ejercicio 1: Formulario web


Quinta parte

1. Dada una lista de usuarios que contienen los


siguientes atributos: Id (autoincrementable),
correo, clave, fecha de creación y activo:

a. Filtrar los usuarios que estén activos


y cuya fecha de creación sea mayor al
2020-01-01.

b. Mostrar en mayúscula solamente los


correos electrónicos.
Java Standard Web Programming

Ejercicio 2: Formulario web


Sexta parte

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.

b. Crear una lista de los que no cumplieron


la premisa anterior.
Java Standard Web Programming

Referencia
Java Standard Web Programming

A continuación encontrarás su resolución para


que verifiques cómo te fue.
¡Terminaste el módulo!
Todo listo para rendir el examen
PERSISTENCIA DE OBJETOS
Qué es la persistencia
Definición
La persistencia es uno de los aspectos fundamentales en cualquier aplicación que trabaja con datos. Representa el acto de persistir
los datos en el tiempo.
Se utiliza normalmente para almacenar datos en una base de datos. En aplicaciones OO, persistencia significa persistir el estado del
objeto en el tiempo.

Bases de datos relacionales


Las base de datos relacionales son la forma por excelencia de almacenar datos. Son extremadamente flexibles y robustas para la
administración de datos. Los DBMS (DataBase Management Systems) poseen interfaces basadas en SQL para interactuar con los
datos.

SQL tiene como categorías a DDL y DML:

● 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.

Modelo Relacional vs. Modelo OO


Problemática
La problemática que se plantea es que los RDBMS (Relational DBMS) están basados en el modelo relacional, pero por su lado las
aplicaciones orientadas a objetos están basadas en el paradigma de objetos.

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.

Una tabla, una clase


La forma más sencilla de relacionar ambos modelos es tratar a cada clase en el modelo de objetos, como una tabla en el modelo
relacional. Si bien es la forma más sencilla de trabajar, se presentan varios problemas a tratar debido a las diferecias entre el
paradigma de objetos y el relacional.

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.

Suponiendo la siguiente definición de la tabla usuarios:

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.

3) El problema de las asociaciones


En el paradigma de objetos, las asociaciones representan la forma de relacionar objetos.

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).

En el modelo relacional, dichas asociaciones se presentan a través de las claves foráneas.

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:

1. Una API para realizar los ABMC en objetos de clases persistentes

2. Un lenguaje que permite realizar consultas referenciando a clases y atributos.

3. Una forma de especificar los mapeos entre meta-datos

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.

Todos los componentes de La ​API​ se encuentran definidos en el paquete javax.persistence.

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.

Algunas implementaciones de JPA son:

● 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).

La necesidad de una DAL (Data Access Layer)


Arquitectura multicapa (n-tier Architecture)
Es una forma de organizar un sistema. Cada capa está compuesta - generalmente - por un conjunto de clases que cooperan con un
objetivo en común. Cada capa le brinda servicios a la capa superior directa, no se realizan llamados entre capas “que no se ven”.

Una de las arquitecturas más utilizadas es la arquitectura 3 capas:

● 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.

Persigue las mismas características que los JavaBeans, es decir:

● Por lo general, es serializable, con lo cual implementa la interfaz (vacía) Serializable


● Posee atributos privados y métodos públicos de acceso
● Posee un constructor vacío, lo cual es obligatorio para trabajar con Hibernate

A continuación se presenta un ejemplo de un POJO:

[code]

public class Usuario implements Serializable {

private String nombre;

private String clave;

public Usuario(){

// Setters y getters

...
...

[/code]

Ventajas de una arquitectura Multi-Capa


Las ventajas de una arquitectura multi-capa son las siguientes:

● 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

INTRODUCCIÓN A UN PROYECTO CON


HIBERNATE
Configuración
Para configurar un proyecto con maven, es necesario agregarlo en el pom.xml de la siguiente manera:

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.

spring.datasource.username​ representa el usuario en la conexión a utilizar.

spring.datasource.password​ representa la contraseña en la conexión a utilizar.

spring.jpa.properties.hibernate.dialect representa el dialecto (el lenguaje) a utilizar. Es necesario determinarlo ya que la

implementación de SQL es distinta en cada uno de los DMBS propietarios. El dialecto depende directamente del DBMS.

spring.jpa.show-sql ​especifica si mostramos como hibernate genera cada query.

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.

Las opciones son:

● validate: valida el schema, no cambia la base de datos.


● update: cambia la base de datos.
● create: crea el schema, destruyendo datos anteriores.
● create-drop: igual que el anterior pero además dropea el schema cuando se cierra la aplicación.

spring.jpa.hibernate.naming-strategy ​permite definer una estrategia para los nombres de las tablas.

spring.jpa.hibernate.use-new-id-generator-mappings ​permite definer una estrategia para los nombres de


las claves primarias.
Hibernate/JPA Annotations
Qué son
Existen dos formas para realizar la transformación de información de un POJO a la base de datos y viceversa. Una es mediante
archivos XML y otra es con Annotations, cada una tiene sus pros y sus contras, sin embargo las Annotations son la forma más nueva
de realizar el mapeo de POJOs a la base de datos, en este curso utilizaremos la metodología de Annotations para la realización de
todos los ejercicios.

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.

El objeto Producto tendrà los siguientes atributos:

public class Producto {


private Integer id;
private String descripcion;
private Double precio;
private Date fechaAlta;

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.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.

Java Hibernate
Ejercicio 1
Iniciando con un ORM

1. Vamos a crear un nuevo proyecto con 3. También debemos crear la interfaz


maven y ajustar el pom para trabajar con Teléfono con la clase utilizada en el punto
dependencias mysql y opcionalmente dos (2).
spring boot.

2. Organizamos todo trabajando con el


patrón DAO, armamos el paquete dao,
para preparar la interfaces para Persona
que extienda de CrudRepository.

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.

3. Creamos una base de datos para trabajar


la persistencia.

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:

● One to Many / Many to One.


● One to One.
● Many to Many

One to Many / Many to One


En esta clase de relaciones existe una entidad que tiene como atributo una colección de entidades de otro tipo. A la entidad que posee
la colección se la conoce como extremo one. La entidad a la que pertenecen los elementos de la colección se la conoce como extremo
many. La entidad del extremo many se relacionará como máximo con una entidad del extremo one.

El siguiente ejemplo nos permite comprender cómo funcionan estas relaciones.


Ítem y Factura:

● Una Factura podrá tener N ítems (Extremo One).


● Cada Ítem pertenecerá como máximo a una Factura. (Extremo Many).

Las clases para este modelo serían:

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.

Empezamos con Item:

[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_cantidad"​)


p
​ rivate​ Long c​ antidad​;

​ Column​(name = "
@ ​ it_descripcion"​)
p​ rivate​ String n​ ombreProducto​;
}
[/code]

Este mapeo se lo conoce como mapeo unidireccional muchos a uno.


Observaciones:

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]

Esto indica que el atributo persistente es “factura” en la clase Item.


Con esto logramos que :

[code]
factura.getItems().add(item);
[/code]

Sea ignorado por la base de datos a la hora de persistir.

[code]
Item.setFactura(factura);
[/code]

Sería persistido en la base de datos, llegado el momento de persistir los cambios.

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]

Por defecto, el fetching es LAZY para colecciones y EAGER en casos onetomny.

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.

public class Persona {


private Integer id;
private String nombre;
private String apellido;
private int edad;
private List<Telefono> telefonos = new ArrayList<>();
private List<Domicilio> domicilios = new ArrayList<>();

public class Telefono {


private Integer id;
private String tipo;
private int numero;
private Persona persona;

public class Domicilio {


private Integer id;
private String calle;
private int numero;
Java Hibernate
Módulo 02 - Desafío

Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la 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.

2. Repetimos en proceso de añadir anota-


ciones esta vez en la clase Teléfono.

Java Hibernate
Ejercicio 2
Inyectando dependencias

1. Continuamos con el proyecto creado en el 3. Instanciamos las clases Persona y Teléfono


Ejercicio 1, dentro del paquete principal creando varios objetos para cargar dife-
trabajamos el la clase principal Main rentes datos a sus atributos.
implementando CommandLineRunner y
4. Utilizamos el método save de JPA para
agregando las anotaciones de los
agregar elementos a la base de datos.
componentes.
5. Verificamos crear de manera automática
2. Nos permitimos inyectar dependencias
nuestras entidades en la base de datos una
como @Autowired.
vez que estamos ejecutando el programa.

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.

Valores por parámetro


A veces resulta necesario construir consultas dinámicas con valores que se determinan en tiempo de ejecución. El objetivo es
establecer los valores de los parámetros a consultar a medida que son obtenidos.
Para esto, es necesario construir una consulta con marcas donde se reemplazan los valores.

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”.

Estos métodos son el setMaxResults() y el setFirstResult().

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.

El primer registro tiene el número cero.


Laboratorio #03 – Proyecto Integrador
Bajar el archivo jse-Lab-BASE.rar de las Descargas
Se trata de un proyecto realizado en Java con JDBC
Ud debe migrar este proyecto a una tecnologìa que contenga JPA/Hibernate
Realice todas las modificaciones necesarias para que este proyecto pueda ser ejecuta con SpringBoot y tecnologìa JPA

PLUS

Si le sobra tiempo realizar los siguientes querys:


Obtener producto mas caro
Obtener producto mas barato
Obtener promedio de precios de los productos
Obtener los 3 productos mas caros
Java Hibernate
Módulo 03 - Desafío

Java Hibernate
¿Qué son los desafíos?
● Son ejercicios complementarios a los realizados
en clase.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la clase.

Java Hibernate
Ejercicio 1
Desarrollando la persistencia y namedQueries

1. Vamos a crear un nuevo proyecto con maven y


spring boot, ajustar el pom.

2. Generar un archivo application.properties y


agregar todos los datos necesarios para
conectarnos a la base de datos, la cual también
debemos crear.

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.

4. Sumar constructores, toString, setters y getters.

5. Trabajar con anotaciones y crear diferentes queries


de búsqueda utilizando namedQuery.

Java Hibernate
Ejercicio 2
Practicando la persistencia

1. Continuamos con el proyecto creado en el ejercicio


anterior, creamos un nuevo paquete daos con dos
archivos: el primero, ClienteDAO, el cual extiende de
CrudRepository, el segundo ClienteImpl.

2. En el archivo ClienteImpl vamos a desarrollar el


contexto de persistencia trabajando con
EntityManager, Query y PersistenceContext. Crear
diferentes métodos de selección, por ejemplo, buscar
por nombre, contar cantidad de registros, etc.

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.

Una tabla por subclase


Representa la herencia a través de claves foráneas, ya que por cada subclase existe una tabla. Cada subclase, incluyendo clases
abstractas, tiene su propia tabla. Cada tabla contiene campos solo por cada atributo que no es heredado.

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.

Una tabla por jerarquía de clases


Se construye una tabla por cada jerarquía de clases, donde la tabla posee un campo por cada atributo de la jerarquía de clases.
Adicionalmente, se utiliza un campo de tipo discriminador (discriminator) para establecer qué tipo de clase corresponde a cada
registro.

Integra el concepto de polimorfismo y es la mejor estrategia en términos de performance y simplicidad.

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;

​// Constructors and Getter/Setter methods,


}
-----------------------------------------------------
@Entity
@Table(name="transportes")
@DiscriminatorValue("A")
public class Auto extends Transporte {

​@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.

● Permiten practicar y consolidar los conocimientos


adquiridos.

● Es recomendable que los realices antes de rendir el


examen de la 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

1. Seguimos con el proyecto creado en el 2. En la clase principal implementamos el


Ejercicio 1, ahora armamos la clase CommandLineRunner, agregamos
Empleado dentro del paquete herencia. anotaciones e instanciamos a Persona y
Este será una subclase de Persona y Empleado para generar distintos objetos.
adicionalmente sumaremos sus propios
atributos con sus respectivos métodos
setters y getters.

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

También podría gustarte