====== Programación Avanzada en ======
[[http://www.scala-lang.org/|{{teaching:cc5111:newsflash_logo.png}}]]
A language that doesn't affect the way you think about programming, is not worth knowing.
- Alan Perlis
Profesor de cátedra: Éric Tanter |
Estreno: 2013/2 |
Profesor auxiliar: Ismael Figueroa |
Horario: por determinar |
**Scala es un lenguaje de programación diseñado para expresar patrones comunes de programación de manera concisa, elegante, y tipada**. Scala integra en forma armoniosa los mecanismos de los lenguajes orientado a objetos y funcionales, controlados por un poderoso sistema de tipos.
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á 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 documentos 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.
**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.
**Tópicos:**
* clases, objetos, tipos y operaciones básicas
* funciones y abstracciones de control
* herencia y traits
* 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 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 modular: //componentes, modulos, inyección de dependencias//
* concurrencia y paralelismo: //actores, colecciones sincronizadas, colecciones paralelas//
* mecanismos avanzados: //continuaciones, macros y reflexión//