OOП
.pdfМИНИСТЕФедеральноеÑÒÂÎгосударственноевысшегоОБ АЗОВАНИЯпро ессиональногоавтономноеИ НАУКИбразовательноеобразованияОССИЙСКОЙучреждениеÔÅÄÅ ÀÖÈÈ
У АЛЬСКИЙ ФЕДЕ АЛЬНЫЙ УНИВЕ СИТЕТ имени первого Президента оссии Б. . Ельцина ИНСТИТУТ ЕСТЕСТВЕННЫХ НАУК МЕТОДИЧЕСКИЕ УКАЗАНИЯ
по курсу Объектно-ориентированное программирование для студентов 3 года обучения
Екатеринбург, 2012
1
1.2
3
1
2
2.3
4
1
2
3
3.4
5
1
2
4.3
4
1
5.2
3
|
|
|
СОДЕ ЖАНИЕ |
. . . . . |
||
Интегрированная среда разработки Visual C++ .NET |
||||||
Ïðî |
ект для созда |
я Windows-приложения на управляемом C++ |
||||
приложение . . . . . . . . . . . . . . . |
. . . . . . |
|
||||
Свойс ва экземпляров класса и работа |
íèìè |
|
||||
аз абостоека |
|
основе классов Windows Forms |
|
|||
|
|
приложенийПросто нак лькулятор . . . |
|
|
||
Приложение асширенный калькулятор . . . . . . . . . . . . |
||||||
Меню, кнопки быстрого доступа и стандартные окна диалога |
||||||
Отображение текущего времени в строке статуса |
|
|||||
|
управления Windows Forms |
|
|
|
||
Элементы выбора Che kBox . . . . . . . . . . . . . . . . . . |
. . . . . . |
|||||
Компонент календарь DateTimePi ker |
класс DateTime |
|||||
тандартное и пользовательское орматирование даты и времени |
||||||
Ñписки ComboBox . . . . . . . . |
|
|
|
|||
Зависимые кнопки RadioButton |
|
|
|
|||
УправлениеСо д |
ормами . . . . . . . . . . . . . . . . . |
|
||||
|
элементов Form и их связь |
|
|
|||
|
|
несколькихлоготипом . . . . |
|
|
|
|
азработка ормы входа в при ожение |
|
|
|
|||
Многопользоват льский калькулятор . . . . . . . . . . . . . . . |
||||||
Программировани |
гра ики с использованием библиотеки GDI+ |
|||||
Создание |
объекта Graphi s |
|
|
|
Простаяисов ния линий и игур . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
анимация . . . .
2
4
6
9
1
7
8
19
2
3
25
7
0
1
2
34
5
1
1.1ИнтегрированнаяПроект для созданиясредаWindowsразработки-приложенияVisualна управляемомC++ .NETC++ |
|
Для создания проекта перейдите в меню Файл, выберите пункт С ть и в |
|
появившемся списке выберите Про кт.... После этого на экране |
диалоговое окно |
Прило(см. ðèñóíèîê 1). В списке слева выберите пункт CLR, а на панелипоявитсясеðедине укажите Windows Forms. Укажите мя проекта (не используйте ки иллицу!). Если
все сделано правильно, то на экране появится орма Form1 заготовка окна приложения.
|
исунок 1 Создание нового проекта в среде Visual Studio |
||
В дальнейшем работа будет проводиться в двух направлениях. |
|
||
1) |
оектирование ормы. азмещение на орме элементов управления. |
||
2) |
Придание ункциональности элементам управления. Написание обработчиков собы• |
||
|
òèé. |
жение |
|
|
1.2 Простое |
приложение определим |
|
|
Создадим первоеприлîстое приложение. Сначала |
приложенияего внеш й вид. Добавим на орму текст приветствиясоздадимкнопку для завершения работы
. Для этого нужно сделать следующие шаги: 2
1) |
Отк ойте вкладку П н ль эл м нто |
Tool Box) в правой части окна. Эта закладка |
|||||||
|
ìñîäе),ржитко орыеразнообразнмогут бытье элементыразмещены(управляющиеíà îðìå. |
и пассивные, видимые и невиди• |
|||||||
2) |
Выберитеэлемент на орме и вызовите |
íîå |
всплывающее меню. выберите пу кт |
||||||
элемент Label перетащите его на орму |
|
|
помощью мыши. Выдели• |
||||||
|
С ойст (Properties). На этой закладкеконтексòображаются свойства активного элемента |
||||||||
3) |
ормы или самой рмы, если ни один из элементов не явля тся активным. |
||||||||
Найдите в списке |
Text. Это свойство содерж |
значение текста метки. Из• |
|||||||
4) |
Найдите в списке свойство Name. Его значение хранит |
|
|
я созданного экземпляра |
|||||
|
мените его на произвольн е значение (например, ''Прèâåò!''). |
||||||||
|
класса Label. По умолчанию имя экз мпляра состоит из имени класса и порядкового |
||||||||
|
номера (например. label1). Измените |
это значение на любое другое (не используйте |
|||||||
5) |
кириллицу!). |
|
|
|
|
|
|
|
|
Найдите на вкладке Панель элементов объект Button и поместите его на орму. Это |
|||||||||
6) |
кнопка. |
|
|
|
|
свойство Name на exit. |
|||
Измените свойство Text на значение ''Выход'', |
|||||||||
На этом первый этап дизайн прил жения завершен. Запустите компиляцию проекта |
|||||||||
и посмотрите, как будет выглядеть готовое |
ложение. |
|
|
|
|||||
íàæ |
На втором этапе работы необходимо придать приложению ункциональн сть: при |
||||||||
ии на кнопку ''В ход'' приложение должно закрываться. Для этого необходимо |
|||||||||
создать обработчик события, которое будет выполняться при нажатии на кнопку. Среда |
|||||||||
программирования Visual Studio з |
чительно упрощает процесс созд н я обработчиков |
||||||||
событий, поскольку для большого íàбора стандартных событий ав оматèчески генериру• |
|||||||||
ет заголовки ункций для обработки. Задача пользователя |
сводится только к програм• |
||||||||
мированию тела соответствующей ункции. Создать заголовок ункции можно двумя |
|||||||||
способами. |
|
|
|
|
|
|
ышкой дважды. После |
||
1) |
Выделите нужный объект на орме и кликните по нему |
|
|||||||
|
го откроется окно кода програ |
ìû (Form1.h), |
котором |
|
заголовок ункэто• |
||||
|
ции, наиболее часто |
используемой для типа выделенного |
бъекта. Для экземпляра |
||||||
|
класса Button б дет создан заголовок ункции Cli k, котпоявитсярая выполняется при на• |
||||||||
|
жатии на кнопку. |
|
|
3 |
|
|
|
|
|
|
2) мразрешенныхÂûäæíîëèòåоткрытьнужныйдлянаданногообъектзакладкеíàэлементаС îðìåойступравления,откройтепутем нажатияспи ответствующиек событийкнопки быстрогоСписокèì ñîдоступаункцûò è,é |
|||||||||||
|
|
Ñî ытия). В списке |
|
найдите имя |
события (например, для кнопки |
|||||||
|
|
найдите событие Cliсобытийk) |
пустрой строкенужногонапр тив названия |
обытия кликните |
||||||||
|
|
мышью дважды. В |
появится |
стандартное имя ункции, поñле чего откроется |
||||||||
Ïðè |
окно кода программыстрокезаголовком нужной |
|
. |
|
||||||||
|
с кнопкой exit и событием Cli k в том,ункциив другом случае в коде программы |
|||||||||||
будетработесген рирована следующая пустая ункция: |
|
|
|
|||||||||
private: System::Void exit Cli k(System::Obje t^ sender, System::EventArgs^ e) |
||||||||||||
{ |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
ртное имя ункции содержит имя экземпляра класса, для которого она |
|||||||
Как видно, стан |
||||||||||||
выполняе ся (в äанном |
случае, exit), а также стандартное имя события (в данном случае, |
|||||||||||
реагировать íà |
это нажнатие. Для того,телочт бы пр ложение зак ывалось прè нажатии на |
|||||||||||
Cli k). Э ункция будет выполнятся всякий раз, как |
|
будет нажимать |
||||||||||
|
|
ñ èìå åì exit |
îðìå. Ïîêà |
|
пустое,пользовательиложение как не будет |
|||||||
кнопку, нужно в тело ункции exit |
добавункциить стандартную ункцию Close{}: |
|||||||||||
private: System::Void exit |
Cli k(System::Obje t^ |
sender, System::EventArgs^ e) |
||||||||||
{ |
Close{}; |
|
|
|
|
|
|
|
|
|
||
} |
|
|
|
|
|
|
|
|
|
|||
После этого сохраните проект и запустите компиляцию. Если ош бок не обнаружено, |
||||||||||||
то будет запущено приложение. Нажмите на кнопку ''Выход''. Приложение должно за• |
||||||||||||
крыться. |
|
|
|
|
|
|
|
|
|
|
||
|
|
1.3 Свойства экземпляров кл сса и работа с ними |
|
|||||||||
|
|
любой экземпляр кл сса имеет нàбор свойств, которые можно изменять по свое• |
||||||||||
|
|
|
íà |
|
экземпляра |
класса каждому свойству присваивается определенное |
||||||
му усмотрению. Как уже ук зано выше, свойства перечислены на вкладке свойств. При |
||||||||||||
добавлении |
|
пляра класса на орму, так и непосредственно после запуска программы, |
||||||||||
çíà÷ |
ïî ó |
ормучанию. Изменить эти свойства пользователь м жет как сразу после до• |
||||||||||
обращаясьэкзеíèì внутри исполняемого кода. |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
4 |
|
|
|
его спискеЧтобысвойствизменитьприсвоитьсвойство послеему новоедобавлениязначениеэкземпляра. Êàê, |
класса,âûøåнеобхîäèìîисанонайтиäëÿ |
|||||||||||
свойства Text экземпляров Label |
Button. В этом случаенапример,выполнении программы |
|||||||||||
значения этих свойств не |
изменяются и остаются постоянными. |
|
|
|
|
|
||||||
|
Свойства экземпляра класса можно менять внутри исполняемого кода. ассмот• |
|||||||||||
рим конкретный пример: пусть в созданном выше приложении при щелчке мышью по |
||||||||||||
метке меняется текст: со значения ''Привет!'' на ''Hello World!'' и бр |
íî. Äëÿ ýòî• |
|||||||||||
го необходимо определить обработчик с бытия щелчка по метке, т.е. создàòь ункцию, |
||||||||||||
которая будет выполняться, когда пользîватель кликает мышкой по метке на орме. |
êà |
|||||||||||
|
Создайте заголовок ункции для события Cli k (механизм создания |
|||||||||||
ункции |
изложен выше). Если свойство Name метки имеет значение label1, то заголовîê |
|||||||||||
будет следующим: |
|
|
|
|
|
|
||||||
private: System::Void label1_Cli k(System::Obje t^ sender, System::EventArgs^ e) |
|
|||||||||||
{ |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
изменилось свойство Text метки label1 при нажатии |
|
нее, нужно |
||||||
Äëÿ òîãî, |
|
|
||||||||||
|
титься |
эт му свойству из тела ункции. В общем, самом простом случнае, структура |
||||||||||
îáðàщениячтобыê св йству экземпляра класса следующая: |
-> |
|
свойства> |
|
||||||||
<указатель |
íà |
|
|
|
-> <имя экземпляра |
|
|
|||||
Например, чтобыкласс/структуру>обратиться свойству Text экземпляракласса> Label<имя именем label1 |
||||||||||||
необходимо написать: |
|
|
|
|
|
|
|
|
||||
Form1 -> label1 -> Text |
содержит только один класс типа Form, |
место Form1 можно |
||||||||||
В том случае, если |
|
|||||||||||
п сать this или вообщепроектускать указатель на класс (поскольку он |
всего один). |
|
||||||||||
|
Для конкретного |
примера |
изменения свойства Text при нажатии на метку унк• |
|||||||||
ция label1 Cli k будет следующей: |
|
|
|
|
|
|||||||
priva e: System::Void label1 Cli k(System::Obje t^ sender, System::EventArgs^ e) |
|
|||||||||||
{ |
|
|
1 Привет!"; |
|
|
|
|
|
|
|
||
|
String^ s2="Hello World!"; |
5 |
|
|
|
|
|
|||||
|
if(label1->Text==s1) |
|
|
|
|
|
|
|
}{ |
label1->Text=s2; |
|
|
||
{ |
else |
|
|
|
|
}} |
label1->Text=s1; |
|
|
||
Здесь использована простая условная конструкция языка C++, а также введены две стро• |
|||||
ковые переменные s1 и s2, хранящие два возможных значения свойства Text. Если при |
|||||
нажа ии на метку (вызывается событие Cli k и связанная с ним ункция label1 Cli k) |
|||||
свойство Text |
|
совпадающее со значени м строки s1, то свойству Text |
|||
ïð |
сваивается |
имеет значение,строки s2 (это реализовано в первой |
части условной конструк• |
||
öèè). Åñëè æå |
значение свойства Text не совпадает со значением строки s1, то свойству |
||||
Text присваивается значение строки s1 (часть тела else условной конструкции). Совер• |
|||||
шенно понятно, что этот алгоритм будет работать даже |
òîì |
если при запуске |
|||
приложения свойство Text экземпляра label1 не было равно ни первойслучае, ни второй строке. |
|||||
|
азработка приложений на основе классов Windows Forms |
||||
|
2.1 Приложение Простой калькулятор |
: |
|
||
|
Создание любого приложения состоит из трех этап |
|
|||
|
1) Определение нкций, которые должны быть реализованы приложением. В случае |
||||
|
простого |
калькулятора это 4 основные математические операции: сложение, вычита• |
|||
|
ние, умножение и деление. |
|
|
||
|
2) Проектирование ормы: какие элементы должны быть добавлены на орму, чтобы |
||||
|
приложение реализовывало требуемые ункции. Для простого калькулятора |
||||
|
сами перации, |
вводатакже поле для вывода результата (textBox). На этом этапенеобхо•такж |
|||
|
äèìû ïîëÿ äëÿ |
операндов (элементы textBox), кнопки (button), реализующие |
|||
|
необхîдимо разместить все нужные элементы таким образом, чтобы было понятно |
||||
|
их назначение. |
|
|
|
|
|
3) Программирование ункциональности6приложения. |
|
|
''полямиÍà езультат''рисункедобавлены2 показан, такжеметкипримерныйдобавлена,''Первое кромеâèäчисло''приложениякнопок, ''Действие''математическими. Для удобства, ''Второерядомдейчиñтвиями,ло''с текстовыми''=''кнопка,
Выход''.
|
|
|
|
исунок 2 Приложение Простой калькулятор |
||
|
После того, как все элементы |
будут размещены на орме, измените |
||||
свойство Name каждого из |
|
чтобыуправлениядальнейшем не запутаться, какой элемент |
||||
отвечает за |
ализацию той ли иной операции. Пусть, например, свойство Name кнопки |
|||||
сложения буд |
иметь |
|
элементов,plus а свойства Name для полей ввода/вывода будут равны |
|||
first (поле ввода первогозначенèсла), se ond (поле ввода второго числа), result (поле для |
||||||
вывода |
|
|
. |
|
|
|
|
результата)Для п й ввода/вывода измените свойство Text: по умолчанию это значение рав• |
|||||
но пустой |
строке, измените его на значение 0. Тогда при запуске алькулятора во всех |
|||||
|
|
полях по умолчанию будет указано значение 0. Для текстового поля result |
текстовыхможно изменить свойство ReadOnly на значение true, ÷тобы после запуска приложения польз ватель не мог самостоятельно редактировать зна ение свойства Text этого поля.
7
|
|
Можно изменить заголовок окна Form1 это значение свойства Text для ормы. |
||||
Измените это свойство на Simple Cal ulator. |
||||||
|
|
ассмотрим теперь обработчик события при нажатии на кнопку plus, т.е. опе• |
||||
рацию сложения. Создайте, как указано в предыдущем разделе, заголовок ункции для |
||||||
события Cli k кнопки |
. Он будет вот таким: |
|||||
private: System::Void |
plus_Cli k(System::Obje t^ sender, System::EventArgs^ e) |
|||||
{ |
|
|
|
|
|
|
} |
|
|
|
|
|
|
После того, как два числа введены в поля first и se ond, обратиться к введенным значе• |
||||||
ниям можно чер з свойство Text каж ого из полей (поскольку именно это свойство хранит |
||||||
|
âå |
|
ïîëå значе ие). Но тип äанных, которые мы ввели в поле, тексто ый, по• |
|||
эт муенноерироватьоп |
|
ñî |
как с числом нельзя до тех пор, пока оно не переведено |
|||
â |
îäèí |
из числовых орматов при помощи ункций из класса Convert. Объявим две |
||||
переменные типа doubleзначениемa b, которые будут хранить числовые значения: |
||||||
a |
|
a,b; |
|
|
|
first- |
double=System::Convert::ToDouble(se ond>Text);- |
||||||
Таким образом, в переменной а хранится число, введенн е в первое поле, а в переменной |
||||||
b введенное во второе поле. При так й записи важно пîмнить, что поля first и se ond |
||||||
не должны бы ь пустыми, т. . свойство Text не должно быть равно пустой строке! |
||||||
|
|
После ого, как значения свойства Text переведены в числа, их можно складывать |
||||
(èëè применять любую другую математическую операцию): |
||||||
double =a+b; |
|
|
вывести результат сложения в п ле result. Для этого зна• |
|||
На последнем этапе |
|
|||||
чение переменной |
|
необход мо перевести в текст при п мощи соответствующей ункции |
||||
из класса |
|
и присвоить свойству Text текстового поля result: |
||||
result->Text=System::Convert::ToString( ); |
||||||
Таким образом, вся ункция целиком будет следующей: |
||||||
private: System::Void plus Cli k(System::Obje t^ sender, System::EventArgs^ e) |
||||||
{ |
double a,b; |
|
|
8 |
} |
douba=Syse =a+b; |
::ToD uble(sefirstnd-->Text); |
|
|
||||||
result>Text=System::Convert::ToString(- |
); |
|
|
|||||||
Обработчики событий для остальных операций совершенно аналогичны. Для удобства |
||||||||||
переменные a, b, мож |
|
объявить глобальными, тогда их объявление в теле каждой |
||||||||
ункции делать уже не нужно. |
|
|
|
|
|
|||||
|
|
2.2 |
|
асширенный калькулятор |
|
|||||
|
|
ПриложПриложениеасширенный калькулятор должно реализовывать не только п о• |
||||||||
стые математические операции, |
и содержать основные элементы интер ейса стандаðò• |
|||||||||
ных Windows-приложений: |
главное |
ìåíþ, |
нтекстное (всплыв ющее) меню, панель с |
|||||||
кнопками быстрого доступа, всплы |
ющие подсказки, |
строку статуса, стандартные диа• |
||||||||
логи. Мы будем |
|
|
наращивать интер ейс нашего приложения. |
|
||||||
|
|
ассмотрим эл мент ri hTextBox, который позволяет сохранить |
|
|||||||
ë |
ений. Кроме этого,постепенно |
|
опр делить изменение размеров элемент (или вычис•их по |
|||||||
жения) при изменен обходиморазмеров всåй ормы. Для этого используется свпротоколйство An hor, |
||||||||||
к торое определяет |
привязку каждого элемента |
сохраняя одно или несколько рас• |
||||||||
стояний от границы элемента управления от края орме,рмы (значения свойства Top, Bottom, |
||||||||||
Left, Right). |
использовать комбинации нескольких значений для реализации необ• |
|||||||||
ходимого режимаМожноведения. |
|
|
|
|
panel2 |
|||||
|
|
Воспользуемся элементами Panel: добавим два элемента с именами panel1 |
||||||||
на орму как показано на |
рисунке 3. Чтобы п ложение |
панелей относительно ор• |
||||||||
ìû íå |
нялось при изменении размера ормы, дляобеихх панелей свойство An hor |
|||||||||
должноизìåть значения Bottom, Left, Right. П и такой |
комбинации обе панели будут свя• |
|||||||||
çàíû |
нижн м краем ормы, |
также с ее |
правым и левым краями, растягиваясь или |
|||||||
сжимаясь при изменении размера ормы. |
|
|
|
|||||||
|
|
Оставшуюся часть ормы зай ет текстовый редактор ri hTextBox, для |
|
|||||||
свойство An hor определите следующим образом: Top, Bottom, Left, Right. Пусть которогосвойств |
||||||||||
Name этого элемента равно result1. |
|
|
|
|
||||||
|
|
На панель panel1 раз |
с ите кнопки ''+'', ''-'', ''*'', ''*'' и ''Выход''. На |
|||||||
п нель panel2 разместите элеìенты textBox для ввода чисел (назовите их first |
se ond |
êàк в предыдущей задаче), а также метки для них. езультаты операций будут выводиться 9