
Autor: 24.11.2023
C# - abstrakcja i enkapsulacja
Język C# jest językiem typowo obiektowym. W programowaniu obiektowym mamy pewne reguły, które umożliwiaja nam tworzenie bardziej czytelnego i łatwiejszejszego w utrzymaniu kodu. W tym artykule przedstawimy dwie takie reguły: abstrakcję oraz enkapsulację. Pokażemy m.in przykłady kodu stworzonego z użyciem tych dwóch istotnych koncepcji.
Czym jest abstrakcja i jak ją rozumieć
Abstrakcja to koncepcja polegająca na ukryciu skomplikowanych szczegółów i pokazaniu tylko niezbędnych funkcji obiektu. To trochę jak korzystanie z samochodu: nie musisz rozumieć dokładnie, jak działa silnik, aby móc prowadzić samochód. Wystarczy, że wiesz, jak używać kierownicy, pedałów i innych podstawowych elementów sterujących.
Prosty przykład abstrakcji
Wyobraźmy sobie, że tworzymy program do zarządzania pojazdami. Zaczynamy od stworzenia abstrakcyjnej klasy bazowej o nazwie Vehicle, która zawiera podstawowe właściwości i metody wspólne dla wszystkich typów pojazdów.
public abstract class Vehicle
{
public abstract void StartEngine();
public void StopEngine()
{
Console.WriteLine("Engine stop");
}
}
Klasa Vehicle zawiera abstrakcyjną metodę StartEngine, która musi być zaimplementowana w klasach pochodnych oraz zwykłą metodę StopEngine, która ma już swoją implementację.
Następnie tworzymy konkretną klasę Car, która dziedziczy z Vehicle i implementuje metodę StartEngine.
public class Car : Vehicle
{
public override void StartEngine()
{
Console.WriteLine("Engine start");
}
}
Jak użyć takiej abstrakcji? Oto przykład.
class Program
{
static void Main()
{
Vehicle myCar = new Car();
myCar.StartEngine();
myCar.StopEngine();
}
}
W powyższym przykładzie, Car jest konkretnym pojazdem, który implementuje abstrakcyjne zachowania zdefiniowane w Vehicle.
Podsumowanie
Abstrakcja to sposób na ukrycie skomplikowanych szczegółów i pokazanie tylko tego, co niezbędne. Abstrakcyjna klasa w C# to taka, która może zawierać abstrakcyjne metody (bez implementacji) oraz zwykłe metody. Klasy pochodne implementują abstrakcyjne metody i mogą używać zwykłych metod z klasy abstrakcyjnej. Dzięki temu twój kod staje się bardziej uporządkowany i łatwiejszy do zarządzania.
Czym jest enkapsulacja
Enkapsulacja w języku C# to sposób na ukrycie szczegółów implementacji klasy i udostępnienie tylko tego, co jest potrzebne do jej użytkowania. Można to porównać do odbiornika telewizyjnego: jako użytkownik znasz funkcje, takie jak włączanie, zmiana kanałów czy regulacja głośności, ale nie musisz wiedzieć, jak telewizor działa w środku. Enkapsulacja pozwala na ukrycie "wnętrza" obiektu i eksponowanie tylko bezpiecznych do użycia elementów.
Prosty przykład enkapsulacji
Wyobraźmy sobie, że masz klasę BankAccount. Chcesz, aby saldo na koncie było bezpieczne i zmieniane tylko w kontrolowany sposób.
public class BankAccount
{
private decimal balance;
public void Deposit(decimal amount)
{
if (amount > 0)
{
balance += amount;
}
}
public bool Withdraw(decimal amount)
{
if (balance >= amount && amount > 0)
{
balance -= amount;
return true;
}
return false;
}
public decimal GetBalance()
{
return balance;
}
}
Co takiego dzieje się w powyższym kodzie?
- Prywatne pole balance jest prywatnym polem, co oznacza, że do jego wartości można dostęp tylko wewnątrz klasy BankAccount. To zapobiega przypadkowej lub nieautoryzowanej zmiany salda.
- Metody Deposit(), Withdraw() i GetBalance() to publiczne metody, które pozwalają na interakcję z kontem bankowym. Możesz wpłacać i wypłacać pieniądze oraz sprawdzać saldo, ale nie możesz bezpośrednio zmienić balance.
- Kontrola Dostępu: Użytkownik klasy BankAccount może korzystać z publicznych metod, ale nie ma bezpośredniego dostępu do wewnętrznego stanu (saldo konta), co jest esencją enkapsulacji.
Podsumowanie
Enkapsulacja to jak posiadanie sejfu w banku. Możesz włożyć lub wyjąć pieniądze (metody Deposit() i Withdraw()) i sprawdzić, ile masz (metoda GetBalance()), ale nie masz bezpośredniego dostępu do mechanizmów wewnętrznych sejfu, który chroni twoje pieniądze.

Naucz się programować w popularnym i przyjaznym języku C#. Zdobądź wartościowe umiejętności.
Dowiedz się więcejParę słów na koniec
Mamy nadzieję, że dzięki lekturze tego artykułu wiesz już na czym polega abstrakcja oraz enkapsulacja. To bardzo powszechnie stosowane techniki programowania obiektowego. Pozwalają one na tworzenie lepszego, bardziej bezpiecznego i przewidywalnego kodu.