--- 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/ ------- ![Índice TIOBE - Octubre 2020](tiobe.png "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)