Абагульненае праграмаванне () — у найпрасцейшым сваім вызначэнні — гэта такі стыль праграмавання, пры якім алгарытмы пішуць у тэрмінах тыпаў, канкрэтнае значэнне якіх будзе вызначана пазней. Затым, па меры неабходнасці, алгарытмы інстанцыююцца () для канкрэтных тыпаў, якія падстаўляюцца ў якасці параметраў. Гэты падыход, упершыню рэалізаваны ў мове ML у 1973Milner, R., Morris, L., Newey, M. «A Logic for Computable Functions with reflexive and polymorphic types», Proc. Conference on Proving and Improving Programs, Arc-et-Senans (1975) годзе, дазваляе пісаць шырокаўжывальныя функцыі, абстрагуючыся ад набору тыпаў, на якіх яны працуюць. Гэты ж падыход ужываецца і для вытворных тыпаў дадзеных; такім чынам, скарачаецца дубляванне коду. Праграмныя сутнасці такога кшталту вядомыя як джэнерыкі () у мовах Ада, Delphi, Eiffel, Java, C#, F#, Objective-C, Swift, і Visual Basic .NET; параметрычны палімарфізм () у ML, Haskell і Scala (супольнасць Haskell таксама выкарыстоўвае тэрмін «generic» для блізкай, але некалькі адрознай канцэпцыі), шаблоны () у C++ і D, і параметрызаваныя тыпы () ва ўплывовай кнізе «Шаблоны праектавання» (Design Patterns by Gamma, et al. 1994). Аўтары гэтай кнігі звяртаюць увагу, што такі падыход, асабліва ў спалучэнні з дэлегатамі, вельмі магутны, але «[дынамічныя], высока параметрызаваныя праграмы цяжэй зразумець, чым больш статычныя праграмы.»

Тэрмін «абагульненае праграмаванне» першапачаткова быў выкарыстаны Дэвідам Масерам і Аляксандрам Сцяпанавым у вузейшым сэнсе, чым акрэслены вышэй, каб апісаць парадыгму праграмавання, у якой фундаментальныя патрабаванні да тыпаў дадзеных абстрагаваныя ад канкрэтных прыкладаў алгарытмаў і структур дадзеных, і фармалізаваныя ў выглядзе канцэпцый, з абагульненымі функцыямі, рэалізаванымі у тэрмінах гэтых канцэпцый, звычайна з выкарыстаннем механізмаў абагульнення на ўзроўні мовы, як апісана вышэй.

Катэгорыя:Парадыгмы праграмавання