Автор: Пользователь скрыл имя, 10 Ноября 2012 в 20:14, контрольная работа
Основные понятия объективно-ориентированного программирования. Элементы объектно-ориентационного программирования. Инкапсуляция, наследование, полиморфизм. Виртуальное программирование: среда систем, элементы систем (форма, панель свойств, панель инструментов). Компоненты программ. Свойства, события, методы.
Свойства имеют два спецификато
Спецификаторы доступа связывают со свойством методы (функции) чтения и записи. Когда значение свойства считывается или изменяется, автоматически вызывается функция, связанная с этим свойством. Во время присваивания в предыдущем примере вы обращались к спецификатору записи. При этом VCL проверяла наличие метода доступа для спецификатора записи. Если метод существует, он вызывается, в противном случае VCL просто присваивает значение соответствующему члену класса.
Когда вы ссылаетесь на свойство (используете свойство справа от оператора присваивания), вы обращаетесь к спецификатору чтения:
int x = MainForm->Left;
В этом случае VCL вызывает спецификатор чтения для получения значения свойства Left. Во многих случаях спецификатор чтения не делает почти ничего, кроме возврата текущего значения свойства.
Свойства свойств (извините, я не могу написать иначе) определяются разработчиком компонента. Свойство может быть доступно только для чтения (read-only), и в этом случае вы можете получить значение свойства, но не можете его изменить. В редких случаях свойство может быть доступно только для записи (write-only).
Наконец, некоторые свойства могут быть доступны только во время выполнения (runtime-only). Доступ к такому свойству невозможен на этапе разработки, и оно не отображается в окне инспектора объектов. Свойство типа runtime-only может быть объявлено также и как read-only, что означает возможность доступа только во время выполнения и только для чтения.
Некоторые свойства используют массивы в качестве соответствующих членов-данных. Для иллюстрации поместим компонент Memo в нашу пустую форму. Выберите в палитре компонентов вкладку Standard и щелкните на кнопке Memo. (Используйте всплывающие подсказки, чтобы определить, на какой кнопке находится курсор мыши.) Теперь переместите курсор на форму и щелкните в том месте, где вы хотите расположить верхний левый угол компонента. После этого инспектор объектов переключится на отображение свойств только что размещенного компонента, в данном случае ТМеmо. Найдите свойство Lines и щелкните на нем. Заметьте, что значение свойства представляет собой текст (TStrings), а справа от значения расположена маленькая кнопка с многоточием (...).
Наличие кнопки с многоточием говорит о том, что данное свойство можно редактировать в отдельном диалоговом окне. Для массива строк, например, в диалоговом окне можно набрать строку. Для свойства Font щелчок на кнопке с многоточием вызовет диалоговое окно выбора шрифта. Тип вызываемого редактора зависит от свойства, но некоторые свойства используют один и тот же редактор. Вы можете вызвать редактор свойств, щелкнув на кнопке с многоточием, или дважды щелкнув на значении свойства.
Свойство Lines компонента Memo представляет собой массив строк. Когда вы дважды щелкнете на значении этого свойства, на экране появится редактор строк и вы сможете ввести текст, который должен отображаться в компоненте Memo после запуска программы. Если вы не хотите выводить какой-либо текст, удалите все строки из окна редактора.
Свойства могут быть экземплярами других классов VCL. Очевидный пример - свойство Font. Оно включает в себя начертание, цвет, размер шрифта и т.д. Найдите свойство Font в окне инспектора объектов. (Не имеет значения, какой компонент при этом выбран - Memo или сама форма.) Обратите внимание, что перед словом Font стоит знак плюс. Это означает, что для данного свойства существует набор дополнительных свойств. Если вы дважды щелкнете на имени свойства, ниже появится список его отдельных элементов, которые теперь можно изменять. Для редактирования можно также вызвать редактор свойств (Property Editor). В обоих случаях конечный результат будет одинаковым.
Некоторые свойства представляют собой набор (set) других свойств.
Свойство Style объекта Font - хороший пример набора. Заметьте, что перед Style стоит знак плюс. Если вы дважды щелкнете на свойстве Style, откроется дополнительный список. В этом случае набор состоит из различных стилей, доступных для данного шрифта: полужирный, курсивный, подчеркнутый и перечеркнутый. Двойным щелчком на стиле можно включить или выключить этот стиль (установить значение true или false). Некоторые свойства могут представлять собой перечисления (enumerations).
Перечисление (enumeration) - это список возможных значений свойства.
Когда вы щелкаете на свойстве перечислимого типа, справа от его значения появляется кнопка со стрелкой, направленной вниз. Чтобы увидеть список возможных значений, щелкните на этой кнопке. Можно также дважды щелкнуть на самом значении свойства. При этом инспектор объектов будет циклически перебирать (перечислять) все возможные значения. Свойство Cursor является хорошим примером перечислимого свойства. Выберите это свойство и щелкните на кнопке со стрелкой, чтобы увидеть список курсоров, которые вы можете выбрать.
Пока у вас запущен C++Builder и на экране находится пустая форма, вы можете некоторое время поисследовать различные компоненты и их свойства. Итак, вперед, я подожду.
Правила работы со свойствами:
Методы
Методы в компонентах VCL - это функции (точнее, процедуры и функции), которые могут быть вызваны для выполнения компонентом определенных действий. Например, все визуальные компоненты имеют метод с именем Show() для отображения компонента, и метод с именем Hide() для скрытия компонента. Эти методы вызываются точно так же, как и функции-члены классов (см. Раздел 3, «Указатели, ссылки и функции в Си++»):
MyWindow->Show();
// какой-то код, затем...
MyWindow->Hide();
По терминологии С++, методы являются функциями-членами класса данного компонента. Методы в VCL могут быть объявлены как открытые, защищенные или закрытые, точно так же, как и функции в С++. Ключевые слова public, protected и private имеют в классах Object Pascal то же значение, что и в классах С++. Открытые методы могут быть доступны пользователю компонента. В данном примере оба метода, Show() и Hide(), являются открытыми. Защищенные методы недоступны для пользователя, но доступны для классов (компонентов), являющихся производными данного компонента. Закрытые же методы, разумеется, могут быть доступны только в пределах самого класса.
Аналогично функциям С++, одни методы принимают аргументы и возвращают значения, а другие нет. Это определяется разработчиком компонента. Например, метод GetTextBuf() получает текст компонента TEdit. Этот метод может быть использован для получения введенного текста следующим образом:
char buff[256] ;
int numChars = EditControl->GetTextBuf(buff, sizeof(buff));
Как видите, данный метод принимает два аргумента и возвращает целое число. В результате его вызова содержимое окна редактирования помещается в buff и возвращается количество введенных символов.
Пока это все, что вам нужно знать для использования методов. Когда я буду рассказывать о написании компонентов, мы рассмотрим методы более детально.
Правила работы с методами:
События
Windows является средой, управляемой событиями (event-driven). Это означает, что программа управляется событиями, происходящими в среде Windows. К событиям относятся перемещение мыши, щелчки кнопками мыши и нажатия клавиш на клавиатуре.
Программисты, работавшие раньше в среде DOS, могут испытывать затруднения при переходе к концепции управляющих событий. Прикладная программа непрерывно опрашивает Windows на предмет возникновения событий. К событиям в Windows относятся активизация меню, нажатие кнопки, перемещение окна, требование перерисовки окна, активизация окна и т.д. Windows уведомляет программу о событии, посылая соответствующее сообщение (message). Количество сообщений, которые могут быть посланы приложению, составляет около 175. Это огромное количество! К счастью, вам не нужно знать все из них, чтобы программировать в C++Builder достаточно лишь пары десятков, которые используются наиболее часто.
События в VCL - это все происходящее в компоненте, о чем пользователь может захотеть узнать. Каждый компонент спроектирован так, чтобы реагировать на определенные события. Обычно имеются в виду события Windows, но это не обязательно. Например, компонент Button (кнопка) будет реагировать на щелчок мышью, как и следовало ожидать. Но невизуальные элементы управления (например, компоненты доступа к базам данных) могут реагировать на события, не относящиеся к Windows, например, достижение пользователем конца таблицы.
Когда вы реагируете на событие, относящееся к данному компоненту, это называется обработкой (handle) события. События обрабатываются функциями, которые называются обработчиками событий (event handlers).
Обработка событий в VCL крайне проста. Список событий, на которые реагирует компонент, приведен во вкладке Events окна инспектора объектов. Имя события служит одновременно его описанием. Например, щелчок мышью называется OnClick.
Вы не обязаны обрабатывать все события, на которые реагирует компонент. На практике это требуется редко. Если вы не обрабатываете какое-либо событие, соответствующее сообщение либо отбрасывается, либо обрабатывается предопределенным образом. Вы можете обрабатывать любые события, которые вас интересуют, и игнорировать все остальные.
Вы лучше почувствуете все сказанное, если примените его на практике. Для начала давайте создадим новое приложение. Выберите в главном меню пункт File->New->VCL Forms Application. Если появится запрос на сохранение текущего проекта, ответьте No. Теперь на экране снова пустая форма. Давайте сначала установим свойства главного окна:
1. Измените значение свойства Nam
2. Измените значение свойства Caption на PME Test Program.
Затем нам нужно добавить к форме компонент Memo:
1. Выберите вкладку Standard в палитре
компонентов и щелкните на кнопке Memo.
2. Щелкните на форме, чтобы поместить в
нее компонент Memo.
3. Измените значение свойства Name на Memo. Убедитесь,
что в данный момент выделен именно компонент Memo, чтобы случайно
не изменить имя формы.
4. Дважды щелкните на свойстве Lines в столбце
значений. На экране появится редактор
списка строк.
5. Сотрите слово Memo1 и наберите A test program using properties,
methods and events. Щелкните на кнопке OK, чтобы закрыть
редактор списка строк.
6. Растяните компонент Memo так, чтобы
он занимал большую часть формы.
Внизу оставьте место для кнопки.
Ваша форма должна выглядеть так, как на рисунке 5.2.
Рисунок 5.2 - Форма с добавленным компонентом Memo
Теперь давайте поместим в форму кнопку:
1. Выберите вкладку Standard в палитре
компонентов и щелкните на кнопке компонента Button.
2. Щелкните на форме под компонентом Memo, чтобы поместить
туда кнопку.
3. Измените значение свойства Name для кнопки
на Button.
4. Измените значение свойства Caption на Show/Hide.
5. Расположите кнопку по центру формы.
Вы можете отцентрировать компонент визуально, но для большей точности можно использовать палитру, выравнивания (Alignment Palette). Выберите в главном меню пункт View->Alignment Palette и затем щелкните на кнопке Center-horizontally (отцентрировать по горизонтали).
Мы будем использовать эту кнопку для отображения и скрытия компонента Memo. Теперь нужно написать некоторый код, чтобы кнопка заработала. Убедитесь, что компонент Button выделен, и щелкните на вкладке Events окна инспектора объектов. Вы увидите список событий, на которые реагирует компонент. Первым в списке должно стоять событие OnClick. Дважды щелкните на столбце значений события OnClick. То, что произойдет дальше - одно из величайших достижений визуального программирования. Окно редактора кода переместится на передний план и отобразит функцию OnClick, готовую для ввода кода. На рисунке 5.3 показан редактор кода с обработчиком OnClick.
Эта функция выглядит подобно функции-члену класса, которые обсуждались на третий день, и фактически ею и является. Единственное различие состоит в том, что функции C++Builder используют ключевое слово __fastcall (обратите внимание, что перед fastcall стоят два знака подчеркивания). Не так важно понимать, что означает __fastcall, главное - знать, что все функции C++Builder используют это соглашение о вызовах.
Возможно, вы захотите сделать окно редактора кода немного шире, чтобы видеть весь отображаемый текст. Перед тем, как двинуться дальше, сохраните проект. Выберите в главном меню пункт File->Save. Прежде всего, у вас будет запрошено имя модуля (исходного файла). Наберите PMEMain и щелкните на кнопке ОК. Затем последует запрос на ввод имени проекта. Наберите PMETest и снова щелкните на кнопке ОК или нажмите Enter.