Introducció

En Scala, els objectes companys (companion objects) són una característica poderosa que permet definir mètodes i valors estàtics associats a una classe. Un objecte company és un objecte que comparteix el mateix nom que una classe i es defineix en el mateix fitxer font. Aquesta característica permet una integració estreta entre la classe i l'objecte, facilitant l'accés a mètodes i valors comuns sense necessitat d'instanciar la classe.

Conceptes Clau

  • Objecte Company: Un objecte que comparteix el mateix nom que una classe i es defineix en el mateix fitxer.
  • Mètodes Estàtics: Mètodes que es poden cridar sense crear una instància de la classe.
  • Valors Estàtics: Valors que es poden accedir sense crear una instància de la classe.

Definició d'un Objecte Company

Exemple Bàsic

class Persona(val nom: String, val edat: Int)

object Persona {
  def crearPersonaAnonima(): Persona = new Persona("Anònim", 0)
}

En aquest exemple, Persona és una classe amb dos atributs: nom i edat. L'objecte Persona és l'objecte company de la classe Persona i conté un mètode estàtic crearPersonaAnonima que retorna una instància de Persona amb valors predeterminats.

Explicació del Codi

  • Classe Persona: Defineix els atributs nom i edat.
  • Objecte Persona: Defineix el mètode estàtic crearPersonaAnonima que crea una instància de Persona amb valors predeterminats.

Avantatges dels Objectes Companys

  1. Encapsulació: Permet encapsular mètodes i valors estàtics dins de l'objecte company, mantenint el codi organitzat.
  2. Accés Fàcil: Els mètodes i valors estàtics es poden accedir fàcilment sense necessitat de crear una instància de la classe.
  3. Integració Estreta: Facilita la integració entre la classe i els seus mètodes estàtics, ja que es defineixen en el mateix fitxer.

Exemple Pràctic

Definició d'una Classe i el seu Objecte Company

class Calculadora(val marca: String) {
  def sumar(a: Int, b: Int): Int = a + b
}

object Calculadora {
  def crearCalculadoraDeMarca(marca: String): Calculadora = new Calculadora(marca)
  def sumar(a: Int, b: Int): Int = a + b
}

Explicació del Codi

  • Classe Calculadora: Defineix un atribut marca i un mètode sumar que suma dos enters.
  • Objecte Calculadora: Defineix un mètode estàtic crearCalculadoraDeMarca que crea una instància de Calculadora amb una marca especificada i un mètode estàtic sumar que suma dos enters.

Ús de l'Objecte Company

val calc = Calculadora.crearCalculadoraDeMarca("Casio")
println(calc.marca) // Sortida: Casio
println(Calculadora.sumar(3, 4)) // Sortida: 7

Exercicis Pràctics

Exercici 1

Descripció: Crea una classe Cotxe amb atributs marca i model. Defineix un objecte company que contingui un mètode estàtic crearCotxeDeMarca que creï una instància de Cotxe amb una marca especificada i un model predeterminat.

Solució:

class Cotxe(val marca: String, val model: String)

object Cotxe {
  def crearCotxeDeMarca(marca: String): Cotxe = new Cotxe(marca, "Model Predeterminat")
}

// Ús
val cotxe = Cotxe.crearCotxeDeMarca("Toyota")
println(cotxe.marca) // Sortida: Toyota
println(cotxe.model) // Sortida: Model Predeterminat

Exercici 2

Descripció: Crea una classe CompteBancari amb atributs numero i saldo. Defineix un objecte company que contingui un mètode estàtic crearCompteAmbSaldoInicial que creï una instància de CompteBancari amb un número especificat i un saldo inicial.

Solució:

class CompteBancari(val numero: String, val saldo: Double)

object CompteBancari {
  def crearCompteAmbSaldoInicial(numero: String, saldoInicial: Double): CompteBancari = new CompteBancari(numero, saldoInicial)
}

// Ús
val compte = CompteBancari.crearCompteAmbSaldoInicial("123456", 1000.0)
println(compte.numero) // Sortida: 123456
println(compte.saldo) // Sortida: 1000.0

Errors Comuns i Consells

  • No Confondre amb Objectes Regulars: Recorda que un objecte company ha de compartir el mateix nom que la classe i estar en el mateix fitxer.
  • Accés a Mètodes Estàtics: Els mètodes definits en l'objecte company es poden accedir directament utilitzant el nom de l'objecte, sense necessitat de crear una instància de la classe.

Conclusió

Els objectes companys en Scala són una eina poderosa per definir mètodes i valors estàtics associats a una classe. Faciliten l'accés a funcionalitats comunes sense necessitat de crear instàncies de la classe, mantenint el codi organitzat i encapsulat. Amb la pràctica, els objectes companys es convertiran en una part essencial del teu arsenal de programació en Scala.

© Copyright 2024. Tots els drets reservats