Los temas abordados en esta clase son:
También pueden complementar con el apunte introductorio de la materia.
En esta clase arrancamos con el paradigma funcional, para el cual usaremos el lenguaje Haskell, y se abordan los siguientes temas:
Cumplen con unicidad y existencia, esto nos permite asegurar que luego de aplicar una función obtendremos siempre un único valor.
Tienen transparencia referencial
Las variables son incógnitas como las de matemática, no pensarlas como posiciones de memoria, no se pueden asignar.
Su principal operación: la aplicación.
Introducción a Tipado:
Tipos de datos simples (Int, Float, Bool, ...).
Entender de qué tipo son las funciones, en base al tipo de su dominio y de su imagen.
Tipos genéricos (variable de tipo) y noción de de Typeclass
También se puede ampliar con el Módulo 1 de funcional (todo menos guardas) y en la sección "Clasificando tipos" del Módulo 7 se explica más sobre Typeclasses (obviar los tipos compuestos, tuplas y listas, que veremos más adelante).
En esta clase se abarcan los siguientes temas:
También se puede ampliar sobre data, tuplas y type alias con el Módulo 3 de funcional, y sobre guardas en el Módulo 1 de funcional.
En esta clase se abordan los siguientes temas:
También se puede ampliar sobre estos temas con el Módulo 2 de funcional.
En esta clase se ven los siguientes temas:
Con pattern matching y recursividad
Con funciones de orden superior (any, all, map, filter y fold)
También se puede ampliar sobre estos temas con el Módulo 5 y Módulo 6 de funcional.
En esta clase resolvemos la práctica LambdaProp haciendo foco en orden superior, composición y aplicación parcial.
En esta clase resolvemos la práctica Pociones haciendo foco en orden superior, composición y aplicación parcial, al igual que la semana pasada, y en cuestiones de modelado con funciones e inmutabilidad.
En esta última clase teórica de funcional hablamos sobre Estrategias de Evaluación:
Evaluación Ansiosa vs. Evaluación Perezosa
Listas infinitas
También se puede ampliar sobre estos temas con el Módulo 4 de funcional.
En esta clase resolvemos la última práctica integradora de funcional: Gimnasio.
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. Por ahora trabajamos sólo con individuos simples (átomos y números).
Uno de los temas que se introducen 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...
También se puede ampliar sobre estos temas con el Módulo 1 y el Módulo 2 de lógico.
En esta clase introducimos los predicados de orden superior:
Con esto se cubre todo lo relacionado a 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.
Ambos predicados tienen problemas de inversibilidad, con lo cual hay que tomar ciertos recaudos al usarlos para que nuestros predicados sean inversibles.
También se puede ampliar sobre estos temas con el Módulo 4 de Lógico (hasta sección 4 inclusive).
En esta clase resolvemo la práctica: TEG
En esta clase incorporamos un nuevo tipo de individuo, que tiene la particularidad de ser un individuo compuesto: el functor.
Un concepto importante que surge gracias a estos simpáticos individuos es el polimorfismo.
También se puede ampliar sobre estos temas con el Módulo 3 de Lógico (pero guarda que en el medio también se explican las listas que preferimos no introducir aún).
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.
Vemos cómo se puede hacer para trabajar con listas recursivamente usando pattern matching, y también los principales predicados que ya vienen para trabajar con listas más cómodamente, como length/2, member/2 y sumlist/2. También introducimos un nuevo predicado de orden superior: findall/3.
Se puede ampliar sobre estos temas con el Módulo 3, el Módulo 4 y el Módulo 5 de Lógico.
En esta clase resolvemos la práctica La Cárcel.
En esta clase resolvemos la práctica Festivales de Rock.
En esta clase arrancamos con un nuevo paradigma, y eso implica replantearnos todo lo que ya sabemos. Nos volvemos 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 la clase abordamos 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 -> 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.
Se puede ampliar sobre estos temas con el Módulo 1, Módulo 2 y Módulo 3 de objetos.
En esta clase resolvemos la práctica La Feria.
En esta clase incorporamos una nueva herramienta de modelado: las clases, y vemos cómo podemos hacer para instanciar objetos a partir de una misma clase.
Se puede ampliar sobre estos temas con los el Módulo 8 y Módulo 9 de objetos.
En esta clase vemos cómo trabajar con colecciones en Wollok. Además introducimos el concepto de bloque, que nos ayuda a parametrizar algo para hacer. Próximamente le estaremos dando un uso más intensivo.
Se puede ampliar sobre estos temas con el Módulo 4 de objetos.
En esta clase vemos el modelo de herencia simple que es el que se usa en Wollok así como la mayoría de los lenguajes orientados a objetos como mecanismo de subtipado, y cómo trabaja el method lookup para encontrar el método a ejecutar luego de un envío de mensaje.
Se puede ampliar sobre estos temas con el Módulo 13 de objetos.
En esta clase resolvemos la práctica Por la horda! haciendo foco en las decisiones de modelado, particularmente relativas al uso de herencia o composición.
En esta clase hablamos sobre excepciones, cómo usarlas, cuándo usarlas y qué hacer al respecto cuando ocurren.
El manejo de errores no es algo propio del paradigma de objetos, sin embargo forma parte de las herramientas básicas que ofrecen los lenguajes que se basan en él.
Se puede ampliar sobre estos temas con el Módulo 10 de objetos.
En esta clase resolvemos la práctica integradora de Monetización.
En esta clase resolvemos la práctica integradora de Computadoras.