Абстрактны клас супраць спадчыны
 

Абстрактны клас і спадчыннасць - дзве важныя аб'ектна-арыентаваныя канцэпцыі, якія можна знайсці ў многіх аб'ектна-арыентаваных мовах праграмавання, такіх як Java. Абстрактны клас можна разглядаць як абстрактную версію звычайнага (канкрэтнага) класа, а Наследаванне дазваляе новым класам пашырыць іншыя класы. Анатацыя класа - гэта клас, які не можа быць ініцыялізаваны, але можа быць пашыраны. Такім чынам, абстрактныя класы маюць сэнс толькі ў тым выпадку, калі мова праграмавання падтрымлівае спадчыну. У Java класы Анатацыя аб'яўляюцца з выкарыстаннем ключавога слова абстракт, у той час як ключавое слова Extends выкарыстоўваецца для атрымання ў спадчыну ад (супер) класа.

Што такое абстрактны клас?

Звычайна абстрактныя класы, таксама вядомыя як абстрактныя базавыя класы (ABC), не могуць быць матываванымі (асобнік гэтага класа не можа быць створаны). Такім чынам, абстрактныя класы маюць сэнс мець толькі калі мова праграмавання падтрымлівае спадчыну (магчымасць стварэння падкласаў з пашырэння класа). Абстрактныя класы звычайна ўяўляюць сабой абстрактнае паняцце або цэласнасць з частковай або адсутнасцю рэалізацыі. Такім чынам, абстрактныя класы дзейнічаюць як бацькоўскія класы, з якіх выводзяцца дзіцячыя класы, так што даччыны клас будзе падзяляць няпоўныя функцыі бацькоўскага класа, а функцыі для іх завяршэння могуць быць дададзены функцыянальнасць.

Абстрактныя заняткі могуць утрымліваць абстрактныя метады. Падкласы, якія распаўсюджваюць абстрактны клас, могуць рэалізаваць гэтыя (успадкаваныя) абстрактныя метады. Калі дзіцячы клас рэалізуе ўсе такія абстрактныя метады, гэта канкрэтны клас. Але калі гэтага не адбываецца, клас дзіцяці таксама становіцца абстрактным класам. Усё гэта азначае, што калі праграміст прызначыць клас у якасці абстрактнага, яна кажа, што клас будзе няпоўным і ў яго будуць элементы, якія павінны быць запоўнены спадчыннымі падкласамі. Гэта добры спосаб стварыць кантракт паміж двума праграмістамі, які спрашчае задачы па распрацоўцы праграмнага забеспячэння. Праграмісту, які піша код для атрымання ў спадчыну, трэба дакладна прытрымлівацца вызначэння метадаў (але, вядома, можа быць і яе ўласная рэалізацыя).

Што такое спадчына?

Наследаванне - гэта аб'ектна-арыентаваная канцэпцыя, якая дазваляе новым класам пашырыць іншыя класы. Ключавое слова Extends выкарыстоўваецца для рэалізацыі канцэпцыі атрымання спадчыны ў мове праграмавання Java. Наследаванне па сутнасці забяспечвае паўторнае выкарыстанне кода, дазваляючы пашыраць уласцівасці і паводзіны існуючага класа наноў вызначаны клас. Калі новы падклас (альбо вытворны клас) пашырае суперкласс (альбо бацькоўскі клас), то падклас будзе ўспадкоўваць усе атрыбуты і метады суперкласа. Падклас можа неабавязкова змяняць паводзіны (прадастаўляць новыя ці пашыраныя функцыянальныя магчымасці), успадкаваныя з бацькоўскага класа. Звычайна падклас не можа пашыраць некалькі суперкласаў (напрыклад, у Java). Такім чынам, вы не можаце выкарыстоўваць пашырэнні для атрымання некалькіх успадкаваных. Для таго, каб мець некалькі успадкаванняў, вам трэба выкарыстоўваць інтэрфейсы.

У чым розніца паміж абстрактным класам і спадчынай?

Абстрактныя класы звычайна ўяўляюць сабой абстрактнае паняцце або сутнасць з частковай або нерэалізаванай рэалізацыяй. Наследаванне дазваляе новым класам пашырыць іншыя класы. Паколькі абстрактныя класы не могуць быць матываванымі, для выкарыстання абстрактных класаў вам трэба выкарыстоўваць паняцце спадчыны. У адваротным выпадку клас "Анатацыя" не выкарыстоўвае. Абстрактныя класы могуць утрымліваць абстрактныя метады, і калі клас пашыраны, усе метады (абстрактныя і канкрэтныя) успадкоўваюцца. У спадчынны клас можна рэалізаваць любыя або ўсе метады. Калі ўсе абстрактныя метады не рэалізаваны, то гэты клас таксама становіцца класам "Анатацыя". Клас не можа ўспадкаваць больш за адзін клас "Анатацыя" (гэта не якасць абстрактных класаў як такой, а хутчэй абмежаванне атрымання спадчыны).