En aquest tema, explorarem com F# maneja la programació orientada a objectes (OOP), en particular la herència i les interfícies. Tot i que F# és principalment un llenguatge funcional, també ofereix suport per a OOP, permetent als desenvolupadors utilitzar el millor dels dos mons.

Objectius d'Aprenentatge

  • Comprendre els conceptes de classes i herència en F#.
  • Aprendre a definir i implementar interfícies.
  • Veure com es poden combinar la programació funcional i orientada a objectes.

  1. Herència en F#

Definició de Classes Bàsiques

En F#, les classes es defineixen utilitzant la paraula clau type. Aquí teniu un exemple d'una classe bàsica:

type Animal(name: string) =
    member this.Name = name
    member this.Speak() = printfn "%s makes a sound" this.Name

Herència

Per crear una classe derivada, utilitzem la paraula clau inherit:

type Dog(name: string) =
    inherit Animal(name)
    member this.Bark() = printfn "%s barks" this.Name

Exemple Pràctic

let myDog = Dog("Rex")
myDog.Speak()  // Output: Rex makes a sound
myDog.Bark()   // Output: Rex barks

Exercici 1: Crear una Classe Derivada

Tasca: Crea una classe Cat que hereti de Animal i afegeixi un mètode Meow.

type Cat(name: string) =
    inherit Animal(name)
    member this.Meow() = printfn "%s meows" this.Name

// Prova la teva classe
let myCat = Cat("Whiskers")
myCat.Speak()  // Output: Whiskers makes a sound
myCat.Meow()   // Output: Whiskers meows

  1. Interfícies en F#

Definició d'Interfícies

Les interfícies es defineixen amb la paraula clau interface:

type IAnimal =
    abstract member Speak: unit -> unit

Implementació d'Interfícies

Per implementar una interfície, utilitzem la paraula clau interface dins de la definició de la classe:

type Dog(name: string) =
    interface IAnimal with
        member this.Speak() = printfn "%s barks" name

Exemple Pràctic

let myDog = Dog("Rex") :> IAnimal
myDog.Speak()  // Output: Rex barks

Exercici 2: Implementar una Interfície

Tasca: Crea una interfície IMovable amb un mètode Move i implementa-la en una classe Car.

type IMovable =
    abstract member Move: unit -> unit

type Car(model: string) =
    interface IMovable with
        member this.Move() = printfn "%s is moving" model

// Prova la teva classe
let myCar = Car("Tesla") :> IMovable
myCar.Move()  // Output: Tesla is moving

  1. Barreja de Programació Funcional i Orientada a Objectes

F# permet combinar la programació funcional amb la orientada a objectes. Això es pot fer utilitzant funcions d'ordre superior amb classes i interfícies.

Exemple Pràctic

let makeAnimalSpeak (animal: IAnimal) =
    animal.Speak()

let myDog = Dog("Rex") :> IAnimal
makeAnimalSpeak myDog  // Output: Rex barks

Exercici 3: Funcions d'Ordre Superior amb Interfícies

Tasca: Crea una funció moveVehicle que prengui un objecte de tipus IMovable i cridi al mètode Move.

let moveVehicle (vehicle: IMovable) =
    vehicle.Move()

let myCar = Car("Tesla") :> IMovable
moveVehicle myCar  // Output: Tesla is moving

Conclusió

En aquest tema, hem après com F# maneja la herència i les interfícies, i com podem combinar la programació funcional amb la orientada a objectes. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Ara estem preparats per explorar com barrejar la programació funcional i orientada a objectes en el següent tema.

Proper Tema: Barreja de Programació Funcional i Orientada a Objectes

© Copyright 2024. Tots els drets reservats