En aquest tema, explorarem les classes i les estructures en Swift, dues de les construccions fonamentals per a la programació orientada a objectes. Aprendrem les seves diferències, com definir-les, i com utilitzar-les en els nostres programes.

Continguts

Introducció a les Classes i Estructures

Les classes i les estructures són dues maneres de definir tipus de dades personalitzats en Swift. Ambdues poden contenir propietats i mètodes per definir el comportament i les característiques dels objectes que representen.

Característiques Comunes

  • Propietats: Variables o constants associades a la classe o estructura.
  • Mètodes: Funcions associades a la classe o estructura.
  • Inicialitzadors: Funcions especials per crear instàncies de la classe o estructura.
  • Extensions: Permeten afegir funcionalitats addicionals.
  • Protocols: Definicions de funcionalitats que poden ser adoptades per classes o estructures.

Definició de Classes

Les classes són tipus de referència, el que significa que les instàncies de classes es passen per referència. Això vol dir que quan assignem una instància de classe a una variable o constant, estem treballant amb una referència a l'objecte original.

Sintaxi de Classes

class Persona {
    var nom: String
    var edat: Int

    init(nom: String, edat: Int) {
        self.nom = nom
        self.edat = edat
    }

    func saludar() {
        print("Hola, em dic \(nom) i tinc \(edat) anys.")
    }
}

Exemple d'Ús

let persona1 = Persona(nom: "Joan", edat: 30)
persona1.saludar()  // Sortida: Hola, em dic Joan i tinc 30 anys.

let persona2 = persona1
persona2.nom = "Anna"
persona1.saludar()  // Sortida: Hola, em dic Anna i tinc 30 anys.

Definició d'Estructures

Les estructures són tipus de valor, el que significa que les instàncies d'estructures es passen per valor. Això vol dir que quan assignem una instància d'estructura a una variable o constant, estem treballant amb una còpia de l'objecte original.

Sintaxi d'Estructures

struct Punt {
    var x: Int
    var y: Int

    func descripcio() -> String {
        return "Punt a (\(x), \(y))"
    }
}

Exemple d'Ús

var punt1 = Punt(x: 10, y: 20)
print(punt1.descripcio())  // Sortida: Punt a (10, 20)

var punt2 = punt1
punt2.x = 30
print(punt1.descripcio())  // Sortida: Punt a (10, 20)
print(punt2.descripcio())  // Sortida: Punt a (30, 20)

Comparació entre Classes i Estructures

Característica Classes Estructures
Tipus Referència Valor
Herència No
Inicialitzadors Personalitzats i per defecte Per defecte i personalitzats
Passat per Referència Valor
Extensions
Protocols

Exemples Pràctics

Exemple 1: Classe de Cotxe

class Cotxe {
    var marca: String
    var model: String
    var any: Int

    init(marca: String, model: String, any: Int) {
        self.marca = marca
        self.model = model
        self.any = any
    }

    func descripcio() -> String {
        return "\(marca) \(model) del \(any)"
    }
}

let cotxe1 = Cotxe(marca: "Toyota", model: "Corolla", any: 2020)
print(cotxe1.descripcio())  // Sortida: Toyota Corolla del 2020

Exemple 2: Estructura de Rectangle

struct Rectangle {
    var ample: Double
    var alt: Double

    func area() -> Double {
        return ample * alt
    }
}

let rectangle1 = Rectangle(ample: 5.0, alt: 10.0)
print("Àrea del rectangle: \(rectangle1.area())")  // Sortida: Àrea del rectangle: 50.0

Exercicis Pràctics

Exercici 1: Definir una Classe de Llibre

Defineix una classe Llibre amb les propietats titol, autor i numPagines. Afegeix un mètode descripcio que imprimeixi una descripció del llibre.

class Llibre {
    var titol: String
    var autor: String
    var numPagines: Int

    init(titol: String, autor: String, numPagines: Int) {
        self.titol = titol
        self.autor = autor
        self.numPagines = numPagines
    }

    func descripcio() -> String {
        return "\(titol) escrit per \(autor) té \(numPagines) pàgines."
    }
}

// Solució
let llibre1 = Llibre(titol: "1984", autor: "George Orwell", numPagines: 328)
print(llibre1.descripcio())  // Sortida: 1984 escrit per George Orwell té 328 pàgines.

Exercici 2: Definir una Estructura de Cercle

Defineix una estructura Cercle amb la propietat radi. Afegeix un mètode area que calculi l'àrea del cercle.

struct Cercle {
    var radi: Double

    func area() -> Double {
        return 3.14159 * radi * radi
    }
}

// Solució
let cercle1 = Cercle(radi: 5.0)
print("Àrea del cercle: \(cercle1.area())")  // Sortida: Àrea del cercle: 78.53975

Conclusió

En aquest tema, hem après a definir i utilitzar classes i estructures en Swift. Hem vist les seves diferències clau i com triar entre elles segons les necessitats del nostre programa. A més, hem practicat amb exemples i exercicis per reforçar els conceptes apresos. En el proper tema, explorarem les propietats i els mètodes en més detall.

© Copyright 2024. Tots els drets reservats