Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc5111 [2013/08/07 22:22] – etanter | teaching:cc5111 [2015/12/10 19:46] (current) – etanter |
---|
<tr> | <tr> |
<td><b>Profesor de cátedra</b>: Éric Tanter</td> | <td><b>Profesor de cátedra</b>: Éric Tanter</td> |
<td><b>Estreno:</b> 2013/2</td> | <td><b>Semestre:</b> 2016/1</td> |
</tr> | </tr> |
<tr> | <tr> |
<td><b>Profesor auxiliar</b>: Mario Cornejo</td> | <td><b>Profesor auxiliar</b>: Matías Toro</td> |
<td><b>Horario:</b> 2.4-3.4 <b>(tentativo)</b></td> | <td><b>Horario:</b> 1.4-5.3 </td> |
</tr> | </tr> |
</table> | </table> |
Scala se puede ver como el fruto del **matrimonio de Java y Haskell**, con unos toques de Racket, Erlang, y Clojure, con múltiples mejoras. Java, por la programación con objetos, el ambiente de ejecución (JVM), y la interoperabilidad. Haskell, por la programación funcional, la sintaxis elegante, el pattern matching, el sistema de tipos muy expresivo con inferencia, y el soporte ligero para evaluación perezosa y estructuras infinitas. Racket, por las continuaciones y las macros. Erlang y Clojure, por la simplicidad del paralelismo y de la concurrencia. Las mejoras más notables incluyen //traits// para mejor reuso y modularidad, el uso del mismo concepto de objeto desde la granularidad más fina hasta modulos enteros, y un extenso soporte para reflexión. | Scala se puede ver como el fruto del **matrimonio de Java y Haskell**, con unos toques de Racket, Erlang, y Clojure, con múltiples mejoras. Java, por la programación con objetos, el ambiente de ejecución (JVM), y la interoperabilidad. Haskell, por la programación funcional, la sintaxis elegante, el pattern matching, el sistema de tipos muy expresivo con inferencia, y el soporte ligero para evaluación perezosa y estructuras infinitas. Racket, por las continuaciones y las macros. Erlang y Clojure, por la simplicidad del paralelismo y de la concurrencia. Las mejoras más notables incluyen //traits// para mejor reuso y modularidad, el uso del mismo concepto de objeto desde la granularidad más fina hasta modulos enteros, y un extenso soporte para reflexión. |
| |
El resultado es una alta productividad, con programas de tamaño generalmente muy reducido en comparación con aplicaciones Java equivalentes, y una gran robustez debido al sistema de tipos. Muchas empresas que dependen de Java por su negocio han adoptado Scala progresivamente para aumentar su productividad, escalabilidad y confiabilidad, y esta tendencia se está [[http://redmonk.com/sogrady/2013/02/28/language-rankings-1-13/|reforzando]]. Grandes actores industriales---**empresas tecnológicas emergentes (Twitter, LinkedIn, VMWare) y tradicionales (Siemens, Novell, Sony), empresas del sector financiero (Morgan Stanley, Credit Suisse, UBS, HSBC), etc.**---han adoptado Scala para soluciones de concurrencia y mensajería, manejo de bases de datos, aplicaciones web y cloud, entre otros. Notablemente, Twitter contribuye directamente a la comunidad Scala con varios [[http://twitter.github.io/scala_school/|documentos]] [[http://twitter.github.io/effectivescala/|pedagógicos]]. | El resultado es una alta productividad, con programas de tamaño generalmente muy reducido en comparación con aplicaciones Java equivalentes, y una gran robustez debido al sistema de tipos. Muchas empresas que dependen de Java por su negocio han adoptado Scala progresivamente para aumentar su productividad, escalabilidad y confiabilidad, y esta tendencia se está [[http://redmonk.com/sogrady/2015/07/01/language-rankings-6-15/|reforzando]]. Grandes actores industriales---**empresas tecnológicas emergentes (Twitter, LinkedIn, VMWare) y tradicionales (Siemens, Novell, Sony), empresas del sector financiero (Morgan Stanley, Credit Suisse, UBS, HSBC), etc.**---han adoptado Scala para soluciones de concurrencia y mensajería, manejo de bases de datos, aplicaciones web y cloud, entre otros. Notablemente, Twitter contribuye directamente a la comunidad Scala con varios [[http://twitter.github.io/scala_school/|documentos]] [[http://twitter.github.io/effectivescala/|pedagógicos]]. |
| |
**Al combinar lo mejor de la programación orientada a objetos y de la programación funcional con un sistema de tipos avanzado, Scala es un lenguaje altamente expresivo y flexible.** Permite que desarrolladores de bibliotecas usen abstracciones muy sofisticadas, para que los usuarios de estas bibliotecas puedan expresarse en forma simple e intuitiva. En consecuencia, programas escritos en Scala pueden parecer muy simples o muy complejos, según el tipo de código que se considera. | **Al combinar lo mejor de la programación orientada a objetos y de la programación funcional con un sistema de tipos avanzado, Scala es un lenguaje altamente expresivo y flexible.** Permite que desarrolladores de bibliotecas usen abstracciones muy sofisticadas, para que los usuarios de estas bibliotecas puedan expresarse en forma simple e intuitiva. En consecuencia, programas escritos en Scala pueden parecer muy simples o muy complejos, según el tipo de código que se considera. |
| |
**El curso entrega las herramientas necesarias para ser efectivo en el desarrollo de software en Scala, tanto para desarrollar aplicaciones como para desarrollar bibliotecas robustas.** Esto implica el estudio de varios conceptos y mecanismos avanzados de programación, poniéndolos en su contexto científico y práctico. Así mismo, el curso expone ciertos mecanismos de Scala en relación con sus realizaciones en otros lenguajes. | **El curso entrega las herramientas necesarias para ser efectivo en el desarrollo de software en Scala, tanto para desarrollar aplicaciones como para desarrollar bibliotecas robustas.** Esto implica el estudio de varios conceptos y mecanismos avanzados de programación, poniéndolos en su contexto científico y práctico. Así mismo, el curso expone ciertos mecanismos de Scala en relación con sus realizaciones en otros lenguajes. |
| |
| ** Se alternarán clases expositivas orientadas a los conceptos de programación en Scala, y clases tutoriales enfocadas al uso de las herramientas más usadas en la industria** ([[https://www.playframework.com/|Play]] para programación Web, [[http://akka.io/|Akka]] para programación reactiva, [[http://www.scala-js.org/|Scala.js]] para clientes Web, [[http://slick.typesafe.com/|Slick]] para bases de datos, [[https://etorreborre.github.io/specs2/|specs2]] para testing). |
| |
| |
| |
**Tópicos:** | **Tópicos:** |
* clases, objetos, tipos y operaciones básicas | * programación funcional: //funciones de primera clase, pattern matching, clases de casos, TCO, pereza, monadas// |
* funciones y abstracciones de control | * programación por objetos: //objetos, clases y traits// |
* herencia y traits | * colecciones: //colecciones mutables e inmutables, iteradores, streams// |
* clases de casos, pattern matching y extensibilidad | |
* colecciones: //colecciones mutables e immutables, iteradores, streams y vistas perezosas// | |
* tipos básicos: //generics, inferencia, conversiones implícitas// | * tipos básicos: //generics, inferencia, conversiones implícitas// |
* tipos avanzados: //miembros de tipo abstracto, tipos estructurales, tipos self, polimorfismo de familia, etc.// | * tipos avanzados: //miembros de tipo abstracto, tipos estructurales, tipos self, polimorfismo de familia, etc.// |
* programación genérica: //parámetros implícitos, clases implícitas// | * programación genérica: //parámetros implícitos, clases implícitas, clases de tipos// |
* programación modular: //componentes, modulos, inyección de dependencias// | * programación modular: //componentes, módulos, inyección de dependencias// |
* concurrencia y paralelismo: //actores, colecciones sincronizadas, colecciones paralelas// | * concurrencia y paralelismo: //colecciones sincronizadas, colecciones paralelas, actores// |
* mecanismos avanzados: //continuaciones, macros y reflexión// | |
| |
**Evaluación:** Mini-controles regulares (15-30 min en horario de clases) y tareas. Se exime de examen con 5.0. | **Evaluación:** |
| |
| * Mini-controles regulares (15-30 min en horario de clases). |
| * Mini-tareas (esencialmente en las clases tutoriales). |
| * Proyecto final en grupo. |
| |
| Se exime de examen con 5.0. |
| |
{{teaching:cc5111:scala.pdf|Programa del Curso (CC5111)}} | {{teaching:cc5111:scala.pdf|Programa del Curso (CC5111)}} |
| |
| **Nota para alumnos de doctorado** |
| |
| Se puede inscribir el curso con código CC74A, en cual caso la evaluación incluirá el estudio de unos aspectos formales de Scala (mediante artículos de investigación) |