Cursosā€Ž > ā€ŽCursadas Anterioresā€Ž > ā€Ž2019ā€Ž > ā€ŽNoc-Juevesā€Ž > ā€Ž

BitƔcora de clase - Jueves Noche 2019

AcÔ van a encontrar información relacionada con los temas vistos, ejercitación y trabajos prÔcticos.

Clases 24 y 25 - Herencia vs Composición

publicado a laā€Ž(s)ā€Ž 17 oct 2019 21:46 por Mariana Matos Ā  [ actualizado el 17 oct 2019 21:47]

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

  • De la sección de apuntes:Ā 
    • Módulo 13: Herencia. Self, super. Redefinición.
    • Módulo 16, donde se explican las distintas decisiones de diseƱo tomadas para resolver un problema complejo donde se usan tanto herencia como composición en la solución final. Este apunte menciona algunos patrones de diseƱo que se terminaron aplicando, que es algo ya entra dentro del terreno de la materia DiseƱo de Sistemas. Una gran parte de los patrones de diseƱo en objetos se basan fuerte en herencia o composición, por eso es importante que se vayan de esta materia con una base sólida en estos temas.

Clase 22 - Bloques y Colecciones

publicado a laā€Ž(s)ā€Ž 27 sept 2019 5:48 por Mariana Matos

En esta clase vimos dos tipos de objetos muy Ćŗtiles:

  • Bloques
  • Colecciones
    • Vimos que en Wollok existen dos tipos de colecciones: las listas y los sets. Es comĆŗn que cada lenguaje defina distintos tipos de colecciones para poder elegir cuĆ”l usar en base a la necesidad para cada problema.
    • TambiĆ©n vimos algunos de los mensajes que entienden las colecciones de Wollok. Algunos eran muy similares a los que ya conocĆ­amos de Haskell, otros directamente no estaban en Haskell porque estĆ”n pensados para trabajar con efecto colateral.

Para profundizar y ejercitar

  • De la sección de apuntes: el módulo 4 explica quĆ© son y cómo se usan los bloques y las colecciones (sets y listas) en Wollok.
  • De Mumuki: las lecciones 6, 7 y 8 cubren estos temas. AdemĆ”s con esto se desbloquea el resto de la lección de clases e instancias :)

Clase 21 - Clases

publicado a laā€Ž(s)ā€Ž 20 sept 2019 9:43 por Mariana Matos

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 ejercitar

Tanto Mumuki como los apuntes postergan un poco mÔs la introducción del concepto de clase, pero igualmente pueden usar el material disponible.

  • De la sección de apuntes: los módulos 7, 8 y 9 explican todo lo que vimos en la clase de ayer.
  • De Mumuki, pueden trabajar con los primeros 8 ejercicios de la guĆ­a 10 (Clases e instancias).

Clases 19 y 20 - Intro a objetos

publicado a laā€Ž(s)ā€Ž 13 sept 2019 9:25 por Mariana Matos

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

  • De la sección de apuntes: los primeros 3 módulos cubren los temas que vimos en la primera clase y ademĆ”s pueden leer sobre testing en el módulo 5.
  • De Mumuki, las primeras 3 guĆ­as cubren los temas de esta clase. Alternativamente, tambiĆ©n hay una nueva guĆ­a luego de esas 3 que resume esos los temas de las primeras 2 con otro enfoque. TambiĆ©n pueden practicar con la guĆ­a 5.

Clase 16 - Listas

publicado a laā€Ž(s)ā€Ž 16 ago 2019 14:11 por Mariana Matos

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

  • length/2
  • sumlist/2
  • member/2
  • y findall/3 que es un predicado de orden superior.

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

  • De la sección de apuntes:
    • En el Módulo 3 sobre individuos compuestos se explica listas mĆ”s en profundidad de lo que llegamos a ver, incluyendo otros predicados para trabajar con listas sencillos pero menos cotidianos.
    • En el Módulo 4 sobre predicados de orden superior se explica el predicado findall/3.
    • En el Módulo 5 sobre recursividad se termina de explicar este tema para cuando las otras herramientas se quedan cortas.
    • En el Módulo 6, en la sección de Code Smells, pueden encontrar una versión extendida con ejemplos concretos de los Donny, no!.
  • De Mumuki pueden trabajar con todas las guĆ­as, ya que terminamos de ver todo el contenido teórico que tenĆ­amos planeado para este paradigma.

Clase 14 - Functores y Polimorfismo

publicado a laā€Ž(s)ā€Ž 12 jul 2019 6:41 por Mariana Matos

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

  • De Mumuki pueden trabajar con las guĆ­as de Functores.
  • De la sección de apuntes: en el Módulo 3 se explica functores y polimorfismo, pero en el medio tambiĆ©n se explican las listas que preferimos no introducir aĆŗn. Pueden complementar lo visto con ese apunte, pero tal vez convenga postergarlo para evitar confusiones.

Clase 13 - Lógica de Primer Orden

publicado a laā€Ž(s)ā€Ž 6 jul 2019 5:32 por Mariana Matos Ā  [ actualizado el 6 jul 2019 5:34]

En esta clase introdujimos los predicados deĀ orden superior:

  • not/1Ā para la negación
  • forall/2Ā para el cuantificador universal (para todo)

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

  • De laĀ sección de apuntes: Módulo 4 de Lógico hasta sección 4 inclusive.
  • De Mumuki pueden trabajar con las guĆ­as de negación y cuantificación.

Clase 12 - Introducción al Paradigma Lógico

publicado a laā€Ž(s)ā€Ž 1 jul 2019 5:34 por Mariana Matos

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

  • De la sección de apuntes: Módulos 1 y 2 de Lógico.
  • De Mumuki pueden trabajar con las primeras dos guĆ­as.

Clase 9 - Estrategias de Evaluación. Listas infinitas. Typeclasses.

publicado a laā€Ž(s)ā€Ž 31 may 2019 6:08 por Mariana Matos

En esta clase estuvimos viendo los siguientes temas:

Para profundizar estos temas:
  • De la sección de apuntes: Módulos 4 y 7 de funcional.
  • De Mumuki:
    • PrĆ”ctica Evaluación Diferida, donde van a encontrar ejercicios puntuales donde se aprovecha esto, asĆ­ como ver cómo usar algunas funciones que ya vienen en Haskell que tienen en la guĆ­a de lenguajes bajo el tĆ­tulo Funciones de generación de listas.
    • Sobre tipado estĆ”n las lecciones 3, 4 y 9.

Clase 6 - Listas, Recursividad vs. Orden Superior

publicado a laā€Ž(s)ā€Ž 3 may 2019 7:04 por Mariana Matos

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:

  • map :: (a -> b) -> [a] -> [b]
  • filter :: (a -> Bool) -> [a] -> [a]
  • all :: (a -> Bool) -> [a] -> Bool
  • any :: (a -> Bool) -> [a] -> Bool

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:

  • La recursividad es una gran herramienta cuando el problema tiene naturaleza recursiva (como el ejemplo del factorial), en cuyo caso la solución a la que lleguemos recursivamente a priori no va a ser criticable en tĆ©rminos de declaratividad.
  • La recursividad trabajando con listas a veces simplemente es necesaria, porque el problema no se ajusta bien al algoritmo de recorrido estĆ”ndar que viene resuelto con las funciones de orden superior que ya existen.

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

  • De la sección de apuntes: Módulos 5 y 6 de funcional.
  • De Mumuki, con lo que vimos ya podrĆ­an hacer todas las guĆ­as, pero en particular estas guĆ­as sirven como prĆ”ctica de los temas vistos en esta clase:
    • PrĆ”ctica de Listas
    • PrĆ”ctica Recursividad
    • PrĆ”ctica de Aplicación Parcial y Orden Superior