Абагульненае праграмаванне

З пляцоўкі Вікіпедыя
Jump to navigation Jump to search

Абагульненае праграмаванне — у найпрасцейшым сваім вызначэнні — гэта такі стыль праграмавання, пры якім алгарытмы пішуць у тэрмінах тыпаў, канкрэтнае значэнне якіх будзе вызначана пазней. Затым, па меры неабходнасці, алгарытмы інстанцыююцца (англ.: instantiate) для канкрэтных тыпаў, якія падстаўляюцца ў якасці параметраў. Гэты падыход, упершыню рэалізаваны ў мове ML у 1973[1][2] годзе, дазваляе пісаць шырокаўжывальныя функцыі, абстрагуючыся ад набору тыпаў, на якіх яны працуюць. Гэты ж падыход ужываецца і для вытворных тыпаў дадзеных; такім чынам, скарачаецца дубляванне коду. Праграмныя сутнасці такога кшталту вядомыя як джэнерыкі (англ.: generics) у мовах Ада, Delphi, Eiffel, Java, C#, F#, Objective-C, Свіфт, і Visual Basic .NET; параметрычны палімарфізм (англ.: parametric polymorphism) у ML, Haskell і Скала (супольнасць Haskell таксама выкарыстоўвае тэрмін «generic» для блізкай, але некалькі адрознай канцэпцыі), шаблоны (англ.: templates) у C++ і D, і параметрызаваныя тыпы (англ.: parameterized types) ва ўплывовай кнізе «Шаблоны праектавання» (Design Patterns by Gamma, et al. 1994). Аўтары гэтай кнігі звяртаюць увагу, што такі падыход, асабліва ў спалучэнні з дэлегатамі, вельмі магутны, але «[дынамічныя], высока параметрызаваныя праграмы цяжэй зразумець, чым больш статычныя праграмы.»[3]

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

Зноскі

  1. Lee, Kent D. (15 December 2008). Programming Languages: An Active Learning Approach. Springer Science & Business Media. pp. 9–10. ISBN 978-0-387-79422-8. http://books.google.com/books?id=OuW5dC2O99AC&pg=PA9. 
  2. Milner, 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)
  3. Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2. 
  4. Musser, D. R.; Stepanov, A. A. (1989). "Generic programming". in P. Gianni. Symbolic and Algebraic Computation: International symposium ISSAC 1988. Lecture Notes in Computer Science. 358. pp. 13–25. doi:10.1007/3-540-51084-2_2. ISBN 978-3-540-51084-0.