Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Глава 20. Объекты пользователя

Читайте также:
  1. Висячие ссылки на удаленные объекты
  2. Все объекты классового типа размещаются динамически
  3. Глава 7. Объекты налогообложения
  4. Глава IX. Природные объекты, находящиеся под особой охраной
  5. Графический интерфейс пользователя
  6. Графический интерфейс пользователя.

Ну вот и пришло время создания своих собственных объектов. Поговорим о них.

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

Объекты в программировании напоминают объекты реального мира. Например, чтобы описать стенные часы, мы должны описать как совокупность их составных частей (радиусы шестеренок, длину маятника и прочее – в общем, «данные») так и совокупность процессов взаимодействия этих частей (как качается маятник, как шестеренка цепляет шестеренку и так далее – в общем «процедуры и функции»).

Любой элемент управления Visual Basic - объект. Свойства элемента управления - это данные, методы - процедуры.

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

20.1. Инкапсуляция- "Объект в футляре"

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

· Как он устроен (назовем это данные). Если объект - животное, то этим занимается анатомия.

· Как он работает (назовем это действия). Если объект - животное, то этим занимается физиология.

 

У игрушечного автомобиля данных множество. Например:

· Номер автомобиля

· Громкость звукового сигнала

· Цвет кузова

· Скорость движения в данный момент

· Высота кресел

· Величина электрического тока в двигателе в данный момент

· Толщина гайки в таком-то месте корпуса

И так далее и тому подобное.

 

Действий тоже достаточно. Например:

· Поворот по команде с пульта управления

· Торможение по команде с пульта управления

· Подпрыгивание автомобиля на маленьком камушке

· Изменение скорости вращения оси двигателя при изменении в нем электрического тока

· Изменение света фар при изменении в них электрического тока

· Возникновение жужжания двигателя при трении шестеренок друг об друга

И так далее и тому подобное.

 

Как видите, данные и действия бывают крупные и мелкие, важные и менее важные. Но нас интересует другое подразделение, а именно:

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

· и на те данные и действия, что не видны или не доступны (а эти близки понятию локальных)

Проведем подразделение построже и поподробнее. Данные будем делить на те, что видны снаружи (это первые 4), и те, что не видны (последние 3). Данные, видимые снаружи, назовем свойствами объекта.

Действия будем делить на те, которыми можно управлять снаружи (первые 2 действия), и те, что вызываются внутренней механикой автомобиля (остальные). Действия, вызываемые снаружи, назовем методами объекта.

 

Теперь будем подразделять свойства. Мы их разделим на две категории:

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

· Те, что снаружи менять нельзя (например, громкость звукового сигнала). Назовем их свойствами только для чтения.

 

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

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

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

 

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

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

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

Влиять на работу объекта можно только тремя способами:

· Методами

· Изменяя значения свойств для чтения-записи

· Изменяя свойства окружающего мира, например, положив на пути автомобиля камешек.

 

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

 

Все вышесказанное является введением в идеологию объектного программирования. Как мне кажется, это введение поможет вам легче разобраться в механике объектов, создаваемых вами на компьютере. И теперь пришла пора такие объекты создавать. Лучше всего это делать на примере решения реальной задачи. Вот она.

20.2. Игра "Сачок". Постановка задачи

Давайте создадим такую игру:

Как только проект запущен, из места старта на столе разлетаются во все стороны со случайными скоростями и в случайных направлениях 10 шариков. Они ведут себя как биллиардные шары на столе. Ударившись о бортик, любой шарик отскакивает по закону отражения. Примечание: Для удобства программирования я назвал по-разному 4 бортика: пол, потолок, стены. Трения нет - и шарики могут бесконечно кататься по столу. Для простоты я не стал программировать соударение шариков между собой, хотя это вполне можно было сделать. Поэтому шарики при столкновении просто пролетают друг сквозь друга. На поле присутствует Ловец (которого раньше я хотел назвать "Сачок", причем в обоих смыслах). Ловцом управляет с клавиатуры игрок. Ловец может двигаться с постоянной скоростью в 4 направлениях: вверх, вниз, влево, вправо, подчиняясь соответствующим клавишам клавиатуры, а также стоять (клавиша Ctrl). Каждый раз, когда ловец соприкасается с шариком, шарик исчезает (он пойман). Задача игрока - побыстрее поймать все 10 шариков. Счетчик времени (импульсов таймера) замирает в момент поимки последнего шарика, чтобы вы могли запомнить результат. При нажатии на кнопку "Начинай сначала" игра начинается сначала. Вот и все.

 

Что здесь будет объектом? Несмотря на то, что у нас нет опыта, интуиция подскажет нам. Конечно же, шары и ловец.


Дата добавления: 2015-10-26; просмотров: 166 | Нарушение авторских прав


Читайте в этой же книге: Private Sub Включить_сигнал_будильника() | Проект - Гонки (игра) | Использование массивов при программировании игр | Массивы элементов управления | Переключатель(OptionButton) | Список (ListBox) и поле со списком (ComboBox) | Знакомство с другими элементами управления | Элемент управления CommonDialog | Панель инструментов Toolbar | Работа с несколькими формами |
<== предыдущая страница | следующая страница ==>
Структура проекта. Окно Project Explorer.| Сценарий на Web-странице

mybiblioteka.su - 2015-2024 год. (0.009 сек.)