17 Eficiencia Los resultados obtenidos comparando el Factorial en Java como en Scala usando recursión de cola son:
18 Traits: Unidades componibles de comportamiento Los traits son sencillos pero potentes mecanismos de composición. Un trait es esencialmente un conjunto de métodos parametrizados. En Scala las clases aún están organizadas en una jerarquía de herencia simple, pero con los traits podemos definir un comportamiento adicional respecto a sus superclases.
trait Padre { private var hijos: List[Hijos] = Nil def añadirHijo(hijo: Hijo) = hijos = hijo :: hijos def obtenerHijos = hijos.clone }
19 Traits: Unidades componibles de comportamiento Clase base: class Hombre(val nombre: String) extends SerHumano
Composición con mixins estática y uso: class Hombre(val nombre: String) extends SerHumano with Padre
val juan = new Hombre("Juan") juan.añadirHijo(new Hijo("Jose"))
Composición con mixins dinámica y uso: val juan = new Hombre("Juan") with Padre juan.añadirHijo(new Hijo("Jose"))
20 Traits: Unidades componibles de comportamiento Los traits nos permiten simular la herencia múltiple:
val orden = new Orden(cliente) with Entidad with InventarioCjtoItems with LimiteDeCompre with NotificaciónPorCorreo with ACL with Transaccion
El orden en que se añaden los traits es importante.
21 Lenguajes de dominio específico (DSLs) Las características de Scala lo hacen ideal para el diseño de lenguajes de dominio específico. Ya se ha creado alguno como Apache Camel. Este DSL permite integrar sistemas heterogéneos haciendo uso de ficheros XML. Scala soporta XML a nivel de lenguaje y no de biblioteca.
class Entrada(var titulo:String, val enlace:String, val id:String, var fecha:Date, var sumario: String) { def toAtom =
{id} {fecha} {sumario}
}
Estos ficheros son muy sencillos de manipular gracias al pattern matching.
22 Herramientas El conjunto de herramientas para el desarrollo en Scala es muy completo. Compilador e intérprete: scalac y scala. Plugins para los IDEs más usados: Eclispe IntelliJ Netbeans Modo para Emacs. Frameworks para tests: Specs, ScalaCheck, ScalaTest, SUnit… Framework web: Lift (similar a Ruby on Rails). Otros frameworks: Sweet, Slinky y Pinky. Building: Maven, Ant, SBT (Simple Build Tool).
23 ¿Quién lo usa? Compañías: Twitter: Backend (cola de mensajes) Sony Pictures: Middleware (capa de conversión/traducción) Nature.com SAP community Reaktor Innovations Mimesis Republic: juegos multijugador online EDF Trading: inversiones bursátiles
Proyectos Open Source: Lift: Framework de aplicaciones web similar a Ruby on Rails. NetLogo: Lenguaje de programación multiagente. Isabelle: Demostrador de teoremas – Intefaz de usuario
24 ¿Quién lo usa? Universidades: Programming Methods Group – Escuela Politécnica Federal de Lausana (EPFL), Suiza. Program Structures and Data Organization Institute (IPD) – Universidad de Karlsruhe, Alemania.
Tesis: Object-Oriented Pattern Matching. Burak Emir. EPFL Oct-2007. An Object-Oriented Programming Model for Event-Based Actors. Philipp Haller. EPFL May-2006. A Typed Intermediate Language and Algorithms for Compiling Scala by Successive Rewritings. Philippe Altherr. EPFL Mar-2006. Foundations for Scala: Semantics and Proof of Virtual Types. Vincent Cremet. EPFL May-2006. Compiling Scala for the Java Virtual Machine. Michel Schinz. EPFL Sep-2005.
25 Conclusiones Scala le permite: Crear código altamente escalable. Aprovecha la arquitecturas paralelas de hardware (como CPUs multi-core). Creación de Lenguaje de Dominio Específico (DSL). Factores que trabajan a favor del programador: Scala compila a bytecode de Java, se ejecuta en la JVM. Se basa en principios funcionales de Haskell y Meta Lenguaje. Hace uso intensivo de inferencia de tipos. El compilador analiza el código profundamente para determinar de que tipo es un valor en particular, sin intervención del programador. Scala no fue desarrollado por capricho, y no será abandonado de la misma manera.
26 Java vs Scala. Nuestra conclusión es que Scala es un mejor Java.
Página anterior | Volver al principio del trabajo | Página siguiente |