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.

  1. 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 anomenada Persona amb dos atributs: nom i edat.
  • def saluda(): Unit: Defineix un mètode anomenat saluda que imprimeix un missatge de salutació.

  1. 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 objecte persona1 de la classe Persona amb el nom "Joan" i l'edat 30.
  • persona1.saluda(): Crida el mètode saluda de l'objecte persona1.

  1. 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 classe Cotxe amb tres atributs: marca, model i any.
  • def info(): Unit: Defineix un mètode info que imprimeix la informació del cotxe.

  1. 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 classe Rectangle amb dos atributs: ample i alt.
  • def area(): Double: Defineix un mètode area que calcula l'àrea del rectangle.
  • def perimetre(): Double: Defineix un mètode perimetre 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.

© Copyright 2024. Tots els drets reservats