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 anomenadaPersona
amb dos atributs:nom
iedat
.def saluda(): Unit
: Defineix un mètode anomenatsaluda
que 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 objectepersona1
de la classePersona
amb el nom "Joan" i l'edat 30.persona1.saluda()
: Crida el mètodesaluda
de 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: 2020
Explicació del Codi
class Cotxe(val marca: String, val model: String, val any: Int)
: Defineix una classeCotxe
amb tres atributs:marca
,model
iany
.def info(): Unit
: Defineix un mètodeinfo
que 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.0
Explicació del Codi
class Rectangle(val ample: Double, val alt: Double)
: Defineix una classeRectangle
amb dos atributs:ample
ialt
.def area(): Double
: Defineix un mètodearea
que calcula l'àrea del rectangle.def perimetre(): Double
: Defineix un mètodeperimetre
que 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.132741228718345
Exercici 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.0
Conclusió
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