Introducció
En aquest tema, explorarem dos conceptes fonamentals de la Programació Orientada a Objectes (POO): l'encapsulació i l'abstracció. Aquests conceptes ajuden a organitzar i gestionar el codi de manera més eficient i segura.
Encapsulació
Què és l'Encapsulació?
L'encapsulació és el procés de restringir l'accés a certs components d'un objecte i només exposar aquells que són necessaris per a l'ús extern. Això es fa per protegir les dades i assegurar que només es puguin modificar de maneres controlades.
Beneficis de l'Encapsulació
- Seguretat: Protegeix les dades de modificacions no autoritzades.
- Modularitat: Facilita la divisió del codi en mòduls més petits i manejables.
- Mantenibilitat: Simplifica la modificació i actualització del codi.
Implementació de l'Encapsulació en C++
En C++, l'encapsulació es realitza utilitzant modificadors d'accés com private, protected i public.
#include <iostream>
using namespace std;
class Rectangle {
private:
double length;
double width;
public:
// Constructor
Rectangle(double l, double w) {
length = l;
width = w;
}
// Mètode per calcular l'àrea
double area() {
return length * width;
}
// Mètode per establir la longitud
void setLength(double l) {
if (l > 0) {
length = l;
}
}
// Mètode per obtenir la longitud
double getLength() {
return length;
}
};
int main() {
Rectangle rect(10.0, 5.0);
cout << "Àrea: " << rect.area() << endl;
rect.setLength(15.0);
cout << "Nova longitud: " << rect.getLength() << endl;
cout << "Nova àrea: " << rect.area() << endl;
return 0;
}Explicació del Codi
- Modificadors d'Accés:
privaterestringeix l'accés a les variableslengthiwidthnomés dins de la classeRectangle. - Mètodes Públics:
setLengthigetLengthsón mètodes públics que permeten modificar i accedir a la variablelengthde manera controlada.
Abstracció
Què és l'Abstracció?
L'abstracció és el procés de simplificar un sistema complex ocultant els detalls innecessaris i exposant només les parts rellevants. Això ajuda a reduir la complexitat i facilita la comprensió i l'ús del sistema.
Beneficis de l'Abstracció
- Simplicitat: Redueix la complexitat mostrant només la informació essencial.
- Reutilització: Facilita la reutilització del codi en diferents contextos.
- Mantenibilitat: Simplifica la modificació i actualització del codi.
Implementació de l'Abstracció en C++
En C++, l'abstracció es pot aconseguir mitjançant l'ús de classes i interfícies.
#include <iostream>
using namespace std;
// Classe abstracta
class Shape {
public:
// Mètode purament virtual
virtual double area() = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) {
radius = r;
}
double area() override {
return 3.14159 * radius * radius;
}
};
int main() {
Circle circle(5.0);
cout << "Àrea del cercle: " << circle.area() << endl;
return 0;
}Explicació del Codi
- Classe Abstracta:
Shapeés una classe abstracta amb un mètode purament virtualarea(). - Classe Derivada:
Circlehereta deShapei implementa el mètodearea().
Exercicis Pràctics
Exercici 1: Encapsulació
Crea una classe BankAccount amb les següents característiques:
- Variables privades:
accountNumber,balance. - Mètodes públics:
deposit(double amount),withdraw(double amount),getBalance().
Solució
#include <iostream>
using namespace std;
class BankAccount {
private:
int accountNumber;
double balance;
public:
BankAccount(int accNum, double bal) {
accountNumber = accNum;
balance = bal;
}
void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
double getBalance() {
return balance;
}
};
int main() {
BankAccount account(12345, 1000.0);
account.deposit(500.0);
cout << "Saldo: " << account.getBalance() << endl;
account.withdraw(200.0);
cout << "Saldo: " << account.getBalance() << endl;
return 0;
}Exercici 2: Abstracció
Crea una classe abstracta Vehicle amb un mètode purament virtual move(). Implementa dues classes derivades Car i Bicycle que heretin de Vehicle i implementin el mètode move().
Solució
#include <iostream>
using namespace std;
class Vehicle {
public:
virtual void move() = 0;
};
class Car : public Vehicle {
public:
void move() override {
cout << "El cotxe es mou per carretera." << endl;
}
};
class Bicycle : public Vehicle {
public:
void move() override {
cout << "La bicicleta es mou per carretera." << endl;
}
};
int main() {
Car car;
Bicycle bicycle;
car.move();
bicycle.move();
return 0;
}Resum
En aquest tema, hem après sobre l'encapsulació i l'abstracció, dos conceptes clau de la Programació Orientada a Objectes. Hem vist com aquests conceptes ajuden a organitzar i gestionar el codi de manera més eficient i segura. També hem implementat exemples pràctics per reforçar els conceptes apresos. En el proper tema, explorarem la programació orientada a objectes amb més profunditat, incloent-hi herència i polimorfisme.
Curs de Programació en C++
Mòdul 1: Introducció al C++
- Introducció al C++
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Entrada i Sortida
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Introducció a les Funcions
- Paràmetres de Funció i Tipus de Retorn
- Sobrecàrrega de Funcions
- Recursivitat
Mòdul 4: Arrays i Strings
Mòdul 5: Punteres i Referències
- Introducció als Punteres
- Aritmètica de Punteres
- Punteres i Arrays
- Referències
- Assignació Dinàmica de Memòria
Mòdul 6: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació i Abstracció
Mòdul 7: Temes Avançats
- Plantilles
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Biblioteca de Plantilles Estàndard (STL)
- Expressions Lambda
- Multifil
