Programowanie obiektowe: Różnice pomiędzy wersjami
m (→Pojęcia związane z programowaniem obiektowym: Clean up, replaced: *''' → * ''' (8)) |
m (Czyszczenie tekstu) |
||
Linia 31: | Linia 31: | ||
* ''' Klasa bazowa (nadklasa, klasa macierzysta) ''' - ogólna klasa wyższego poziomu.<ref NAME="DK" >Na podstawie: Dattatri K. (2009), ''C++: Effective Object-Oriented'', Wydawnictwo Helion, Gliwice, str. 30</ref> | * ''' Klasa bazowa (nadklasa, klasa macierzysta) ''' - ogólna klasa wyższego poziomu.<ref NAME="DK" >Na podstawie: Dattatri K. (2009), ''C++: Effective Object-Oriented'', Wydawnictwo Helion, Gliwice, str. 30</ref> | ||
* ''' Klasa pochodna (podklasa, klasa potomna) ''' - klasa niższego poziomu. <ref name="DK"/> | * ''' Klasa pochodna (podklasa, klasa potomna) ''' - klasa niższego poziomu. <ref name="DK"/> | ||
* ''' [[Agregacja]] (kompozycja) '''- jest to łączenie kilku obiektów (klas)w jeden obiekt (klasę). | * ''' [[Agregacja]] (kompozycja) ''' - jest to łączenie kilku obiektów (klas)w jeden obiekt (klasę). | ||
* ''' [[Prototyp]] ''' - tworzenie nowych obiektów, które są wzorowane na obiekcie macierzystym. Wykorzystywane w sytuacjach, kiedy należy utworzyć wiele podobnych obiektów tego samego typu. | * ''' [[Prototyp]] ''' - tworzenie nowych obiektów, które są wzorowane na obiekcie macierzystym. Wykorzystywane w sytuacjach, kiedy należy utworzyć wiele podobnych obiektów tego samego typu. | ||
== Koncepcja == | ==Koncepcja== | ||
Programowanie zorientowane obiektowo w swojej istocie zawiera wiele odmiennych technik wykorzystywanych przy tworzeniu aplikacji komputerowych. Istnieje wiele odmiennych zdań co do jednoznacznej charakterystyki programowania zorientowanego obiektowo | Programowanie zorientowane obiektowo w swojej istocie zawiera wiele odmiennych technik wykorzystywanych przy tworzeniu aplikacji komputerowych. Istnieje wiele odmiennych zdań co do jednoznacznej charakterystyki programowania zorientowanego obiektowo - nie każdy obiektowy język programowania implementuje w swoich założeniach każdą z metod, spośród których m.in. można wyróżnić<ref>Na podstawie: Grębosz J. (2008), ''Symfonia C++ standard'', Wyd. III, Wydawnictwo "EDITION 2000”, Kraków, str. 791, 865-866, 879</ref><ref>Na podstawie: Eckel B. (2006), ''Thinking in Java'', Wyd. IV, Wydawnictwo Helion, Gliwice, str. 38-39, 202-203, 375-376</ref><ref>Na podstawie: Martin R.C. (2010), ''Clean Code: A Handbook of Agile Software Craftsmanship'', Wyd. I, | ||
Wydawnictwo Helion, Gliwice, str. 54, 56-58, 134</ref>: | Wydawnictwo Helion, Gliwice, str. 54, 56-58, 134</ref>: | ||
=== Abstrakcja === | ===Abstrakcja=== | ||
Pojęcie w programowaniu obiektowym najczyściej utożsamiane z klasą. Jest modelem, który w rzeczywistości nie reprezentuje żadnego istniejącego obiektu, a jedynie na podstawie którego definiowane są inne obiekty. Przykładem może być ssak, lub zwierzę | Pojęcie w programowaniu obiektowym najczyściej utożsamiane z klasą. Jest modelem, który w rzeczywistości nie reprezentuje żadnego istniejącego obiektu, a jedynie na podstawie którego definiowane są inne obiekty. Przykładem może być ssak, lub zwierzę - nie ma ich rzeczywistego obiektu, a jedynie obiekty potomne bazujące na ich własnościach. | ||
<google>ban728t</google> | <google>ban728t</google> | ||
=== Dziedziczenie === | ===Dziedziczenie=== | ||
[[Technika]] programowania, która umożliwia wykorzystanie istniejącej już klasy do utworzenia nowej, bazującej na swojej poprzedniczce. Klasy dziedziczą z innych klas lub obiekty z obiektów (w JavaScript). | [[Technika]] programowania, która umożliwia wykorzystanie istniejącej już klasy do utworzenia nowej, bazującej na swojej poprzedniczce. Klasy dziedziczą z innych klas lub obiekty z obiektów (w JavaScript). | ||
=== Polimorfizm === | ===Polimorfizm=== | ||
Inaczej wielopostaciowość, [[metoda]] pozwalająca funkcji wirtualnej przyjmować różne sposoby jej realizacji. Daje możliwość wywołania tej samej metody na różnych obiektach, przy czym mogą one (obiekty)odpowiadać w różny sposób w zależności od typu. | Inaczej wielopostaciowość, [[metoda]] pozwalająca funkcji wirtualnej przyjmować różne sposoby jej realizacji. Daje możliwość wywołania tej samej metody na różnych obiektach, przy czym mogą one (obiekty)odpowiadać w różny sposób w zależności od typu. | ||
Przykładowo metoda jedź w rowerze będzie inaczej realizowana, niż metoda jedź w samochodzie, mimo tego, że nazywa się tak samo. | Przykładowo metoda jedź w rowerze będzie inaczej realizowana, niż metoda jedź w samochodzie, mimo tego, że nazywa się tak samo. | ||
=== Programowanie uogólnione === | |||
===Programowanie uogólnione=== | |||
Paradygmat programowania znany również jako ''programowanie generyczne'' umożliwiający pisanie programów w danym języku bez wcześniejszej znajomości jego typów wbudowanych. | Paradygmat programowania znany również jako ''programowanie generyczne'' umożliwiający pisanie programów w danym języku bez wcześniejszej znajomości jego typów wbudowanych. | ||
=== Hermetyzacja === | ===Hermetyzacja=== | ||
Pojęcie znane również pod nazwą ''enkapsulacja'' - porządkowanie metod oraz pól danej klasy z równoczesnym zatajeniem ich implementacji. | Pojęcie znane również pod nazwą ''enkapsulacja'' - porządkowanie metod oraz pól danej klasy z równoczesnym zatajeniem ich implementacji. | ||
=== Obsługa wyjątków === | ===Obsługa wyjątków=== | ||
Technika podejścia do obsługi sytuacji wyjątkowych, których nie można zignorować i sposobu ich realizacji podczas działania programu komputerowego. | Technika podejścia do obsługi sytuacji wyjątkowych, których nie można zignorować i sposobu ich realizacji podczas działania programu komputerowego. | ||
== Zalety i wady == | ==Zalety i wady== | ||
Wśród zalet programowania zorientowanego obiektowo można wyróżnić<ref>Na podstawie: Martin R.C. (2010), ''Clean Code: A Handbook of Agile Software Craftsmanship'', Wyd. I, Wydawnictwo Helion, Gliwice, str. 69, 300, 101-104</ref>: | Wśród zalet programowania zorientowanego obiektowo można wyróżnić<ref>Na podstawie: Martin R.C. (2010), ''Clean Code: A Handbook of Agile Software Craftsmanship'', Wyd. I, Wydawnictwo Helion, Gliwice, str. 69, 300, 101-104</ref>: | ||
* Wielokrotne wykorzystywanie raz napisanego kodu oraz co się z tym wiąże [[zasada]] DRY (ang. ''Don't Repeat Yourself''), | * Wielokrotne wykorzystywanie raz napisanego kodu oraz co się z tym wiąże [[zasada]] DRY (ang. ''Don't Repeat Yourself''), | ||
Linia 72: | Linia 73: | ||
* Nie odpowiedni dla wszystkich rodzajów rozwiązanych problemów. Niektóre problemy (niewielkie skrypty, stosunkowo małe programy) skuteczniej, szybciej i wydajniej realizuje inżynieria budowy strukturalnej, niż metoda zorientowana obiektowo. | * Nie odpowiedni dla wszystkich rodzajów rozwiązanych problemów. Niektóre problemy (niewielkie skrypty, stosunkowo małe programy) skuteczniej, szybciej i wydajniej realizuje inżynieria budowy strukturalnej, niż metoda zorientowana obiektowo. | ||
== Języki wykorzystujące OOP == | ==Języki wykorzystujące OOP== | ||
Wybrane, bardziej popularne [[języki programowania]] wykorzystujące technikę zorientowaną obiektowo to między innymi<ref>Na podstawie: Meyer B. (2005), ''Programowanie zorientowane obiektowo'', Wyd. II, Wydawnictwo Helion, Gliwice, str. 1246-1275</ref>: | Wybrane, bardziej popularne [[języki programowania]] wykorzystujące technikę zorientowaną obiektowo to między innymi<ref>Na podstawie: Meyer B. (2005), ''Programowanie zorientowane obiektowo'', Wyd. II, Wydawnictwo Helion, Gliwice, str. 1246-1275</ref>: | ||
* Ada | * Ada | ||
Linia 109: | Linia 110: | ||
{{a|Maciej Sypień, Krystyna Jania}} | {{a|Maciej Sypień, Krystyna Jania}} | ||
[[Kategoria:Języki programowania]] | [[Kategoria:Języki programowania]] | ||
{{#metamaster:description|Programowanie obiektowe to paradygmat programowania, który umożliwia tworzenie i współdziałanie obiektów. Jest bardziej modularne i zrozumiałe.}} | {{#metamaster:description|Programowanie obiektowe to paradygmat programowania, który umożliwia tworzenie i współdziałanie obiektów. Jest bardziej modularne i zrozumiałe.}} |
Wersja z 11:42, 2 lis 2023
Programowanie obiektowe |
---|
Polecane artykuły |
Programowanie obiektowe lub inaczej programowanie zorientowane obiektowo (ang. object-oriented programing, OOP) to paradygmat programowania przy pomocy obiektów posiadających swoje właściwości jak pola (dane, informacje o obiekcie) oraz metody (zachowanie, działania jakie wykonuje obiekt). Programowanie obiektowe polega na definiowaniu obiektów oraz wywoływaniu ich metod, tak aby współdziałały wzajemnie ze sobą.
TL;DR
Programowanie obiektowe to paradygmat programowania, w którym tworzy się obiekty posiadające pola i metody, które współdziałają ze sobą. W programowaniu obiektowym używa się pojęć takich jak obiekt, pole, metoda, klasa, dziedziczenie, polimorfizm, programowanie uogólnione, hermetyzacja i obsługa wyjątków. Programowanie obiektowe ma wiele zalet, takich jak wielokrotne wykorzystywanie kodu, lepsze zarządzanie kodem i łatwiejsze przyswajanie nowych projektów. Jednak ma także wady, takie jak wolniejsza realizacja w porównaniu do programowania strukturalnego. Przykładowe języki programowania, które wykorzystują programowanie obiektowe, to C++, Java, Python, Ruby i Visual Basic.
Pojęcia związane z programowaniem obiektowym
Aby zrozumieć czym dokładnie zajmuje się programowanie obiektowe, na początek musimy poznać kilka podstawowych pojęć ściśle z nim związanych, takich jak:
- Obiekt (inaczej "instancja") - programistyczny sposób zaprezentowania bytu (osoby lub rzeczy). Byt w rozumieniu programistycznym może być coś ze świata fizycznego lub bardziej abstrakcyjny koncept.
- Pole - cecha danego obiektu. Zamiast pól mogą również wystąpić dane, atrybuty, zmienne egzemplarza lub właściwości.
- Metoda - czynność danego obiektu w świecie rzeczywistym. Realna implementacja funkcji składowej, która jest zdefiniowana w modelu klasy
Teraz zobrazuję powyższe definicje prostym przykładem z życia. Powiedzmy, że obiektem jest kot, wtedy jego cechami (czyli polami) może być jego kolor czy masa ciała, natomiast metodami są czynności, które wykonuje - miauczenie, picie mleka.
- Klasa - przepis na obiekt. Klasa jest szablonem (wzorem), według którego możemy tworzyć różne obiekty. Definiuje nowy typ danych. W niektórych językach nie istnieje pojęcie klasy, np: w JavaScript.
Inne pojęcia:
- Klasa bazowa (nadklasa, klasa macierzysta) - ogólna klasa wyższego poziomu.[1]
- Klasa pochodna (podklasa, klasa potomna) - klasa niższego poziomu. [1]
- Agregacja (kompozycja) - jest to łączenie kilku obiektów (klas)w jeden obiekt (klasę).
- Prototyp - tworzenie nowych obiektów, które są wzorowane na obiekcie macierzystym. Wykorzystywane w sytuacjach, kiedy należy utworzyć wiele podobnych obiektów tego samego typu.
Koncepcja
Programowanie zorientowane obiektowo w swojej istocie zawiera wiele odmiennych technik wykorzystywanych przy tworzeniu aplikacji komputerowych. Istnieje wiele odmiennych zdań co do jednoznacznej charakterystyki programowania zorientowanego obiektowo - nie każdy obiektowy język programowania implementuje w swoich założeniach każdą z metod, spośród których m.in. można wyróżnić[2][3][4]:
Abstrakcja
Pojęcie w programowaniu obiektowym najczyściej utożsamiane z klasą. Jest modelem, który w rzeczywistości nie reprezentuje żadnego istniejącego obiektu, a jedynie na podstawie którego definiowane są inne obiekty. Przykładem może być ssak, lub zwierzę - nie ma ich rzeczywistego obiektu, a jedynie obiekty potomne bazujące na ich własnościach.
Dziedziczenie
Technika programowania, która umożliwia wykorzystanie istniejącej już klasy do utworzenia nowej, bazującej na swojej poprzedniczce. Klasy dziedziczą z innych klas lub obiekty z obiektów (w JavaScript).
Polimorfizm
Inaczej wielopostaciowość, metoda pozwalająca funkcji wirtualnej przyjmować różne sposoby jej realizacji. Daje możliwość wywołania tej samej metody na różnych obiektach, przy czym mogą one (obiekty)odpowiadać w różny sposób w zależności od typu.
Przykładowo metoda jedź w rowerze będzie inaczej realizowana, niż metoda jedź w samochodzie, mimo tego, że nazywa się tak samo.
Programowanie uogólnione
Paradygmat programowania znany również jako programowanie generyczne umożliwiający pisanie programów w danym języku bez wcześniejszej znajomości jego typów wbudowanych.
Hermetyzacja
Pojęcie znane również pod nazwą enkapsulacja - porządkowanie metod oraz pól danej klasy z równoczesnym zatajeniem ich implementacji.
Obsługa wyjątków
Technika podejścia do obsługi sytuacji wyjątkowych, których nie można zignorować i sposobu ich realizacji podczas działania programu komputerowego.
Zalety i wady
Wśród zalet programowania zorientowanego obiektowo można wyróżnić[5]:
- Wielokrotne wykorzystywanie raz napisanego kodu oraz co się z tym wiąże zasada DRY (ang. Don't Repeat Yourself),
- Bardziej spójna ideologia zarządzania kodem w stosunku do programowania strukturalnego,
- Efektywniejsza praca przy dużym projekcie w zespole wykorzystującym technikę OOP,
- Większa łatwość przyswojenia ideologii nowego projektu dla wdrażającego się programisty w stosunku do metodologii strukturalnej,
- Niższy koszt rozwoju i późniejszej konserwacji aplikacji dzięki zastosowaniu OOP.
- Stabilność i elastyczność. Łatwość w dokonywaniu zmian oraz możliwość rozbudowywania o nowe funkcje (dzięki istnieniu dziedziczenia) bez konieczności wyrzucania całego systemu.
Wśród wad zaliczyć można[6]:
- Wolniejsza realizacja programu realizującego technikę zorientowaną obiektowo w stosunku do programowania strukturalnego,
- Istnienie potencjalnych trudności w zmianie nawyków oraz tępa nauki z programowania strukturalnego na programowanie obiektowe,
- Nie odpowiedni dla wszystkich rodzajów rozwiązanych problemów. Niektóre problemy (niewielkie skrypty, stosunkowo małe programy) skuteczniej, szybciej i wydajniej realizuje inżynieria budowy strukturalnej, niż metoda zorientowana obiektowo.
Języki wykorzystujące OOP
Wybrane, bardziej popularne języki programowania wykorzystujące technikę zorientowaną obiektowo to między innymi[7]:
- Ada
- Beta
- C++
- C#
- Eiffel
- Loops
- Objective-C
- Java
- Modula-3
- Oberon
- PHP
- Perl
- Python
- Ruby
- Simula
- Smalltalk
- Visual Basic
Przypisy
- ↑ 1,0 1,1 Na podstawie: Dattatri K. (2009), C++: Effective Object-Oriented, Wydawnictwo Helion, Gliwice, str. 30
- ↑ Na podstawie: Grębosz J. (2008), Symfonia C++ standard, Wyd. III, Wydawnictwo "EDITION 2000”, Kraków, str. 791, 865-866, 879
- ↑ Na podstawie: Eckel B. (2006), Thinking in Java, Wyd. IV, Wydawnictwo Helion, Gliwice, str. 38-39, 202-203, 375-376
- ↑ Na podstawie: Martin R.C. (2010), Clean Code: A Handbook of Agile Software Craftsmanship, Wyd. I, Wydawnictwo Helion, Gliwice, str. 54, 56-58, 134
- ↑ Na podstawie: Martin R.C. (2010), Clean Code: A Handbook of Agile Software Craftsmanship, Wyd. I, Wydawnictwo Helion, Gliwice, str. 69, 300, 101-104
- ↑ Na podstawie: Meyer B. (2005), Programowanie zorientowane obiektowo, Wyd. II, Wydawnictwo Helion, Gliwice, str. 52
- ↑ Na podstawie: Meyer B. (2005), Programowanie zorientowane obiektowo, Wyd. II, Wydawnictwo Helion, Gliwice, str. 1246-1275
Bibliografia
- Daniluk A. (2011), Pracownia programowania obiektowego, Uniwersytet Marii Curie-Skłodowskiej, Lublin
- Dattatri K. (2009), C++: Effective Object-Oriented, Wydawnictwo Helion, Gliwice
- Eckel B. (2006), Thinking in Java, Wyd. IV, Wydawnictwo Helion, Gliwice
- Grębosz J. (2008), Symfonia C++ standard, Wyd. III, Wydawnictwo "EDITION 2000”, Kraków
- Martin R. (2010), Clean Code: A Handbook of Agile Software Craftsmanship, Wyd. I, Wydawnictwo Helion, Gliwice
- Meyer B. (2005), Programowanie zorientowane obiektowo, Wyd. II, Helion, Gliwice
- Stoyan S. (2010), Object-Oriented JavaScript, Wydawnictwo Helion, Gliwice
- Walter B. (red.) (2008), Zaawansowane projektowanie obiektowe , Instytut Informatyki Politechniki Poznańskiej, Poznań
- Welling L. (2005), Laura Thompson, PHP and MySQL Web Development, Wyd. III, Wydawnictwo Helion, Gliwice
Autor: Maciej Sypień, Krystyna Jania