Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

El Lenguaje Scala




Enviado por Pablo Turmero



Partes: 1, 2


    Monografias.com

    1
    Software de componentes – estado del arte
    En principio, el software debería ser desarrollado a partir de partes reusable ("componentes").

    En la práctica, el software se escribe a menudo desde cero, más como un arte que como una industria.

    Los lenguajes de programación tienen parte de la culpa.

    La mayoría de los lenguajes existentes ofrecen sólo un soporte limitado para los componentes.

    Monografias.com

    2
    ¿Cómo hacerlo mejor?

    Hipótesis 1: Los lenguajes para componentes necesitan ser escalables; los mismos conceptos deben ser válidos para describir sistemas pequeños y grandes.

    Hipótesis 2: La escalabilidad puede ser lograda unificando y generalizando conceptos de la programación funcional y la orientada a objetos.

    Monografias.com

    3
    ¿Por qué unificar PF y POO?
    Ambas tienen cualidades que se complementan para la composición.
    Programación funcional: Hace fácil desarrollar cosas interesantes desde partes sencillas, usando
    funciones de orden superior
    tipos algebraicos y pattern matching
    polimorfismo paramétrico

    Programación orientada a objetos: Hace fácil adaptar y extender sistemas complejos, usando
    especialización (subclases) y herencia
    configuraciones dinámicas
    clases como abstracciones parciales

    Monografias.com

    4
    ¿Qué es Scala?
    Scala es un lenguaje funcional y orientado a objetos completamente interoperable con Java (la versión para .NET no está al día).
    Elimina algunas de las construcciones más antiguas de estos entornos y a cambio añade:
    Un modelo de objetos uniforme.
    Pattern matching y funciones de orden superior.
    Nuevas formas para abstraer y componer programas.
    Su diseño comenzó en 2001en la Escuela Politécnica Federal de Lausana (Suiza) por Martin Odersky.
    4

    Monografias.com

    5
    Scala es un lenguaje funcional en el sentido de que cada función es un valor.
    Las funciones pueden ser anónimas, anidadas, aplicadas parcialmente (currying).
    Muchas funciones útiles de orden superior son implementadas como métodos de clases de Scala.

    scala> val matrix = Array(Array(1, 0, 0),
    | Array(0, 1, 0),
    | Array(0, 0, 1))

    matrix: Array[Array[Int]] = Array ([I@164da25,…

    scala> matrix.exists(row => row.forall(0 ==))
    res13: Boolean = false
    Scala es funcional

    Monografias.com

    6
    Scala es orientado a objetos
    Cada valor es un objeto.
    Cada operación es una llamada a un método.
    Las excepciones a estas reglas en Java (como los tipos primitivos, statics) son eliminadas.

    scala> (1).hashCode
    res8: Int = 1

    scala> (1).+(2)
    res10: Int = 3

    Monografias.com

    7
    Si las funciones son valores, y los valores son objetos, entonces las funciones son objetos.

    La función de tipo S => T es equivalente a scala.Function1[S, T], donde Function1 se define como sigue:

    trait Function1[-S, +T] {
    def apply(x: S): T
    }

    Así las funciones son interpretadas como objetos con métodos apply.

    Por ejemplo, la función anónima sucesor
    (x: Int) => x + 1
    se expande a:

    new Function1[Int, Int]{
    def apply(x: Int) =
    x + 1
    }

    Las funciones son objetos

    Monografias.com

    8
    Influencias de otros lenguajes
    Influencias principales del diseño de Scala: Java, C# por su sintaxis, tipos básicos y bibliotecas.
    Smalltalk por su modelo de objetos uniforme.
    Eiffel por su principio de acceso uniforme.
    Beta por la anidación sistemática.
    ML y Haskell por muchos de sus aspectos funcionales.
    OCaml, OHaskell, PLT-Scheme, como otras combinaciones (aunque menos integradas) de PF y POO.
    Pizza, Multi Java, Nice y otras extensiones de la plataforma Java con ideas funcionales.
    Scala también parece influenciar otros nuevos diseños de lenguajes, como por ejemplo los cierres léxicos (closures) y la comprensión en LINQ/C# 3.0.

    Monografias.com

    9
    Características de Scala
    Tipificado estático
    Interoperabilidad
    Expresivo y ligero
    De alto nivel
    Conciso
    Orientado a objetos puro
    Perezoso
    Cierres léxicos (closures)
    Eficiente

    Monografias.com

    10
    Scala une PF y POO. Esto ha funcionado bien para otros lenguajes como Smalltalk, Python o Ruby pero, Scala va más allá unificando la PF y la POO en un lenguaje de tipos estáticos.

    Scala produce la sensación de estar programando en un lenguaje de scripting moderno pero, sin renunciar a los tipos estáticos.
    No es necesario especificar el tipo de cada expresión porque Scala posee inferencia de tipos.

    object InferenceTest1 extends Application {
    val x = 1 + 2 * 3 // el tipo de x es Int
    val y = x.toString() // el tipo de y es String
    }
    Tipificado estático

    Monografias.com

    11
    Interoperabilidad
    Scala encaja sin fisuras en un entorno Java.

    Puede invocar métodos Java, seleccionar campos Java, heredar de clases Java, implementar interfaces Java, etc.

    Nada de esto requiere código puente o descripción de interfaces.

    El código Java también puede usar fácilmente código Scala.

    El código Scala es traducido a casi el mismo código de bytes que Java.

    Monografias.com

    12

    Debido a la eficacia del lenguaje Scala, el programador puede desarrollar código más expresivo que en otros lenguajes orientado a objetos; gracias a la forma de trabajar con los objetos. Lo que produce como resultado un código más ligero y entendible.

    val telefonos = Map(“Luis” -> “123456”,
    “Sara” -> “654321”)
    telefonos += (“Carmen” -> “987654”)
    println(telefonos(“Luis”))

    Expresivo y ligero

    Monografias.com

    13
    La eficacia del lenguaje produce también una funcionalidad de alto nivel mayor que en otros lenguajes.
    Según Java:
    boolean hasUpperCase = false;
    for (int i = 0; i < nom.length(); i++){
    if (Character.isUpperCase(nom.charAt(i))) {
    hasUpperCase = true;
    break;
    }
    }

    Según Scala:
    val hasUpperCase = nom.exists(_.isUpperCase)
    Alto nivel

    Monografias.com

    14
    Conciso
    // Java
    public class Persona {
    private String nombre; private int edad;
    public Persona(String nombre, int edad) {
    this.nombre = nombre;
    this.edad = edad;
    }
    public String getNombre() {
    return nombre;
    }
    public int getEdad() {
    return edad;
    }
    public void setNombre(String nombre) {
    this.nombre = nombre;
    }
    public void setEdad(int edad) {
    this.edad = edad;
    }
    }

    // Scala
    class Persona (
    var nombre: String,
    var edad: int)

    La reducción media de líneas de código es = 2 debido a la sintaxis concisa y a mejores capacidades de abstracción.

    Scala es un Java más limpio.

    Monografias.com

    15
    Valores perezosos
    Secuencia de Fibonacci:

    scala> lazy val fib: Stream[Int] = Stream.cons(0,
    | Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))
    fib: Stream[Int]= Stream(0,?)

    Se definen manualmente los dos primeros valores de la secuencia, entonces recursivamente se define un stream infinito de los restantes términos.
    fib es la secuencia de Fibonacci empezando en cero (0, 1, 1, 2, 3, …).
    fib.tail es la secuencia empezando en uno (1, 1, 2, 3, 5, …).
    fib.zip.(fib.tail) es la secuencia de pares ((0, 1), (1, 1), (1, 2), (2, 3), …).
    Entonces usamos map para los elementos de cada par (._1, ._2) y completar la definición recursiva del resto de fib.

    scala> fib.take(13).print
    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, Stream.empty

    Monografias.com

    16
    Eficiencia
    Scala se compila a código de bytes (bytecode) muy próximo al Java nativo.
    Es tan eficiente como Java, a veces es incluso más rápido cuando hace uso de la recursión de cola o en aplicaciones de código concurrente.
    El único inconveniente es que la JVM puede tardar más en cargar la aplicación debido a que el compilador de Scala genera un gran número de clases. Aunque esto va mejorando con cada nueva versión del compilador (scalac).

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter