OOP, obiekty, klasy. Dziedziczenie i interfejsy

Zaczynając pisać program, nowoczesny deweloper powinien najpierw rozważyć architekturę przyszłego projektu. Z punktu widzenia obiektowego podejścia do tworzenia oprogramowania oznacza to, że programista musi utworzyć kod, który będzie składał się z bloków logicznych (klas i obiektów) i pomyśleć o ich interakcji. Kod musi być obsługiwany. Oznacza to, że w przyszłości program ten może być bezbolesny w uzupełnianiu lub rozszerzaniu bez zmiany jego głównych komponentów.

W paradygmacie programowania obiektowego istnieją trzy główne narzędzia używane przez programistów do pisania dobrego kodu:
  • Enkapsulacja.
  • Dziedziczenie.
  • Polimorfizm.
  • Dziedziczenie.
  • Dziedziczenie

    Jest to proces tworzenia nowej klasy w oparciu o istniejącą. Podejście obiektowe służy przede wszystkim do opisu pojęć i zjawisk świata realnego w języku programowania. Dlatego, aby zrozumieć OOP, musisz nauczyć się opisywać zadania stojące przed programistą, język klas i obiektów.


    Aby zrozumieć istotę procesu dziedziczenia, możemy podać przykład życia. Istnieje abstrakcyjne pojęcie "człowieka". Każda osoba ma ogólną charakterystykę, którą można opisać. To wzrost, waga, kolor włosów, barwa głosu i tak dalej. Iwanow Iwan, uczeń klasy 1, "A" jest konkretnym przedstawicielem pojęcia "człowiek", czyli mówiącym językiem podejścia obiektowego, koncepcją Iwana Iwana -spadkobierca koncepcji człowieka. Albo na przykład, sąsiada kot Barsik - spadkobierca pojęcia „kota”. Można zrobić więcej złożoną dziedziczenia: koncepcje odziedziczone Barsik koncepcja Maine Coon, które z kolei odziedziczył koncepcję „kota”.


    W jaki sposób jest to opisane w języku programowania?

    W dziedziczenia proces tworzenia oprogramowania pozwala utworzyć klasę od innych. Klasa-rodzic nazywana jest bazą, a reszta - spadkobiercami - pochodnymi. Pożyczanie polega na tym, że potomkowie przekazują metody, właściwości i pola rodziców. Składnia dziedziczenia klas w języku programowania C # może wyglądać tak. Na przykład:

    klasa Ivan: osoba
    {
    //jednostka klasy
    {

    Przykład mechanizmu dziedziczenia klas:

    class Person
    {
    public int Wiek {get; set;}
    }
    Klasa Ivan: Person
    {
    public void Talk ()
    {
    //Jan mówi
    }}

    klasy Piotra :(Osoba
    {
    publiczny void Walk () {40} {{41} //Peter goes
    }
    }
    class Program
    {
    static void Main (string) [] arg)
    , {
    Ivan Ivan = nowy Ivan ();
    ivan.Age = 29; //oznaczać wiek
    Peter peter = new Peter ();
    peter.Age = 35
    ivan.Talk ();
    peter.Walk () ();
    }
    }

    Na podstawie podstawowej klasy Osoby tworzone są spadkobiercy, a właściwość Wiek jest dostępna dla obu klas.

    Konstruktor bazylejski

    Tworzenie klasy z deklarowanym konstruktorem i spadkobiercą klasy, jest logiczne pytanie: za który projektanci będą odpowiedzialni przy tworzeniu obiektów tych klas?

    Jeśli jest podana tylko w klasie dziedziczonej, wówczas konstruktor jest wywoływany domyślnie podczas tworzenia obiektu dziedziczącego.(rodzic), a następnie jego odbiornik.

    Jeśli konstruktorzy otrzymają dane zarówno w klasie macierzystej, jak i w klasie pomocniczej, słowo kluczowe "base" jest używane do wywoływania podstawowego. Deklarując strukturę dziedziczenia konstruktu, używana jest następująca składnia:


    & lt; script type = "text /javascript" & gt;
    zmienna blockSettings2 = {blockID "R-A-271049-5" renderTo "yandex_rtb_R-A-70350-39" asynchroniczny :! 0};
    if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
    ! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings2)}), 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 „);
    Public Ivan (Int wiek) podstawy (wiek), 
    , {
    //ciało konstruktor
    }
    ,

    Dziedziczenie metod klasy - ważną cechą OOP Podczas tworzenia obiektu klasy-spadkobiercy argumenty konstruktora klasy bazowej są przekazywane do niego, a następnie wywoływany jest jego konstruktor, a następnie wykonywane są inne wywołania konstruktora dziedzicznego.

    dostęp do pola klasy dziecięcej

    dziedziczenia dostępu do właściwości i metody klasy bazowej klasowej następcy staje się możliwe przy ogłoszono następujące słowa

    1. Publiczne

    Zapewnia nieograniczony dostęp do członków klasy: główny, z kolejnych klas, z innych odpowiedników.

    2. Chronione.

    Dostęp do członka pozostaje jedynie z klasy początkowej lub pochodzi od analogów.

    3. Wewnętrzny.

    Ograniczenie do członka jest umiejscowione tylko w tym zespole projektu.

    4. Chronione wewnętrzne.

    Ograniczenie członka jest ograniczone tylko przez to dodanieprojekt lub klasy pochodne.

    Dziedziczenie dostępu do członków klasy zależy od słów kluczowych. Jeśli członek nie jest określony jako taki, dostępność jest ustawiony jako prywatny (prywatny).

    Multiple Inanceance

    Interfejsy są umową, która gwarantuje, że zestaw metod zostanie wdrożony w interfejsie następnej klasy. Te ostatnie nie zawierają stałych elementów, pól, stałych ani konstruktorów. Jest to nielogiczne i nie można tworzyć obiektów interfejsu.


    & lt; script type = "text /javascript" & gt;
    zmienna blockSettings3 = {blockID "R-A-271049-6" renderTo "yandex_rtb_R-A-70350-44" asynchroniczny :! 0};
    if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
    ! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings3)}), 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 „);
    ,

    elementy te są utworzone na zewnątrz klas są uznane za pomocą interfejsu kluczowego

    interfejs IMyInterfave
    {
    nieważności myMethod (Int somevar);
    }

    Reguła dobrego tonu podczas tworzenia interfejsów polega na uruchomieniu nazwy konstrukcji z użyciem litery I w celu ich dalszego rozróżnienia. W treści interfejsu ogłaszane są podpisy jego członków.

    , aby wskazać, że klasa realizacji interfejsy, jak zwykle rzędu podać nazwę wzoru po zgłoszenia klasy:

    klasy MyClass: IMyInterface (108 ) {
    publiczny nieważny MyMethod (int someVar)
    }

    Do implementacji dziedziczenia wielokrotnego potrzebne są interfejsy. W języku programowania C ++klasyczne dziedziczenie klas jest możliwe; W języku C # interfejsy są używane do tych celów. Klasa może realizować wiele interfejsów, w którym to przypadku są tłumaczone przecinek po zgłoszenia klasy:

    klasy MojaKlasa: IMyFirstInterface, IMySecondInterface
    {
    //i narządów
    }


    domyślnie wszystkie właściwości i metody interfejsów dostępowych publicznych, jak należy określić funkcje, które będą nadal realizowane w klasie. Dziedziczenie w C # prawie zawsze wymaga użycia tego poręcznego narzędzia.

    Trochę klas dziedziczenia

    Java, C #, C ++ - wszystkie języki obiektowe wdrożyć własny mechanizm dziedziczenia. Ale istota jest wszędzie: przenosić właściwości rodzica obiektu - potomka. Interfejsy, klasy abstrakcyjne to wygodne narzędzia do tego zadania.

    Powiązane publikacje