---
title:
- Curso de Java - SQL - Java Web
author:
- Blautzik - Gasior - Videla
theme:
- metropolis
date: Octubre-Diciembre de 2020
---
PRESENTACIÓN DEL CURSO
---
# Descripción general del curso
1. Programación Orientada a Objetos
1. Resolución de Problemas
1. Herramientas del Lenguaje Java
1. Conocimiento y Desarrollo de Algoritmos
1. Armado de un Proyecto
1. Uso de Ansi SQL
2. Java para la Web
-------
# Metodología
1. Utilizaremos un campus virtual: `loom.wecode.io`
2. Se registrará su progreso en dicho campus
3. Habrá ejercitación y tareas para trabajar en los días que no haya cursada
4. Utilizaremos moodle
5. Habrá una evaluación formal al finalizar cada tramo (Java, SQL, Java Web)
-------
# Calendario tentativo
## Semana 1: Java/POO
* Repaso de conceptos de programación. Planteo del paradigma de orientación a objetos. Ventajas y desventajas. Mención de otros paradigmas.
* Pilares de la programación orientada a objetos. POJOs (plain old java objects). Getters y setters
* Constructores
* Encapsulamiento
## Semana 2: Java/POO + Java/Diseño
* Responsabilidades e incumbencias de los objetos. Coherencia y cohesión en el armado de clases.
* Herencia. Polimorfismo.
* Interfaces y clases abstractas.
* Responsabilidades e incumbencias de los objetos. Coherencia y cohesión en el armado de clases.
* Modelado con objetos.
-------
# Calendario tentativo
## Semana 3: Problemas y algoritmos
* Diseño outside-in.
* Resolución guiada por consignas para trabajo en clase.
* Herramientas del lenguaje. Excepciones. Colecciones.
* Conceptos de pruebas de software.
* Búsqueda de máximos/mínimos.
## Semana 4: Algoritmos y práctica
* Búsqueda secuencial. Algoritmos de ordenamiento elementales.
* Problemas sobre la base de estos algoritmos.
* Lectura y análisis de la consigna. Planteo en equipos y conjunto de la solución con objetos.
* Diseño. Especificación de la solución. Programación.
* Pruebas. Refinamiento
-------
# Calendario tentativo
## Semana 5: Demo y SQL
* Demostración.
* Definiciones y estructura de un SGBD
* select, from
* group by
* order by
## Semana 6: SQL
* insert
* delete, update
* joins, exists, limit
* Integridad referencial, índices
* Mejoras de performance. Problemas reales acotados
-------
# Calendario tentativo
## Semana 7: Web/HTML+CSS
* Análisis desde los conocimientos preexistentes, en función de su uso de la web.
* Conceptos básicos del templating.
* Elementos. Sintaxis.
* Nociones de look and feel.
## Semana 8: Web/Javascript + Java Web
* Conceptos básicos del lenguaje. Utilidades principales para el desarrollo web.
* Conceptos básicos del lenguaje. Utilidades principales para el desarrollo web.
* Conceptos básicos del lenguaje. Utilidades principales para el desarrollo web.
* Introducción al paradigma WEB. Protocolo HTTP. Stateless. Sesión. Request.
* Conceptos básicos del patrón MVC. Arquitectura. Responsabilidades. Incumbencias.
-------
# Calendario tentativo
## Semana 9: Java Web
* Ejemplos básicos. Ejemplos más complejos.
* JSP/Thymeleaf. Adaptar los HTML generados a un formato interpolado.
* Introducción al paradigma ORM. Adaptación de los conocimientos.
## Semana 10: Proyecto final
* Presentación
* Demostración
-------
PRIMERA PARTE
-------
Ejercicio 00. Diagnóstico (trabajo por pares)
-------
# ¿Por qué Java?
1. Es el lenguaje más utilizado en el mundo https://www.tiobe.com/tiobe-index/
-------

-----------
# ¿Por qué Java?
1. Es uno de los lenguajes más utilizados en el mundo ([índice TIOBE](https://www.tiobe.com/tiobe-index/))
2. Principalmente es un lenguaje Orientado a Objetos
3. Portátil (aunque esta característica deja de ser relevante)
4. Excelente desempeño y escalabilidad
5. Amplio soporte para la seguridad
---------
# Hola, mundo!
```java
public class App {
public static void main(String[] args) {
System.out.println("Hola, mundo!");
}
}
```
----------
# Programación Orientada a Objetos
- ¿Qué es?
- Paradigmas
* Imperativo
* Funcional
* Lógico
- Pilares
1. Encapsulamiento
2. Herencia
3. Polimorfismo
----------
Ejercicio 01. Cuentas Bancarias. Capítulo I
----------
# Encapsulamiento
1. Concepto
2. Diferencia con "ocultamiento de la información"
3. ¿Para qué sirve?
----------
Ejercicio 02. Cuentas Bancarias. Capítulo II
----------
# Colaboración
1. Programación sobre interfaces
2. Responsabilidades y límites
3. Sobrecarga
4. Conceptos de Diseño Orientado a Objetos
----------
Ejercicio 03. Cuentas Bancarias. Capítulo III
----------
Tarea: Leer "JUnit Cookbook"
https://junit.org/junit4/cookbook.html
----------
# Herencia
1. ¿Qué es?
2. ¿Qué NO es?
3. Ventajas y deventajas
4. Reutilización vs. acoplamiento
----------
# Herencia en Java
```java
class A { /* ... */ }
class B extends A { /* ... */ }
```
----------
# Conceptos relacionados con la Herencia
1. Sobreescritura
2. Modificación de comportamiento
3. Extensión de comportamiento
4. NO DEBE rechazar comportamiento
----------
Ejercicio 04. Cuentas Bancarias. Capítulo IV
----------
# Polimorfismo
1. Concepto
2. Polimorfismo de tipos
3. Polimorfismo de comportamiento
----------
# Polimorfismo en Java (I)
```java
void saludar(Persona persona) {
persona.saludar();
}
//...
saludar(new Estudiante());
saludar(new Profesor());
```
----------
# Polimorfismo en Java (II)
```java
for(Persona persona : listaDePersonas) {
persona.saludar();
}
```
----------
# Para pensar...
Sea...
```java
class A { /* ... */ }
class B extends A { /* ... */ }
```
¿Son válidas?
```java
A v1 = new A();
B v2 = new B();
A v3 = new B();
B v4 = new A();
```
----------
Ejercicio 05. Cuentas Bancarias. Capítulo V
----------
Tarea 1: Tarea de revisión por pares
Tarea 2: FlashCards
----------
FIN (por ahora)