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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

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

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

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

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

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

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

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

 

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

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

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

· Цвет кузова

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

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

· Методами

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

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

 

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

 

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

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

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

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

 

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



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 166; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.238.242.168 (0.007 с.)