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 atributsnom
iedat
. - Objecte
Persona
: Defineix el mètode estàticcrearPersonaAnonima
que crea una instància dePersona
amb valors predeterminats.
Avantatges dels Objectes Companys
- Encapsulació: Permet encapsular mètodes i valors estàtics dins de l'objecte company, mantenint el codi organitzat.
- 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.
- 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 atributmarca
i un mètodesumar
que suma dos enters. - Objecte
Calculadora
: Defineix un mètode estàticcrearCalculadoraDeMarca
que crea una instància deCalculadora
amb una marca especificada i un mètode estàticsumar
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.
Curs de Programació en Scala
Mòdul 1: Introducció a Scala
- Introducció a Scala
- Configuració de l'Entorn de Desenvolupament
- Conceptes Bàsics de Scala: Sintaxi i Estructura
- Variables i Tipus de Dades
- Operacions Bàsiques i Expressions
Mòdul 2: Estructures de Control i Funcions
- Declaracions Condicionals
- Bucles i Iteracions
- Funcions i Mètodes
- Funcions d'Ordre Superior
- Funcions Anònimes
Mòdul 3: Col·leccions i Estructures de Dades
- Introducció a les Col·leccions
- Llistes i Arrays
- Conjunts i Mapes
- Tuples i Options
- Coincidència de Patrons
Mòdul 4: Programació Orientada a Objectes en Scala
- Classes i Objectes
- Herència i Traits
- Classes Abstractes i Classes Case
- Objectes Companys
- Objectes Singleton
Mòdul 5: Programació Funcional en Scala
- Immutabilitat i Funcions Pures
- Estructures de Dades Funcionals
- Monads i Functors
- For-Comprehensions
- Gestió d'Errors en la Programació Funcional
Mòdul 6: Conceptes Avançats de Scala
- Conversions i Paràmetres Implícits
- Classes de Tipus i Polimorfisme
- Macros i Reflexió
- Concurrència en Scala
- Introducció a Akka