Абстрактны клас супраць класа бетону

Большасць папулярных сучасных аб'ектна-арыентаваных моў праграмавання, такія як Java і C #, заснаваны на класе. Яны дасягаюць аб'ектна-арыентаваных паняццяў, такіх як інкапсуляцыя, атрыманне ў спадчыну і палімарфізм пры дапамозе заняткаў. Заняткі - гэта абстрактнае ўяўленне аб прадметах рэальнага свету. Заняткі могуць быць як канкрэтнымі, так і абстрактнымі ў залежнасці ад узроўню рэалізацыі функцыянальных метадаў. Бетонны клас цалкам рэалізуе ўсе свае метады. Абстрактны клас можна разглядаць як абмежаваную версію звычайнага (канкрэтнага) класа, дзе ён можа ўтрымліваць часткова рэалізаваныя метады. Звычайна канкрэтныя класы называюцца (проста) класамі.

Што такое клас бетону?

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

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

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

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

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

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