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

Создание объектов и выполняемых систем

Аннотация: После экскурсии в математические основания вернемся к технике программирования. Обсуждаются вопросы создания объектов и процесс выполнения программной системы.
Ключевые слова: Paris, программа, псевдокод, синтаксически корректный, методология разработки, класс, запрос, команда, highlighting, идентификатор, end-station, значение, опыт, объект, присоединение, время выполнения, имя класса, состояние программы, вызов метода, display, прерывание, feature, self-reference, обработка исключений, предусловие, эволюция, инвариант, over-current, импликация, операнд, связывание объектов, структура данных, traffic, условные операторы, вычисление выражения, операция импликации, setter, указание типа, интерфейс, ключевое слово, очередь, поле класса, point, плоскость, строковый тип, постусловие, последовательность операторов, ссылка, связь, потеря памяти, мобильный телефон, память, free, операционная система, сборка мусора, множества, система типов, освобождение памяти, реализация языка, аргумент, автоматическая сборка мусора, транспортная, виртуальная память, запуск процесса, подпрограмма, Ключевые концепции, потребности пользователей, среда разработки, STA, console, arg, арифметическое выражение, числовой тип, alias, синоним, базисный тип, унарные операции, операции отношения, элемент языка, псевдоним, объектно-ориентированное программирование, void, detachable, репрезентативность, связная структура, стандарт языка, certify, attachment, pattern, capping, безопасность, компилятор, argument, тело процедуры, расширяемость

В предыдущих примерах использовались имена, такие как Paris и Route1, для получения доступа к объектам, которые кем-то были созданы для нас, — и все это было довольно загадочно. Настало время разобраться, как самим создавать свои собственные объекты. Создание объектов — центральная тема этой лекции — представляет интересный механизм с важными следствиями. Это рассмотрение приведет нас к общей картине выполнения систем: как программа запускается, как она выполняется и как завершается.

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

Три линии парижского метро завершаются на южной стороне примерно в одном районе, но довольно далеко для пешеходных переходов. Жителям этого района для перехода с одной линии на другую приходится ехать в центр, там выполнять пересадку на другую линию. Цель fancy_line — облегчить их участь, создав кольцевую линию, если и не в реальном городе, то хотя бы в нашем виртуальном мире.

6.1. Общие установки

Наша система для этой лекции называется creation. Откройте ее теперь, используя те же приемы, что и в предыдущих лекциях. Перейдите к классу, предмету данного обсуждения, LINE_BUILDING, который изначально выглядит так:

class LINE_BUILDING inherit
  TOURISM
feature
    build_a_line
      — Построить воображаемую линию и подсветить ее на карте
        do
          Paris.display
          — "Создать новую линию, заполнить ее станциями и добавить в Paris"
          — "Подсветить новую линию на карте"
        end
end

Строка — "Создать новую линию, заполнить ее станциями и добавить в Paris" и строка, следующая за ней, начинаются с двух дефисов и, следовательно, являются комментариями. Но это комментарии особого рода, известные как псевдокод, означающие, что они замещают реальный программный текст — код, который мы собираемся поместить в этом месте, разрабатывая программу.

Определение: Псевдокод
Псевдокод является неформальным текстом, замещающим программные элементы, которые будут добавлены позднее.

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

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

Псевдокод будет использовать соглашения, иллюстрируемые примером.

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

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

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

6.2. Сущности и объекты

Наш класс нуждается в компоненте (запросе), представляющем линию, которую мы собираемся построить. Мы назовем этот запрос fancy_line. Это даст возможность начать процесс детализации, превращая часть псевдокода (часть первой строки и полностью вторую) в фактический код и делая напоминание более точным:

class LINE_BUILDING inherit
  TOURISM
feature
    build_a_line
        -Построить воображаемую линию и подсветить ее на карте.
      do
        Paris.display
        -"Создать fancy_line, заполнить ее станциями"
        Paris.put_line (fancy_line)
        fancy_line.highlight
      end
    fancy_line: LINE
        — Воображаемая (но желательная) линия Парижского метро
end

Рассмотрим строчку, следующую за псевдокодом. Оператор "Paris.put_line (fancy_line)" заменил текст псевдокода "добавить в Paris". Команда put_line, доступная для объектов класса CITY, позволяет добавить в "город" линию со станциями. Следующий за ним оператор использует команду highlight для уточнения второй строки исходного псевдокода.

Сразу же после выполнения процедуры build_a_line идентификатор fancy_line будет обозначать экземпляр класса LINE, задающий линию метро.

Идентификаторы могут обозначать многие вещи: они могут быть именами классов, подобно STATION, или методов, подобно i_th. Идентификатор, такой как fancy_line, чья роль — обозначать значение объекта, существующего в период выполнения, называется сущностью.

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

 В период выполнения: сущность и связанный с ней объект

Рис. 6.2. В период выполнения: сущность и связанный с ней объект

В данном случае сущность fancy_line является именем атрибута, но нам придется встречаться и с другими видами сущностей.

Если, в некоторый момент выполнения сущность представляет объект, мы будем говорить, что сущность присоединена к объекту

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

Детализируем существующие отношения.

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

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

  • объект представляется прямоугольником с внутренними прямоугольниками, задающими поля объекта;
  • рядом с каждым объектом, обычно ниже, приводится в скобках имя класса этого объекта (на рисунке LINE).
Кирилл Юлаев
Кирилл Юлаев
Федор Антонов
Федор Антонов

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

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

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

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