Обобщенное программирование java. Объектно-ориентированное программирование. На пути к объектно-ориентированному программированию

нем. Programmusik, франц. musique а programme, итал. musica a programma, англ. programme music

Музыкальные произведения, имеющие определённую словесную, нередко поэтич. программу и раскрывающие запёчатлённое в ней содержание. Явление муз. программности связано со специфич. чертами музыки, отличающими её от др. иск-в. В области отображения чувств, настроений, душевной жизни человека музыка имеет важные преимущества перед др. иск-вами. Косвенно, через чувства и настроения, музыка способна отразить мн. явления действительности. Однако она не в состоянии точно обозначить, что именно вызывает в человеке то или иное чувство, не способна достигнуть предметной, понятийной конкретности отображения. Возможностями такой конкретизации обладают речевой язык, литература. Стремясь к предметной, понятийной конкретизации, композиторы создают программные муз. произв.; предпосылая соч. программу, они заставляют средства речевого языка, художеств. лит-ры действовать в единстве, в синтезе с собственно муз. средствами. Единению музыки и лит-ры способствует и то, что они являются иск-вами временными, способными показывать рост, развитие образа. Единение разл. иск-в происходило издавна. В глубокой древности вообще не существовало самостоят. видов иск-в - они выступали вместе, в единстве, иск-во было синкретическим; одноврем. оно было тесно связано с трудовой деятельностью и с разл. рода ритуалами, обрядами. В эту пору каждое из иск-в было столь ограничено в средствах, что вне синкретич. единства, направленного на решение прикладных задач, существовать не могло. Последующее выделение иск-в определялось не только изменением бытового уклада, но и ростом возможностей каждого из них, достигнутым внутри синкретич. единства, связанным с этим ростом эстетич. чувства человека. В то же время единение иск-в никогда не прекращалось, включая и единение музыки со словом, поэзией - прежде всего во всевозможных вок. и вок.-драматич. жанрах. В нач. 19 в., после длительного периода существования музыки и поэзии как самостоятельных иск-в, тенденция к их единению ещё более усилилась. Это определялось уже не их слабостью, а скорее их силой, доведением до предела их собств. возможностей. Дальнейшее обогащение отображения действительности во всём её многообразии, во всех её аспектах могло быть достигнуто лишь совместным действием музыки и слова. И программность является одним из видов единения музыки и средств речевого языка, а также лит-ры, обозначающих или отображающих те стороны единого объекта отражения, передать к-рые своими собственными средствами музыка не в состоянии. Т. о., неотъемлемым элементом программного муз. произв. является словесная программа, созданная или избранная самим композитором, - будь то краткий программный заголовок, указывающий на явление действительности, к-рое имел в виду композитор (пьеса "Утро" Э. Грига из музыки к драме Г. Ибсена "Пер-Гюнт"), порой же "отсылающий" слушателя к определённому лит. произв. ("Макбет" Р. Штрауса - симф. поэма "по драме Шекспира"), или пространный отрывок из литературного произв., подробная программа, составленная композитором по тому или иному лит. произв. (симф. сюита (2-я симфония) "Антар" Римского-Корсакова по одноимённой сказке О. И. Сенковского) или вне связи с к.-л. лит. прообразом ("Фантастическая симфония" Берлиоза).

Не всякое заглавие, не всякое пояснение к музыке могут рассматриваться как её программа. Программа может исходить только от автора музыки. Если он не сообщил программы, значит сам его замысел был непрограммным. Если он сначала придал своему соч. программу, а потом отказался от неё, значит он перевёл своё соч. в разряд непрограммных. Программа не является разъяснением музыки, она дополняет её, раскрывая нечто отсутствующее в музыке, недоступное для воплощения муз. средствами (иначе она была бы излишней). Этим она принципиально отличается от любого анализа музыки непрограммного соч., любого описания его музыки - хотя бы и самого поэтичного, в т.ч. и от описания, принадлежащего автору соч. и указывающего на конкретные явления, к-рые вызвали в его творч. сознании те или иные муз. образы. И наоборот - программные соч. - это не "перевод" на язык музыки самой программы, но отражение муз. средствами того же объекта, к-рый обозначен, отражён в программе. Программой не являются и приданные самим автором заголовки, если они обозначают не конкретные явления действительности, но понятия эмоционального плана, к-рые музыка передаёт гораздо точнее (напр., заголовки типа "Грусть" и т.п.). Случается, что программа, приданная произв. самим автором, не находится в органич. единстве с музыкой, однако это определяется уже художеств. мастерством композитора, порой и тем, насколько удачно составлена или подобрана им словесная программа. К вопросу о существе явления программности это прямого отношения не имеет.

Определёнными средствами конкретизации обладает сам муз. язык. В их числе муз. изобразительность (см. Звукопись) - отражение различного рода звучаний действительности, ассоциативные представления, порождаемые муз. звуками - их высотой, длительностью, тембром. Важным средством конкретизации является также привлечение черт "прикладных" жанров - танцевальных, марша во всех его разновидностях и т.п. Конкретизации могут служить и нац.-характерные черты муз. языка, муз. стиль. Все эти средства конкретизации позволяют и без обращения к программности выражать общую концепцию соч. (напр., торжество светлых сил над тёмными и т.п.). И всё же они не дают той предметной, понятийной конкретизации, к-рая обеспечивается словесной программой. Более того, чем шире применены в муз. произв. собственно муз. средства конкретизации, тем более необходимыми для полноценного восприятия музыки оказываются слова, программа.

Один из видов программности - картинная программность. К нему относятся соч., отображающие один образ или комплекс образов действительности, не претерпевающий существ. изменений на протяжении всего его восприятия. Это картины природы (пейзажи), картины нар. празднеств, плясок, битв и т.п., муз. изображения отд. объектов неодушевлённой природы, а также портретные муз. зарисовки.

Второй осн. вид муз. программности - сюжетная программность. Источником сюжетов для программных произв. этого вида служит прежде всего художеств. лит-ра. В сюжетно-программном муз. произв. развитие муз. образов в целом или в частностях отвечает развитию сюжета. Различают программность обобщённо-сюжетную и последовательно- сюжетную. Автор соч., относящегося к обобщённо-сюжетному типу программности и связанного через программу с тем или иным лит. произв., не ставит целью показать обрисованные в нём события во всей их последовательности и сложности, но даёт муз. характеристику осн. образов лит. произв. и общего направления развития сюжета, исходного и итогового соотношения действующих сил. Напротив, автор произв., принадлежащего к последовательно-сюжетному типу программности, стремится отобразить и промежуточные этапы развития событий, порой всю последовательность событий. Обращение к этому типу программности диктуется сюжетами, в к-рых важное значение приобретают и срединные этапы развития, протекающего не прямолинейно, но связанного с введением новых персонажей, с изменением обстановки действия, с событиями, не являющимися непосредственным следствием предшествующей ситуации. Обращение к последовательно-сюжетной программности зависит и от творч. установок композитора. У разных композиторов одни и те же сюжеты зачастую претворяются по-разному. Напр., трагедия "Ромео и Джульетта" У. Шекспира вдохновила П. И. Чайковского на создание произв. обобщённо-сюжетного типа программности (увертюра-фантазия "Ромео и Джульетта"), Г. Берлиоза - на создание произв. последовательно-сюжетного типа программности (драм. симфония "Ромео и Джульетта", в к-рой автор даже выходит за пределы чистого симфонизма и привлекает вок. начало).

В области муз. языка невозможно установить отличит. признаки П. м. Это справедливо и в отношении формы программных произв. В соч., представляющих картинный тип программности, нет никаких предпосылок для возникновения специфич. структур. Задачи, к-рые ставят перед собой авторы программных произв. обобщённо-сюжетного типа, с успехом выполняются формами, выработанными в непрограммной музыке, в первую очередь формой сонатного allegro. Авторам программных соч. последовательно-сюжетного типа приходится создавать муз. форму, в большей или меньшей мере "параллельную" сюжету. Но строят они её, комбинируя элементы разл. форм непрограммной музыки, привлекая нек-рые широко представленные уже в ней приёмы развития. В их числе - вариационный метод. Он позволяет показывать изменения, не затрагивающие существа явления, касающиеся мн. важных черт, но сопряжённые с сохранением ряда качеств, что даёт возможность узнать образ, в каком бы новом облике он ни выступал. С вариационным методом тесно связан принцип монотематизма. Используя этот принцип в плане образной трансформации, столь широко применявшейся Ф. Листом в его симфонических поэмах и др. произв., композитор обретает большую свободу следования за сюжетом без опасности нарушить муз. цельность соч. Другой вид монотематизма, связанный с лейтмотивной характеристикой персонажей (см. Лейтмотив), находит применение гл. обр. в последовательно-сюжетных произв. Зародившись в опере, лейтмотивная характеристика была перенесена и в область инстр. музыки, где одним из первых и наиболее широко к ней прибегал Г. Берлиоз. Суть её заключается в том, что одна тема на протяжении всего соч. выступает как характеристика одного и того же героя. Она появляется каждый раз в новом контексте, обозначающем окружающую героя новую обстановку. Тема эта может меняться и сама, но изменения в ней не меняют её "предметного" смысла и отражают лишь перемены в состоянии того же героя, изменение представлений о нём. Приём лейтмотивной характеристики наиболее уместен в условиях цикличности, сюитности и оказывается мощным средством объединения контрастных частей цикла, раскрывающих единый сюжет. Облегчает воплощение в музыке последовательно-сюжетных замыслов и объединение в одночастной форме черт сонатного allegro и сонатно-симф. цикла, характерное для созданного Ф. Листом жанра симф. поэмы. Разл. этапы действия передаются с помощью относительно самостоят. эпизодов, контраст между к-рыми отвечает контрасту частей сонатно-симф. цикла, затем эти эпизоды "приводятся к единству" в сжатой репризе, причём в соответствии с программой выделяется тот или иной из них. С точки зрения цикла реприза обычно соответствует финалу, с точки зрения сонатного allegro 1-й и 2-й эпизоды отвечают экспозиции, 3-й ("скерцо" в цикле) - разработке. У Листа применение подобных синтетич. форм нередко сочетается с использованием принципа монотематизма. Все эти приёмы позволяли композиторам создавать муз. формы, отвечающие индивидуальным чертам сюжета и вместе с тем органичные и целостные. Однако новые синтетич. формы не могут считаться принадлежностью одной лишь программной музыки. Они возникли не только в связи с воплощением программных замыслов - в их появлении сказались и общие тенденции эпохи. Точно такие же структуры постоянно использовались и в непрограммной музыке.

Встречаются программные муз. соч., в к-рых в качестве программы привлекаются произв. живописи, скульптуры, даже архитектуры. Таковы, напр., симф. поэмы Листа "Битва гуннов" по фреске В. Каульбаха И "От колыбели до могилы" по рисунку М. Зичи, его же пьесы "Часовня Вильгельма Телля"; "Обручение" (к картине Рафаэля), "Мыслитель" (по статуе Микеланджело) из фп. циклов "Годы странствий" и др. Однако возможности предметной, понятийной конкретизации у этих иск-в не являются исчерпывающими. Не случайно живописные и скульптурные произв. снабжаются конкретизирующим названием, к-рое может рассматриваться как своеобразная их программа. Поэтому в муз. произв., написанных по тем или иным творениям изобразит, иск-в, по существу объединяются не только музыка и живопись, музыка и скульптура, но музыка, живопись и слово, музыка, скульптура и слово. И функции программы в них выполняет гл. обр. не произв. изобразит, иск-ва, но словесная программа. Это определяется прежде всего разноплановостью музыки как временного иск-ва и живописи и скульптуры как иск-в статичных, "пространственных". Что же касается архитектурных образов, они вообще неспособны конкретизировать музыку в предметно-понятийном плане; авторы муз. произв., связанных с архитектурными памятниками, как правило, вдохновлялись не столько ими самими, сколько история, событиями, разыгравшимися в них или вблизи них, легендами, к-рые о них сложились (пьеса "Вышеград" из симф. цикла Б. Сметаны "Моя родина", упомянутая выше фп. пьеса "Часовня Вильгельма Телля" Листа, к-рой автор не случайно предпослал эпиграф "Один за всех, все за одного").

Программность явилась большим завоеванием муз. иск-ва. Она обусловила обогащение круга образов действительности, находящих отражение в муз. произв., поиски новых выразит. средств, новых форм, способствовала обогащению и дифференциации форм и жанров. Обращение композитора к П. м. обычно определяется его связью с жизнью, с современностью, вниманием к актуальным проблемам, в др. случаях само способствует сближению композитора с действительностью, более глубокому её постижению. Однако кое в чём П. м. уступает музыке непрограммной. Программа суживает восприятие музыки, отвлекает внимание от выраженной в ней общей идеи. Воплощение сюжетных замыслов обычно сопряжено с муз. характеристиками, отличающимися большей или меньшей условностью. Отсюда двойственное отношение многих великих композиторов к программности, к-рая и притягивала их, и отталкивала (высказывания П. И. Чайковского, Г. Малера, Р. Штрауса и др.). П. м. не является неким: высшим родом музыки, как не является им и музыка непрограммная. Это равноправные, одинаково правомерные разновидности. Различие между ними не исключает их связи; оба рода связаны и с вок. музыкой. Так, колыбелью программного симфонизма были опера и оратория. Оперная увертюра явилась прототипом программной симф. поэмы; в оперном искусстве лежат и предпосылки лейтмотивизма и монотематизма, столь широко применяющихся в П. м. В свою очередь непрограммная инстр. музыка испытывает влияние вок. музыки и П. м. Найденные в П. м. новые выразит. возможности становятся достоянием и непрограммной музыки. Общие тенденции эпохи сказываются на развитии как П. м., так и непрограммной музыки.

Единство музыки и программы в программном соч. не является абсолютным, нерасторжимым. Случается, что программа не доводится до слушателя при исполнении соч., что лит. произв., к к-рому автор музыки отсылает слушателя, оказывается ему незнакомым. Чем более обобщённую форму избирает композитор для воплощения своего замысла, тем меньший ущерб восприятию нанесёт подобный "отрыв" музыки произведения от его программы. Такой "отрыв" всегда нежелателен, если речь идёт об исполнении совр. произведений. Однако он может оказаться и закономерным, когда речь идёт об исполнении произв. более ранней эпохи, поскольку программные замыслы с течением времени могут утратить прежнюю актуальность, значимость. В этих случаях муз. произв. в большей или меньшей степени утрачивают черты программности, превращаются в непрограммные. Т. о., грань между П. м. и музыкой непрограммной, вообще совершенно чёткая, в историч. аспекте условна.

П. м. развивалась по существу на протяжении всей истории проф. муз. иск-ва. Самое раннее из найденных исследователями сообщений о программных муз. соч. относится к 586 до н.э. - в этом году на пифийских играх в Дельфах (Др. Греция) авлетист Сакао исполнил пьесу Тимосфена, изображавшую битву Аполлона с драконом. Немало программных соч. было создано и в последующее время. В их числе - клавирные сонаты "Библейские истории" лейпцигского композитора И. Кунау, клавесинные миниатюры Ф. Куперена и Ж. Ф. Рамо, клавирное "Каприччо на отъезд возлюбленного брата" И. С. Баха. Представлена программность и в творчестве венских классиков. Среди их соч.: триада программных симфоний Й. Гайдна, характеризующих разл. времена суток (No 6, "Утро"; No 7, "Полдень"; No 8, "Вечер"), его же "Прощальная симфония"; "Пасторальная симфония" (No 6) Бетховена, все части к-рой снабжены программными подзаголовками и на партитуре к-рой значится пометка, важная для понимания типа программности у автора соч. - "Более выражение чувств, чем изображение", его же пьеса "Битва при Виттории", первоначально предназначавшаяся для механич. муз. инструмента пангармоникона, но затем исполнявшаяся в орк. редакции, и особенно его увертюры к балету "Творения Прометея", к трагедии "Кориолан" Коллина, увертюры "Леонора" No 1-3, увертюра к трагедии "Эгмонт" Гёте. Написанные как вступления к драм. или муз.-драм. произв., они вскоре же обрели самостоятельность. Позднее программные соч. также нередко создавались в качестве вступлений к к.-л. лит. произв., с течением времени утрачивая, однако, свои вступит. функции. Подлинный расцвет П. м. наступил в эпоху муз. романтизма. Сравнительно с представителями классицистской и даже просветительской эстетики художники-романтики глубже понимали специфику разл. иск-в. Они видели, что каждое из них отображает жизнь по-своему, используя свойственные только ему средства и отражая тот же предмет, явление с определённой, доступной ему стороны, что, следовательно, каждое из них в чём-то ограничено и даёт неполную картину действительности. Именно это привело художников-романтиков к мысли о синтезе иск-в ради более полного, многостороннего отображения мира. Муз. романтики провозгласили лозунг обновления музыки с помощью её связи с поэзией, нашедший претворение во мн. муз. произв. Программные соч. занимают важное место в творчестве Ф. Мендельсона-Бартольди (увертюра из музыки к "Сну в летнюю ночь" Шекспира, увертюры "Гебриды", или "Фингалова пещера", "Морская тишь и счастливое плавание", "Прекрасная Мелузина", "Рюи Блаз" и др.), Р. Шумана (увертюры к "Манфреду" Байрона, к сценам из "Фауста" Гёте, мн. фп. пьесы и циклы пьес и др.). Особенно большое значение П. м. приобретает у Г. Берлиоза ("Фантастическая симфония", симфония "Гарольд в Италии", драм. симфония "Ромео и Джульетта", "Траурно-триумфальная симфония", увертюры "Уиверли", "Тайные судьи", "Король Лир", "Роб Рой" и др.) и Ф. Листа (симфония "Фауст" и симфония к "Божественной комедии" Данте, 13 симф. поэм, мн. фп. пьесы и циклы пьес). В последующее время важный вклад в развитие П. м. внесли Б. Сметана (симф. поэмы "Ричард III", "Лагерь Валленштейна", "Гакон Ярл", цикл "Моя родина" из 6 поэм), А. Дворжак (симф. поэмы "Водяной", "Золотая прялка", "Лесной голубь" и др., увертюры - Гуситская, "Отелло" и др.) и Р. Штраус (симф. поэмы "Дон Жуан", "Смерть и просветление", "Макбет", "Тиль Уленшпигель", "Так говорил Заратустра", фантастич. вариации на рыцарскую тему "Дон Кихот", "Домашняя симфония" и др.). Программные соч. создавали также К. Дебюсси (орк. прелюдия "Послеполуденный отдых фавна", симф. циклы "Ноктюрны", "Море" и др.), М. Регер (4 симф. поэмы по Бёклину), А. Онеггер (симф. поэма "Песнь Нигамона", симф. движения "Пасифик 231", "Регби" и др.), П. Хиндемит (симфонии "Художник Матис", "Гармония мира" и др.).

Богатое развитие программность получила в рус. музыке. Для рус. нац. муз. школы обращение к программности диктовалось эстетич. установками её ведущих представителей, их стремлением к демократичности, общепонятности своих соч., а также "объективным" характером их творчества. От сочинений, осн. на песенных темах и потому заключающих в себе элементы синтеза музыки и слова, поскольку слушатель при их восприятии соотносит с музыкой тексты соответств. песен ("Камаринская" Глинки), рус. композиторы вскоре же пришли к собственно П. м. Ряд выдающихся программных соч. создали члены "Могучей кучки" - М. А. Балакирев (симф. поэма "Тамара"), М. П. Мусоргский ("Картинки с выставки" для фп.), Н. А. Римский-Корсаков (симф. картина "Садко", симфония "Антар"). Немалое число программных произв. принадлежит П. И. Чайковскому (1-я симфония "Зимние грёзы", симфония "Манфред", увертюра-фантазия "Ромео и Джульетта", симф. поэма "Франческа да Римини" и др.). Яркие программные произв. написали и А. К. Глазунов (симф. поэма "Стенька Разин"), А. К. Лядов (симф. картины "Баба-Яга", "Волшебное озеро" и "Кикимора"), Вас. С. Калинников (симф. картина "Кедр и пальма"), С. В. Рахманинов (симф. фантазия "Утёс", симф. поэма "Остров мёртвых"), А. Н. Скрябин (симф. "Поэма экстаза", "Поэма огня" ("Прометей"), мн. фп. пьесы).

Программность широко представлена и в творчестве сов. композиторов, в т.ч. С. С. Прокофьева ("Скифская сюита" для оркестра, симф. эскиз "Осеннее", симф. картина "Сны", фп. пьесы), Н. Я. Мясковского (симф. поэмы "Молчание" и "Аластор", симфонии No 10, 12, 16 и др.), Д. Д. Шостаковича (симфонии No 2, 3 ("Первомайская"), 11 ("1905 год"), 12 ("1917 год") и др.). Программные соч. создаются и представителями более молодых поколений сов. композиторов.

Программность свойственна не только профессиональному, но и нар. муз. иск-ву. У народов, муз. культуры к-рых включают развитое инстр. музицирование, оно связано не только с исполнением и варьированием песенных мелодий, но и с созданием независимых от песенного иск-ва сочинений, б.ч. программных. Так, программные соч. составляют значит.часть казах. (кюи) и кирг. (кю) инстр. пьес. Каждая из таких пьес, исполняемая солистом-инструменталистом (у казахов - кюйши) на одном из нар. инструментов (домбра, кобыз или сыбызга у казахов, комуз и др. у киргизов), имеет программное заглавие; мн. из этих пьес стали традиционными, подобно песням передаваясь в разл. вариантах от поколения к поколению.

Важный вклад в освещение явления программности внесли сами композиторы, работавшие в этой области, - Ф. Лист, Г. Берлиоз и др. В последующее время, несмотря на исследования, прояснившие нек-рые частные вопросы, заруб. музыковедение не только не продвинулось вперёд в понимании явления П. м., но скорее отдалилось от него. Показательно, напр., что авторы статей о П. м., помещённых в крупнейших зап.-европ. муз. энциклопедиях и долженствующих обобщить опыт исследования проблемы, дают явлению программности очень расплывчатые определения (см. Grovйs Dictionary of music and musicians, v. 6, L.-N. Y., 1954; Riemann Musiklexikon, Sachteil, Mainz, 1967), порой же вообще отказываются от к.-л. определений (Die Musik in Geschichte und Gegenwart. Allgemeine Enzyklopдdie der Musik, Bd 10, Kassel u. a., 1962).

В России изучение проблемы программности началось ещё в период деятельности рус. классич. муз. школы, представители к-рой оставили важные высказывания по этому вопросу. Внимание к проблеме программности особенно усилилось в сов. время. В 1950-е гг. на страницах журн. "Советская музыка" и газ. "Советское искусство" прошла спец. дискуссия по вопросу о муз. программности. Эта дискуссия выявила и расхождения в понимании явления П. м. Высказывались, напр., мысли о "программности в строгом смысле слова" и в широком понимании термина, о программности "объявленной" и "необъявленной", о программности "для себя" (композитора) и для слушателей, о программности "осознанной" и "неосознанной", о программности в непрограммной музыке и др. Существо всех этих высказываний сводится к признанию возможности П. м. без программы, приданной соч. самим композитором. Подобная точка зрения неизбежно приводит к отождествлению программности с содержательностью, к объявлению программной всей музыки, к оправданию "отгадывания" необъявленных программ, т.е. произвольного истолкования композиторских замыслов, против к-рого всегда резко выступали сами композиторы. В 50-60-е гг. появилось немало работ, которые внесли определённый вклад в разработку проблем программности, в частности в область разграничения видов П. м. Однако единое понимание явления программности ещё не установилось.

Литература: Чайковский П. И., Письма к H. P. фон-Мекк от 17 февраля/1 марта 1878 и 5/17 декабря 1878, в кн.: Чайковский П. И., Переписка с Н.Ф.фон-Мекк, т. 1, М.-Л., 1934, то же, Полн. собр. соч., т. VII, М., 1961 с. 124-128, 513-514; его же, О программной музыке, М.-Л., 1952; Кюи Ц. A., Русский романс. Очерк его развития, СПБ, 1896, с. 5; Ларош, Нечто о программной музыке, "Мир искусства", 1900, т. 3, с. 87-98; его же, Предисловие переводчика к книге Ганслика "О музыкально-прекрасном", Собр. муз.-критич. статей, т. 1, М., 1913, с. 334-61; его же, Один из противников Ганслика, там же, с. 362-85; Стасов В. В., Искусство в XIX веке, в кн.: XIX век, СПБ, 1901, то же, в его кн.: Избр. соч., т. 3, М., 1952; Ястребцев В. В., Мои воспоминания о Н. А. Римском-Корсакове, вып. 1, П., 1917, Л., 1959, с. 95; Шостакович Д., О подлинной и мнимой программности, "СМ", 1951, No 5; Бобровский В. П., Сонатная форма в русской классической программной музыке, М., 1953 (автореферат дисс.); Сабинина М., Что такое программная музыка?, "МЖ", 1959, No 7; Арановский М., Что такое программная музыка?, М., 1962; Tюлин Ю. Н., О программности в произведениях Шопена, Л., 1963, М., 1968; Хохлов Ю., О музыкальной программности, М., 1963; Ауэрбах Л., Рассматривая проблемы программности, "СМ", 1965, No 11. См. также лит. при статьях Эстетика музыкальная, Музыка, Звукопись, Монотематизм, Симфоническая поэма.

Программная музыка

род инструментальной музыки; музыкальное произведения, имеющие словесную, нередко поэтическую программу и раскрывающие запечатленное в ней содержание. Программой может служить заглавие, указывающее, например, на явление действительности, которое имел в виду композитор («Утро» Грига из музыки к драме Ибсена «Пер Гюнт»), или на вдохновившее его литературное произведение («Макбет» Р. Штрауса - симфоническая поэма по драме Шекспира). Более подробные программы обычно составляются по литературным произведениям (симфоническая сюита «Антар» Римского-Корсакова по одноименной сказке Сенковского), реже - вне связи с литературным прообразом («Фантастическая симфония» Берлиоза). Программа раскрывает нечто недоступное для музыкального воплощения и потому не раскрытое самой музыкой; этим она принципиально отличается от любого анализа или описания музыки; придать её музыкальному произведению может только его автор. В П. м. широко применяются музыкальная изобразительность, звукопись, конкретизация через жанр.

Простейший вид П. м. - картинная программность (музыкальной картины природы, народных празднеств, битв и т.п.). В сюжетно-программных произведениях развитие музыкальных образов в той или иной степени отвечает контурам сюжета, как правило, заимствованного из художественной литературы. Порой в них даётся лишь музыкальная характеристика основных образов, общего направления развития сюжета, первоначального и итогового соотношения действующих сил (обобщённо-сюжетная программность), иногда отображается вся последовательность событий (последовательно-сюжетная программность).

В П. м. используются методы развития, позволяющие «следовать» за сюжетом, не нарушая собственно-музыкальных закономерностей. В их числе: вариационность и связанный с ней принцип Монотематизм а, выдвинутый Ф. Листом; принцип лейтмотивной характеристики (см. Лейтмотив), который одним из первых применил Г. Берлиоз; объединение в одночастной форме черт сонатного аллегро и сонатно-симфонического цикла, характерное для созданного Ф. Листом жанра симфонической поэмы.

Программность явилась большим завоеванием музыкального искусства, стимулировала поиски новых выразительных средств, способствовала обогащению круга образов музыкальных произведений. П. м. равноправна с музыкой непрограммной и развивается в тесном взаимодействии с ней.

П. м. известна с глубокой древности (античная Греция). Среди программных произведений 18 в. - клавесинные миниатюры Ф. Куперена и Ж. Ф. Рамо, «Каприччо на отъезд возлюбленного брата» И. С. Баха. Ряд программных сочинений создан Л. Бетховеном - «Пасторальная симфония», увертюры «Эгмонт», «Кориолан» и др. Расцвет П. м. в 19 в. во многом связан с романтическим направлением в музыкальном искусстве (см. Романтизм), провозгласившим лозунг обновления музыки с помощью единения её с поэзией. Среди программных произведений композиторов-романтиков - «Фантастическая симфония» и симфония «Гарольд в Италии» Берлиоза, симфонии «Фауст», «К “Божественной комедии” Данте», симфонические поэмы «Тассо», «Прелюды» и др. Листа. Крупный вклад в П. м. внесли и русские композиторы-классики. Большой известностью пользуются симфоническая картина «Иванова ночь на Лысой горе» и фортепианный цикл «Картинки с выставки» Мусоргского, симфоническая сюита «Антар» Римского-Корсакова, симфония «Манфред», увертюра-фантазия «Ромео и Джульетта», фантазия для оркестра «Франческа да Римини» Чайковского и др. Программные сочинения написаны также А. К. Глазуновым, А. К. Лядовым, А. И. Скрябиным, С. В. Рахманиновым и др. Национальные традиции в области П. м. находят своё продолжение и развитие в творчестве советских композиторов - Н. Я. Мясковского, Д. Д. Шостаковича и др.

Лит.: Чайковский П. И., О программной музыке, Избр. отрывки из писем и статей, М., 1952; Стасов В. В., Искусство XIX века, Избр. соч., т. 3, М., 1952; Лист Ф., Избр. статьи, М., 1959, с. 271-349; Хохлов Ю., О музыкальной программности, М., 1963; KIauwell О., Geschichte der Programmusik, Lpz., 1910; Sychra A., Die Einheit von absoluter Musik und Programmusik, «Beiträge zur Misik-wissenschaft», 1, 1959; Niecks Fr., Programme music in the last four centuries, N. Y., 1969.

Ю. Н. Хохлов.


Большая советская энциклопедия. - М.: Советская энциклопедия . 1969-1978 .

Смотреть что такое "Программная музыка" в других словарях:

    Академическая музыка, не включающая в себя словесного текста (то есть чисто инструментальная), однако сопровождаемая словесным указанием на своё содержание. Минимальной программой является название сочинения, указывающее на какое либо явление… … Википедия

    Новейшая «описательная» или «изобразительная» музыка (Вагнер и его последователи), стремящаяся в звуках передавать движение, различные действия и т. д., нуждается в программе для того, чтобы она была вполне понятна слушателям; отсюда программная… … Словарь иностранных слов русского языка

    Музыкальные произведения, которые композитор снабдил словесной программой, конкретизирующей восприятие. Многие программные сочинения связаны с сюжетами и образами выдающихся литературных произведений … Большой Энциклопедический словарь

    - (нем. Programmusik, франц. musique а programme, итал. musica a programma, англ. programme music) муз. произведения, имеющие определённую словесную, нередко поэтич. программу и раскрывающие запёчатлённое в ней содержание. Явление муз.… … Музыкальная энциклопедия

    Музыкальные произведения, которые композитор снабдил словесной программой, конкретизирующей содержание. Многие программные сочинения связаны с сюжетами и образами выдающихся литературных произведений. * * * ПРОГРАММНАЯ МУЗЫКА ПРОГРАММНАЯ МУЗЫКА,… … Энциклопедический словарь

    Как вы думаете, чем отличается фортепианный концерт Чайковского от его же симфонической фантазии «Франческа да Римини»? Конечно, вы скажете, что в концерте солирует фортепиано, а в фантазии его нет вовсе. Может быть, вы уже знаете, что концерт… … Музыкальный словарь

    ПРОГРАММНАЯ МУЗЫКА - (от нем. Programmusik), музыка, задача которой – изобразить состояние внутреннего или внешнего мира, более или менее точно определенное в приложенном к композиции тексте (программе). Под влиянием последнего, слушатель, внимая п й м е, не… … Музыкальный словарь Римана

    программная музыка - инструментальная и оркестровая музыка, связанная с воплощением заимствованных из внемузыкальной сферы идей (литература, живопись, явления природы и т.д.). Название происходит от программы – текста, которым композиторы часто сопровождали… … Русский индекс к Англо-русскому словарь по музыкальной терминологии

    Программная музыка - род инстр. произв. с объявленной (в виде заглавия или в более развернутой вербальной форме) программой как источником муз. драматургии. Программой не являются жанровые рубрики (вальс, полька) или тексты вок. музыки. Хотя примеры программных… … Российский гуманитарный энциклопедический словарь

    I Музыка (от греч. musikе, буквально искусство муз) вид искусства, который отражает действительность и воздействует на человека посредством осмысленных и особым образом организованных звуковых последований, состоящих в основном из тонов… … Большая советская энциклопедия

Книги

  • Этюды о зарубежной музыке , Валентина Конен. Сборник предназначен, главным образом, для педагогов. Однако он может быть использован и студентами для семинарских занятий или докладов в научных кружках. Некоторые статьи рассчитаны…
  • Программная разработка образовательных областей "Познание", "Коммуникация" и др. в ясельной группе , Карпухина Наталия Александровна. Программная разработка образовательных областей "Познание", "Коммуникация", "Чтение художественной литературы", "Социализация", "Физическая культура", "Музыка" в ясельной группе (1, 5-2 года)…

Н. А. Римского-Корсакова «Шехеразада», перед нами возникают образы жестокого султана Шахрияра, искусной сказительницы Шехеразады, величественная картина моря и уплывающий вдаль корабль Синдбада-морехода. Арабские сказки «Тысяча и одна ночь» стали программой этого замечательного произведения. Римский-Корсаков кратко изложил ее в литературном предисловии. Но уже название сюиты направляет внимание слушателей на восприятие определенного содержания.

Г. Берлиоз.

К программным (от греческого «программа» - «объявление», «распоряжение») относятся музыкальные произведения, которые имеют определенный заголовок или литературное предисловие, созданное или избранное самим композитором. Благодаря конкретному содержанию программная музыка более доступна и понятна слушателям. Ее выразительные средства особенно рельефны и ярки. В программных произведениях композиторы широко используют оркестровую звукопись, изобразительность, сильнее подчеркивают контраст между образами-темами, разделами формы и др.

Богат и разнообразен круг образов и тем программной музыки. Это и картина природы - нежные краски «Рассвета на Москве-реке» в увертюре к опере М. П. Мусоргского «Хованщина»; мрачное Дарьяльское ущелье, Терек и замок царицы Тамары в симфонической поэме М. А. Балакирева «Тамара»; поэтичные пейзажи в произведениях К. Дебюсси «Море», «Лунный свет». Сочные, колоритные картины народных праздников воссозданы в симфонических произведениях М. И. Глинки «Камаринская» и «Арагонская хота».

Многие сочинения этого вида музыки связаны с замечательными произведениями мировой литературы. Обращаясь к ним, композиторы в музыке стремятся раскрыть те нравственные проблемы, над которыми размышляли поэты, писатели. К «Божественной комедии» Данте обращались П. И. Чайковский (фантазия «Франческа да Римини»), Ф. Лист («Симфония к „Божественной комедии" Данте»). Трагедией У. Шекспира «Ромео и Джульетта» вдохновлены одноименные симфония Г. Берлиоза и увертюра-фантазия Чайковского, трагедией «Гамлет» - симфония Листа. Одна из лучших увертюр Р. Шумана написана к драматической поэме Дж. Г. Байрона «Манфред». Пафос борьбы и победы, бессмертие подвига героя, отдавшего жизнь за свободу родины, выразил Л. Бетховен в увертюре к драме И. В. Гёте «Эгмонт».

К программным произведениям относятся сочинения, которые принято называть музыкальными портретами. Это фортепьянная прелюдия Дебюсси «Девушка с волосами цвета льна», пьеса для клавесина «Египтянка» Ж. Ф. Рамо, фортепьянные миниатюры Шумана «Паганини» и «Шопен».

Иногда программа музыкального сочинения бывает навеяна произведениями изобразительного искусства. В фортепьянной сюите «Картинки с выставки» Мусоргского отразились впечатления композитора от выставки картин художника В. А. Гартмана.

Масштабные, монументальные произведения программной музыки связаны с важнейшими историческими событиями. Таковы, например, симфонии Д. Д. Шостаковича «1905 год», «1917 год», посвященные 1-й русской революции 1905-1907 гг. и Октябрьской революции.

Программная музыка издавна привлекала многих композиторов. Изящные пьесы в стиле рококо писали для клавесина французские композиторы 2-й половины XVII - начала XVIII в. Л. К. Дакен («Кукушка»), Ф. Куперен («Сборщицы винограда»), Рамо («Принцесса»). Итальянский композитор А. Вивальди четыре скрипичных концерта объединил под общим названием «Времена года». В них созданы тонкие музыкальные зарисовки природы, пасторальные сценки. Содержание каждого концерта композитор изложил в развернутой литературной программе. И. С. Бах одну из пьес для клавира шутливо назвал «Каприччо на отъезд возлюбленного брата». В творческом наследии Й. Гайдна больше 100 симфоний. Среди них есть и программные: «Утро», «Полдень», «Вечер и буря».

Важное место заняла программная музыка в творчестве композиторов-романтиков . Портреты, жанровые сценки, настроения, тончайшие оттенки человеческих чувств тонко и вдохновенно раскрыты в музыке Шумана (фортепьянные циклы «Карнавал», «Детские сцены», «Крейслериана», «Арабеска»). Своеобразным музыкальным дневником стал большой фортепьянный цикл Листа «Годы странствий». Под впечатлением от поездки в Швейцарию написаны им пьесы «Часовня Вильгельма Телля», «Женевские колокола», «На Валлендштадском озере». В Италии композитора покорило искусство великих мастеров эпохи Возрождения . Поэзия Петрарки, картина Рафаэля «Обручение», скульптура Микеланджело «Мыслитель» стали своеобразной программой в музыке Листа.

Французский симфонист Г. Берлиоз воплощает принцип программности не обобщенно, а последовательно раскрывает сюжет в музыке. «Фантастическая симфония» имеет развернутое литературное предисловие, написанное самим композитором. Герой симфонии попадает то на бал, то в поле, то идет на казнь, то оказывается на фантастическом шабаше ведьм. С помощью красочного оркестрового письма Берлиоз добивается почти зрительных картин театрального действия.

К программной музыке часто обращались русские композиторы. Фантастические, сказочные сюжеты легли в основу симфонических картин: «Ночь на Лысой горе» Мусоргского, «Садко» Римского-Корсакова, «Баба-Яга», «Кикимора», «Волшебное озеро» А. К. Лядова. Созидательную силу человеческой воли и разума воспел А. Н. Скрябин в симфонической поэме «Прометей» («Поэма огня»).

Программная музыка занимает большое место в творчестве советских композиторов. Среди симфоний Н. Я. Мясковского есть «Колхозная», «Авиационная». С. С. Прокофьев написал симфоническое произведение «Скифская сюита», фортепьянные пьесы «Мимолетности», «Сарказмы»; Р. К. Щедрин - концерты для оркестра «Озорные частушки», «Звоны»; М. К. Койшибаев - поэму для оркестра казахских народных инструментов «Советский Казахстан»; З. М. Шахиди - симфоническую поэму «Бузрук».

Обобщённое программирование Обобщенное программирование - написание кода, который может быть многократно использован с объектами многих различных типов.

В ранних версиях Java это достигалось при помощи наследования, ArrayList содержал массив ссылок на Object. Всякий раз, когда извлекалось значение, необходимо было выполнять приведение типов.

Обобщённое программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования.

Обобщения (generics) представляют собой наиболее существенное изменение в языке программирования Java со времен версии 1.0. Появление обобщений в Java 5.0 стало результатом первых требований к спецификации Java (Java Specification Requests — JSR 14), которые были сформулированы в 1999 г. Обобщения понадобились потому, что они позволяют писать более безопасный код, который легче читается, чем код, перегруженный переменными Object и приведениями типов. Обобщения особенно полезны для классов коллекций, таких как вездесущий ArrayList.

Обобщения похожи — по крайней мере, внешне — на шаблоны в C++. В C++, как и в Java, шаблоны впервые были добавлены для поддержки строго типизированных кол- лекций. Однако с годами были открыты и другие их применения.

Возможности обобщённого программирования впервые появились в 70-х годах в языках CLU и Ada, а затем во многих объектно-ориентированных языках, таких как C++, Java, D и языках для платформы.NET. Общий механизм Средства обобщённого программирования реализуются в виде тех или иных синтаксических средств. У функции или типа данных явно описываются формальные параметры-типы. Это описание является обобщённым и в исходном виде непосредственно использовано быть не может.

В тех местах программы, где обобщённый тип или функция используется, программист должен явно указать фактический параметр-тип, конкретизирующий описание. Компилятор, встречая обращение к обобщённому типу или функции, выполняет необходимые процедуры статического контроля типов, оценивает возможность заданной конкретизации и при положительной оценке генерирует код, подставляя фактический параметр-тип на место формального параметра-типа в обобщённом описании.

Естественно, что для успешного использования обобщённых описаний фактические типы-параметры должны удовлетворять определённым условиям. Если обобщённая функция сравнивает значения типа-параметра, любой конкретный тип, использованный в ней, должен поддерживать операции сравнения, если присваивает значения типа-параметра переменным — конкретный тип должен обеспечивать корректное присваивание. Способы реализации Известно два основных способа реализации поддержки обобщённого программирования в компиляторе.

Порождение нового кода для каждой конкретизации. В этом варианте компилятор рассматривает обобщённое описание как текстовый шаблон для создания вариантов конкретизаций. Когда компилятору требуется новая конкретизация обобщённого типа или процедуры, он создаёт новый экземпляр типа или процедуры, чисто механически добавляя туда тип-параметр. То есть, имея обобщённую функцию перестановки элементов, компилятор, встретив её вызов для целого типа, создаст функцию перестановки целых чисел и подставит в код её вызов, а затем, встретив вызов для строкового типа — создаст функцию перестановки строк, никак не связанную с первой. Этот метод обеспечивает максимальное быстродействие. Недостатком его является то, что при активном использовании обобщённых типов и функций с различными типами-параметрами размер откомпилированной программы может очень сильно возрастать, поскольку даже для тех фрагментов описания, которые для разных типов не различаются, компилятор всё равно генерирует отдельный код. Этот недостаток можно затушевать путём частичной генерации общего кода (часть обобщённого описания, которая не зависит от типов-параметров, оформляется специальным образом и по ней компилятор генерирует единый для всех конкретизаций код). . Порождение кода, который во время исполнения выполняет преобразование фактических параметров-типов к одному типу, с которым фактически и работает. В этом случае на этапе компиляции программы компилятор лишь проверяет соответствие типов и включает в код команды преобразования конкретного типа-параметра к общему типу. Код, определяющий функционирование обобщённого типа или функции, имеется в откомпилированной программе в единственном экземпляре, а преобразования и проверки типов выполняются динамически, во время работы программы. В этом варианте порождается, как правило, более компактный код, но программа оказывается в среднем медленнее, чем в первом варианте, из-за необходимости выполнения дополнительных операций и меньших возможностей оптимизации. Кроме того, в компилированный код для типов-параметров далеко не всегда включается динамическая информация о типах (в первом варианте она есть, если вообще поддерживается, поскольку конкретизации для каждого типа-параметра различны), что определяет некоторые ограничения на применение обобщённых типов и функций. Подобные ограничения есть в Java.

Обобщенный класс - это класс с одной или более переменной типа. class Pair {} Переменная типа используется для спецификации типа возрата методов и типов полей и локальных переменных. Затем можно создать обьект обобщенного типа, подставляя имя типа вместо переменной типа. Pair ()

Некоторые ограничения на обобщения 1. Параметры типа не могут принимать примитивные типы. 2. Массивы параметризованных типов не разрешены. 3. Нельзя создавать экземпляры переменных типов. 4. В статическом контексте не разрешены. Назначение обобщенного программирования Обобщенное программирование означает написание кода, который может быть многократно использован с объектами многих различных типов. Это облегчает чтение вашего кода. Вы можете сразу понять, что этот конкретный массив-список содержит объекты String. Компилятор также может успешно использовать эту информацию. Не требуется никакого приведения при вызове get(). Компилятор знает, что типом возврата этого метода является String, а не Object: String filename = files.get(0); Компилятор также знает, что метод add() в ArrayList имеет параметр типа String. Это намного безопаснее, чем иметь дело с параметром типа Object. Теперь компилятор может проконтролировать, чтобы вы не вставили объект неверного типа. Например, следующий оператор не скомпилируется: files.add(new File("...")); // в ArrayList можно добавлять // только объекты String Ошибка компиляции — это намного лучше, чем исключение приведения типа во время выполнения. В этом привлекательность параметров типа: они делают вашу программу легче читаемой и более безопасной. Такие обобщенные классы, как ArrayList, использовать легко. И большинство программистов Java просто применяют типы вроде ArrayList — как если бы они были частью языка, подобно массивам String. (Разумеется, массивы-списки лучше простых массивов, поскольку могут автоматически расширяться.) Однако реализовать обобщенный класс не так просто. Программисты, которые будут использовать ваш код, попытаются подставлять всевозможные классы вместо ваших параметров типа. Они ожидают, что все будет работать без досадных ограничений и запутанных сообщений об ошибках. Ваша задача как обобщенного программиста — предвидеть все возможные будущие применения вашего класса. Обобщенный код и виртуальная машина Виртуальная машина не имеет дела с объектами обобщенных типов — все объекты принадлежат обычным классам. Всякий раз при определении обобщенного типа автоматически создается соответствующий ему “сырой” (raw) тип. Имя этого типа совпадает с именем обобщенного типа с удаленными параметрами типа. Переменные типа удаляются и заменяются ограничивающими типами (или типом Object, если переменная не имеет ограничений). Например, “сырой” тип для Pair выглядит, как показано ниже. public class Pair { public Pair(Object first, Object second) { this.first = first; this.second = second; } public Object getFirst() { return first; } public Object getSecond() { return second; } public void setFirst(Object newValue) { first = newValue; } public void setSecond(Object newValue) { second = newValue; } private Object first; private Object second; } Поскольку T — неограниченная переменная типа, она просто заменяется Object. В результате получается обычный класс вроде тех, что вы могли реализовать раньше, до появления средств обобщений в язык программирования Java. Ваши программы содержат разные варианты Pair, такие как Pair или Pair, но такая “подчистка” превращает их в “сырой” тип Pair. “Сырой” тип заменяет переменные типов первым ограничением или же Object, если никаких ограничений не предусмотрено. Например, переменная типа в классе Pair не имеет явных ограничений, а потому сырой тип заменяет T на Object. Предположим, что объявлен немного отличающийся тип: public class Interval implements Serializable { public Interval(T first, T second) { if (first.compareTo(second) <= 0) { lower = first; upper = second; } else { lower = second; upper = first; } } ... private T lower; private T upper; } Сырой тип Interval выглядит следующим образом: public class Interval implements Serializable { public Interval(Comparable first, Comparable second) { ... } ... private Comparable lower; private Comparable upper; } Трансляция обобщенных выражений Когда ваша программа вызывает обобщенный метод, компилятор вставляет приведения, когда удаляется возвращаемый тип. Например, рассмотрим следующую последовательность операторов: Pair buddies = ...; Employee buddy = buddies.getFirst(); Подчистка getFirst() приведет к возврату типа Object. Компилятор автоматически вставит приведение к Employee. То есть компилятор транслирует вызов метода в две инструкции виртуальной машины. . Вызов сырого метода Pair.getFirst(). . Приведение возвращенного объекта Object к типу Employee. Приведения также вставляются при обращении к обобщенному полю. Предположим, что поля first и second были бы общедоступными, т.е. public. (Возможно, это нехороший стиль программирования, но вполне допустимый в Java.) Тогда в оператор Employee buddy = buddies.first; в результирующем байт-коде также будут вставлены приведения.

Затем в виде параметрического полиморфизма в и его потомках, а затем во многих объектно-ориентированных языках, таких как C++ , Java , Object Pascal , , Eiffel , языках для платформы .NET и других.

Методология обобщённого программирования

Обобщённое программирование рассматривается как методология программирования , основанная на разделении структур данных и алгоритмов через использование абстрактных описаний требований . Абстрактные описания требований являются расширением понятия абстрактного типа данных . Вместо описания отдельного типа в обобщённом программировании применяется описание семейства типов, имеющих общий интерфейс и семантическое поведение (англ. semantic behavior ). Набор требований, описывающий интерфейс и семантическое поведение, называется концепцией (англ. concept ). Таким образом, написанный в обобщённом стиле алгоритм может применяться для любых типов, удовлетворяющих его своими концепциями. Такая возможность называется полиморфизмом .

Говорят, что тип моделирует концепцию (является моделью концепции), если он удовлетворяет её требованиям. Концепция является уточнением другой концепции, если она дополняет последнюю. Требования к концепциям содержат следующую информацию:

  • Допустимые выражения (англ. valid expressions ) - выражения языка программирования, которые должны успешно компилироваться для типов, моделирующих концепцию.
  • Ассоциированные типы (англ. associated types ) - вспомогательные типы, имеющие некоторое отношение к моделирующему концепцию типу.
  • Инварианты (англ. invariants ) - такие характеристики типов, которые должны быть постоянно верны во время исполнения . Обычно выражаются в виде предусловий и постусловий . Невыполнение предусловия влечёт непредсказуемость соответствующей операции и может привести к ошибкам.
  • Гарантии сложности (англ. complexity guarantees ) - максимальное время выполнения допустимого выражения или максимальные требования к различным ресурсам в ходе выполнения этого выражения.

Альтернативный подход к определению обобщённого программирования, который можно назвать обобщённым программированием типов данных (англ. datatype generic programming ), был предложен Ричардом Бёрдом и Ламбертом Меертенсом. В нём структуры типов данных являются параметрами обобщённых программ. Для этого в язык программирования вводится новый уровень абстракции, а именно параметризация по отношению к классам алгебр с переменной сигнатурой . Хотя теории обоих подходов не зависят от языка программирования, подход Массера - Степанова, делающий упор на анализ концепций, сделал C++ своей основной платформой, тогда как обобщённое программирование типов данных используют почти исключительно Haskell и его варианты .

Общий механизм

Средства обобщённого программирования реализуются в языках программирования в виде тех или иных синтаксических средств, дающих возможность описывать данные (типы данных) и алгоритмы (процедуры, функции, методы), параметризуемые типами данных. У функции или типа данных явно описываются формальные параметры-типы . Это описание является обобщённым и в исходном виде непосредственно использовано быть не может.

В тех местах программы, где обобщённый тип или функция используется, программист должен явно указать фактический параметр-тип, конкретизирующий описание. Например, обобщённая процедура перестановки местами двух значений может иметь параметр-тип, определяющий тип значений, которые она меняет местами. Когда программисту нужно поменять местами два целых значения, он вызывает процедуру с параметром-типом «целое число » и двумя параметрами - целыми числами, когда две строки - с параметром-типом «строка » и двумя параметрами - строками. В случае с данными программист может, например, описать обобщённый тип «список » с параметром-типом, определяющим тип хранимых в списке значений. Тогда при описании реальных списков программист должен указать обобщённый тип и параметр-тип, получая, таким образом, любой желаемый список с помощью одного и того же описания.

Компилятор, встречая обращение к обобщённому типу или функции, выполняет необходимые процедуры статического контроля типов , оценивает возможность заданной конкретизации и при положительной оценке генерирует код, подставляя фактический параметр-тип на место формального параметра-типа в обобщённом описании. Естественно, что для успешного использования обобщённых описаний фактические типы-параметры должны удовлетворять определённым условиям. Если обобщённая функция сравнивает значения типа-параметра, любой конкретный тип, использованный в ней, должен поддерживать операции сравнения, если присваивает значения типа-параметра переменным - конкретный тип должен обеспечивать корректное присваивание.

Обобщённое программирование в языках

C++

В языке C++ обобщённое программирование основывается на понятии «шаблон», обозначаемом ключевым словом template . Широко применяется в стандартной библиотеке C++ (см. STL), а также в сторонних библиотеках boost , Loki . Большой вклад в появление развитых средств обобщённого программирования в C++ внёс Александр Степанов .

В качестве примера приведём шаблон (обобщение) функции, возвращающей большее значение из двух.

// Описание шаблона функции template < typename T > T max (T x , T y ) { if (x < y ) return y ; else return x ; } ... // Применение функции, заданной шаблоном int a = max (10 , 15 ); ... double f = max (123.11 , 123.12 ); ...

или шаблон(обобщение) класса связного списка:

template < class T > class List { /* ... */ public : void Add ( const T & Element ); bool Find ( const T & Element ); /* ... */ };

Java

Java предоставляет средства обобщённого программирования, синтаксически основанные на C++, начиная с версии J2SE 5.0. В этом языке имеются generics или «контейнеры типа T» - подмножество обобщённого программирования.

.NET

// http://digitalmars.com/d/2.0/template.html template Foo (T , R ...) // T - тип, R - набор типов { void Foo (T t , R r ) { writeln (t ); static if (r . length ) // if more arguments Foo (r ); // do the rest of the arguments } } void main () { Foo (1 , "a" , 6.8 ); } /+++++++++++++++ prints: 1 a 6.8 +++++++++++++++/