Introducció
En aquest tema, explorarem dos conceptes fonamentals de la programació orientada a objectes en Scala: les classes abstractes i les classes case. Les classes abstractes ens permeten definir estructures generals que poden ser especialitzades per altres classes, mentre que les classes case proporcionen una manera concisa i poderosa de definir classes que són principalment contenidors de dades.
Classes Abstractes
Què és una Classe Abstracta?
Una classe abstracta és una classe que no es pot instanciar directament. Serveix com a plantilla per a altres classes que poden heretar-ne les propietats i mètodes. Les classes abstractes poden contenir mètodes abstractes (sense implementació) i mètodes concrets (amb implementació).
Definició d'una Classe Abstracta
abstract class Animal { def makeSound(): String // Mètode abstracte def sleep(): Unit = println("Zzz...") // Mètode concret }
Herència d'una Classe Abstracta
class Dog extends Animal { def makeSound(): String = "Woof!" } class Cat extends Animal { def makeSound(): String = "Meow!" }
Exemple Pràctic
object AbstractClassExample extends App { val dog = new Dog val cat = new Cat println(dog.makeSound()) // Woof! println(cat.makeSound()) // Meow! dog.sleep() // Zzz... cat.sleep() // Zzz... }
Exercici Pràctic
Exercici 1: Defineix una classe abstracta Vehicle
amb un mètode abstracte move()
i un mètode concret stop()
. Crea dues subclasses Car
i Bike
que implementin el mètode move()
.
abstract class Vehicle { def move(): String def stop(): Unit = println("Vehicle stopped") } class Car extends Vehicle { def move(): String = "Car is moving" } class Bike extends Vehicle { def move(): String = "Bike is moving" } object VehicleExample extends App { val car = new Car val bike = new Bike println(car.move()) // Car is moving println(bike.move()) // Bike is moving car.stop() // Vehicle stopped bike.stop() // Vehicle stopped }
Classes Case
Què és una Classe Case?
Les classes case són una característica especial de Scala que facilita la creació de classes que són principalment contenidors de dades. Proporcionen implementacions automàtiques de mètodes com equals
, hashCode
, i toString
, i suporten la descomposició mitjançant coincidència de patrons.
Definició d'una Classe Case
Creació i Utilització d'Instàncies
val person1 = Person("Alice", 30) val person2 = Person("Bob", 25) println(person1.name) // Alice println(person2.age) // 25
Comparació i Còpia
val person3 = Person("Alice", 30) println(person1 == person3) // true val person4 = person1.copy(age = 31) println(person4) // Person(Alice,31)
Exemple Pràctic
object CaseClassExample extends App { val person1 = Person("Alice", 30) val person2 = Person("Bob", 25) val person3 = Person("Alice", 30) println(person1 == person3) // true println(person1 == person2) // false val person4 = person1.copy(age = 31) println(person4) // Person(Alice,31) }
Exercici Pràctic
Exercici 2: Defineix una classe case Book
amb els camps title
i author
. Crea instàncies de Book
i utilitza els mètodes copy
i equals
.
case class Book(title: String, author: String) object BookExample extends App { val book1 = Book("1984", "George Orwell") val book2 = Book("Brave New World", "Aldous Huxley") val book3 = Book("1984", "George Orwell") println(book1 == book3) // true println(book1 == book2) // false val book4 = book1.copy(title = "Animal Farm") println(book4) // Book(Animal Farm,George Orwell) }
Resum
En aquesta secció, hem après sobre les classes abstractes i les classes case en Scala. Les classes abstractes ens permeten definir estructures generals que poden ser especialitzades per altres classes, mentre que les classes case proporcionen una manera concisa i poderosa de definir classes que són principalment contenidors de dades. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el proper tema, explorarem els objectes companys 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