Programavimas

Naršymas, specializacija ir priklausomybė OOP

OOP (objektinis programavimas) yra paradigma, kurios centre yra objektai ir duomenys, o ne veiksmai ir logika. Dirbdami su OOP, būtina nustatyti objektus ir jų santykius.

Vykdant OOP, problema yra suskaidyta į daugybę objektų ir kaip jie susiję vienas su kitu - procesas vadinamas duomenų modeliavimu. Esminiai objektų santykiai apima: susiejimą, apibendrinimą, specializaciją, agregavimą, priklausomybę ir kompoziciją. Šiame straipsnyje aptarsime sąvokas iliustruodami priklausomybės ir paveldėjimo santykius OOP su kodų pavyzdžiais C #.

Priklausomybė

Priklausomybė yra santykis tarp dviejų ar daugiau objektų, kai objektas priklauso nuo kito objekto ar objektų. Jei vienas iš šių objektų pasikeičia, gali būti paveiktas kitas (-i) objektas (-ai). Priklausomybės ryšys tarp dviejų ar daugiau objektų yra pavaizduotas UML naudojant brūkšnines rodykles. Kitaip tariant, kai tarp dviejų ar daugiau objektų yra priklausomybės ryšys, objektas turi žinoti apie kitą (-us) objektą (-us), nuo kurio jis priklauso.

Apsvarstykite klases „BlogEntry“ ir „View“. Pirmojoje yra visa susijusi informacija, susijusi su tinklaraščio įrašais, o antroji - rodyti duomenis, gautus iš „BlogEntry“ klasės, vartotojo sąsajoje. Taigi, „View“ klasė priklauso nuo „BlogEntry“ klasės, kad turinio (tinklaraščio įrašai) būtų rodomi vartotojo sąsajoje. Taigi egzistuoja priklausomybės ryšys tarp „View“ ir „BlogEntry“ klasių. Priklausomybės ryšys pateikiamas UML naudojant brūkšninę rodyklę.

viešoji klasė „BlogEntry“

    {

// „BlogEntry“ klasės nariai

    }

viešoji klasė Žiūrėti

    {

// Peržiūros klasės nariai

    }

Apibendrinimas ir specializacija

Apibendrinimas gali būti apibrėžtas kaip pagrindinių dviejų charakteristikų (įskaitant atributus, savybes ir metodus) išskyrimo iš dviejų ar daugiau poklasių technika ir tada jų sujungimas apibendrintoje pagrindinėje klasėje (dar vadinamoje superklasėje). Priešingai, specializacija yra atvirkštinė apibendrinimas - ji naudojama „tipo“ santykiams reprezentuoti kuriant poklasius iš esamų bazinių klasių.

Paveldėjimas apibrėžiamas kaip klasės sugebėjimas išplėsti vieną ar kelias klases (dar vadinamas bazinėmis klasėmis). Atkreipkite dėmesį, kad apibendrinimas yra stipriausia klasės santykių forma, nes apibendrinimo santykiuose dalyvaujančios klasės yra glaudžiai susijusios tarpusavyje - dauguma vidinių tėvų klasės subtilybių yra matomos vaiko klasei.

Klasė, pratęsianti pagrindinę ar tėvų klasę, taip pat žinoma kaip vaikų klasė arba išvestinė klasė. Paveldima arba apibendrinta klasė pratęsia arba paveldi savo pagrindinę ar tėvų klasę. Paveldėdama vaikų klasė paveldi pagrindinės ar tėvų klasės metodus ir atributus, išskyrus tuos, kurie yra privatūs. Iš esmės privatūs bazinės klasės nariai nėra paveldimi, nes jie priklauso „vien tik“ klasei, kuriai jie priklauso. Taigi turėtumėte pasinaudoti apibendrinimo pranašumais tik tada, kai jums reikia atstovauti klasei, kuri iš tikrųjų yra labiau specializuota kitos klasės forma.

Paveldėjimas yra šių tipų:

  • Vienišas
  • Daugkartinis
  • Daugiapakopis
  • Hierarchinis
  • Hibridas

Vienas paveldėjimas yra paprasčiausia paveldėjimo forma, kai viena klasė pratęsia kitą klasę. Šis kodo fragmentas iliustruoja šią paveldėjimo formą - atkreipkite dėmesį, kaip „BlogAuthor“ klasė praplečia „Autorių“ klasę.

visuomenės klasės Autorius

    {

// Autorių klasės nariai

    }

public class BlogAuthor: Autorius

    {

// „BlogAuthor“ klasės nariai

    }

Keliose paveldėjimo vietose turite kelias pagrindines klases, iš kurių kilusi klasė. Atkreipkite dėmesį, kad daugkartinis paveldėjimas nepalaikomas OOP programavimo kalbose, tokiose kaip „Java“ ar „C #“.

Kita paveldėjimo rūšis mūsų sąraše yra daugiapakopis paveldėjimas. Šioje paveldėjimo formoje turite vienas iš kito paveldėtas klases grandinei formuoti. Tai iliustruoja šis kodo fragmentas.

visuomenės klasė Asmuo

    {

// Asmens klasės nariai

    }

visuomenės klasė Autorius: Asmuo

    {

// Autorių klasės nariai

    }

public class BlogAuthor: Autorius

    {

// „BlogAuthor“ klasės nariai

    }

Hierarchiniame paveldėjime turite klases, kurios per paveldėjimą atspindi hierarchinę struktūrą, panašią į šeimos medį. Šio tipo paveldėjimo atveju turite daugiau nei vieną vaikų klasę, turinčią tą pačią pagrindinę ar tėvų klasę. Kitaip tariant, tai yra paveldėjimo rūšis, kai viena ar daugiau išvestinių klasių turi bendrą pagrindą arba tėvų klasę.

Hibridinis paveldėjimas yra paveldėjimo rūšis, kai dvi ar daugiau paveldėjimo formų sujungiamos į vieną. Iš esmės šis paveldėjimo tipas yra dviejų ar daugiau paveldėjimo formų derinys, kad būtų sukurta uždara struktūra. Atkreipkite dėmesį, kad hibridinis paveldėjimas taip pat nepalaikomas OO programavimo kalbose, tokiose kaip C # ar Java.