Czym jest programowanie obiektowe?
Programowanie obiektowe (OOP – object-oriented programming) to paradygmat programowania polegający na odzwierciedleniu elementów świata rzeczywistego (ale i nie tylko) poprzez tzw. obiekty. Zaletami tego paradygmatu jest między innymi duża modułowość, która pozwala na lepszą organizację programu. Dzięki temu, że idea opiera się na konstrukcji świata realnego, to paradygmat ten bardzo dobrze sprawdza się w zastosowaniach związanych z zarządzaniem rzeczywistymi systemami (np. systemy zarządzania magazynami). Aby zrozumieć zasady programowania obiektowego, należy zacząć od pojęcia klasy.
Klasa
Podstawowym pojęciem w programowaniu obiektowym jest klasa, której celem jest opisanie, jak będzie skonstruowany dany obiekt i jak będzie się zachowywał. Klasę możemy sobie wyobrazić jako instrukcję budowy obiektu. Przypuśćmy, że chcemy stworzyć obiekt reprezentujący samochód. Klasa będzie uwzględniać, z jakich elementów samochód się składa (tzw. atrybuty) i jakie czynności można w związku z nim wykonywać (tzw. metody). Klasa opisująca taki obiekt może być stworzona na różne sposoby, może np. różnić się stopniem szczegółowości, w zależności od tego, jakie będzie przeznaczenie programu, który tworzymy. Prosta klasa Samochod
może uwzględniać takie elementy jak:
- Atrybuty:
- marka
- model
- moc silnika
- prędkość
- itd.
- Metody:
- Uruchom silnik
- Zatrzymaj silnik
- Przyspiesz
- itd.
Obiekt
Atrybuty opisują cechy obiektu i jego stan, z kolei metody opisują działania, które wpływają na atrybuty. Klasę wykorzystujemy do stworzenia obiektu. Na przykład możemy stworzyć obiekt Ford_Focus
klasy Samochod
:
- Atrybuty:
- marka = Ford
- model = Focus
- moc silnika = 125
- prędkość = 0
Stan samochodu Ford_Focus
może być później modyfikowany zgodnie z metodami zdefiniowanymi wewnątrz klasy.
Implementacja klasy w Pythonie
Poniższy kod przedstawia klasę, którą powyżej.
class Samochod:
def __init__(self, marka, model, moc_silnika):
self.marka = marka
self.model = model
self.moc_silnika = moc_silnika
self.predkosc = 0 # Na początku samochód stoi, więc prędkość wynosi 0
def uruchom_silnik(self):
print("Silnik został uruchomiony.")
def zatrzymaj_silnik(self):
print("Silnik został zatrzymany.")
def przyspiesz(self, wartosc):
self.predkosc += wartosc
print(f"Przyspieszono. Aktualna prędkość: {self.predkosc} km/h.")
Przeanalizujmy składnię:
class
: Słowo kluczowe używane do definiowania nowej klasy.Samochod
: Nazwa klasy. Nazwy klas zazwyczaj pisane są z dużej litery, zgodnie z konwencją nazewnictwa w języku Python.def __init__(self, marka, model, moc_silnika)
– tzw. konstruktor, który jest automatycznie wywoływany podczas tworzenia nowego obiektu klasy.self
: Słowo kluczowe, które odnosi się do obiektu, na którym jest wywoływana metoda. Jest to konwencja w Pythonie, aby wskazywać na bieżący obiekt.marka
,model
,moc_silnika
: Argumenty konstruktora, które są przekazywane podczas tworzenia nowego obiektu klasySamochod
.
# Tworzenie obiektu klasy Samochod
moj_samochod = Samochod("Toyota", "Corolla", 150)
# Uruchamiamy silnik
moj_samochod.uruchom_silnik()
# Przyspieszamy o 30 km/h
moj_samochod.przyspiesz(30)
# Przyspieszamy o kolejne 20 km/h
moj_samochod.przyspiesz(20)
# Zatrzymujemy silnik
moj_samochod.zatrzymaj_silnik()
Wynik:
Silnik został uruchomiony.
Przyspieszono. Aktualna prędkość: 30 km/h.
Przyspieszono. Aktualna prędkość: 50 km/h.