www.wikidata.uk-ua.nina.az
Nasliduvannya angl inheritance odin z principiv ob yektno oriyentovnogo programuvannya 1 yakij daye klasu mozhlivist vikoristovuvati programnij kod inshogo bazovogo klasu 2 dopovnyuyuchi jogo svoyimi vlasnimi detalyami realizaciyi Inshimi slovami pid chas nasliduvannya vidbuvayetsya otrimannya novogo pohidnogo klasu yakij mistit programnij kod bazovogo klasu z zaznachennyam vlasnih osoblivostej vikoristannya Nasliduvannya nalezhit do tipu is a vidnoshen mizh klasami Pri uspadkuvanni stvoryuyetsya specializovana versiya vzhe isnuyuchogo klasu Poznachennya nasliduvannya na UML diagrami klasiv V Unified Modeling Language nasliduvannya klasiv vidobrazhuyetsya na diagrami klasiv Zmist 1 Perevagi vikoristannya nasliduvannya 2 Nedoliki vikoristannya nasliduvannya 3 Terminologiya 4 Zastosuvannya 5 Tipi nasliduvannya 5 1 Proste nasliduvannya 5 1 1 Abstraktni klasi i stvorennya ob yektiv 5 2 Mnozhinne nasliduvannya 6 Yedinij bazovij klas 7 Nasliduvannya v movah programuvannya 7 1 C 7 2 Delphi Object Pascal 7 3 Python 7 4 PHP 7 5 Objective C 7 6 Java 7 7 C 7 8 Ruby 7 9 JavaScript 8 Konstruktori i destruktori 9 Div takozh 10 PosilannyaPerevagi vikoristannya nasliduvannya RedaguvatiPravilne vikoristannya mehanizmu nasliduvannya daye nastupni vzayemozv yazani perevagi efektivna pobudova vazhkih iyerarhij klasiv z mozhlivistyu yih modifikaciyi Robotu klasiv v iyerarhiyi mozhna zminyuvati shlyahom dodavannya novih uspadkovanih klasiv v potribnomu misci iyerarhiyi povtorne vikoristannya ranishe napisanogo kodu z podalshoyu jogo modifikaciyeyu pid postavlenu zadachu Svoyeyu chergoyu novostvorenij kod takozh mozhe vikoristovuvatisya na iyerarhiyah nizhchih klasiv zruchnist v suprovodi dopovneni programnogo kodu shlyahom vvedennya novih klasiv z novimi mozhlivostyami zmenshennya kilkosti logichnih pomilok pri rozrobci skladnih programnih sistem Povtorno vikoristovuvanij kod chastishe testuyetsya a otzhe mensha jmovirnist nayavnosti v nomu pomilok legkist v uzgodzhenni riznih chastin programnogo kodu shlyahom vikoristannya interfejsiv Yaksho dva klasi uspadkovani vid zagalnogo nashadka povedinka cih klasiv bude odnakova u vsih vipadkah Ce tverdzhennya vihodit z vimogi sho shozhi ob yekti povinni mati shozhu povedinku Same vikoristannya interfejsiv zumovlyuye shozhist povedinki ob yektiv stvorennya bibliotek kodu yaki mozhna vikoristovuvati j dopovnyuvati vlasnimi rozrobkami mozhlivist realizovuvati vidomi shabloni proyektuvannya dlya pobudovi gnuchkogo kodu yakij ne zminyuye poperednih rozrobok vikoristannya perevag polimorfizmu nemozhlivo bez uspadkuvannya Zavdyaki polimorfizmu zabezpechuyetsya princip odin interfejs dekilka realizacij zabezpechennya doslidnickogo programuvannya shvidkogo maketuvannya Take programuvannya vikoristovuyetsya u vipadkah koli cili ta potrebi do programnoyi sistemi na pochatku nechitki Spochatku stvoryuyetsya maket strukturi potim cej maket poetapno vdoskonalyuyetsya shlyahom nasliduvannya poperednogo Proces trivaye do otrimannya potribnogo rezultatu lipshe rozuminnya strukturi programnoyi sistemi programistom zavdyaki prirodnomu predstavlennyu mehanizmu uspadkuvannya Yaksho pri pobudovi skladnih iyerarhij namagatis vikoristovuvati inshi principi to ce mozhe znachno uskladniti rozuminnya usiyeyi zadachi ta prizvede do zbilshennya kilkosti pomilok Nedoliki vikoristannya nasliduvannya RedaguvatiPri vikoristanni nasliduvannya v programah buli pomicheni nastupni nedoliki nemozhlivo zminiti uspadkovanu realizaciyu pid chas vikonannya nizka shvidkist vikonannya Shvidkist vikonannya programnogo kodu zagalnogo priznachennya nizhcha nizh u vipadku vikoristannya specializovanogo kodu yakij napisanij konkretno dlya ciyeyi zadachi Odnak cej nedolik mozhna vipraviti zavdyaki optimizaciyi kodu velika rozmirnist program zavdyaki vikoristannyu bibliotek zagalnogo priznachennya Yaksho dlya deyakoyi zadachi rozroblyati vuzkospecializovanij programnij kod to cej kod bude zajmati menshe pam yati nizh kod zagalnogo priznachennya zbilshennya skladnosti programi u vipadku nepravilnogo abo nevmilogo vikoristannya uspadkuvannya Programist zobov yazanij vmiti korektno vikoristovuvati nasliduvannya pri pobudovi iyerarhij klasiv V inshomu vipadku ce prizvede do velikogo uskladnennyu programnogo kodu i yak rezultat zbilshennyu kilkosti pomilok skladnist zasvoyennya pochatkovimi programistami osnov pobudovi program yaki vikoristovuyut uspadkuvannya Odnak cej nedolik umovnij tak yak zalezhit vid dosvidu programista Terminologiya RedaguvatiV ob yektno oriyentovanomu programuvanni pochinayuchi z Simula 67 3 abstraktni tipi dannih nazivayutsya klasami Bazovij klas angl base class ce klas yakij znahoditsya na vershini iyerarhiyi nasliduvannya klasiv i v osnovi dereva pidklasiv tobto ne ye pidklasom i ne maye uspadkuvan vid inshih superklasiv abo interfejsiv Bazovim klasom mozhe buti abstraktnij klas i interfejs Bud yakij ne bazovij klas ye pidklasom Superklas angl superclass batkivskij klas angl parent class predok abo nadklas klas vikonuye nasliduvannya v pidklasah tobto klas vid yakogo nasliduyutsya inshi klasi Superklasom mozhe buti pidklas bazovij klas abstraktnij klas i interfejs Pidklas angl subclass pohidnij klas angl derived class dochirnij klas angl child class klas nashadok klas naslidnik abo klas realizator klas uspadkovanij vid superklasu abo interfejsu tobto klas viznachenij cherez nasliduvannya vid inshogo klasu abo deyakih takih klasiv Pidklasom mozhe buti superklas Interfejs angl interface ce struktura sho viznachaye chistij interfejs klasu sho skladayetsya z abstraktnih metodiv Interfejsi berut uchast v iyerarhiyi nasliduvannya klasiv i interfejsiv Bazovij interfejs angl base interface ce analog bazovogo klasu v iyerarhiyi nasliduvannya interfejsiv tobto ce interfejs yakij znahoditsya na vershini iyerarhiyi uspadkuvannya Superinterfejs angl super interface abo interfejs predok ce analog superklasu v iyerarhiyi uspadkuvannya tobto ce interfejs vikonuye nasliduvannya pidklasiv i pidinterfejsiv Interfejs nashadok interfejs naslidnik abo pohidnij interfejs angl derived interface ce analog pidklasu v iyerarhiyi nasliduvannya interfejsiv tobto ce interfejs uspadkovanij vid odnogo abo dekilkoh superinterfejsiv Iyerarhiya uspadkuvannya abo iyerarhiya klasiv derevo elementami yakogo ye klasi ta interfejsi Zastosuvannya RedaguvatiNasliduvannya ye mehanizmom povtornogo vikoristannya kodu angl code reuse i spriyaye nezalezhnomu rozshirennyu programnogo zabezpechennya cherez vidkriti klasi angl public classes i interfejsi angl interfaces Vstanovlennya vidnoshennya nasliduvannya mizh klasami porodzhuye iyerarhiyu klasiv angl class hierarchy en Tipi nasliduvannya Redaguvati Proste nasliduvannya Redaguvati Proste nasliduvannya abo odinochne uspadkuvannya opisuye sporidnenist mizh dvoma klasami odin z yakih uspadkovuyetsya vid inshogo Z odnogo klasu mozhe vivoditisya bagato klasiv ale navit v comu vipadku podibnij vid vzayemozvyazku zalishayetsya prostim uspadkuvannyam Abstraktni klasi i stvorennya ob yektiv Redaguvati Dlya deyakih mov programuvannya spravedliva nastupna koncepciya Isnuyut abstraktni klasi ogoloshuyutsya takimi dovilno abo cherez pripisanih yim abstraktnih metodiv yih mozhna opisuvati nayavnimi polya ta metodi Stvorennya zh ob yektiv ekzemplyariv oznachaye konkretizaciyu zastosovnu tilki do neabstraktnih klasiv v tomu chisli do neabstraktnih naslidnikam abstraktnih predstavnikami yakih v rezultati budut stvoreni ob yekti Mnozhinne nasliduvannya Redaguvati Dokladnishe Mnozhinne uspadkuvannyaPri mnozhinnomu uspadkuvanni u klasa mozhe buti bilshe odnogo predka V comu vipadku klas uspadkovuye metodi vsih predkiv Perevagi takogo pidhodu v bilshij gnuchkosti Mnozhinne nasliduvannya realizovano v C Z inshih mov sho nadayut cyu mozhlivist mozhna vidmititi Python i Eiffel Mnozhinne nasliduvannya pidtrimuyetsya v movi UML Mnozhinne uspadkuvannya potencijne dzherelo pomilok yaki mozhut vinikati cherez nayavnist odnakovih imen metodiv u predkiv V movah yaki pozicionuyutsya yak naslidniki C Java C ta inshi vid mnozhinnogo nasliduvannya bulo prijnyato rishennya vidmovitis v korist interfejsiv Praktichno zavzhdi mozhna obijtisya bez vikoristannya danogo mehanizmu Odnak yaksho taka neobhidnist vse taki vinikla to dlya virishennya konfliktiv vikoristannya uspadkovanih metodiv z odnakovimi imenami mozhlivo napriklad zastosuvati operaciyu rozshirennya vidimosti dlya viklika konkretnogo metoda konkretnogo predka Sproba virishennya problemi nayavnosti odnakovih imen metodiv v predkah bula predprijnyati u movi Eiffel v yakij pri opisau novogo klasu neobhidno yavno vkazati importovani chleni kozhnogo z uspadkovanih klasiv i yih najmenuvannya v dochirnomu klasi Bilshist suchasnih ob yektno oriyentovanih mov programunnya C Java Delphi ta inshi pidtrimuyut mozhlivist odnochasno uspadkovuvatis vid klasa predka i realizovuvati metodi dekilkoh interfejsiv odnim i tim zhe klasom Cej mehanizm dozvolyaye v bagato chomu zaminiti mnozhinne uspadkuvannya metodi interfejsiv neobhidno pereviznachati yavno sho viklyuchaye pomilki pri uspadkuvanni funkcionalnosti odnakovih metodiv riznih klasiv predkiv Yedinij bazovij klas RedaguvatiV ryadi mov programuvannya usi klasi yavno abo neyavno uspadkovuyutsya vid deyakogo bazovogo klasu Smalltalk buv odnim z pershih mov v yakih vikoristovuvalas cya koncepciya Do takih mov takozh vidnosyatsya Objective C NSObject Perl UNIVERSAL Eiffel ANY Java java lang Object C System Object Delphi TObject Scala Any Nasliduvannya v movah programuvannya RedaguvatiC RedaguvatiNasliduvannya v C 4 class A Bazovij klas class B public A Public uspadkuvannya class C protected A Protected uspadkuvannya class Z private A Private uspadkuvannyaV C isnuye tri tipi uspadkuvannya public protected private Specifikatori dostupu chleniv bazovogo klasu zminyuyutsya v potomkah nastupnim chinom Yaksho klas ob yavlenij yak bazovij dlya inshogo klasu z specifikatorom dostupu public public chleni bazovogo klasu dostupni yak public chleni pohidnogo klasu protected chleni bazovogo klasu dostupni yak protected chleni pohidnogo klasu protected public i protected chleni bazovogo klasu dostupni yak protected chleni pohidnogo klasu private public i protected chleni bazovogo klasu dostupni yak private chleni pohidnogo klasu Odnim z osnovnih perevag public nasliduvannya ye te sho vkazivnik na klasi naslidniki mozhe buti neyavno peretvorenij u vkazivnik na bazovij klas tobto dlya prikladu vishe mozhna napisati A a new B Cya cikava mozhlivist vidkrivaye mozhlivist dinamichnoyi identifikaciyi tipu RTTI Delphi Object Pascal RedaguvatiDlya vikoristannya mehanizmu nasliduvannya v Delphi neobhidno v ogolosheni klasu v duzhkah class vkazati klas predok Predok TAncestor class private protected public Virtualna procedura procedure VirtualProcedure virtual abstract procedure StaticProcedure end Naslidnik TDescendant class TAncestor private protected public Perekrittya virtualnoyi procedury procedure VirtualProcedure override procedure StaticProcedure end Absolyutno vsi klasi v Delphi ye nashadkami klasa TObject Yaksho klas predok ne vkazan to mayetsya na uvazi sho novij klas ye pryamim nashadkom klasa TObject Mnozhinne nasliduvannya v Delphi z samogo pochatku ne pidtrimuyetsya odnak dlya tih komu bez cogo ne obijtis vse zh ye taki mozhlivosti napriklad za rahunok vikoristannya klasiv pomichnikiv angl Class Helpers Python RedaguvatiPython pidtrimuye yak odinochne tak i mnozhinne uspadkuvannya Pri dostupi do atributu pereglyad pohidnih klasiv prohidit v poryadku rozshirennya metoda angl method resolution order MRO class Ancestor1 object Predok 1 def m1 self pass class Ancestor2 object Predok 2 def m1 self pass class Descendant Ancestor1 Ancestor2 Naslidnik def m2 self pass d Descendant Inicializaciya print d class mro Poryadok rozshirennya metoda lt class main Descendant gt lt class main Ancestor1 gt lt class main Ancestor2 gt lt type object gt Z versiyi Python 2 2 5 v movi isnuyut klasichni klasi i novi klasi Ostanni ye naslidnikami object Klasichni klasi budut pidtrimuvati vklyuchno do versiyi 2 6 ale vidaleni z movi v Python 3 0 Mnozhinne nasliduvannya priminyayetsya v Python dlya vvedennya v osnovnij klas klasiv domishok angl mix in PHP RedaguvatiDlya vikoristannya mehanizma nasliduvannya v PHP neobhidno v ogoloshenni klasu pislya imeni ogoloshenogo klasu naslidnika vkazati slovo extends i im ya klasu predka class Descendant extends Ancestor U vipadku perekrittya klasom naslidnikom metodiv predka dostup do metodiv predka mozhna otrimati z vikoristannyam klyuchovogo slova parent class A function example echo Viklikanij metod A example n class B extends A function example echo Viklikanij metod B example n parent example Mozhna zapobigti perekrittya klasom naslidnikom metodiv predka dlya cogo neobhidno vkazati klyuchove slovo final class A final function example echo Viklikanij metod A example n class B extends A function example vikliche pomilku parent example i nikoli ne vikonayetsya Shob pri uspadkuvanni zvernutis do konstruktora batkivskogo klasu neobhidno dochirnomu klasu v konstruktori vkazati parent construct Objective C Redaguvati interface A NSObject void example end implementation void example NSLog Class A end interface B A void example end implementation void example NSLog Class B endV interfejsi ogoloshuyut metodi yaki bude vidno zzovni klasu public Vnutrishni metodi mozhna realizovuvati bez interfejsu Dlya ogoloshennya dodatkovih vlastivostej koristuyutsya interface extension u fajli realizaciyi Usi metodi v Objective C virtualni Java RedaguvatiPriklad nasliduvannya vid odnogo klasu i dvoh interfejsiv public class A public interface I1 public interface I2 public class B extends A implements I1 I2 Direktiva final v ogolosheni klasa robit nasliduvannya vid nogo nemozhlivim C RedaguvatiPriklad uspadkuvannya 6 vid odnogo klasu i dvoh interfejsiv public class A public interface I1 public interface I2 public class B A I1 I2 Nasliduvannya vid tipizovanih klasiv mozhna zdijsnyuvati vkazavshi fiksovanij tip abo shlyahom perenosu zminnoyi tipu v uspadkovanij klas public class A lt T gt public class B A lt int gt public class B2 lt T gt A lt T gt Dopustimo takozh nasliduvannya vkladenih klasiv vid klasiv yaki yih mistyat class A default class A is internal not public class B can not be public klas A za zamovchuvannyam ye vnutrishnim ne publichnij klas B ne mozhe buti publichnim class B A Direktiva sealed v ogolosheni klasa robit nasliduvannya vid nogo nemozhlivim Ruby Redaguvati class Parent def public method Public method end private def private method Private method end end class Child lt Parent def public method Redefined public method end def call private method Ancestor s private method private method end endKlas Parent ye predkom dlya klasu Child v yakogo pereviznachenij metod public method child Child new child public method gt Redefined public method child call private method gt Ancestor s private method Private method Privatni metodi predka mozhna viklikati z nashadkiv JavaScript Redaguvati class Parent constructor data this data data publicMethod return Public Method class Child extends Parent getData return Data this data publicMethod return Redefined public method const test new Child test test getData gt Data test test publicMethod gt Redefined public method test data gt test Klas Parent ye predkom dlya klasu Child v yakogo pereviznachenij metod publicMethod V JavaScript vikoristovuyetsya prototipne uspadkuvannya Konstruktori i destruktori RedaguvatiV S konstruktori pri uspadkuvanni viklikayutsya pochergovo vid pershogo predka do ostannogo nashadka a destruktori navpaki vid ostannogo nashadka do pershogo predka class First public First cout lt lt gt gt First constructor lt lt endl First cout lt lt gt gt First destructor lt lt endl class Second public First public Second cout lt lt gt Second constructor lt lt endl Second cout lt lt gt Second destructor lt lt endl class Third public Second public Third cout lt lt Third constructor lt lt endl Third cout lt lt Third destructor lt lt endl vikonannya kodu Third th new Third delete th rezultat vivedennya gt gt First constructor gt Second constructor Third constructor Third destructor gt Second destructor gt gt First destructor Div takozh RedaguvatiPolimorfizm programuvannya Inkapsulyaciya programuvannya Klas programuvannya Metodi programuvannya Polya programuvannya Interfejs programuvannya Iyerarhiya UML Princip pidstanovki Liskov Movi programuvannyaPosilannya Redaguvati Chto takoe obektno orientirovannoe programmirovanie ros Home Computer Science and Engineering www cse msu edu Procitovano 20 zhovtnya 2021 Ekendahl Robert 2006 Hardware verification with C a practitioner s handbook New York Springer ISBN 978 0 387 36254 0 OCLC 262687433 C Inheritance Python 2 2 angl C i NET Nasledovanie ros Otrimano z https uk wikipedia org w index php title Nasliduvannya programuvannya amp oldid 40261688