En aquest tema, explorarem els conceptes fonamentals de la programació orientada a objectes (POO) en Scala, incloent la definició de classes, la creació d'objectes i la utilització de constructors. Scala és un llenguatge que combina la programació funcional amb la programació orientada a objectes, i entendre aquests conceptes és crucial per aprofitar al màxim les seves capacitats.
- Definició de Classes
Una classe és una plantilla per crear objectes (instàncies). Defineix un conjunt de propietats (atributs) i mètodes (funcions) que els objectes creats a partir de la classe tindran.
Exemple de Classe
class Persona(val nom: String, val edat: Int) {
def saluda(): Unit = {
println(s"Hola, em dic $nom i tinc $edat anys.")
}
}Explicació del Codi
class Persona(val nom: String, val edat: Int): Defineix una classe anomenadaPersonaamb dos atributs:nomiedat.def saluda(): Unit: Defineix un mètode anomenatsaludaque imprimeix un missatge de salutació.
- Creació d'Objectes
Per crear un objecte d'una classe, utilitzem la paraula clau new seguida del nom de la classe i els paràmetres del constructor.
Exemple de Creació d'Objectes
val persona1 = new Persona("Joan", 30)
val persona2 = new Persona("Maria", 25)
persona1.saluda() // Hola, em dic Joan i tinc 30 anys.
persona2.saluda() // Hola, em dic Maria i tinc 25 anys.Explicació del Codi
val persona1 = new Persona("Joan", 30): Crea un objectepersona1de la classePersonaamb el nom "Joan" i l'edat 30.persona1.saluda(): Crida el mètodesaludade l'objectepersona1.
- Constructors
Els constructors són mètodes especials que s'executen quan es crea un objecte. En Scala, el constructor primari es defineix a la capçalera de la classe.
Exemple de Constructor
class Cotxe(val marca: String, val model: String, val any: Int) {
def info(): Unit = {
println(s"Marca: $marca, Model: $model, Any: $any")
}
}
val cotxe1 = new Cotxe("Toyota", "Corolla", 2020)
cotxe1.info() // Marca: Toyota, Model: Corolla, Any: 2020Explicació del Codi
class Cotxe(val marca: String, val model: String, val any: Int): Defineix una classeCotxeamb tres atributs:marca,modeliany.def info(): Unit: Defineix un mètodeinfoque imprimeix la informació del cotxe.
- Atributs i Mètodes
Els atributs són variables que pertanyen a una classe, mentre que els mètodes són funcions que pertanyen a una classe.
Exemple d'Atributs i Mètodes
class Rectangle(val ample: Double, val alt: Double) {
def area(): Double = ample * alt
def perimetre(): Double = 2 * (ample + alt)
}
val rectangle = new Rectangle(5.0, 3.0)
println(s"Àrea: ${rectangle.area()}") // Àrea: 15.0
println(s"Perímetre: ${rectangle.perimetre()}") // Perímetre: 16.0Explicació del Codi
class Rectangle(val ample: Double, val alt: Double): Defineix una classeRectangleamb dos atributs:ampleialt.def area(): Double: Defineix un mètodeareaque calcula l'àrea del rectangle.def perimetre(): Double: Defineix un mètodeperimetreque calcula el perímetre del rectangle.
Exercicis Pràctics
Exercici 1
Crea una classe Cercle amb un atribut radi i dos mètodes: area i perimetre. El mètode area ha de calcular l'àrea del cercle (π * radi^2) i el mètode perimetre ha de calcular el perímetre del cercle (2 * π * radi).
Solució
class Cercle(val radi: Double) {
def area(): Double = math.Pi * radi * radi
def perimetre(): Double = 2 * math.Pi * radi
}
val cercle = new Cercle(4.0)
println(s"Àrea: ${cercle.area()}") // Àrea: 50.26548245743669
println(s"Perímetre: ${cercle.perimetre()}") // Perímetre: 25.132741228718345Exercici 2
Crea una classe Triangle amb tres atributs: base, altura i costat. Defineix dos mètodes: area (0.5 * base * altura) i perimetre (base + 2 * costat).
Solució
class Triangle(val base: Double, val altura: Double, val costat: Double) {
def area(): Double = 0.5 * base * altura
def perimetre(): Double = base + 2 * costat
}
val triangle = new Triangle(3.0, 4.0, 5.0)
println(s"Àrea: ${triangle.area()}") // Àrea: 6.0
println(s"Perímetre: ${triangle.perimetre()}") // Perímetre: 13.0Conclusió
En aquesta secció, hem après els conceptes bàsics de les classes i els objectes en Scala, incloent la definició de classes, la creació d'objectes, l'ús de constructors, i la definició d'atributs i mètodes. Aquests conceptes són fonamentals per a la programació orientada a objectes i seran la base per a temes més avançats en Scala. En el següent tema, explorarem la herència i els traits, que ens permetran reutilitzar i estendre el codi de manera eficient.
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
