Programowanie to proces tworzenia rozwiązańZadania „na żywo”, dynamiczne w postaci sztywnych konstrukcji kodu, danych, funkcji i algorytmów. Procedura tworzenia ścisłej składni z niezdefiniowanej semantyki. Prawdziwe problemy są dobrze znanym dużym problemem w sensie algorytmizacji: aby osiągnąć pożądane rozwiązanie, problem musi być umieszczony w precyzyjnych konstrukcjach składniowych.
OOP dwukrotnie próbował przełamać tę starożytną koncepcję programowania, ale kajdany klasycznego stylu kodowania danych i algorytmów są nadal silne.
Poziom i kwalifikacje
Obliczenia rozpoczęły się od komputerów, aleszybkość, z jaką narasta przyspieszenie ruchu w sferę przetwarzania informacji, nie jest jeszcze na tyle duża, aby klasyczne programowanie stało się niemożliwe i przestało istnieć.
Celem jest również to, że deweloper nie nalega, a klient nie wymaga realnego rozwiązania rzeczywistych problemów. Obie strony są przyzwyczajone do ograniczania się dostępnymi narzędziami i znanymi możliwościami.
Formy polimorfizmu OOP, idee enkapsulacji kodu i dziedziczenia właściwości (metod) znajdują się w dziedzinie programowania, ale nie w dziedzinie rozwiązywanego problemu.
Przypadek w punkcie - bibliotekaPHPOffice / PHPWord. Aby z niego skorzystać, potrzebne są uprawnienia programisty, trzeba stworzyć własny system obiektów, ale aktualny poziom klienta (wymagania klienta) jest banalną kompozycją, którą programista nadpisuje swoim rozwojem (w przeciwnym razie wymagania nie mogą być zadowolonym). Taka sytuacja:
W tym przypadku korzystanie z biblioteki jest zadaniemformatowanie dokumentów, np. dyplomu lub rozprawy, powinno być sformalizowane zgodnie ze standardem. Klient przedstawił swoje wymagania, a programista poszedł swoją własną drogą znacznie dalej.
Dokument został w pełni przeanalizowany, złożony w żądanym formacie, pracował z tabelami o dowolnym poziomie zagnieżdżenia, scalono i oddzielono komórki, wydrukowano w dowolnym kierunku itp.
Polimorfizm i OOP
Nie ma lepszego określenia dla polimorfizmu, jak odnieść się do historii rozwoju idei programowania obiektowego, tak popularnej dziś, tak często używanej, ale niedoszły w istocie do tej pory.
Każdy autor ma własną koncepcję początku i istoty OOP. Dla każdego uważnego czytelnika ta koncepcja jest poprawna i obiektywna. Ale do dziś wszyscy akceptują tylko trzy pozycje jako bezwarunkowy aksjomat:
- kapsułkowanie;
- wielopostaciowość;
- dziedzictwo.
Niektórzy dodają więcej: abstrakcja, a najczęściej ta, a właściwie główny punkt, służy jako podstawa opisu istoty OOP.
Tak więc opinie o OOP są polimorficzne: opisują jedną rzecz, są konstruowane na różne sposoby lub odwrotnie, opisują różne rzeczy, ale opierają się na czterech identycznych pozycjach.
Demokratyczny początek nie jest typowy dla regionutechnologii informacyjnej, ale należy się jej należy: połączenie i współistnienie wielu opinii na ten sam temat to prawdziwy polimorfizm w działaniu.
Popularne definicje polimorfizmu
OOP to kolejny etap rozwoju technologii informatycznych. Niewielu się z tym zgadza, ale jego podstawowe aksjomaty i przepisy różnią się tak bardzo pod względem semantyki, że poza całością nie zasługują na uwagę.
- Polimorfizm w programowaniu to możliwość zapewnienia tego samego interfejsu dla różnych podstawowych form (typów danych).
- Polimorfizm to zdolność obiektów do różnych implementacji.
- Polimorfizm to zdolność funkcji ...
- Klasyczny (od twórcy C/C++): „jeden interfejs – wiele implementacji”.
- Polimorfizm parametryczny implikuje ...
- Polimorfizm - stanowisko teorii typów...
- Abstrakcja jest niemożliwa bez enkapsulacji i dziedziczenia, tak jak polimorfizm jest niemożliwy bez dziedziczenia…
Możemy się zgodzić, że wszystko to odnosi się do tego samego: ale forma wyrażania myśli, istota i treść nie są takie same. Ale wciąż jest coś wspólnego.
Podmiot: deweloper - klient
Klasyczne założenia programistycznedostępność programisty i zadań (klient, klient). Programista bada problem, formalizuje go i tworzy kod prowadzący do rozwiązania. Klient odrzuca wszystkie propozycje lub tylko część, wskazując na wady, a programista ponownie wykonuje swoją pracę.
Taki cykl procesu rozwiązywania problemu sugeruje, że wyraźnie łączą się tu dwa zupełnie różne podmioty:
- komputer nie może sam rozwiązać problemu;
- potrzebujesz programu, aby komputer mógł „zrozumieć” i „rozwiązać” problem.
Zadaniem jest sfera kompetencji klienta, program tojest algorytmem „dostosowania” zadania do możliwości komputera – sfery kompetencji programisty. Rolą tego ostatniego jest „dostosowanie” komputera do wymagań zadania, a to jest zbyteczne!
Oferty programowania zorientowanego obiektowo abstrakcja... Są przedmioty – to sfera klienta; jestimplementacja obiektów to domena programisty. Nie ma „technologicznego” połączenia między klientem a deweloperem. Pomysł jest kardynalny, do dziś nie wdrożony, ale coś już pracuje stabilnie.
Okna, przyciski i inne obiekty
Historia technologii Air Art, Magazyn Object,Turbo Vision, Graph Vision to już historia. Niewiele osób pamięta te implementacje OOP, praktycznie nie są one używane i zapomniane, ale interfejs okna Windows jest znany milionom użytkowników, a obiekty w PHP, JavaScript i innych językach technologii internetowych są używane przez setki tysięcy programistów kodu , a wiedzą o nich miliony osób odwiedzających zasoby internetowe.
To chyba jedyny właściwy sposób, wedługktóre OOP miał opracować: enkapsulacja, dziedziczenie, polimorfizm dla dewelopera, ale nie dla użytkownika. Charakterystyczne jest, że stanowisko to było głównym w rozwoju projektu wizualnego (interfejsu) oprogramowania Windows, programów użytkowych takich jak Turbo Vision i Graph Vision.
Koncepcja produktów takich jakAir Art Technology i Object Magazine znacznie się różniły. W tym przypadku obiekt abstrakcyjny był pierwszym przodkiem struktury informacji i zawierał kod przetwarzania informacji na poziomie abstrakcyjnym. Przedmioty okien, guziki, elementy projektu wizualnego były tu drugorzędne.
W pierwszej wersji (Windows i itp.) paradygmat OOP: enkapsulacja, dziedziczenie, polimorfizm wyznaczono na poziomie abstrakcyjnego przodka, a implementację kodu uformowano na poziomie każdego konkretnego potomka wzdłuż gałęzi dziedziczenia zgodnie z wymaganą strukturą i treścią.
W drugiej wersji (Technologia Air Art iObject Magazine) ważny jest poziom obiektu abstrakcyjnego. Nie chodzi o to, co konkretny potomek będzie miał, najważniejsze jest to, że jego gałąź dziedziczenia spełnia wymagania wszystkich rodziców aż do abstrakcji korzenia.
Obiekt i system obiektów: algorytm
Idealna koncepcja zorientowana obiektowo może jedynie manipulować obiektami i systemami obiektów.
We współczesnych językach programowania podobiekt (klasa) jest zwykle rozumiany jako opis obiektu i instancja obiektu, ponadto w celu wykorzystania opisu obiektu języki pozwalają programiście pracować z obiektami statycznymi, podczas gdy obiekt dynamiczny jest instancja opisu, z własną unikalną treścią i strukturą, ale przy użyciu tych samych metod (właściwości) opisów.
Obecna praktyka klasyfikuje pojęcie obiektu jakonarzędzie, czyli język programowania, interfejs, dostęp do bazy danych, połączenie sieciowe, ale nic nie wskazuje na zainteresowania klienta, rozwiązywany problem.
Jest to idealne rozwiązanie dla prostego OOP:polimorfizm umożliwia wykonanie w szczególności różnych elementów projektu, ale zarządzanie nimi za pomocą tego samego kodu. Ale tutaj nie mówimy o przedmiotach problemu, który w ogóle nie jest traktowany jako przedmiot analizy obiektowej.
Programiści przyjęli OOP jako środek dopoprawiając jakość i wydajność swojej pracy, ale nie przyznając klientowi ani kropli „swojego terytorium”. Podstawowe pojęcia OOP – enkapsulacja, dziedziczenie, polimorfizm – pozostały w obszarze rozwoju i nie zostały przeszczepione w obszar problemu.
Obiekt i system obiektów: problem i rozwiązanie
Komputer - programista - zadanie.Link środkowy jest zbędny. W idealnym przypadku powinny być tylko dwa, względnie zależne, kontury: (komputer - programista) - zadanie. Oznacza to, że użytkownik, klient lub gość ma narzędzie do rozwiązania swojego problemu. Klient nie dba o to, jak zostanie wdrożone narzędzie.
Idealnie jest to po prostu komputer, który jest w staniezrozumieć, czego chce klient i rób to, czego chce. Jak to będzie wyglądało: lokalny program lub strona internetowa dostępna przez przeglądarkę, specjalny program do rozproszonego przetwarzania informacji, system informacyjny dla klienta - to nie ma znaczenia.
Istotne jest, aby między zadaniem a komputerem nie byłozbędny link, ale pierwszy jest rozumiany i rozwiązywany przez drugi. Aby osiągnąć ten cel, komputer i klient muszą być połączeni jednym systemem obiektów, a znaczenie, struktura i zawartość każdego obiektu jest określana przez klienta, a metody i właściwości obiektów są implementowane przez programistę.
Idealny, gdy zadaniem klienta jest tworzeniesystem obiektów, których potrzebuje, oraz prace nad implementacją metod i właściwości tych obiektów są rozdzielone w czasie. Im dalsza implementacja systemu obiektowego (programista) od jego treści semantycznej (klient), tym lepszy proces.
Nic nie przeszkadza klientowi i programiściewchodzić w interakcje w procesie rozwiązywania problemu, ale ważne jest wyraźne oddzielenie semantyki. Każdy powinien robić swoje, programista nie jest zobowiązany do opanowania zakresu zadania, a klient nie powinien rozumieć kodu, a tym bardziej strony nie powinny udzielać sobie nawzajem porad, które ich nie dotyczą.
Programowanie tradycyjne i obiektowe
Podstawowe postulaty OOP:enkapsulacja, dziedziczenie, polimorfizm w postaci, w jakiej się oswoiły i są pożądane, prowadzą do zauważalnej poprawy jakości i niezawodności kodu, znacznie przyspieszają pracę programisty i mają wiele innych pozytywnych cech.
Ale rzeczy nadal istnieją: klasyczne programowanie nie jest gorsze od swoich pozycji, a wiele pomysłów obiektowych jest implementowanych przez klasyczny kod.
Jednak idee OOP i rekurencji doprowadziły do odpowiedniegowpływ na składnię klasycznych operatorów składniowych, na logikę budowania zwykłego kodu, który nie ma nic wspólnego z obiektowym stylem pisania i myślenia.
Zmieniły się listy i kolejki, pojawił się pomysłpierwszego i ostatniego elementu tablicy pojawiły się pętle „for each”, a referencyjne warianty nazewnictwa, użycia i wykonania stały się jeszcze bardziej pożądane niż wcześniej.
Właściwie sam fakt utraty zmiennychjego „czysta” twarz (rodzaj zmiennej może się zmieniać w razie potrzeby i nie ma potrzeby opisywania zmiennej) mówi, że klasycy w rzeczywistości od dawna zorientowali się na obiekt i rozpoznali podstawowe zasady OOP: enkapsulacja , dziedziczenie, polimorfizm jako idee, które mają zasadnicze znaczenie.
Co jest w sercu: obiekt lub system
Abstrakcja jako podstawowe stanowisko pojęcioweOOP, niezależnie od tego, gdzie znajduje się obszar odpowiedzialności (realizacji) obiektu – na poziomie pierwszego abstrakcyjnego obiektu czy na poziomie konkretnego potomka – pozostawia otwarte pytanie: od czego zacząć wszystko, od obiektu czy z systemu?
Jeśli postawimy obiekt jako podstawę, to nigdy nie będziestanie się systemem, ponieważ system będzie w nim, a on sam stanie się sztywnym obrazem bardzo konkretnego początku. Tutaj pojawiają się problemy z abstrakcją: początkowy obiekt dokładnie ustala główną rzecz w rozwiązywanym problemie, to znaczy nie można go już przenieść na inny problem.
Jeśli jako podstawę postawimy system obiektów, tootrzymuje się system systemów. Trudno sobie wyobrazić w odniesieniu do konkretnego zadania, a także trudno zrozumieć, od czego zacząć rozwój. Ogólnie rzecz biorąc, polimorfizm OOP z jego różnicami w encjach, formach implementacji, liczbie rzeczywistych parametrów w funkcjach daje wydajność o systemie, który leży na początku, jak:
- o opcjach rozwiązania problemu (na przykład menu);
- o warunkach początkowych (zastosowanie problemu w różnych warunkach, dane);
- o trybach pracy (testowanie, tuning, praca).
Ale to i tym podobne nie daje żadnego powodu, by stawiać system obiektów jako podstawę rozwiązania problemu. Często wystarczy zdefiniować pojedynczy obiekt startowy.
Historia procesu rozwiązywania problemów
Najważniejsze zasady OOP: polimorfizm i abstrakcja - nadawanie priorytetu początkowemu obiektowi jako systemowi obiektów. W sporze o to, co powinno być pierwsze, kurczak czy jajko, kurczak wygrywa.
Nie ma wątpliwości, że wszystko powinnozacznij od abstrakcyjnego obiektu, a nie od systemu obiektów. Ale jeśli weźmiemy pod uwagę czynnik czasu i zastosujemy go na poziomie każdego obiektu, zaczynając od pierwszego abstrakcyjnego, to sprzeczny pomysł umieszczenia zarówno obiektu, jak i systemu na początku rozwiązania, jest tylko rozsądny.
Jeśli klasyczna koncepcja programowania wW trakcie rozwiązywania problemu zmienia dane, zawartość bazy danych, zmienia pliki itp., następnie w koncepcji polimorfizmu OOP, enkapsulacji i czynnika czasu zmienia zawartość, strukturę i właściwości układu obiektów rozwiązywany problem.
Programista OOP jest najmniej zainteresowanypojęcie pliku, bazy danych, algorytmu - to konkrety, tutaj programista myśli obiektami, ale obiekty istnieją w czasie i zmieniają się w trakcie osiągania pożądanego.
Tak więc na początku istnieje obiekt jako systemobiekty i logika tego systemu – skala czasowa: rozpoczęcie zadania, utworzenie pierwszego obiektu, wprowadzenie lub zebranie danych, utworzenie kolejnego obiektu, ale nic nie stoi na przeszkodzie, aby pierwszy obiekt przeszedł do następnego rozwiązania.
Każdy poziom obiektów działa jakniezależny układ przedmiotów, czyli jeden przedmiot, ale w kontekście rozpoczętego procesu i wartości czasu jest to układ przedmiotów w skali czasu. Dla pełnoprawnej implementacji OOP polimorfizm, dziedziczenie i czynnik czasu razem zapewniają dynamikę pierwszego, to znaczy obiekt może nie tylko zmieniać się w czasie, ale także generować obiekty, które nie są dostarczane przez dewelopera, generowane przez wykonanie zadania w trakcie procesu zaprojektowanego przez klienta.
Przykład rzeczywistego polimorfizmu OOP
Złożoność zadań, które może wykonać OOP, nie jestporównywalny z dostępnym w klasycznej wersji pisania programów. Oczywiście zawsze można rozwiązać każdy problem w zwykły sposób, ale pytanie, ile to będzie „kosztować” czasu i wysiłku, często sprawia, że wynik jest bezużyteczny.
Biblioteka została niedawno rozbudowanaPHPOffice / PHPWord, ale aby wykorzystać jego możliwości, prawie zawsze trzeba stworzyć własny system obiektowy. Na przykład prosty plik *.docx:
to archiwum zip wielu plików ifoldery w formacie Office Open XML (OpenXML, OOXML). Każdy plik jest zapisany w znacznikach XML, a przy dodawaniu, zmienianiu i usuwaniu elementów liter, słów, tabel, list itp. zawartość plików zaczyna reprezentować ciąg znaczników, które nie zawsze zawierają całe elementy, często jeden element jest napisany z wieloma tagami.
Jeśli wyobrazisz sobie ten plik jako ciąg tagów, otrzymasz ciekawy obrazek:
Łatwo zauważyć, że pierwszy i jedyny akapitdokument jest reprezentowany przez wiele znaczników. Jeśli chodzi o tabelę i wbudowane w nią tabele, objętość opisu wszystkich elementów jest niezauważalna, ale dostępna dla aplikacji obiektowej.
W rzeczywistości na rysunku zielony jest testemwyjście tagu, żółty - parametry i typ tagu, beżowy - zawartość. Tworzone obiekty są zorientowane na obróbkę maszynową. Dla osoby dostępne stają się tylko operacje otwierania pliku dokumentu, formatowania i zapisywania go.
Rozwiązanie jest proste i praktyczne, ale wdrożenie koncentruje się bardziej na komputerze niż na osobie, ze względu na ogrom wykonywanej funkcjonalności i złożone relacje między obiektami.
Stan obszaru OOP
Rozwój systemów zarządzania obiektem, technologiikonfiguracja i zarządzanie serwerami, doświadczenie w tworzeniu dynamicznych witryn sprawiło, że programowanie obiektowe stało się dostępne dla każdego. Problem polega na tym, jak zmienić swoje myślenie i przyzwyczaić się do myślenia na poziomie obiektowym, a nie w kontekście sekwencyjnego wykonywania kodu.
Zwykle przejście od klasycznego programowaniado obiektowej trwa od dwóch do trzech miesięcy, ale koszty są spłacane wraz z odsetkami. Potencjał nowoczesnych języków programowania, przede wszystkim PHP i JavaScript, zadowoli najbardziej wyrafinowanego programistę.
Współczesne OOP - polimorfizm, dziedziczenie imożliwość kształtowania właściwości obiektów jest wygodna i praktyczna, składnia języków i narzędzia pomocnicze zapewniają komfort pracy i wydajność kodu.
Perspektywy idei obiektu
Jak długo potrwa programowanie klasyczne?i trudno powiedzieć, jak rozwinie się OOP. Najwyraźniej twórcy narzędzi nie planują brać pod uwagę kontekstu konsumenta (użytkownika, klienta).
Zestaw narzędzi OOP — polimorfizm, dziedziczenie, enkapsulacja i abstrakcja — jest zorientowany na programistów.
Nowoczesne systemy informacyjne i zasoby sieciowedążą do odzwierciedlenia rzeczywistości, zapewnienia funkcjonowania realnych obiektów i stworzenia środowiska ich funkcjonowania, tak prostego, że będzie dostępne dla konsumenta dalekiego od programowania, całkowicie pogrążonego w swojej sferze kompetencji.