Министерство общего и профессионального образования Российской Федерации УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИ...
46 downloads
220 Views
234KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство общего и профессионального образования Российской Федерации УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра технической кибернетики
ИЗУЧЕНИЕ ПРИНЦИПОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторной работе по курсу "Системное программное обеспечение" для подготовки инженеров по специальности 210100 Управление и информатика в технических системах
Уфа 1999
2
Составитель О.В. Трушин УДК 681.3.06
Изучение принципов объектно-ориентированного программирования. Методические указания к лабораторной работе по курсу "Системное программное обеспечение" для подготовки инженеров по специальности 210100 - Управление и информатика в технических системах / Уфимск. гос. авиац. техн. унив-т; Сост. О.В. Трушин. - Уфа, 1999. – 17 с.
Приведены базовые теоретические сведения и задания для лабораторной работы по разделу курса "Системное ПО", в котором изучается методология и принципы объектно-ориентированного подхода при разработке программных систем. Приведенные алгоритмы реализованы применительно к среде Borland Pascal для Windows в форме, позволяющей при необходимости легко адаптировать их для других (более современных, но и более ресурсоемких) систем программирования.
Библиогр.: 12 назв.
Рецензенты:
Л. П. Костюкова; М. Е. Сидоров
3
Содержание Стр. 1 Цель работы …………..……………………………….….…………. 4 2 Средства объектно-ориентированного программирования……….. 4 3 Методология и принципы работы с объектами…………………….. 5 3.1 Понятие объекта в ООП……………………………………… 5 3.2 Добавление новых свойств объекту-родителю……………. 8 3.3 Добавление новых свойств объектам-наследникам……….. 9 4 Программа как объект в рамках идеологии ООП…………………. 11 5 Практическое задание ……………………………………………….. 13 Список литературы ...............................................…......…....….14 Приложение А ……………..…………………………..…………… 15
4 1 Цель работы Целью работы является практическое освоение методологии и принципов объектно-ориентированного подхода при разработке программных систем. Принципы объектной методологии изучаются сначала на базовом уровне – на примере решения классической задачи управления набором графических объектов. Далее рассматривается подход к самой разрабатываемой программе как к объекту. 2 Средства объектно-ориентированного программирования Различные расширения базовых версий алгоритмических языков (например, введение строковых типов данных, модульная организация программ) принципиально не меняют природы этих языков, являясь лишь технологическими усовершенствованиями. Классический подход к программированию является процедурно-ориентированным – задаются характеристики моделируемого объекта и определяется набор процедур для отображения или модификации этих характеристик. Введение объектных типов означает радикальное изменение в самом принципе программирования. При этом подходе в характеристики объекта включают, кроме непосредственно его свойств, также и процедуры обработки этих свойств. Такие процедуры называют методами объекта (Methods). Характеристики объекта при этом называют полями (Fields). Объектно-ориентированное программирование (ООП) в настоящее время является мощным средством создания программ. Но ООП является эффективным инструментом лишь в рамках целостного объектно-ориентированного подхода на всех этапах жизненного цикла программных систем. Термин ООП (Object-oriented programming) появился в начале 80-х годов вместе с языком SmallTalk. Развитие ООП определялось потребностями развития программных систем – необходимо было создавать мобильные, легко расширяемые и стыкуемые программы с унифицированным дружественным интерфейсом. В среду Turbo-Pascal объекты были введены уже с версии 5.5, самое известное DOS-приложение ООП – пакет Turbo-Vision. Наиболее мощно как языковое средство ООП представлено в языке С++. Операционная система MS Windows (как и другие многозадачные ОС) в своей основе содержит объектно-ориентированные подходы, и игнорировать эти подходы, мягко говоря, неперспективно. Развитие средств создания программ в настоящее время находится на стадии совершенствования сред визуального проектирования, базирующихся на популярных языках программирования. Для профессиональных программистов это системы типа C++ Builder, для пользователей – среды типа Delphi и Visual Basic.
5 3 Методология и принципы работы с объектами 3.1 Понятие объекта в ООП Тип "объект" является составным, его элементы (поля) могут быть любого типа. Например, точечный бесцветный объект можно описать как Type
O = object x,y: integer; { координаты центра объекта }
end; Внешне эта структура похожа на тип "запись", но начинается она словом "Object". Здесь в структуру входят два поля целого типа (координаты). С введенным типом можно обращаться как с любым другим типом – определять переменные этого типа, работать с полями, создавать экземпляры переменной и т.д. Но в отличие от записи в описание объекта можно вводить процедуры (и функции) в качестве полей. Например, введем как свойства (методы) точечного объекта пять процедур: создания этого объекта (определения его координат), прорисовки (последовательности прохода "контура" объекта), показа (прорисовки конкретным инструментом), скрытия (прорисовки цветом фона) и, наконец, процедуру перемещения. Содержание процедур, реализующих методы объекта, приводят отдельно. uses WinCrt,WinTypes,WinProcs; Var Win: hWnd; { окно } DC: hDC; { контекст дисплея} {--------------------- Раздел объявления объектов ----------------------} Type O = object { Описание объекта-родителя } x,y: integer; { координаты центра объекта } Constructor Procedure Procedure Procedure Procedure
INIT( _X,_Y: integer);{ создатель объекта } DRAW; Virtual; { вывод объекта } SHOW; { прорисовка объекта } HIDE; { скрытие объекта } MOVE( dX,dY: integer);{ смещение объекта на dX,dY} end; { конец описания объекта-родителя }
В ООП включен принцип наследования свойств объекта при создании новых объектов как его потомков. Потомок автоматически наследует от родителя все его поля и методы с возможностью добавления новых и перекрытия (замены) существующих у родителя полей и методов. Методы, выполняющиеся по разному (здесь это прорисовка), объявляются виртуальными. Определим конкретный объект-потомок для точечного объекта – круг.
6 Cir = object(O) { Описание объекта-потомка "круг" } r: integer; { радиус – новое поле} Constructor INIT(_X,_Y,_R: integer); Procedure DRAW; Virtual; end; Здесь добавляется одно новое поле (радиус) с соответствующим переопределением (перекрытием в терминах ООП) конструктора объекта и упоминанием процедуры виртуальной прорисовки. Определим еще один объект-потомок – отрезок. Type Lin = object(O) { Описание объекта-потомка "отрезок"} sX,sY: integer; { смещение координат для конца отрезка } Constructor INIT( X1,Y1,X2,Y2: integer); Procedure DRAW; Virtual; end; Здесь включены два новых поля sX,sY для относительных координат второго конца отрезка (за первый принимается базовая точка) и перекрывается конструктор объекта, так как нужно задать новый набор координат узловых точек. Процедура прорисовки как виртуальная также объявляется. Описание методов как процедур приводится отдельно, причем параметры этих процедур можно опускать. Constructor O.INIT; Procedure O.DRAW;
begin x:=_X; y:=_Y end; begin MoveTo(DC,x-1,y); LineTo(DC,x,y) end;
Procedure O.SHOW; begin { отрисовка черным карандашом } SelectObject(DC, GetStockObject(Black_Pen)); DRAW end; Procedure O.HIDE; begin { отрисовка белым карандашом } SelectObject(DC, GetStockObject(White_Pen)); DRAW end; Procedure O.MOVE;
begin HIDE; x:=x+dX; y:=y+dY; SHOW end;
Constructor Cir.INIT; { унаследованный конструктор потомка (круга) } begin
O.INIT( _X,_Y);
r:=_R end;
Procedure Cir.DRAW; begin Ellipse(DC, x-r div 2, y-r div 2, x+r div 2, y+r div 2) end; Constructor Lin.INIT;{унаследованный конструктор потомка (линии) } begin O.INIT( X1,Y1); sX:=X2-X1; sY:=Y2-Y1 end; Procedure Lin.DRAW; begin MoveTo(DC,x,y); LineTo(DC,x+sX,y+sY) end;
7 Прорисовка точечного объекта здесь для удобства выбора инструмента проводится карандашом как короткий горизонтальный отрезок (хотя можно использовать и процедуру SetPixel, но с другим принципом выбора цвета). Оператором типа SelectObject(DC, GetStockObject(Black_Pen)) проводится выбор инструмента (из набора стандартных) для отрисовки объектов. Определим экземпляры объектов. Const N=100; Var Pixel: array[1..N] of O; { массив точек } Lini: Lin; { линия } Circ: Cir; { окружность } Active: integer; { активный объект } Определим процедуры работы с объектами. Procedure SHOWALL; { перерисовка всех объектов } Var k: integer; Begin Lini.SHOW; Circ.SHOW; For k:=1 to N do Pixel[k].SHOW end; Procedure MOVEACTIVE( dX,dY: integer); { движение активного объекта } Var k: integer; begin CASE active OF 1: Circ.MOVE( dX,dY); 2: Lini.MOVE( dX,dY); 3: For k:=1 to N do Pixel[k].MOVE( dX,dY); end end; Головная программа, организующая управление набором объектов. Var k: integer;
stop: boolean; const d=5;
begin CmdShow:=sw_ShowMaximized; { установка размера окна } InitWinCRT; { создание окна CRT } Win:=FindWindow('TPWinCRT',Pchar(0)); DC:=GetDC(Win); For k:=1 to N do { создание точек } Pixel[k].INIT( random(640),random(480)); Lini.INIT( 200,150, 400,300); { создание линии } Circ.INIT( 300,240, 100); { создание окружности } SHOWALL; { показ всех объектов } Active:=1; { номер активного объекта } stop:=false; {индикатор окончания работы с объектами } REPEAT CASE ReadKey OF { управление объектами с клавиатуры }
8 #27: Stop:=True; { Esc - остановка процесса } #9 : { Tab выбирает активный объект } begin inc(active); if active>3 then active:=1 end; '1': '2': '3': '4':
MOVEACTIVE( 0,-d); MOVEACTIVE( 0, d); MOVEACTIVE(-d, 0); MOVEACTIVE( d, 0);
{ { { {
влево } вправо } вверх } вниз } end;{case}
SHOWALL UNTIL stop; ReleaseDC(Win,DC);
DoneWinCrt end.
При организации движения объектов по горизонтали и вертикали курсорные клавиши не задействованы – ими в окне WinCrt по умолчанию перемещаются бегунки полос скроллинга. Перед закрытием окна необходимо освободить контекст устройства (DC – Display Context). 3.2 Добавление новых свойств объекту-родителю Одно из преимуществ объектно-ориентированного подхода при создании программ – легкость расширения программ. Усовершенствуем приведенную выше программу – определим цвета объектов. Для этого в разделе объявления объектов для родителя введем поле, определяющее цвет. Type O = object { Описание объекта-родителя } x,y: integer; { координаты центра объекта } pen: hPen; { карандаш для прорисовки } Constructor INIT( _X,_Y: integer; _Pen: hPen); { создатель объекта } .. .. .. end; { многоточие указывает неизменяемые части программы } При такой модернизации для потомков конструктор изменится аналогично – добавлением в параметры методов пункта _Pen: hPen. Изменения для методов родителя следующие: Constructor O.INIT; Procedure O.DRAW;
begin
x:=_X; y:=_Y; pen:=_Pen end;
begin SelectObject(DC, pen); MoveTo(DC,x-1,y); LineTo(DC,x,y) end;
Procedure O.HIDE; var dm: integer; begin dm:=SetROP2(DC,R2_WHITE); { стиль рисования белым } DRAW; dm:=SetROP2(DC,dm) { восстановление стиля рисования } end;
9 Для объектов-потомков модернизация методов в данном случае сведется лишь к добавлению нового поля. Например, для отрезка получим Constructor Lin.INIT; { унаследованный конструктор потомка (для линии) } begin O.INIT( X1,Y1,_Pen); sX:=X2-X1; sY:=Y2-Y1 end; Procedure Lin.DRAW; begin SelectObject(DC, pen); MoveTo(DC,x,y); LineTo(DC,x+sX,y+sY) end; В основной программе необходимо для реализации введенных возможностей создавать средства рисования и использовать их при создании экземпляров объекта, например .. ..
DC:=GetDC(Win); p1:=CreatePen(ps_Solid,2,RGB(255,0,0)); p2:=CreatePen(ps_Solid,5,RGB(0,255,0)); p3:=CreatePen(ps_Solid,3,RGB(0,0,255));
For k:=1 to N do Pixel[k].INIT( Lini.INIT( Circ.INIT( SHOWALL; .. ..
{ создание точек } random(600),random(300),p1); 200,150, 400,300,p2); { создание линии } 300,240, 100,p3); { создание окружности } ..
Созданные средства рисования необходимо удалять по завершении работы программы. .. .. SHOWALL UNTIL stop; DeleteObject(p1); DeleteObject(p2); ReleaseDC(Win,DC); .. .. ..
DeleteObject(p3);
3.3 Добавление новых свойств объектам-наследникам Усовершенствуем программу, определив новые методы объектов. В раздел описания объектов добавим для круга метод изменения его размера. Cir = object(O) { Описание объекта-потомка: окружность } .. .. .. Procedure ROST( k: real); { масштабирование с коэффициентом k} End;
Type
Для типа-отрезка добавим метод изменения его ориентации. Type
end;
Lin = object(O) { Описание объекта-потомка "отрезок" } .. .. .. Procedure ROTO(ugol: real); { вращение отрезка на угол ugol (град)}
10 В раздел раскрытия методов добавим строки, раскрывающие содержание введенных методов. Procedure Cir.ROST( k: real); begin HIDE; r:=round(k*r); SHOW end; Procedure Lin.ROTO( ugol: real); var ug,l: real; begin if sX=0 then begin ug:= pi/2; if sY<0 then ug:=-pi/2 end else ug:=arctan(sY/sX); if sX<0 then ug:=ug+pi; ug:=ug+ugol*pi/180; L:=sqrt( sqr(1.*sX)+sqr(1.*sY)); HIDE; sX:=round(L*cos(ug)); sY:=round(L*sin(ug)); SHOW end; Эти методы можно использовать при организации движения объектов. Можно также непосредственно обращаться к полям объектов. Например, в раздел управления движением объектов курсорными клавишами добавим управление размером окружности, ориентацией отрезка. Будем также менять положение пикселов относительно центра экрана, что потребует обращения к полям с координатами этих пикселов. .. .. .. MOVEACTIVE(d,0); '=': Case active Of
{ если нажать клавишу "+" }
1: Circ.ROST(1.04);{ увеличение размера круга } 2: Lini.ROTO( 5); { вращение отрезка против часовой стрелки } 3: For k:=1 to N do{ смещение точек к центру экрана } Pixel[k].MOVE( (300-Pixel[k].X) div 20, (150-Pixel[k].Y) div 20); end; '-': Case active Of
{ если нажать клавишу "-" }
1: Circ.ROST(0.96); { уменьшение размера круга } 2: Lini.ROTO(-5); { вращение отрезка по часовой стрелке } 3: For k:=1 to N do { смещение точек от центра экрана } Pixel[k].MOVE(-(300-Pixel[k].X) div 20, -(150-Pixel[k].Y) div 20); end; ..
11 4 Программа как объект в рамках идеологии ООП. Современные ОС являются многозадачными и рассматривают программу как объект (приложение), который можно запускать, в том числе и в нескольких экземплярах, выделять ему ресурсы, приостанавливать работу и т.д. Обычно ООП-приложение при программировании делят минимум на три блока – модуль с описаниями объектов программы (в рассмотренном примере это точка, круг, отрезок), модуль с описанием программы как объекта из полей (переменных) и методов (процедур) и головная программа, где организуется инициализация, запуск и завершение объекта-программы. Ниже приведен один из вариантов компоновки разработанной программы по такому принципу. В первом файле "соберем" описания объектов программы. UNIT pr__obj; { модуль с описанием объектов программы – файл pr__obj.pas } InterFace { интерфейсная часть модуля } uses WinTypes,WinProcs; Var Win: hWnd; DC: hDC; p1,p2,p3: hPen;
{ окно } { контекст дисплея} { средства рисования }
{----------------------------- Объявления объектов -----------------------------------} Type O = object { описание объекта-родителя } .. .. .. Cir = object(O) { описание объектов-потомков } .. .. .. Implementation { Исполняемая часть модуля } { Раскрываем содержание объектных методов } Constructor O.INIT; begin x:=_X; y:=_Y; pen:=_Pen end; Procedure O.DRAW; Constructor Constructor Procedure begin
.. .. ..
Cir.INIT; .. .. .. Lin.INIT; .. .. .. Lin.ROTO( ugol: real); var ug,l: real; .. .. .. end;
end. { конец модуля } Во втором файле опишем саму программу как объект. Причем здесь необходима ссылка (оператором Uses) на описание объектов программы.
12 UNIT pr__app; { модуль с описанием программы как объекта – файл pr__app.pas } InterFace { интерфейсная часть модуля } USES pr__obj; { подключение модуля с описанием объектов программы } Const N=100; Type TAppl = object { Описание объекта-программы – Type "Application"} Pixel: Lini: Circ: Active:
array[1..N] of O; { массив точек } Lin; { линия } Cir; { окружность } integer; { активный объект }
Procedure INIT; Procedure RUN; Procedure DONE;
{ создание и вывод объектов } { выбор и перемещение объекта } { завершение }
Procedure SHOWALL;
{ показ объектов }
Procedure MOVEACTIVE( dX,dY: integer); { смещение объекта на dX,dY } end; { конец описания объекта-программы } Implementation
{ исполняемая часть модуля }
uses WinCrt,WinTypes,WinProcs; Procedure TAppl.INIT; { инициализация приложения } Var k: integer; begin
CmdShow:=sw_ShowMaximized; InitWinCRT; .. .. { установка окон и контекстов }
{ создание объектов} p1:=CreatePen(ps_Solid,2,RGB(255,0,0)); .. .. .. Lini.INIT( 200,150, 400,300,p2); .. .. .. SHOWALL;
{ показ всех объектов }
Active:=1 { номер активного объекта } end; Procedure TAppl.RUN; { выполнение приложения } var stop: boolean; k: integer; const d=5; begin stop:=false; REPEAT CASE ReadKey OF .. .. { работа с объектами приложения } .. .. .. end; SHOWALL UNTIL stop; end;
13 Procedure TAppl.DONE; { завершение приложения } Begin DeleteObject(p1); .. .. .. ReleaseDC( Win,DC); DoneWinCrt end; Procedure TAppl.SHOWALL; { перерисовка объектов приложения } Var k: integer; Begin
Lini.SHOW; Circ.SHOW; For k:=1 to N do Pixel[k].SHOW
end;
Procedure TAppl.MOVEACTIVE; { движение активного объекта } Var k: integer; begin CASE active OF
1: Circ.MOVE( dX,dY); 2: Lini.MOVE( dX,dY); 3: For k:=1 to N do Pixel[k].MOVE( dX,dY); end
end; end. { конец модуля } Основная программа для ООП-приложения (файл mainprog.pas) получается при таком подходе весьма короткой. Uses pr__app; Var Appl1: TAppl; begin
Appl1.INIT; { инициализация приложения } Appl1.RUN; { выполнение приложения } Appl1.DONE { завершение приложения }
end. 5 Практическое задание По одному из приведенных ниже вариантов составить программу создания средствами ООП набора управляемых с клавиатуры графических объектов. Организовать управление движением объектов курсорными клавишами по вертикали, по горизонтали и по диагоналям. Ввести возможность менять цвет объектов (изменением кода цвета). 5.1 Набор из 30 пикселов разного цвета, двух ромбов с диагоналями, параллельными краям экрана, и двух эллипсов. Менять размеры ромба и эллипса по вертикали и по горизонтали.
14 5.2 Набор из 40 пикселов одного цвета, двух прямоугольников со сторонами, параллельными краям экрана, и двух дуг окружности. Менять размеры прямоугольника по вертикали и по горизонтали, а для дуги менять радиус и конечный угол (стартовый угол принять равным нулю). 5.3 Набор из 50 пикселов разного цвета, двух прямоугольных треугольников с катетами, параллельными краям экрана, и двух отрезков толстой линии. Менять размеры треугольников по вертикали и по горизонтали. Для отрезков ввести возможность их вращения по или против часовой стрелки. 5.4 Набор из 60 пикселов одного цвета, двух прямоугольников со сторонами, параллельными краям экрана, и двух отрезков прямой. Менять размеры прямоугольника по вертикали и по горизонтали, а для отрезков задать вращение по или против часовой стрелки. Список литературы 1. Биллинг В.А., Мусикаев И.Х. Visual C++ 4. Книга для программистов. - М.: "Русская редакция", 1996. – 352 с. 2. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. – Харьков: Фолио, 1997. – 368 с. 3. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. – М.: Диалог – МИФИ, 1995. – 288 с. 4. Рубенкинг Н. Программирование в Delphi для "чайников". - К.: "Диалектика", 1996. – 304 с. 5. Калверт Ч. Программирование в Windows: Освой самостоятельно за 21 день / Пер. с англ. - М.: БИНОМ, 1995. – 496 с. 6. Культин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi. – СПб.: BHV – Санкт-Петербург, 1998. – 240 с. 7. Сван Т. Программирование для Windows в Borland C++ / Пер. с англ. - М.: БИНОМ, 1995. – 480 с. 8. Сидоров М.Е., Трушин О.В. Школа работы на IBM PC. Часть 2: Программирование в среде Turbo Pascal. – Уфа, 1996. – 160 с. 9. Сурков Д.А., Сурков К.А., Вальвачев А.Н. Программирование в среде Borland Pascal для Windows. - Мн.: Высш. шк., 1996. – 432 с. 10. Фаронов В.В. Турбо-Паскаль 7.0. Начальный курс: Учебное пособие. – М.: Нолидж, 1997. – 616 с. 11. Федоров А. Рогаткин Дм. Borland Pascal в среде Windows. – Киев: "Диалектика", 1993. – 656 с. 12. Microsoft Press. Руководство программиста по Microsoft Windows 95 / Пер. с англ. – М.: "Русская Редакция", 1997. – 600 с.
15 ПРИЛОЖЕНИЕ А (справочное) Функции GDI для отображения типовых графических объектов SetPixel(DC,x,y,Color); 1
Вывод точки (x,y) цветом Color (типа TColorRef = Longint). Цвет пиксела можно определить функцией GetPixel(DC,x,y). LineTo(DC,x,y);
2
Отрезок прямой к точке (x,y) от текущей позиции (ТП) дисплейного контекста DC.
(x,y) TColorRef = RGB(Red, Green, Blue)
ТП (x,y)
ТП можно перенести в точку (x,y) процедурой MoveTo(DC,x,y). Rectangle(DC, x1,y1,x2,y2); 3
Прямоугольник с левым верхним углом (x1,y1) и правым нижним (x2,y2). Граница прорисовывается текущим карандашом, заполнение – текущей кистью. RoundRect(DC, x1,y1, x2,y2, xd,yd);
4
(x2,y2) (x1,y1) yr=yd/2
Прямоугольник со скругленными углами в границам x=x1..x2, y=y1..y2. Углы скругляются по эллипсу с размерами осей xd,yd . Polyline(DC, Points,N);
5
(x1,y1)
xr=xd/2 (x2,y2) 1
Ломаная линия по N точкам из массива точек Points (типа TPoint = record x, y: Integer; end;)
N 1
Polygon(DC, Points,N); 6
Многоугольник по N точкам из массива Points. Контур замыкается по точкам 1 – N.
N
PolyPolygon(DC, Points,Pn,N); 7
2
Набор N многоугольников, получаемых по массиву точек Points, где количество вершин в каждом из них определяется в массиве целых чисел Pn. Контуры автоматически не замыкаются (в отличие от функции Polygon).
N=3
2
16 Ellipse(DC,x1,y1,x2,y2); 8
(x1,y1)
Эллипс, вписанный в прямоугольник с левым верхним углом (x1,y1) и правым нижним (x2,y2). Граница прорисовывается текущим карандашом, а заполнение – кистью.
(x2,y2)
Arc(DC,x1,y1,x2,y2,x3,y3,x4,y4); 9
Дуга эллипса, вписанного в прямоугольник по углам (x1,y1),(x2,y2). Дуга вырисовывается по области, проходимой лучом из центра эллипса между точками (x3,y3) и (x4,y4).
(x4,y4) (x3,y3)
Pie(DC,x1,y1,x2,y2,x3,y3,x4,y4); 10
Заполненный сектор эллипса, дуга строится аналогично Arc, центр эллипса соединяется с концами дуги отрезками прямой. Chord(DC,x1,y1,x2,y2,x3,y3,x4,y4);
11
Заполненная хорда эллипса, дуга строится аналогично Arc. CreatePen(Style,Width,Color);
12
Создание карандаша со стилем линии Style, шириной Width и цветом Color. Большинство стилей действуют лишь при Width =1. CreateSolidBrush(Color);
13
Создание кисти для сплошной закраски цветом Color (тип TColorRef, обычно его определяют как RGB(Red, Green, Blue)). Для предопределенных стилей закраски используют CreateHatchBrush(Index, Color), для растров CreatePatternBrush(Bitmap). FloodFill(DC,x,y,Color);
14
Заполнение области, ограниченной цветом Color, из точки (x,y) текущей кистью. Для области с многоцветной границей используется функция ExtFloodFill(DC,x,y,Color,Type).
Style Width Solid Hatch Pattern Color (x,y)
17
Составитель ТРУШИН Олег Владимирович
ИЗУЧЕНИЕ ПРИНЦИПОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторной работе по курсу "Системное программное обеспечение" для подготовки инженеров по специальности 210100 - Управление и информатика в технических системах
Редактор
А.В. Климова
ЛР № 020258 от 08.01.98 Подписано к печати 20.04.99.
Формат 60 Х 84 1/16.
Бумага оберточная. Печать плоская. Гарнитура Таймс. Усл. печ. л. 1.0. Усл. кр. – отт. 0,9
Уч. - изд. л. 0,9.
Тираж 50 экз.
Заказ № Уфимский государственный авиационный технический университет Редакционно-издательский комплекс УГАТУ 450000, Уфа – центр, ул. К. Маркса, 12