Escala | Objeto con estado

Los objetos con estado son aquellos objetos que tienen miembros cambiables o miembros mutables, que pueden variar qué transacciones u operaciones se realizaron previamente en el objeto. Para una misma operación realizada muchas veces, el resultado obtenido puede ser diferente del resultado anterior. Es muy común comparar objetos con estado con objetos del mundo real, donde el estado de los objetos cambia con el tiempo.

Sintaxis:

class classname
{
     // declaring some states that are mutable
     var state1
     var state2
     def changestate
     {
          // some operation to change the states of the object
     }
}

Cuando los miembros de un objeto cambian su valor en horas extras para ciertas operaciones, que se realizan en el objeto. Debido a esto, cambia el estado del objeto que depende de las operaciones realizadas previamente.

A continuación se muestran algunos ejemplos para comprender el objeto con estado.
Ejemplos #1:

// A Scala program to illustrate 
// stateful objects
  
// creating a class
class waterbottle
{
    // creating states
    var water: Int = 0
    def drinkwater = { 
        if(water > 0)
        {
            water = water-1
            println("water left = "+water)
        }
        else
        {
            println("waterbottle empty fill water")
        }
    }
      
    // Defining method
    def fillwater (c: Int)=
    {
        if(water + c > 5)
        {
            water = 5
        }
        else
        { 
            water = water + c
        }
    }
    override def toString= "water in bottle = " + water
}
  
// Creating object
object GFG 
{
    // Main method 
    def main(args: Array[String]) 
    { 
        // waterbottle object
        var w = new waterbottle
          
        // calling 
        w.fillwater(3)
        println(w)
          
        // Changing state
        w.drinkwater
        w.drinkwater
        w.drinkwater
        w.drinkwater
    } 
}

Producción :

water in bottle = 3
water left = 2
water left = 1
water left = 0
waterbottle empty fill water

Como podemos ver en el ejemplo anterior, el estado de w.drinkwater cambia su resultado para la misma operación a «botella de agua vacía llena de agua» hasta que llenamos o actualizamos el agua. El estado mutable depende del agua que es una variable. Por lo tanto, podemos decir que los objetos con estado están hechos de vars y no de val , pero esto no es cierto, una clase puede cambiar su estado sin contener vars.

Para un objeto que cambia su estado a otro estado, el conjunto de operaciones o el camino tomado para llegar a ese estado en particular puede ser diferente, pero al final el estado que se logra debe ser el mismo. Esto también se conoce como equivalencia operativa donde x e y son objetos diferentes pero con los mismos estados al final de diferentes conjuntos de operaciones.

Ejemplos #2:

// A Scala program to illustrate 
// stateful objects
  
// creating player class
class player
{
    // creating states
    var health: Int = 10
    def punch(p: player)
    {
        if(p.health > 0)
        {
            p.health = p.health-2
            println(p + " health is " + p.health)
            if(p.health < 1)
            {
                // checking the state
                dead(p)
            }
        }
        else
        {
            dead(p)
        }
    }
    def kick(p: player)
    {
        if(p.health > 0)
        {
            p.health = p.health-3
            println(p + " health is " + p.health)
            if(p.health < 1)
            {
                // checking the state
                dead(p)
            }
        }
        else
        {
            dead(p)
        }
    }
    def superp(p: player)
    {
        if(p.health > 0)
        {
            p.health = p.health - 5
            println(p + " health is " + p.health)
            if(p.health < 1)
            {
                // checking the state
                dead(p)
            }
        }
        else
        {
            dead(p)
        }
    }
    def dead(p:player)
    {
        println("Game Over")
        println(p +" is dead " + this + " is winner")
    }
}
  
// Creating object
object GFG
{
    // Main method 
    def main(args: Array[String]) 
    { 
        // Creating objects for player
        var p1 = new player
        var p2 = new player
        p1.kick(p2)
        p1.punch(p2)
        p1.superp(p2)
        p1.punch(p2)
  
    } 
}

Producción :

player@506e1b77 health is 7
player@506e1b77 health is 5
player@506e1b77 health is 0
Game Over
player@506e1b77 is dead player@4fca772d is winner
Game Over
player@506e1b77 is dead player@4fca772d is winner

De manera similar, en el ejemplo anterior, podemos decir que el jugador es un objeto con estado sin mirar el funcionamiento interno de la clase. Debido a que la salud no se puede reducir a negativa, el jugador tiene estados mutables ya que la misma operación devuelve una salida diferente en entradas diferentes o iguales.

Publicación traducida automáticamente

Artículo escrito por Patabhu 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 *