28625

Объекты и объектно-ориентированное программирование

Лекция

Информатика, кибернетика и программирование

Концепция объекта в Турбо Паскале. Понятие о динамических объектах. Все средства доступа к структурам данных объекта сосредоточены в этой капсуле это свойство называется инкапсуляцией. Концепция объекта в Турбо Паскале.

Русский

2013-08-20

86.5 KB

3 чел.

          Лекции 26-27: Объекты и объектно-ориентированное программирование.

1.Принципы объектно-ориентированного программирования.

2. Концепция объекта в Турбо Паскале.

3. Свойства наследования и полиморфизма объектов.

4. Пример программы с использованием объектов.

5. Понятие о динамических объектах.

6. Расширенное использование процедуры new.

7. Освобождение хип-памяти от динамических объектов.

1.Принципы объектно-ориентированного программирования.

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

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

Объект является "строительным материалом" для объектно-ориентированной программы. Это накладывает соответствующий отпечаток и на методологию программирования: программист должен мыслить в терминах объектов предметной области и их взаимосвязи,  а не в терминах изолированных процедур.

Объектно-ориентированное программирование не отрицает процедурный подход, а лишь поднимает его на более высокий уровень. Инкапсуляция - это декомпозиция процедур по функциональному принципу, вносящая существенную упорядоченность в использование процедур. Выигрыш от использования объектно-ориентированного подхода, тем выше, чем сложнее программа. В настоящее время многие программы строятся на базе объектно-ориентированного подхода, а для построения пользовательского интерфейса объектно-ориентированный подход является общепризнанным (он использован, в частности, в системах Turbo Vision  и DELPHI).

2. Концепция объекта в Турбо Паскале.

В языке Турбо Паскаль (начиная с версии 5.5) введено новое понятие объекта, как дальнейшее развитие концепции типа. Как и типы, объекты должны быть описаны в разделе описаний программы. Форма описания объекта аналогична описанию типа Запись. Различие лишь в том, что ключевым словом описания является object, а не record, и кроме обычных полей (элементов структуры данных) в описании объекта используются процедурные поля - заголовки процедур и функций, инкапсулированных в данном типе объекта. Кроме того, возможности описания полей структуры данных расширены - могут описываться кроме переменных также необходимые типы данных, константы. Переменные, образующие структуру данных, называются полями объекта, а процедуры и функции - методами объекта. При этом тела методов должны быть описаны вне описания объекта: обычно в соответствующих модулях.

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

Пример описания объекта:

type point = object; {объект - точка на плоскости}

       x,y: integer; {координаты точки}

       c: byte; { цвет точки}

       vis: boolean; { светимость}

     procedure create(a,b:integer); {создание точки}

     procedure move(dx,dy:integer); {сдвиг точки}

     procedure setcolor(color:byte); {установка цвета}

     procedure vis_on; {включить светимость}

     procedure vis_off; {выключение светимости}

     function getX:integer; {получить координату Х}

     function getY:integer; {получить координату Y}

end {point};

Для работы с объектами помимо описания объекта, как и при описании других типов, необходимо объявить переменные типа объект, называемые экземплярами объектов. Например, для описанного выше объекта point можно объявить экземпляры:  var p1,p2:point; {две точки}

Для обращения к полям и к методам объекта используются составные имена (имена с точкой), аналогично тому, как это принято для записей. Например: p1.X:=1; p1.Y:=p1.X; p2.X:=p1.getX; p1.SetColor(green);

Замечание

В описании каждого типа-объекта неявно присутствует стандартное имя Self того же типа, что и сам объект. Это - обобщенное имя экземпляра объекта, которое может использовать любой метод для указания своей принадлежности этому объекту.

Аналогично записям, доступ к полям и методам объекта можно упростить за счет использования оператора with.

Например: with p1 do begin x1:=getX; y1:=getY end;

Для объектов одного типа допустимо присваивание, например: p1:=p2;

3. Свойства наследования и полиморфизма объектов.

Инкапсуляция, хотя и вносит определенный порядок в использование данных и процедур, однако не уменьшает их количества, т.к. определяет только правила использования собственных средств, сосредоточенных в капсуле.

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

Любой объект может быть объявлен потомком ранее описанного объекта-предка. При этом объекту-потомку становятся доступны все методы своего предка и все структуры данных этого предка. Кроме того, объект-потомок вправе определить свои дополнительные поля и методы и даже перекрывать методы предка. Каждый объект имеет единственного предка (непосредственного), а каждый предок может иметь любое число потомков. Это обычные правила иерархии.

Свойство наследования распространяется по цепочке, образуя дерево родственных объектов. В этом дереве имеется один объект-корень, являющийся предком всех других объектов. Если иерархия хорошо продумана, то получается библиотека объектов, представляющая многообразие связанных объектов, используемых при разработке прикладных программ. Примером такой библиотеки является Turbo Vision - библиотека объектов для разработки текстовых интерфейсов в системе DOS.

В Турбо Паскале, чтобы объявить объект потомком некоторого объекта-предка необходимо после ключевого слова object в круглых скобках указать имя объекта-предка. При этом в описании объекта-потомка указываются только дополнительные поля и методы, отсутствующие у предка (или предков). Например:

type Line = object ( point); {объект- Линия, являющийся предком объекта point}

        xe,ye:integer; {координаты точки-конца линии}

        procedure set_line(x1,y1,x2,y2:integer) ;{установка линии}

        procedure get_line(var x1,y1,x2,y2:integer) ; {получить координаты }

end {Line};

Для экземпляров объектов Line доступны все поля и методы объекта point и, кроме того, поля координат второй точки (Хе и Ye), а также методы set_line и get_line.

Оператор присваивания может быть использован для обмена информацией между родственными объектами. Однако допустим только односторонний обмен - от потомка к предку. Например, если объявить L1 как экземпляр объекта Line, то допустимо присваивание вида p1:=L1; но не наоборот.

В целом ряде случаев при создании объектов-потомков бывает важно не только дополнять поля и методы новыми, но и "перекрывать" старые методы, введенные в предках. Это возможно, т.к. объекты Турбо Паскаля наделены свойством полиморфизма.

Полиморфизм - это возможность называть различные процедуры (или функции) одинаковыми именами. Такая возможность не чужда многим естественным операциям. Достаточно вспомнить операцию +, которая в Турбо Паскале может означать и сложение целых чисел, и сложение вещественных чисел, и сцепление строк, и объединение множеств. Полиморфизм можно использовать и для любых методов объектов-потомков путем перекрытия, ранее описанных методов предков. Термин "перекрытие" здесь означает подмену одного метода другим с тем же именем и, возможно, тем же набором параметров. Можно выполнить перекрытие двумя способами: статически и динамически.

Статическое перекрытие - объявление для объекта-потомка нового метода с тем же именем и, если необходимо, с тем же набором параметров, что и у метода, объявленного для предка. В этом случае новый метод, согласно принятому в Турбо Паскале обычному "правилу действия имён" (которое мы рассматривали ранее, при описании механизма процедур),  будет действовать таким образом, что "видимым " для объекта-потомка и всех его потомков будет новый метод, в то время как для объекта-предка будет действовать старый метод (недоступный теперь для объекта-потомка!). Такой механизм перекрытия недостаточно гибкий и имеет распространение только в одном направлении - к потокам. Более гибким является специально введенный для объектов механизм динамического перекрытия.

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

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

Конструктор часто используется для инициализации объекта, хотя для действия механизма перекрытия это не является обязательным. Конструктор может быть вообще пустой процедурой, и, тем не менее, перекрытие будет выполнено правильно, поскольку оно действует непосредственно по заголовку constructor. Сам конструктор не может быть виртуальным методом.

4. Пример программы с использованием объектов.

Программа с использованием объектов на Турбо Паскале построена как демонстрация работы кода с исправлением ошибки в одном символе сообщения (кода Хэмминга). В этой программе использованы два модуля: модуль fbyte (аналогичный рассмотренному ранее модулю f_byte) и модуль cod_Hem, содержащий объекты: символ и строка символов (Tsymb и Tstr_symb). Программа имеет следующий вид:

       program Hamming;{демонстрация кода Хэмминга}

       uses CRT,Cod_Hem, Fbyte;

       var msg:string[22]; {исходная строка-сообщение}

           source:Tstr_symb;{объект- строка символов вывода}

           r:byte;{позиция искажённого символа}

           er_msg:string;{строка, переданная по каналу}

           s1,s2:string;{подстроки er_msg}

           X,D1,D2:byte;{контроль принятого сообщения}

           s:string;{строка-Nпоследнего символа}

           symb:char;{исправленный символ}

 BEGIN TextColor(Yellow);TextBackground(white);ClrScr;writeln('Исходная строка:');

             gotoXY(5,2);read(msg); gotoXY(5,2);with source do

         begin {Вывод исходного сообщения} if length(msg)<10 then

               repeat insert(' ',msg,1) until length(msg)=10;

               put_str(msg,green,100);gotoXY(1,3);

               {Кодирование исходного сообщения}

               writeln('Кодирование:');readkey;gotoXY(5,4);

               put_bstr(msg,brown,100);gotoXY(5,7);

               codK1(msg);write(msgK1);gotoXY(Xc,Yc);

               put_bsym(chr(K1),magenta);gotoXY(5,8);

               codK2(msg);write(msgK2);gotoXY(Xc,Yc);

               put_bsym(chr(K2),magenta);delay(1000);

               {Передача сообщения и моделирование ошибки}

               gotoXY(1,9);write('Передача по каналу с шумом:');readkey;

               gotoXY(5,10);er_msg:=msg+chr(K1)+chr(K2);randomize;

               r:=random(length(er_msg)+1);if r<>0 then

               begin if r<>1 then s1:=copy(er_msg,1,r-1) else s1:='';

                      er_msg:=copy(er_msg,r+1,length(er_msg));

               end                                                    else s1:='';

                 if r<>0 then  begin if r<>1 then put_bstr(s1,cyan,100);gen_sym(red);

                                                                   delay(1000);change_c(cyan);s1:=s1+c;

                                      end;   if er_msg<>'' then put_bstr(er_msg,cyan,100);

               delay(1000);gotoXY(1,13);

               {Приём сообщения и контроль ошибок}

               writeln('Принятое сообщение:');readkey;gotoXY(5,whereY);

               er_msg:=s1+er_msg;put_str(er_msg,blue,100);

               D2:=ord(er_msg[length(er_msg)]);gotoXY(2,16);

               er_msg:=copy(er_msg,1,length(er_msg)-1);

               codK1(er_msg);D1:=K1;delete(msgK1,length(msgK1)-10,6);

               msgK1:='D1='+msgK1;write(msgK1);gotoXY(Xc-3,Yc+1);write('D1');

               gotoXY(Xc-3,Yc+2);put_bsym(chr(D1),red);delay(500);

               gotoXY(2,17);er_msg:=copy(er_msg,1,length(er_msg)-1);

               codK2(er_msg);D2:=fplus(K2,D2);msgK2:='D2='+msgK2;

               delete(msgK2,length(msgK2)-9,10);str(length(er_msg),s);

               msgK2:=msgK2+'+C'+s;write(msgK2);gotoXY(Xc,Yc-1);

               write('D2');gotoXY(Xc,Yc);put_bsym(chr(D2),red);

               gotoXY(2,Yc+2);if(D1=0)and(D2=0)then

               put_str('Ошибок нет',green,100);

               if(D1=0)and(D2<>0)then put_str('Ошибка в K2',red,100);

               if(D1<>0)and(D2=0)then put_str('Ошибка в K1',red,100);

               if(D1<>0)and(D2<>0)then

          begin put_str('Ошибка!',red,100);gotoXY(2,Yc+1);

         {Вычисление ошибочной позиции и исправление ошибки}

          write('Коррекция ошибки:');readkey;fequat(D1,D2,X,r);

          writeln(' D1*X=D2; r=L-log2_(X)+1; L-длина сообщения ');

          write(' Вес ошибки X= ');put_str(b_str3(X),red,100);

          write(' Номер ошибочной позиции r= ');r:=length(msg)-r+1;

          put_str(b_str3(r),red,100);gotoXY(2,Yc+1);

          writeln('Конечное сообщение:(исправление C',r,'+D1)');

          gotoXY(5,Yc+2);put_bstr(copy(er_msg,1,r-1),blue,100);

          put_bsym(er_msg[r],red);delay(1000);gotoXY(Xc-3,Yc);

          symb:=chr(fplus(ord(er_msg[r]),D1));

          put_bsym(symb,blue);er_msg[r]:=symb;

          put_bstr(copy(er_msg,r+1,length(er_msg)),blue,100);

          gotoXY(5,Yc+3);put_str(er_msg,green,100);

                   end                       else begin writeln;

              writeln(' Конечное сообщение:');gotoXY(5,whereY);

              put_str(er_msg,green,100) end;

         end;readkey

END {Hamming}.

Модуль, используемый в программе Hamming:

UNIT cod_Hem; {объекты для демонстрации кода Хэмминга}

       INTERFACE

       uses CRT,Fbyte;

       var pred_attr:byte;{предыдущий атрибут текст.режима}

           wmin,wmax:word;{координаты предыдущего окна}

           msgK1,msgK2:string;{формулы кодирования}

           K1,K2:byte;{контрольные байты кода}

           procedure save_state;{сохранить состояние}

           procedure set_state;{восстановить состояние}

        

       type Tsymb = object {объект - Символ }

            c:char; {символ вывода}

            col:byte; {цвет символа}

            Xc,Yc:byte;{координаты символа}

         procedure put_sym(ch:char;color:byte);{вывести символ}

         procedure put_bsym(ch:char;color:byte);{вывести байт-символ}

         procedure change_c(color:byte);{изменить цвет байт-символа}

         procedure gen_sym(color:byte);{сгенерировать байт-символ}

           end {Tsymb};

       type Tstr_symb =object(Tsymb) {объект - Строка символов }

         procedure put_str(st:string;color:byte;t:word);{вывести строку}

         procedure put_bstr(st:string;color:byte;t:word);{вывести байты}

         procedure codK1(st:string);{вычислить контр.байт K1}

         procedure codK2(st:string);{вычислить контр.байт K2}

       end {Tstr_symb};

         IMPLEMENTATION

         procedure save_state;

            begin pred_attr:=TextAttr; wmin:=WindMin;wmax:=WindMax;

            end {save_state};

         procedure set_state;

            begin WindMax:=wmax;Windmin:=wmin;TextAttr:=pred_attr

            end{set_state};

         procedure Tsymb.put_sym(ch:char;color:byte);

            begin  Xc:=whereX;Yc:=whereY;save_state;c:=ch;col:=color;

                   window(Xc,Yc,Xc+2,Yc);TextBackground(col);ClrScr;

                   write(ch);set_state;GotoXY(Xc+3,Yc)

            end {put_sym};

         procedure Tsymb.put_bsym(ch:char;color:byte);

            var j:byte;s3:string;

          beginXc:=whereX;Yc:=whereY;save_state;c:=ch;col:=color;

                  window(Xc,Yc,Xc+2,Yc+2); TextBackground(col);ClrScr;for j:=1 to 3 do

                  begin s3:=b_str3(ord(ch));write(s3[j]);GotoXY(whereX-1,whereY+1);

                  end;set_state;GotoXY(Xc+3,Yc);Xc:=whereX;Yc:=whereY;

           end {put_bsym};

          procedure Tsymb.change_c(color:byte);

            begin GotoXY(Xc-3,Yc);put_bsym(c,color)

            end {change_c};

         procedure Tsymb.gen_sym(color:byte);

            begin randomize;c:=chr(random(256));put_bsym(c,color)

            end {gen_sym};

         procedure Tstr_symb.put_str(st:string;color:byte;t:word);

         var j:byte;

         begin for j:=1 to length(st) do begin put_sym(st[j],color);delay(t) end

         end {put_str};

         procedure Tstr_symb.put_bstr(st:string;color:byte;t:word);

         var j:byte;

         begin for j:=1 to length(st) do begin put_bsym(st[j],color);delay(t) end

         end {put_bstr};

       

         procedure Tstr_symb.codK1(st:string);

         var j:byte;s:string;

         begin K1:=0;j:=1;msgK1:='C0';

            repeat K1:=fplus(K1,ord(st[j]));if (j<10)and(j<length(st)) then

                   begin str(j,s);msgK1:=msgK1+'+C'+s end;

                   if j=10 then msgK1:=msgK1+'+..';inc(j)

            until j=length(st);K1:=fplus(K1,ord(st[j]));msgK1:=msgK1+'=K1';

            while length(msgK1)<=(3*(length(st))+1) do

            insert('.',msgK1,length(msgK1)-2);msgK1:=msgK1+'   '

         end{codK1};

         procedure Tstr_symb.codK2(st:string);

         var j:byte;

         begin K2:=fmult(ord(st[1]),2);j:=2;

   repeat K2:=fmult(fplus(K2,ord(st[j])),2);inc(j)

   until j=length(st);K2:=fplus(K2,ord(st[j]));msgK2:='(..(C0*2+C1)*2+С2)*2+..)= K2';

             while length(msgK2)<length(msgK1) do insert('.',msgK2,22)

         end{codK2};

 END{cod_Hem}.

5. Понятие о динамических объектах.

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

Для создания динамических объектов необходимо создать типизированный указатель на заданный тип объекта. Объявление такого указателя выполняется по обычным правилам, принятым для указателей на типы Турбо Паскаля. Например:

type pLine = ^Line; {указатель на объект типа Line }

var pL1:pLine; {динамический объект типа pLine}

Динамические объекты чрезвычайно полезны для задач моделирования, управления, проектирования. Библиотеки объектов в большинстве своём содержат динамические объекты, как например Turbo Vision -библиотека объектов интерфейса.

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

6. Расширенное использование процедуры new.

При работе с динамическими объектами процедуру new (выделения хип-памяти под типизированные указатели) можно использовать с расширенными возможностями:

- в ней допускается второй параметр, в котором можно указывать обращение к конструктору для инициализации динамического объекта;

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

Такие расширенные средства позволяют одновременно, и зарезервировать хип-память для динамического объекта и разместить в ней некоторое (начальное) значение (с помощью конструктора). В теле конструктора допускается создание нового динамического объекта и так далее. В такой ситуации (использования нескольких уровней вложенности) проблемой может стать нехватка распределяемой хип-памяти. При нехватке хип-памяти необходимо ликвидировать всю цепочку размещенных объектов. Эту операцию может выполнить стандартная процедура fall, которую можно вызывать только из конструктора и которая освобождает выделенную память, возвращая значение указателя nil. Примеры расширенного использования new:

var pL1:^Line; {динамический объект типа Line}

. . . .. .. .

new(pL1,Init);  {Init - конструктор для инициализации объекта pL1}

. . .. . . .. .

pL1:= new(Line, Init); {инициализация pL1 с помощью функции new}

7. Освобождение хип-памяти от динамических объектов.

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

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

Для удобства использования деструктора предусмотрено расширенное использование стандартной процедуры dispose - освобождения хип-памяти. В этой процедуре разрешено применять кроме обычного параметра (переменной типа указатель) также второй параметр -  имя деструктора объекта. Например:

type Line = object (point);

. . . . . .

constructor Init;

destructor Done;

end {Line}.          

new(pL1, Init);  {Создание динамического объекта pL1}

.  . . . . .

dispose(pL1, Done); {Удаление динамического объекта pL1}


 

А также другие работы, которые могут Вас заинтересовать

20304. Основные направления в театральном искусстве XX века 167 KB
  театр капиталистических стран арена острейшей идеологической борьбы. Театральное искусство отражает сложные исторические социальные изменения происходящие в мире. Великая Октябрьская социалистическая революция образование первого в мире Советского государства а после второй мировой войны и других социалистических государств оказали существенное влияние на развитие театра капиталистических стран.
20305. Машинерия классической сцены 182.5 KB
  Машинерия классической сцены. Базанова УСТРОЙСТВО СЦЕНЫ Основные части сцены Сценическая коробка по вертикальному сечению распадается на три основные части: трюм планшет и колосники рис. Нижняя сцена используется для устройства люковспусков со сцены и для осуществления различных эффектов. Площадь трюма обычно равна площади основной сцены за вычетом места отведенного для склада мягких декораций сейфа.
20306. Золотой век русского искусства. 180.5 KB
  €œЗОЛОТОЙ ВЕК€РУССКОЙ КУЛЬТУРЫ В одном из своих произведений А. не зря называют €œзолотым веком€русской культуры. В русской литературе век классицизма был сравнительно короток и неярок в русской музыке почти не было классицизма зато в живописи и особенно в архитектуре он оставил подлинные шедевры. Константин Андреевич Тон 1794 в своем творчестве попытался возродить традиции древнерусской архитектуры.
20307. Комедия дель-арте 658.5 KB
  Комедия дельарте. Комедия дель арте [править] Материал из Википедии свободной энциклопедии Эта версия страницы ожидает проверки и может отличаться от последней подтверждённой проверенной 3 июня 2011. Сцена из представления комедии дель арте. Комедия дель арте итал.
20308. Планировка современной сцены 139.5 KB
  Планировка современной сцены. Работа над макетом и планировкой Воплощение замысла художника в пространстве начинается с компоновки и проверки расположения декораций на плане сцены. Немалую роль в этой работе играет точность имеющегося плана сцены. Реальные размеры сцены габариты установленного оборудования всегда отличаются от чертежей рабочего проекта по которым велось строительство.
20309. Серебряный век в русском искусстве 103.5 KB
  Новая концепция искусства 2. Литература музыка театр соединение видов искусства Заключение Литература Введение В России первой трети прошлого века произошел мощный духовный всплеск вбросивший в сокровищницу мировой культуры немало значительных идей и произведений в сферах религиозной и философской мысли всех видов искусства. На взлет творческой активности Серебряного века повлияло постоянно укрепляющееся ощущение наиболее чуткими мыслителями и художниками нарастающего глобального никогда не случавшегося еще в истории человечества...
20310. Театр эпохи Просвещения 920 KB
  Театр эпохи Просвещения. Западноевропейский театр в эпоху Просвещения Театр от греч. Родовое понятие театра подразделяется на виды театрального искусства: драматический театр оперный балетный театр пантомимы и т. Происхождение термина связано с древнегреческим античным театром где именно так назывались места в зрительном зале от греческого глагола теаомай – смотрю .
20311. Сценические эффекты в театре XIX века 55.5 KB
  Кроме этого появление электрических двигателей послужило мощным толчком для развития механического оборудования сцены. Классические люкипровалы превратились в подъемноопускные площадки и лифтовые сцены греческие выкатные площадки эккиклемы в платформы вывозящие в пределы игровой зоны целые декорационные комплексы небольшие круглые вращающиеся площадки времен театра Возрождения и барокко в различные системы поворотных кругов примитивные веревочные ручные подъемы в механизированные и немеханизированные штанкетные подъемы. Ответы на эти...
20312. Древнерусское искусство: архитектура, иконопись, литература, театр 242 KB
  С образованием государственности и принятием христианства из Византии на Русь пришли новые для нее виды монументальной живописи мозаика и фреска а также станковая живопись иконопись. Византия познакомила русских художников с новой для них техникой живописи дала им иконографический канон неизменность которого строго оберегалась церковью. Это в известной степени сковывало художественное творчество и предопределяло более длительное и устойчивое византийское влияние в живописи нежели в архитектуре. Самые ранние из сохранившихся...