Autor: 07.08.2023
Co to jest poliformizm (programowanie obiektowe)
Poliformizm to jeden z filarów programowania zorientowanego obiektowo. Jest to jedna z tych koncepcji, które musisz najpierw dobrze zrozumieć, aby je prawidłowo zaimplementować. W tym artykule postaramy się opisać temat poliformizmu używając prostego, zrozumiałego języka. Zaczynamy!
C# Developer
Naucz się programować w popularnym i przyjaznym języku C#. Zdobądź wartościowe umiejętności. Ta ścieżka kariery sprawi, że staniesz się pełnoprawnym kandydatem na C# Developera. Ścieżka zawiera dziesiątki zadań, ćwiczeń oraz projektów, które nauczą cię realnych, przydatnych na rynku pracy umiejętności. Dowiedz się więcej
Prosta definicja polimorfizmu
Polimorfizm w programowaniu to taka funkcja lub właściwość kodu, która pozwala na korzystanie z jednego "narzędzia" (np. metody, funkcji) do różnych zadań. Można to porównać do używania tego samego klucza do otwierania wielu różnych drzwi. Dzięki temu kod staje się bardziej elastyczny, ponieważ może działać na różnych typach danych lub obiektach, bez konieczności pisania osobnych fragmentów kodu dla każdego przypadku.
Co musisz umieć
Zakładamy, że znasz takie koncepcje jak klasa, obiekt, metoda oraz dziedziczenie. Bo bez nich, nie ma mowy o polimorfizmie. To technika związana z programowaniem typowo obiektowym, więc potrzebujesz podstawowej wiedzy na temat obiektowości. Język programowania na tym etapie nie ma wielkiego znaczenia - chcemy temat opisać w sposób jak najbardziej uniwersalny.
Podstawowy przykład - pseudokod
Zaczniemy od prostego przykładu, który zostanie napisany za pomocą tzw. pseudokodu. Dzięki temu możesz zrozumieć główne koncepcje, niezależnie od tego, w jakim języku programujesz.
Na samym początku wyjaśnijmy sobie problem, jaki chcemy rozwiązać.
- Chcemy stworzyć klasy reprezentujące figury geometryczne: Koło, Kwadrat, Trójkąt.
- Klasy mają mieć metody obliczajace powierzchnię figur. Każda figura używa innego wzoru do obliczania pola/powierzchni.
- Chcemy aby dla każdej figury pole było liczone metodą o tej samej nazwie: oblicz_powierzchnie().
Ten problem da się doskonale rozwiązać właśnie za pomocą poliformizmu!
Kod naszego rozwiązania
Spójrz na poniższy pseudokod:
Klasa Ksztalt:
Metoda oblicz_powierzchnie():
// Nie możemy pola liczyć tutaj, bo kształty różnią się wzorami pola
Klasa Kolo dziedziczy po Klasa Ksztalt:
Metoda oblicz_powierzchnie():
Promien = 5
Powierzchnia = Pi * Promien^2
Zwróć Powierzchnia
Klasa Kwadrat dziedziczy po Klasa Ksztalt:
Metoda oblicz_powierzchnie():
Bok = 4
Powierzchnia = Bok^2
Zwróć Powierzchnia
Klasa Trojkat dziedziczy po Klasa Ksztalt:
Metoda oblicz_powierzchnie():
Podstawa = 6
Wysokosc = 8
Powierzchnia = 0.5 * Podstawa * Wysokosc
Zwróć Powierzchnia
Główny program:
Ksztalt ksz1 = Nowy Kolo()
Ksztalt ksz2 = Nowy Kwadrat()
Ksztalt ksz3 = Nowy Trojkat()
Powierzchnia1 = ksz1.oblicz_powierzchnie()
Powierzchnia2 = ksz2.oblicz_powierzchnie()
Powierzchnia3 = ksz3.oblicz_powierzchnie()
Wyświetl "Powierzchnia koła:", Powierzchnia1
Wyświetl "Powierzchnia kwadratu:", Powierzchnia2
Wyświetl "Powierzchnia trójkąta:", Powierzchnia3
Wyjaśnimy sobie najważniejsze elementy.
- Mamy abstrakcyjną klasę Ksztalt, która posiada metodę oblicz_powierzchnie(). Ta metoda jest zadeklarowana, ale nie jest zdefiniowana, ponieważ różne kształty mają różne wzory na obliczenie powierzchni.
- Następnie mamy klasy Kolo, Kwadrat i Trojkat, które dziedziczą po klasie Ksztalt i nadpisują metodę oblicz_powierzchnie(), dostosowując ją do odpowiednich wzorów dla danego kształtu.
- W głównym programie tworzymy instancje różnych kształtów, a następnie wywołujemy metodę oblicz_powierzchnie() dla każdego z nich. Dzięki polimorfizmowi, możemy użyć tej samej metody na różnych typach kształtów, a odpowiedni wzór zostanie automatycznie wybrany w zależności od rodzaju kształtu.
Nasz pseudokod spełnia w 100% początkowe założenia. Używamy jednej metody oblicz_powierzchnie() dla każdego typu figury. Kompilator języka wie, którą wersją metody wybrać dla danego kształtu: dla Koła wybierze implementację metody z klasy Koło, dla Kwadratu wybierze implementację metody z klasy Kwadrat itp.
Wróćmy do naszej definicji z początku artykułu: Polimorfizm w programowaniu to taka funkcja lub właściwość kodu, która pozwala na korzystanie z jednego "narzędzia" (np. metody) do różnych zadań. Pokazany przez nas kod doskonale spełnia tą definicję. Jedna metoda liczy pola dla różnych figur i zwraca dla każdej z nich właściwe obliczone pole powierzchni.
Uzyskaliśmy w ten sposób prosty kod: programista korzystający z naszych klas wie, że może zawsze wyliczyć prawidłowe pole, za pomocą tej samej metody. Nie musi korzystać z wielu oddzielnych metod. Widzisz jak bardzo ułatwia to życie?
Naucz się programować w jednym z najbardziej wszechstronnych języków programowania.
Dowiedz się więcejW jakich językach implementujemy poliformizm?
Specjalnie zrezygnowaliśmy z pokazania przykładu poliformizmu dla konkretnego języka. Chcemy aby ten artykuł przekazywał uniwersalną wiedzę.
Wiele popularnych języków programowania umożliwia zaimplementowanie łatwe poliformizmu. Mówimy tu o takich językach jak Java, C# czy C++. W praktyce do implementacji polimorfizmu potrzebne są takie mechanizmy jak Dziedziczenie, Abstrakcyjne Metody czy Interfejsy.