Els objectes singleton són una característica poderosa de Scala que permet definir una única instància d'una classe. A diferència de les classes, que poden tenir múltiples instàncies, un objecte singleton només té una instància que és creada la primera vegada que s'accedeix a l'objecte. Aquesta característica és útil per a definir constants, mètodes utilitaris o per implementar patrons de disseny com el Singleton.
Conceptes Clau
- Definició d'Objecte Singleton: Un objecte singleton es defineix utilitzant la paraula clau
object
en lloc declass
. - Única Instància: Només hi ha una instància d'un objecte singleton, i aquesta instància és creada la primera vegada que s'accedeix a l'objecte.
- Mètodes i Variables: Els objectes singleton poden contenir mètodes i variables, igual que les classes.
Definició d'un Objecte Singleton
A continuació es mostra com definir un objecte singleton en Scala:
object SingletonObject { val constantValue: Int = 42 def printMessage(): Unit = { println("Hola, sóc un objecte singleton!") } }
Explicació del Codi
object SingletonObject
: Defineix un objecte singleton anomenatSingletonObject
.val constantValue: Int = 42
: Defineix una variable constant dins de l'objecte.def printMessage(): Unit
: Defineix un mètode que imprimeix un missatge.
Ús d'un Objecte Singleton
Per accedir als membres d'un objecte singleton, simplement utilitzem el nom de l'objecte seguit del membre al qual volem accedir:
object Main extends App { // Accedint a la variable constant println(SingletonObject.constantValue) // Cridant al mètode SingletonObject.printMessage() }
Explicació del Codi
println(SingletonObject.constantValue)
: Accedeix a la variableconstantValue
de l'objecteSingletonObject
i imprimeix el seu valor.SingletonObject.printMessage()
: Crida al mètodeprintMessage
de l'objecteSingletonObject
.
Comparació amb Classes
A continuació es mostra una taula que compara les característiques de les classes i els objectes singleton:
Característica | Classe | Objecte Singleton |
---|---|---|
Instàncies | Múltiples | Única |
Definició | class |
object |
Inicialització | Amb new |
Automàtica |
Patrons de Disseny | Diversos | Singleton |
Exercici Pràctic
Exercici
Crea un objecte singleton anomenat MathUtils
que contingui els següents mètodes:
square(x: Int): Int
: Retorna el quadrat del nombrex
.cube(x: Int): Int
: Retorna el cub del nombrex
.
Solució
object MathUtils { def square(x: Int): Int = { x * x } def cube(x: Int): Int = { x * x * x } } object Main extends App { println(MathUtils.square(3)) // Ha de retornar 9 println(MathUtils.cube(2)) // Ha de retornar 8 }
Explicació del Codi
object MathUtils
: Defineix un objecte singleton anomenatMathUtils
.def square(x: Int): Int
: Defineix un mètode que retorna el quadrat del nombrex
.def cube(x: Int): Int
: Defineix un mètode que retorna el cub del nombrex
.
Resum
En aquesta secció, hem après què són els objectes singleton en Scala, com es defineixen i com s'utilitzen. Els objectes singleton són útils per a definir una única instància d'una classe, i són especialment útils per a constants i mètodes utilitaris. Hem vist exemples pràctics i hem comparat les característiques dels objectes singleton amb les classes. Finalment, hem realitzat un exercici pràctic per reforçar els conceptes apresos.
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