Programowanie obiektowe opiera się na prezentacji programu w postaci zestawu obiektów. Każdy obiekt należy do klasy, która z kolei zajmuje swoje miejsce w hierarchii dziedziczonej. Zastosowanie OOP minimalizuje zbędne dane, co poprawia łatwość zarządzania, zrozumienie programu.
Co to jest OOP
powstało w wyniku rozwoju programowania proceduralnego. Podstawą języków obiektowych są następujące zasady, takie jak:
enkapsulacja;
dziedziczenie;
polimorfizm.
Niektóre zasady pierwotnie ustanowione w pierwszych OOP uległy znacznej zmianie.
Przykłady języków obiektowych:
Pascal. Wraz z wydaniem Delphi 7 na oficjalnym poziomie zaczęto nazywać się Delphi. Głównym obszarem korzystania z Object Pascal jest pisanie aplikacji.
C ++ jest szeroko stosowany do tworzenia oprogramowania, które jest jednym z najpopularniejszych języków. Dotyczy tworzenia systemu operacyjnego, aplikacji, sterowników urządzeń, aplikacji, serwerów, gier.
Java jest transmitowana w kodzie bajtowym, przetwarzana przez wirtualną maszynę Java. Zaletą tej metody realizacji jest niezależność systemu operacyjnego i sprzętu. Istniejące rodziny: wersja standardowa, edycja Enterprise, edycja Micro, karta.
javascript jest używany jako język skryptowy dla stron internetowych. Składnia w dużej mierze przypomina Si i Java. Jest implementacją Ecmascript. Sam Ecmascript służy jako podstawa do konstruowania innych języków skryptowych, takich jak JScript, ActionScript.
Cel-Coparty na języku C, a sam kod C jest jasny dla kompilatora Objective-C.
Perl - wysoki poziom jest interpretowany w dynamicznym języku uniwersalnym Microsoft. Ma bogate możliwości pracy z tekstem, pierwotnie zaprojektowane specjalnie do manipulacji z tekstem. Obecnie jest wykorzystywany w administrowaniu systemem, programowaniu sieci, bioinformatyce itp.
PHP. Skrót jest tłumaczony jako preprocesor hipertekstu. Służy do tworzenia aplikacji internetowych, w tym części serwerowej. Pozwala tworzyć aplikacje GUI za pomocą pakietów PHP-GTK, PHP-Qt, WinBinder.
Python jest językiem ogólnego przeznaczenia, koncentrującym się na poprawie wydajności programistów i czytelności kodu. Opracowano projekt Cython do tłumaczenia programów napisanych w języku Python na kod C.
Abstrakcja
Każda książka z gatunku "Object-Oriented Programming for Dummies" podkreśla jedną z głównych zasad - abstrakcję. Chodzi o to, aby podzielić szczegóły lub cechy realizacji programu na ważne i nieważne. Wymagany w przypadku dużych projektów, umożliwia pracę na różnych poziomach reprezentacji systemu bez podawania szczegółów.
Abstrakcyjny typ danych jest przedstawiony jako interfejs lub struktura. Pozwala nie myśleć o poziomie szczegółowości wdrożenia. ATD nie zależy od innych sekcji kodu. Dobrze znany aforyzm Davida Wheelera świadczy o tym, że wszystkie problemy z informatyką można rozwiązać na innym poziomie abstrakcji.
Dziedziczenie
Dostępne są języki obiektowedziedziczone jest jedną z najważniejszych zasad.
Wskazuje, że funkcje niektórych typów mogą być ponownie użyte. Klasa dziedzicząca właściwości innej nazywa się pochodną, potomkiem lub podklasą. Ten, z którego pochodzi dziedziczenie, nazywany jest przodkiem, podstawą lub superklasą. Związek z potomkami potomków generuje specjalną hierarchię. Istnieje kilka rodzajów dziedziczenia:
proste;
liczba mnoga.
Gdy dziedziczenie wielokrotne może być kilkorga dzieci z jednego przodka, gdy jest to zwykły - tylko jeden. Jest to główna różnica między typami. Dziedziczenie wygląda następująco: klasa Animal {function draw () {return "tylko zwierzę"; } function eat {} {return the animal is eating};}} class Cow extends Animal {function draw () {Return "coś, co wygląda jak krowa"}} Widzimy, że klasa Cow odziedziczyła wszystkie metody ze zwierzęcia klasy. jeśli robisz Cow.eat (), otrzymujemy "zwierzę je", a następnie draw () zostaje zmieniony Cow.draw () zwróci "coś, co wygląda jak krowa", a Animal.draw () zwróci "tylko zwierzę" "
Enkapsulacja
Enkapsulacja ogranicza dostęp do innych komponentów, wiąże dane z metodami przetwarzania, a specyfikator dostępu prywatnego jest używany do pakowania.
Zwykle identyfikuje się pojęcie enkapsulacji i ukrywania, ale niektóre języki rozróżniają te pojęcia. Innymi słowy, krytyczne właściwości są chronione, a ich zmiana staje się niemożliwa. class Animal {private $ name; function __construct ($ name) {$ this- & gt; name = $ name; } function getName {} {return $ this-> name; }} Nazwa jest przyjmowana jako argumenty konstruktora. Kiedy konstruktor jest używany w innych częściach kodu, nic nie może zmienić elementu name. Jakzobacz, jest to wskazane w środku, dla innych części kodu jest niedostępne.
Polimorfizm
Polimorfizm pozwala na użycie nazwy i nazwy do rozwiązywania podobnych, ale technicznie różnych zadań.
W powyższym przykładzie znajduje się tabela. Widzimy klasę CardDesk i klasę GraphicalObject. Oba mają funkcję zwaną draw (). Wykonuje różne akcje, choć ma jedno imię. Polimorfizm ad hoc lub specjalny polimorfizm wykorzystuje:
przeciążenie funkcji, metod;
przynosząc typy.
Przeciążenie polega na użyciu kilku funkcji o pojedynczej nazwie, gdy wybór odpowiedniego następuje w fazie kompilacji. Przenoszenie typów oznacza konwersję wartości jednego typu wartości na inny typ. Istnieje wyraźna transformacja - funkcja akceptująca jeden typ, ale zwracana do innej, niejawna, wykonywana jest przez kompilator lub interpreter. "Jeden interfejs - wiele wdrożeń" Bjorn Stroustrup.
Klasa
Klasa to rodzaj danych, który składa się z jednego zestawu pól i metod.
Ma wewnętrzne i zewnętrzne interfejsy do zarządzania treścią. Podczas kopiowania przez przypisanie skopiowany interfejs, ale nie dane. Różne typy współdziałają ze sobą poprzez:
dziedziczenie;
stowarzyszenia;
agregacja.
W dziedziczeniu, klasa potomna dziedziczy wszystkie właściwości rodzica, powiązanie odnosi się do interakcji obiektów. Gdy obiekt jednej klasy wchodzi do innego, nazywa się to agregacją. Ale kiedy w ciągu życia nadal polegają na sobie nawzajem, jest to kompozycja. Jednym z głównychcechy to zakres widoczności. Koncepcja jest różnie określona przez różnych posłów. W Object Pascal jest opisana w następujący sposób: ClassName = class (nadklasy) prywatne {przedmioty stosowanie jest ograniczone wyłącznie poza modułem} {tutaj wskazuje pola} ścisłe prywatny {dostęp spetsyfykator stały się dostępne wraz z wydaniem Delphi 2007 oznacza to samo jak prywatne} protected {elementy mogą ClassName używane wewnątrz lub z rzędu} public {} {opublikowanego wszystkie pozycje są dostępne, są one wyświetlane w Inspector'e} end Object; Tutaj SuperClass jest przodkiem, z którego wywodzi się dziedziczenie. Aby utworzyć C ++ wygląda następująco: class MojaKlasa: public Parent {public: MyClass (); //konstruktor ~ MyClass (); //destruktor protected: private:}; W tym przykładzie rodzic jest przodkiem, jeśli taki istnieje. Specifier prywatne, publiczne, chronione oznaczenia takie same, jak w poprzednim przykładzie w Pascalu. Widzimy także destruktor konstruktor dostępny dla każdej części programu. W C ++ wszystkie elementy domyślnie jest prywatny, a zatem nie mogą zostać pominięte.
Specyfika realizacji
W centrum języków obiektowych obiekt jest częścią klasy. Składa się z:
pól;
metoda.
Pole danych opisuje parametry obiektu. Reprezentują pewną wartość należącą do klasy, opisują jej stan, właściwości. Są one domyślnie zamknięte, a zmiany danych występują z powodu użycia różnych metod. Metoda - zestaw funkcji, które określają wszystkie możliwe akcje dostępne do wykonania nad obiektem. Wszystkie obiekty wchodzą w interakcje z metodami nawzajem. Może być zewnętrzny lub wewnętrznyktóra jest określona przez modyfikatory dostępu.
Metodyka OOP
Istnieją następujące metodologie:
Programowanie zorientowane na komponenty;
Programowanie prototypów;
Programowanie klasowe.
Programowanie oparte na komponentach opiera się na koncepcji komponentu - takiego integralnego programu, który jest przeznaczony do ponownego użycia. Realizowany jako zestaw projektów o wspólnej funkcji, regułach, ograniczeniach. Podejście to jest stosowane w języku Java zorientowanym obiektowo, gdzie orientacja komponentu jest zaimplementowana za pomocą JavaBeans, napisanych zgodnie z tymi samymi regułami. W programowaniu prototypowym nie ma koncepcji klasy - dziedziczenie odbywa się poprzez klonowanie istniejącego prototypu. Jest to podstawa zorientowanych obiektowo języków javascript i innych eksaskopowych dialektów, a także lua lub lo. Główne cechy:
potomkowie nie powinni zachowywać strukturalnego podobieństwa prototypu (w stosunku do klasy - kopia tego dzieje się dokładnie);
Podczas kopiowania prototypu wszystkie metody są dziedziczone jeden po drugim.
Programowanie klasowe koncentruje się na koncepcji klasy i instancji. Klasa określa ogólną strukturę, zachowanie instancji, które je wykonują.
Języki zorientowane obiektowo
Wszystkie OSOA są w pełni zgodne z zasadami OOP - elementy są obiektami posiadającymi właściwości. W takim przypadku mogą być dodatkowe środki.
OSO koniecznie zawiera zestaw następujących elementów:
deklaracja klas z polami, metodami;
rozszerzenie przez dziedziczeniefunkcje;
zachowanie polimorficzne.
Oprócz powyższej listy można dodać dodatkowe fundusze:
konstruktor, destruktor, finalizatorzy;
właściwości;
wskaźniki;
modyfikatory dostępu.
Niektóre OSO odpowiadają wszystkim głównym elementom, inne - częściowo. Pozostałe są hybrydowe, to znaczy są połączone z podsystemami innych paradygmatów. Zazwyczaj zasady OOP można stosować również w języku zorientowanym na uprzedzenia. Jednak użycie OBO nadal nie czyni kodu obiektowym. JAP wspierają więcej niż jeden paradygmat. Na przykład PHP lub javascript wspierają programowanie funkcjonalne, proceduralne, obiektowe. Java działa z pięcioma paradygmatami: obiektowym, uogólnionym, proceduralnym, aspektowym, konkurencyjnym. C # jest uważany za jeden z najbardziej udanych przykładów wielowymiarowości. Obsługuje te same podejścia, co Java, do tej listy dodaje się refleksyjny paradygmat. MP, jak Oz, ma na celu połączenie wszystkich pojęć tradycyjnie związanych z różnymi paradygmatami programu.