Проучване на обобщаването, специализацията и зависимостта в ООП

OOP (обектно ориентирано програмиране) е парадигма, която е съсредоточена върху обекти и данни, а не върху действия и логика. Когато работите с ООП, наложително е да идентифицирате обектите и техните взаимоотношения.

В ООП проблемът се разлага на редица обекти и как те се свързват помежду си - процес, известен като моделиране на данни. Основните връзки между обектите включват: асоциация, генерализация, специализация, агрегиране, зависимост и състав. В тази статия ще обсъдим връзките на зависимост и наследяване в ООП с примери за код в C #, за да илюстрираме концепциите.

Зависимост

Зависимостта е връзка между два или повече обекта, при която обектът зависи от другия обект или обекти за неговото изпълнение. Ако един от тези обекти се промени, другият обект (и) може да бъде засегнат. Зависимостта на зависимостта между два или повече обекта се изобразява в UML с помощта на пунктирани стрелки. С други думи, когато съществува зависимост на зависимост между два или повече обекта, обектът трябва да знае за другия обект (и), от който зависи.

Помислете за класовете BlogEntry и View. Докато първият съдържа цялата свързана информация, свързана с записите в блога, последният се занимава с показване на данните, получени от класа BlogEntry, в потребителския интерфейс. Така че класът View зависи от класа BlogEntry за показване на съдържание (записи в блога) в потребителския интерфейс. Следователно съществува зависимост на зависимост между класовете View и BlogEntry. Отношението на зависимостта е представено в UML с помощта на пунктирана стрелка.

public class BlogEntry

    {

        //Members of the BlogEntry class

    }

public class View

    {

        //Members of the View class

    }

Обобщение и специализация

Обобщаването може да се определи като техника за извличане на съществените характеристики (те включват атрибути, свойства и методи) от два или повече подкласа и след това комбинирането им в обобщен основен клас (наричан още суперклас). Напротив, специализацията е обратното на обобщаването - тя се използва за представяне на връзката "тип" чрез създаване на подкласове от съществуващи базови класове.

Наследяването се дефинира като способността на даден клас да разширява един или повече класове (известни също като базови класове). Обърнете внимание, че обобщаването е най-силната форма на взаимоотношения между класовете, тъй като класовете, участващи във връзка с обобщаване, са тясно свързани помежду си - повечето вътрешни тънкости на родителския клас са видими за дъщерния клас.

Класът, който разширява базовия или родителския клас, е известен също като дъщерния клас или производния клас. Наследеният или обобщен клас разширява или наследява своя основен или родителски клас. При наследяването дъщерният клас наследява методите и атрибутите на базовия или родителския клас, с изключение на тези, които са частни. По същество частните членове на базовия клас не се наследяват, тъй като принадлежат „единствено“ към класа, от който са част. Следователно трябва да се възползвате от обобщаването само когато трябва да представите клас, който всъщност е по-специализирана форма на друг клас.

Наследяването е от следните видове:

  • Единична
  • Многократни
  • Многостепенна
  • Йерархичен
  • Хибрид

Единичното наследяване е най-простата форма на наследяване, при която един клас разширява друг клас. Следният кодов фрагмент илюстрира тази форма на наследяване - обърнете внимание как класът BlogAuthor разширява класа на автора.

public class Author

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

При множествено наследяване имате множество базови класове, от които се получава клас. Имайте предвид, че множественото наследяване не се поддържа в езиците за програмиране OOP като Java или C #.

Следващият тип наследяване в нашия списък е многостепенното наследяване. При тази форма на наследяване имате класове, наследени един от друг, за да образувате верига. Следният кодов фрагмент илюстрира това.

public class Person

    {

        //Members of the Person class

    }

public class Author : Person

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

В йерархичното наследяване имате класове, които представляват йерархична структура чрез наследяване, подобно на родословно дърво. При този тип наследяване имате повече от един детски клас с една и съща основна или родителска класа. С други думи, това е тип наследяване, при който един или повече производни класове имат обща основа или родителски клас.

Хибридното наследяване е вид наследство, при което две или повече форми на наследяване се обединяват в една. По същество този тип наследяване е комбинация от две или повече форми на наследяване, за да се образува затворена структура. Имайте предвид, че хибридното наследяване също не се поддържа в езиците за програмиране на OO като C # или Java.