Опубликован: 03.10.2011 | Уровень: для всех | Доступ: свободно | ВУЗ: Тверской государственный университет
Лекция 3:

Работа с объектами

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >

2.3. Что такое объект?

Наш пример программы работает с объектами – четыре из них называются Paris, Louvre, Line8 и Route1. Работа с объектами – это главное, что делают все программы. Понятие объекта настолько фундаментально, что дало имя самому стилю программирования, используемому в этой книге и широко применяемому в программной индустрии: Объектно-Ориентированное, часто заменяемое короткой аббревиатурой, ОО-программирование.

Объекты, которые можно ударить, и те, которые бить невозможно

Что следует понимать под словом "объект"? Мы используем для технических целей слово из обычного языка – вполне обыденного языка, ибо трудно придумать более общее понятие, чем объект. Каждый может дать непосредственное толкование этого понятия, в этом есть как преимущество, так и предмет потенциального непонимания.

Польза в том, что использование объектов в нашей программе позволяет организовать ее как модель реальной системы с реальными объектами. Когда вам доведется быть в Париже, вы убедитесь, что Лувр – реальный объект; если взгляд вас не убедит, то можно подойти и "пнуть" его пяткой (учтите, покупка этой книги не дает права на оплату медицинских расходов). Наш второй объект, Paris, столь же реален в жизни и представляет целый город.

Но удобство использования программных объектов для представления физических объектов не должно приводить к недоразумениям двух видов. Реальность программного объекта не распространяется далее чем на нематериальную коллекцию данных, хранящихся в памяти компьютера. Наша программа может установить их так, чтобы операции над данными моделировали операции над физическим объектом. Например, Bus48.start представляет операцию, приводящую автобус в движение, – но эта связь мысленная, существующая в воображении. Хотя наша программа использует объект Paris, но это не настоящий Париж. "Никто не может поместить Париж в бутылку", – говорит старая французская поговорка, и вам не удастся поместить Париж в программу.

Никогда не забывайте, что слово "объект", используемое в этой книге, означает программное понятие. Некоторые программные объекты имеют аналоги во внешнем мире, но это не обязательно, как мы увидим, переходя к более сложным программистским приемам. Даже наш последний в четверке объект Route1 представляет маршрут – мысленный план путешествия. Этот план предполагает поездку на метро от станции Лувр (также известной как "Пале-Рояль") до станции Сен-Мишель. Как показано на рисунке, этот маршрут имеет три этапа.

Маршрут в метро

Рис. 2.9. Маршрут в метро
  • Поездка по линии 7 от станции "Louvre" до станции "Chatelet" (3 остановки).
  • Переход на линию RER-1.
  • Поездка от станции "Chatelet" до "Saint-Michel" по линии RER-1 (1 остановка).

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

Компоненты класса (features), команды и запросы

Что делает объект объектом – не то, что он может иметь физического двойника, но то, что с ним можно манипулировать в нашей программе, используя множество хорошо определенных операций, называемых методами (features, routines).

Некоторые из методов, применимых к объекту "маршрут", включают вопросы, которые мы можем задавать, например:

  • Какова начальная точка маршрута? Какова конечная точка? (В нашем примере для маршрута Route1 таковыми являются Louvre и Saint-Michel)
  • Как передвигаемся на маршруте: пешком, на автобусе, на автомобиле, метро или маршрут смешанный? (В примере – метро)
  • Сколько этапов включает маршрут? (В примере – три)
  • Какие линии метро используются, если они есть в маршруте? (В примере – линии 7 и RER-1.)

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

Есть методы другого вида; они называются командами (commands). Команды позволяют изменять свойства некоторых объектов. Мы уже использовали команды: в нашей первой программе Paris.display изменяет образ, показываемый на экране. Фактически, все четыре метода, вызываемые в нашей первой программе, являются командами. Вот примеры еще нескольких команд, допустимых для маршрутов.

  • Удалить (Remove) – первый этап маршрута или последний.
  • Присоединить (Append) (добавить в конец) – новый этап, имеющий начало в конечной точке маршрута. В нашем примере с маршрутом Route1 новый этап может идти от станции "Сен-Мишель" до станции "Порт-Рояль". В этом случае ответы на запросы изменятся, поскольку маршрут будет включать 4 этапа и 3 линии метро.
  • Добавить в начало (Prepend) новый этап, имеющий окончание в начальной точке маршрута. В нашем примере с маршрутом Route1 новый этап может идти от станции "Опера" до станции "Лувр". Число станций при этом изменится, но число линий останется прежним, поскольку станция "Opera" расположена на линии 7.

Все эти операции изменяют маршрут и, следовательно, являются командами.

Мы можем, кстати, точно определить смысл высказывания, что команда "изменяет" объект: она изменяет видимые свойства объекта. Видимые свойства – это те свойства, которые доступны через запросы.

Например, если вы спросите о числе этапов на маршруте (запрос), затем присоедините этап (команда) и затем снова выполните запрос, то новый ответ будет на единицу больше предыдущего. Если же выполните команду "Remove", запрос после этого вернет число на единицу меньше, чем до выполнения команды.

Знаки на въезде и выезде из туннеля в Германии на автобане являются хорошей иллюстрацией различия между командами и запросами. Знак на въезде в туннель выглядит так:

Команда на въезде в туннель

Рис. 2.10. Команда на въезде в туннель

"Licht!", говорят вам. Включите ваши фары! Безошибочно воспринимается как команда.

На выезде тон изменяется на более мягкий:

Команда на выезде из туннеля

Рис. 2.11. Команда на выезде из туннеля

"Licht?": не забыли выключить фары? Просто запрос.

Этот запрос является прекрасным примером проектирования "интерфейса пользователя", результатом тщательных исследований и стремлением избежать распространенных ошибок. Такой же подход должен быть и при проектировании интерфейса в программных системах. В частности, что было бы, если бы знак на выезде был командой "Выключите ваши фары", которой дисциплинированные водители должны были бы подчиниться даже в ночное время? Запрос же не заставляет действовать, являясь полезным напоминанием.

Объекты как машины

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

Вероятно, трудно представить: как можно маршрут в метро представить в виде машины? Но фактически ответ известен: наши машины характеризуются множеством операций – командами и запросами, доступными для пользователей машины. Вспомните DVD-плейер с такими командами, как "включить", "переключить дорожку", "выключить" и с запросом "число проигранных дорожек". В нашей программе объект Route1 в точности подобен DVD-плейеру: машине с командами и запросами.

Рисунок напоминает об этом соответствии: прямоугольные кнопки слева представляют команды; эллиптические кнопки справа являются запросами.

Объект "route", изображенный в виде машины

Рис. 2.12. Объект "route", изображенный в виде машины

Объекты, такие как Route1, можно рассматривать с двух точек зрения.

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

Эти две точки зрения не являются противоречащими, они дополняют друг друга. Операциям, которые машина выполняет, доступны данные объекта. Операции могут модифицировать данные.

Объекты: определение

Обобщая дискуссию об объектах, дадим точное определение, которое будет служить нам на протяжении всей книги.

Определение: объект

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

В этом определении и в остальной части обсуждения под "получением доступа" понимается возможность получать ответы на вопросы относительно данных без их модификации (мы могли бы также говорить "запрашивать данные").

Слова "доступ" и "модификация" отражают уже отмеченное различие между двумя фундаментальными видами операций.

Определения: метод, запрос, команда

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

Примерами команд были display для объекта Paris и spotlight – для Louvre. Запросы также рассматривались, хотя еще не встречались в тексте программ.

Запросы и команды работают на существующих объектах. Это означает, что нам нужен третий вид операций: операции создания, первоначально дающие нам объекты. На данный момент беспокоиться не стоит, поскольку все объекты, необходимые в этой лекции, уже созданы – Paris, Louvre, Route1 … – как часть "магии" класса TOURISM. Во время выполнения ваша программа сможет использовать их. Вскоре (в лекции 6) вы научитесь создавать свои собственные объекты.

Там же будет объяснено, почему понятие "машина" относится не только к объектам, но и к классам.

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Кирилл Юлаев
Кирилл Юлаев
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?