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.
- 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.NameHerència
Per crear una classe derivada, utilitzem la paraula clau inherit:
Exemple Pràctic
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
- Interfícies en F#
Definició d'Interfícies
Les interfícies es defineixen amb la paraula clau interface:
Implementació d'Interfícies
Per implementar una interfície, utilitzem la paraula clau interface dins de la definició de la classe:
Exemple Pràctic
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
- 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 barksExercici 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 movingConclusió
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
Curs de Programació en F#
Mòdul 1: Introducció a F#
Mòdul 2: Conceptes Bàsics
- Tipus de Dades i Variables
- Funcions i Immutabilitat
- Coincidència de Patrons
- Col·leccions: Llistes, Matrius i Seqüències
Mòdul 3: Programació Funcional
Mòdul 4: Estructures de Dades Avançades
Mòdul 5: Programació Orientada a Objectes en F#
- Classes i Objectes
- Herència i Interfícies
- Barreja de Programació Funcional i Orientada a Objectes
- Mòduls i Espais de Noms
Mòdul 6: Programació Asíncrona i Paral·lela
- Fluxos de Treball Asíncrons
- Biblioteca de Tasques Paral·leles
- MailboxProcessor i Agents
- Patrons de Concurrència
Mòdul 7: Accés i Manipulació de Dades
Mòdul 8: Proves i Depuració
- Proves Unitàries amb NUnit
- Proves Basades en Propietats amb FsCheck
- Tècniques de Depuració
- Perfilat de Rendiment
