Rasgos como modificaciones apilables

Los rasgos son similares a las interfaces de Java. Las clases y los objetos pueden extender los rasgos, los rasgos heredados se crean usando la palabra clave trait

Sintaxis: 

trait Trait_Name {
// Fields..
// Methods..
}

palabra clave super: se usa siempre que una base y una subclase tienen métodos con el mismo nombre, por lo que para resolver la ambigüedad usamos la palabra clave super para llamar al método de la clase base. 

Modificación apilable con rasgos 

Antes de continuar, primero debemos entender qué es una modificación apilable con la ayuda de un ejemplo. Considere un cliente que paga para recargar su teléfono móvil para usar servicios móviles como llamadas de voz, Internet, etc. Estos servicios se pueden dividir en diferentes paquetes según el uso de un usuario en particular. Si queremos implementar este servicio estaríamos obligados a tener el nombre del paquete por el cual el cliente ha pagado un paquete en particular, digamos DataPack . Entonces podemos decir lo siguiente. 

new Recharge with DataPack

Suponiendo que tenemos un valor particular en nuestra clase de recarga que tiene la lista de servicios enumerados en un paquete determinado. ¿Qué pasa si el consumidor quiere Recargar a un paquete más, y no queremos tener un mecanismo que modifique explícitamente la lista de servicios para nosotros, pero debería suceder por defecto? Esto es como un comportamiento que se modifica a medida que agregamos diferentes paquetes. Este tipo de situación nos hace conocer el concepto de modificaciones apilables. Con el cliente agrega un nuevo paquete, la lista seguirá actualizándose.

new Recharge with DataPack with FullTalkTime

Scala soporta comportamiento un comportamiento

El siguiente ejemplo ilustra cómo se pueden apilar los rasgos.

Ejemplo 1: 

En este ejemplo, usamos rasgos para modificar métodos de una clase usando rasgos de forma apilable. Aquí, usamos la palabra clave super para invocar el método dot() en ambos rasgos. De esta manera, logramos una modificación apilable. En casos de modificación apilable, el orden de invocación del método está determinado por la regla de linealización. 

Scala

// Scala program to illustrate traits 
// in stackable fashion
  
// Defining class shape
class Shape
{
  def dot(shape : String) = println("Dotted : " + shape)
}
  
// Using trait keyword
// Using super keyword
trait Square extends Shape 
{
  override def dot(shape : String) = super.dot("Square-" + shape)
}
  
// Using trait keyword
// Using super keyword
trait Circle extends Shape 
{
  override def dot(shape : String) = super.dot("Circle-" + shape)
}
  
// Using trait keyword
// Using super keyword
trait Sharp extends Shape
{
  override def dot(shape : String) = super.dot("Sharp-" + shape)
}
  
// Defining main
object Shapes 
{
  def main(args: Array[String]) 
  {
    val shape1 = new Shape with Sharp with Square
    shape1.dot("Shape-1") 
  
    val shape2 = new Shape with Circle with Sharp
    shape2.dot("Shape-2") 
}
}

Producción: 

Dotted : Sharp-Square-Shape-1
Dotted : Circle-Sharp-Shape-2

Ejemplo 2: 

Scala

// Scala program to illustrate traits 
// in stackable fashion
  
// Defining class Ball
class Ball 
{
  def spin(ball : String) = println("Spinning : " + ball)
}
  
// Using trait keyword
// Using super keyword
trait Yellow extends Ball
{
  override def spin(ball : String) = super.spin("Yellow-" + ball)
}
  
// Using trait keyword
// Using super keyword
trait Blue extends Ball 
{
  override def spin(ball : String) = super.spin("Blue-" + ball)
}
  
// Using trait keyword
// Using super keyword
trait Shiny extends Ball 
{
  override def spin(ball : String) = super.spin("Shiny-" + ball)
}
  
// Defining main
object Balls
{
  def main(args: Array[String])
  {
    val ball1 = new Ball with Shiny with Yellow
    ball1.spin("Ball-1") 
  
    val ball2 = new Ball with Blue with Shiny
    ball2.spin("Ball-2") 
}
}

Producción: 

Spinning : Shiny-Yellow-Ball-1
Spinning: Blue-Shiny-Ball-2

Publicación traducida automáticamente

Artículo escrito por ashishguru9803 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *