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 |