AcÔ van a encontrar información relacionada con los temas vistos, ejercitación y trabajos prÔcticos. |
BitƔcora de clase - Jueves Noche 2019
Clases 24 y 25 - Herencia vs Composición
En estas clases incorporamos el concepto de herencia a nuestras herramientas para modelar un problema en objetos, analizando sus puntos fuertes asà como también sus limitaciones, las cuales en general se pueden superar planteando un modelo distinto usando composición. Para profundizar
|
Clase 22 - Bloques y Colecciones
En esta clase vimos dos tipos de objetos muy Ćŗtiles:
Para profundizar y ejercitar
|
Clase 21 - Clases
En esta clase incorporamos una nueva herramienta de modelado: las clases, y vimos cómo podemos hacer para instanciar objetos a partir de una misma clase. Para profundizar y ejercitarTanto Mumuki como los apuntes postergan un poco mÔs la introducción del concepto de clase, pero igualmente pueden usar el material disponible.
|
Clases 19 y 20 - Intro a objetos
Arrancamos con un nuevo paradigma, y eso implica replantearnos todo lo que ya sabemos. Nos volvimos a preguntar quƩ es un programa, esta vez en el Paradigma Orientado a Objetos y la respuesta esta vez estƔ basada en dos ideas: objetos y mensajes. A lo largo de las primeras 2 clases tocamos los siguientes temas:
Para este paradigma vamos a estar trabajando con Wollok. En esa pĆ”gina van a encontrar todo el material que necesiten para complementar lo que vemos en clase, asĆ como la forma de instalar el entorno. En la sección Documentación -> Apuntes van a encontrar los mismos módulos que estĆ”n en la pĆ”gina de la cĆ”tedra, y en Documentación -> Explicación de Conceptos van a encontrar una guĆa rĆ”pida de cómo se usan los distintos elementos del lenguaje. AdemĆ”s pueden encontrar ejercicios resueltos en la sección Ejemplos, y en la sección Tour les van a dar un paseo por las herramientas para que descubran cómo sacarle el jugo al IDE. Para profundizar y ejercitar
|
Clase 16 - Listas
En esta clase cerramos los temas del paradigma lógico viendo cómo se trabaja con otro tipo de individuo compuesto que son las listas. Vimos cómo se puede hacer para trabajar con listas recursivamente usando pattern matching, y tambiĆ©n algunos predicados que ya vienen para trabajar con listas mĆ”s cómodamente (hay mĆ”s en la guĆa de lenguajes que pueden ser de utilidad tambiĆ©n):
Importante! No olviden que la mayorĆa de los problemas ya los podĆamos resolver sin listas, de forma declarativa. Para no caer en la tentación, les dejamos Los Donny, no! para el uso responsable de findall. Para profundizar y ejercitar
|
Clase 14 - Functores y Polimorfismo
En esta clase incorporamos un nuevo tipo de individuo, que tiene laparticularidad de ser un individuo compuesto: el functor. Un concepto importante que surgió gracias a estos simpÔticos individuos fue polimorfismo. Para profundizar y ejercitar
|
Clase 13 - Lógica de Primer Orden
En esta clase introdujimos los predicados de orden superior:De esa forma cubrimos todo lo relacionado con existencia (no hace falta usar ningún predicado especial para esto), no existencia y para todo, que es lo que nos faltaba para poder trabajar con lógica de primer orden. También vimos que ambos predicados tienen problemas de inversibilidad, con lo cual hay que tomar ciertos recaudos al usarlos para que nuestros predicados sean inversibles. En general alcanza con que los parÔmetros de nuestros predicados lleguen unificados al consultar not/1 y forall/2, lo cual se logra consultando un predicado inversible previamente en nuestra regla que se encargue de unificar esas variables. Para profundizar y ejercitar
|
Clase 12 - Introducción al Paradigma Lógico
En esta clase arrancamos con el Paradigma Lógico de la mano del lenguaje Prolog. AcÔ pueden encontrar una introducción al paradigma que sienta las bases de cómo trabajar, y cómo se resuelven con estas herramientas bÔsicas la conjunción y disyunción. Hasta ahora trabajamos sólo con individuos simples. Uno de los temas que introdujimos en esta clase es uno de los puntos fuertes de este paradigma y es el concepto de inversibilidad, lo cual permite hacer consultas con múltiples respuestas. Profundizaremos mÔs adelante el tema de inversibilidad. Resumen de nomenclatura <-- Repasar esto si no recordÔs a qué nos referimos al decir predicado, hecho, regla, clÔusula, aridad, consulta, individuo, Ôtomo... Para profundizar y ejercitar
|
Clase 9 - Estrategias de Evaluación. Listas infinitas. Typeclasses.
En esta clase estuvimos viendo los siguientes temas:
Para profundizar estos temas:
|
Clase 6 - Listas, Recursividad vs. Orden Superior
En esta clase recordamos la idea de recursividad como mecanismo alternativo a la iteración usando estructuras de control como el for y el while que conocen de algoritmos, esta vez para trabajar un nuevo tipo de dato compuesto, cuya naturaleza en Haskell es recursiva, que son las listas. TambiĆ©n vimos uno de los conceptos mĆ”s fuertes de la materia, sobre el cual vamos a volver una y otra vez a lo largo del aƱo, que es Orden Superior. En particular vimos esta idea para trabajar con listas, porque si bien se puede hacer todo con pattern matching y recursividad, podemos llegar a soluciones mucho mejores evitando esta mecĆ”nica. Sin embargo es importante entender que orden superior puede aplicarse en cualquier contexto, por ejemplo la composición no es mĆ”s que una función de orden superior super genĆ©rica y sencilla! (.) :: (b -> c) -> (a -> b) -> (a -> c)(.) g f x = g (f x) Ahora que incorporamos el uso y definición de funciones de orden superior a nuestras herramientas para trabajar, vamos a poder armar abstracciones todavĆa mĆ”s poderosas, pudiendo parametrizar parte de la lógica a ejecutar. En los lenguajes funcionales esto normalmente es sencillo, gracias a que las funciones son ciudadanos de primera clase. Entre las funciones de orden superior para trabajar con listas que vimos en esta clase estĆ”n:
Si bien vimos cómo se pueden definir estas funciones y otras para trabajar con listas usando recursividad, al trabajar con listas debemos recordar lo que hablamos la primer clase sobre declaratividad. En general, para trabajar con listas, vamos a preferir siempre las soluciones que usen 1 o mÔs funciones de orden superior adecuadas para el problema a resolver por sobre soluciones recursivas, ya que las primeras son mÔs declarativas que las segundas. Con esto no queremos decir que nunca vayan a usar recursividad:
Luego de esta clase ya casi vimos todos los temas de este paradigma, nos falta revelar un par de misterios mÔs que tenemos bajo la manga. Pero lo que falta sobre todo es prÔctica, mucha, para terminar de dominar las herramientas asà como incorporar algunas nociones mÔs de diseño. Para profundizar y ejercitar
|