Тверской государственный университет
Опубликован: 03.10.2011 | Доступ: свободный | Студентов: 3284 / 60 | Оценка: 4.33 / 3.83 | Длительность: 19:48:00
ISBN: 978-5-9963-0573-5
Лекция 3:

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

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

2.2. Объекты и вызовы

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

  • Прежде всего, отобразить карту Парижа, включая карту метро.
  • Во-вторых, подсветить на карте расположение музея Лувр, о котором вы все, конечно, слышали.
  • Затем подсветить на карте одну из линий метро – линию 8.
  • Наконец, поскольку ваш предусмотрительный агент подготовил маршрут для первого путешествия, выполнить анимацию этого маршрута, показывая небольшое изображение путешественника, прыгающего на каждой остановке.

Редактирование текста

Настало время программирования!

Создадим первую программу

В этом разделе вас попросят заполнить текст вашей первой программы, а затем выполнить ее.

Необходимо отредактировать текст класса PREVIEW, модифицировав компонент explore. Его текст должен выглядеть так:

Во избежание недоразумений при вводе текста следуйте следующим правилам.

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

    Рис. 2.2.
  • Для достижения отступа не используйте повторяющиеся пробелы, которые могут внести путаницу в выравниваемый текст; применяйте символ табуляции Tab.
  • В Paris.display и далее на следующих строчках вы видите символ ".", разделяющий два слова. В отличие от точки, завершающей предложение, за ней не следует пробел.

Заметьте, что фактически не нужно все печатать. В EiffelStudio встроен механизм дополнения, который предлагает список возможных продолжений начального текста, напечатанного вами. Как только вы поставите точку, напечатав "Paris.", студия предложит выпадающее менюсписок возможностей – список тех компонентов, что применимы к Paris. Можно прокрутить этот список и добраться до компонента display. Если список длинный, то проще напечатать одну или две первые буквы имени компонента, например d от display; тогда список обновится, и вы сразу же попадете на имя, начинающееся с d:


Рис. 2.3.

Меню дополнений автоматически появляется в некотором контексте, как мы уже видели в случае с напечатанной точкой. Если же меню не появляется, а помощь вам требуется, то нажмите пару "горячих" клавиш CTRL + Space.

После внесения изменений стоит их сохранить, для чего выберите в меню File пункт Save или нажмите Control +S. Если вы забудете сохранить изменения, студия напомнит об этом в нужный момент.

Выполнение первой программы

Запустим программу на выполнение. Подробности можно найти в приложении. Все, что нужно, – это нажать кнопку Run, расположенную справа в верхней части окна. В первый раз, когда вы сделаете это, появится диалоговое окно, предупреждающее, что программу перед выполнением необходимо предварительно скомпилировать:


Рис. 2.4.

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

Это полностью автоматический процесс. Некоторые предпочитают забывать о компиляции, неявно полагая, что компьютер выполняет непосредственно написанную ими программу. Многие ставят флажок в появившемся диалоговом окне, чтобы избежать появления напоминания о компиляции в будущем. Лично я не включаю этот флажок, поскольку предпочитаю явно запускать компиляцию программы, нажимая на кнопку Compile или горячую клавишу F7. Свои предпочтения оформите позже, а в первый раз ответьте "Yes" в диалоговом окне.

Если вы забыли сохранить изменения, студия обнаружит это и предложит сообщение, подобное предыдущему. Здесь снова можно включить флажок, позволяющий автоматически сохранять изменения перед запуском.

Компиляция стартует. Студия должна скомпилировать не только класс PREVIEW с его единственным компонентом explore, но и все, что необходимо, – возможно, всю систему Traffic и поддерживающие библиотеки. Это зависит от того, установлена ли на вашем компьютере уже скомпилированная версия. Полная компиляция занимает время, но это делается только один раз. Все последующие компиляции будут компилировать только сделанные изменения, так что будут выполняться практически мгновенно, даже если вся программа большая.

Если вы что-то не так напечатали, появятся сообщения об ошибках, которые можно исправить и снова запустить процесс компиляции и выполнения.

Вы увидите следующую последовательность событий.

  1. В результате выполнения первой строки компонента explore - Paris.display -появится карта города, включающая структуру линий метро:
  2. В течение 5 секунд все останется без изменений, а затем, как результат действия второй строки, Louvre.spotlight, подсветится музей Лувр, расположенный рядом со станцией метро Palais Royal:

    Рис. 2.5.

    Рис. 2.6.
  3. Еще через 5 секунд подсветится линия 8 в сети метро, как результат выполнения третьей строки нашего компонента, Line8.highlight:

    Рис. 2.7.
  4. После очередной короткой задержки выполнение 4-й строки, Route1.animate, приведет к появлению человечка, передвигающегося вдоль линии метро по выбранному маршруту.

Рис. 2.8.

Однажды подготовленная программа может выполняться многократно по вашему желанию. Если вы не измените программу, она будет просто запускаться на выполнение. Если же вы измените ее, EiffelStudio перекомпилирует ее, запросив подтверждения, при условии, что вы не включили автоматическую компиляцию при изменениях. После компиляции измененную программу можно снова запустить на выполнение.

Анализ программы

Выполнение программы является результатом действия 4-х строк, вставленных в текст компонента explore. Давайте посмотрим, каков их точный смысл. Техника, использованная в этой простой программе, фундаментальна, поэтому убедитесь, что вы все понимаете в следующих ниже объяснениях.

Первая строка использует объект, известный программе как Paris, и компонент, известный как display.

        Paris.display
        

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

x.f
        

Почувствуй семантику

Вызов компонента

Эффект времени выполнения вызова компонента x.f состоит в применении компонента с именем f, принадлежащего соответствующему классу, к объекту, который обозначает x в момент выполнения.

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

Вызов компонента – основа вычислений, повторяю еще и еще раз – это то, что делают наши программы во время выполнения.

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

Почувствуй стиль

Имена предопределенных объектов

Имена предопределенных объектов всегда начинаются с буквы в верхнем регистре, как например Paris, Louvre, Route1.

Имена определяемых вами объектов должны начинаться с буквы в нижнем регистре (по правилам стиля).

Где же определены эти предопределенные объекты? Вы уже догадались – в классе TOURISM, который наследует ваш класс PREVIEW. Это и есть то место, куда мы поместили "магию", благодаря которой ваша программа, простая сама по себе, может получать важные и интересные результаты.

Одним из компонентов класса, применимых к объекту, который представляет город, такой как Paris, является display. Этот компонент ответственен за показ на экране текущего состояния города.

После применения display к объекту Paris программа выполнит следующий вызов компонента:

        Louvre.spotlight
        

Целевым объектом здесь является Louvre, еще один предопределенный объект (его имя начинается с заглавной буквы), обозначающий музей Лувр. Компонентом служит spotlight, подсвечивающий соответствующее место на карте.

Затем, для подсветки 8-й линии метро, мы выполняем следующий вызов:

Line8.highlight
        

Компонент highlight в соответствии со своим названием подсвечивает целевой объект – объект, вызвавший метод, в данном случае Line8, представляющий линию метро с номером 8.

На заключительном шаге еще один предопределенный объект вызывает свой компонент:

Route1.animate
        

Целевым объектом является Route1, представляющий предопределенный маршрут, – можно считать, что он был подготовлен вашим турагентом. Компонент animate будет показывать маршрут, передвигая фигурку по ходу движения.

Для того чтобы программа работала, как ожидается, используемые в ней компоненты – display, spotlight, highlight, animate – должны делать немного больше, чем просто отображать что-то на экране. Причина в том, что компьютеры быстры, очень быстры. Так что, если бы единственным эффектом выполнения операции Paris.display было отображение карты Парижа, то следующая операция Louvre.spotlight выполнялась бы через мгновение после первой и вы бы не успели заметить на экране результат первой операции, показывающий карту Парижа без подсветки Лувра. Во избежание этого все компоненты устроены так, что после показа на экране того, что они должны показать, в исполнении программы наступает пауза, длящаяся 5 секунд.

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

Примите поздравления! Вы написали и выполнили первую программу и, более того, поняли, что она делает.

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

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

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

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

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