Obiektowe podejście do programowania: koncepcja, zastosowanie i rozwój

Pierwszymi językami programowania były imperatywne języki lub instrukcje maszynowe (kody). Składały się z kodu binarnego, który różnił się w zależności od komputera. Zbiór możliwych poleceń dla "języków" niskiego poziomu był niewielki, ponieważ każda instrukcja maszyny wykonała określoną akcję (dodanie, skopiowanie słowa maszynowego do rejestru, przejście do kolejnej sekcji kodu). Oczywiście, dla wygody, programiści opracowali zestaw liter analogowych dla tych zespołów maszynowych, a ten sposób komunikowania się z maszyną "żelazo" nazywa się językowym asemblerem.

Asembler

Język asemblera jest językiem niskiego poziomu. Jego implementacja i funkcje różnią się w zależności od komputera, od procesora do procesora, tzn. Zależą od platformy. Ale esencja asemblera na jakiejkolwiek maszynie jest jedna: polecenia asemblera odpowiadają bezpośrednio podobnym poleceniom maszyny lub ich sekwencji. Złożoność w badaniu programowania na asemblerze polega na tym, że programista jest zmuszony badać przypisanie dyrektyw językowych indywidualnie dla każdej maszyny, co zwiększa próg wejścia przy zmianie procesora.


Najbardziej znana implementacja asemblera:
  • Borland Turbo Asembler (TASM).
  • Microsoft Macro Assembler (MASM).
  • Watcom Assembler (WASM).
  • A86.
  • Języki wysokiego poziomu

    Wraz z rozwojem procesorów istniało zapotrzebowanie na bardziej wszechstronne i szeroko stosowane narzędzia do interakcji z komputerem. Z biegiem czasu kody maszynowe stały się bardzo długie i niewygodnezrozumienie, więc zdecydowano się na obsługę zespołów, intuicyjnych ludzi, czyta i pisze kod. Pierwszym wysokopoziomowym językiem dla komputera, wykorzystującym takie podejście, stał się Fortran. Polecenia maszynowe stały się czytelne: Tutaj pojawiają się OPEN, CLOSE, PRINT, operator IF i IF THEN-ELSE po raz pierwszy.
    Ponadto należy zauważyć, że Fortran po odejściu kart dziurkowanych w historii śmieci zaczął wspierać programowanie strukturalne.

    Programowanie strukturalne

    W latach sześćdziesiątych - początek lat 70. rozpoczyna się rozwój następnego paradygmatu programowania - programowanie strukturalne, kolejny krok w kierunku obiektowego podejścia do projektowania. Po pracy Edgara Dyckstry "O niebezpieczeństwach operatora", programiści zrozumieli, że pracę dowolnego programu można opisać za pomocą tylko trzech struktur kontrolnych:


  • sekwencji;
  • rozgałęzienia;
  • cykl.
  • Operator goto został uznany za redundantny. Jest to operator, który pozwala przejść do dowolnego bloku programu. A dla początkujących czasem wydaje się, że nie ma nic prostszego niż użycie operatora goto w pewnych obszarach kodu, aby nie wymyślać kolejnych gałęzi i pętli. Ale w rzeczywistości użycie tego operatora wcześniej czy później prowadzi do tego, że program zamienia się w "kod spaghetti". Taki kod nie może być utrzymywany, bezboleśnie modyfikowany, a co gorsza, trudno jest dostrzec innych programistów, którzy zastąpią autora kodu. Jest to szczególnie niebezpieczne w rozwoju biznesu, gdzie są one zaprojektowaneduże bazy danych na tysiącach linii kodu. Płynność jest zawsze i trudno poradzić sobie ze złym kodem, szczególnie dla programisty przychodzącego do firmy.

    C Programming Language

    rozkwitu programowania strukturalnego nierozerwalnie związany z C języka programowania Język ten został napisany w asemblerze Dennis Ritchie i Kena Thompsona i stał się językiem źródło w rozwoju systemu operacyjnego UNIX. To stało się podstawą dla wielu współczesnych systemów operacyjnych takich jak GNU /Linux, FreeBSD, MacOS POSIX i wiele innych.
    Ponieważ konstrukcja języka C podobna do instrukcji maszynowych, że rozprzestrzenia się głównie w różnych aplikacji dla różnych urządzeń, od kart graficznych i systemów operacyjnych do rakiet i superkomputerów. Składnia na zawsze stał się podstawą dla wielu nowoczesnych języków programowania (C ++, C #, Java, Objective-C).

    Programowanie obiektowe (OOP)

    Program nadal być skomplikowane, a imperatyw zmiana paradygmatu przychodzi zrozumienie potrzeby obiektowego podejścia do technologii informacyjnej. Zamiast zwykłej pracy z komputerem pojawiają się aplikacje graficzne konsoli. Komputer nie jest już wysoce wyspecjalizowane urządzenia do obliczeń naukowych i wojskowych, a także możliwości narzędzia, które wahają się od automatyzacji biznesu do komunikowania się z przyjaciółmi. Główną jednostką strukturalną przy opracowywaniu podejścia zorientowanego obiektowo jest klasa ogłoszona. Klasa to abstrakcyjny typ danych tworzony przez programistę. Jest to schemat lub umowa opisująca pola i metody obiektów, które będąstworzony według typów tej klasy.
    Na przykład osoba, samochód, dział to abstrakcja, więc można ją opisać jako klasę. Ivan, biały „Skoda” z numerami nn123 działu operacyjnego - specjalnego przedstawiciele tych abstrakcji, czyli w języku obiektowym podejściu do programowania, to cechy klas danych. Zadaniem programisty jest opisanie abstrakcyjnych i konkretnych obiektów świata realnego w języku OOP. Opis klasy jest zaimplementowany w opisie pól i metod.

    Pola

    Pola są zmiennymi, czyli wartościami, które charakteryzują pracę tej klasy. Na przykład, jeśli piszemy klasę "samochód" dla gier komputerowych, możemy zdefiniować dla niego następujące pola:

    klasy samochodów
    {
    Marka String = "Hunday" Solaris „;
    kolor ciąg = "żółta",
    podwójnej prędkości = 0,
    /* pozostałej części kodu aplikacji * /
    }

    kapsułkowania

    pola mogą zmieniać wartości w trakcie trwania programu, jeżeli został dostarczony przez programistę. Jeśli autor nie chce pola były dostępne poza klasy, a każda inna aplikacja (użytkownik) może zmienić swoje znaczenie, to obudowuje danych, które udostępnia je za pomocą słów kluczowych prywatne, Jeśli na tej samej wysokości powinna być dostępna w ciągu programu, przed ponownym wprowadzeniem publiczny dostęp.

    Na przykład, mogą wszystkie klasy pak publicznych

    klasy samochodów 
    , {
    Brand ciąg publicznych,
    kolor ciąg publicznych,
    z podwójną prędkością publicznych,
    *
    pozostałej części kodu programu
    *
    }
    ,

    W tym przypadku dostęp do te pola nie będą ograniczone. W interfejsie możesz przypadkowo lub celowo zmienić ważne dane w polach, któredziałać prawidłowo wpływają na cały program

    ,
    Związek pośredni skryptu asynchronicznej = „//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">

    & lt; skrypt & gt; (adsbygoogle = window.adsbygoogle || []). push ({});
    grupa MainClass 
    , {
    Public void główna ()
    , {
    samochodu samochód = nowego samochodu ();
    car.colour = "Red";
    /* reszta kodu aplikacji * /
    }
    }
    ,

    , aby uniemożliwić przypadkowe zmiany danych, deweloper kapsułkuje je. W przypadku koloru samochodu, zamiast publicznego, musisz pisać jako prywatny. Wtedy zmiana koloru bezpośrednio nie będzie możliwa.

    Metoda
    ,

    Metody

    , - narzędzie pozwala pracować z klasy na krawędziach lub innych danych. Jak wszystkie funkcje w językach programowania proceduralnych, biorą dane i mogą albo zwrócić wynik obliczeń, czy nie powrócić (np wyświetlić coś na konsoli). Na przykład:

    klasy samochodów 
    , {
    gatunek ciąg publicznego = "Hunday" Solaris "
    Kolor ciąg publicznego =" żółty „,
    z podwójną prędkością publicznego = 0;

    /* Oto rozwiązania «Napęd», który jest przesyłany Boolean zmienna whatIsTrafficLight (wartości tylko false - światło czerwone lub prawdziwe - zielone światło, możliwe jest, aby jeździć) * /
    public void Napęd (bool whatIsTrafficLight )
    , {
    , gdy (whatIsTrafficLight == prawda),
    , {
    szybkość = prędkość + 40
    }
    else
    , {
    szybkość = 0;
    }
    }

    }
    ,

    w wyniku tego, za pomocą napędu metodzie zmiany klasy prędkości


    Związek "urządzenie"., typ scenariusz = " tekst /JavaScript "i kwasu
    blockSettings var = {blockID" RA-70350-45 "renderTo" yandex_rtb_R-A-70350-45”asynchroniczny: ! 0}
    , jeżeli (document.cookie.indexOf ("abmatch =") i GT = 0) blockSettings.statId = 70350,
    ! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings)} ), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = „//an.yandex.ru/System /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to this.document," yandexContextAsyncCallbacks „);

    Polimorfizm

    drugiego "kolumna" Developing podejście obiektowego - polimorfizm. Bjarne Stroustrup, twórca języka C ++, definicja polimorfizm sformułowane w następujący sposób: „Jeden interfejs - wiele wdrożeń.” W skrócie, polimorfizm - okazją do tworzenia klasy abstrakcyjnej, która opisuje ogólny projekt konstrukcji, a od niego stworzony pochodzą klasy implementujące żadnych mechanizmów. Na przykład podczas tworzenia postaci gier wideo, pod względem podejścia obiektowego byłoby logiczne najpierw wdrożyć klasa abstrakcyjna osoby i mają go tworzyć specyficzne klasy Archer, Healer, wojownik i tak dalej.

    Albo jeszcze przykład z samochodem. Jeśli działamy na jednym komputerze, z kilkoma polami i metodami, nie musimy ręcznie zmieniać wielu wartości w kodzie. Ale ile takich maszyn może być? Lub na przykład użytkownicy w sieci społecznościowej? Każdy ma imię, nazwisko, stan cywilny, album ze zdjęciami, ogromną liczbę wartości, linki do innych stron, innych użytkowników i tak dalej. A jeśli deweloperzy decydują się dokonać przeprojektowania sieci społecznej, a niektóre ustawienia użytkownika, aby zmodyfikować lub usunąć, a następnie z tym podejściem tam mnóstwo pracy. Rozwiązuje ten problemowy podejście obiektowe. Zajęcia nie są tworzone dla każdego obiektu i oryginalnie zaprojektowany streszczenie klasy, a onklasy spadkobierców. Podobnie jak enkapsulacja, polimorfizm jest drugą najważniejszą zasadą OOP.

    Dziedziczenie

    Dziedziczenie to kolejna zasada, gdy stosuje się podejście obiektowe. Polega ona na zdolności klasy spadkobierców do korzystania z cech klasy nadrzędnej. Na przykład, jeśli chcemy mieć motocykl w naszej flocie, nie trzeba pisać tych samych właściwości dla nowej klasy. Zamiast tego możesz powiedzieć, że motocykl jest spadkobiercą klasy z samochodu. Wtedy staje się możliwe zastosowanie podobnych pól i metod maszyny w klasie motocykla, na przykład marki, koloru, prędkości. W kodzie dziedziczenia wskazano w następujący sposób:

    klasa Motocykl: samochód
    {
    /* reszta kodu programu * /
    }


    Pola i metody samochodu macierzystego klasy są dostępne do użytku w klasie Motorcycle. Krótko mówiąc, dziedziczenie jest mechanizmem ponownego użycia kodu i ma na celu wygodne i logicznie kompetentne rozszerzenie programu. Również dziedziczenie pomaga przestrzegać zasady DRY (Nie powtarzaj się). Zgodnie z tą zasadą kod nie powinien mieć powtarzalnych witryn, ponieważ stwarza niepotrzebne obciążenie podczas kompilacji i wykonywania programu. Jeśli w kodzie znajdują się powtarzające się obszary, to należy je zoptymalizować - powtórzyć w osobnych metodach i wykonać w razie potrzeby; stosuje dziedziczenie do logicznie podobnych obiektów, które mają identyczne pola i metody.

    Podsumowanie

    Pojęcie obiektowego podejścia do programowania istnieje od ponad czterdziestu lat, a obecnie jest to najbardziej pożądany sposób rozwoju (z wyjątkiemokreślone obszary, na przykład tworzenie oprogramowania dla kontrolerów, w których dominuje język C). Klucz OOP paradygmat
  • spadku.
  • Polimorfizm.
  • Enkapsulacja.
  • No badając te potężne narzędzia, nowoczesny deweloper mógłby napisać szybkie obsługiwany, miłą dla oka i zmodyfikowany kod, który wiele lat będzie wspierać potrzeby biznesowe, przynieść graczom radość z rozwiązywania problemów społecznych lub zapewnić ludziom komunikować się z całym światem.

    Powiązane publikacje