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

Интерфейс класса

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Аннотация: В предыдущих лекциях мы начали строить некоторое ПО, основываясь на существующих элементах. Теперь мы собираемся сделать нечто большее, рассмотрев, как можно использовать ранее написанные классы. Это даст возможность по-новому взглянуть на понятие класс – фундамент всего дальнейшего программирования. Мы введем в рассмотрение новые концепции – интерфейса и контракта.

Система, содержащая примеры этой лекции, находится в подкаталоге 04_interface каталога examples ПО Traffic.

4.1. Интерфейсы

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

Определения: Клиент, Поставщик, Интерфейс

Клиентом программных механизмов (client) является система любого вида: человек; система, не являющаяся программной; элемент программной системы. Используемое клиентами ПО является для них поставщиком (supplier).

Интерфейс (interface) программных механизмов – это описание, позволяющее клиентам использовать механизмы поставщика.

Говоря неформально, интерфейс части ПО – это описание того, как остальной мир может "общаться" с этой частью ПО.

Определение говорит о "некотором интерфейсе" (an interface), а не о вполне определенном интерфейсе (the interface). Есть несколько различающихся видов интерфейса. Особенную важность представляют такие два вида, как:

  • интерфейс пользователя (user interface), когда предполагаемыми клиентами являются люди, использующие ПО;
  • программный интерфейс (program interface), предназначенный для клиентов, которые сами являются программными элементами.

В качестве примера интерфейса пользователя рассмотрим Web-браузер, частично показанный ниже. Его пользовательский интерфейс задает описание того, что могут люди делать, используя этот браузер. Интерфейс включает:

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

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

Интерфейс пользователя

Рис. 4.1. Интерфейс пользователя

Такой пользовательский интерфейс называется графическим, поскольку он включает картинки и другие визуальные диалоговые элементы, такие как кнопки и меню. В программировании, склонном к акронимам, такой интерфейс называют GUI (Graphical User Interface, произносится "Gooey" или просто UI – "You-I").

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

Если вы имели дело с компьютерными системами, то, возможно, встречались с такими, интерфейс которых с трудом можно назвать дружественным. Вероятно, вы согласитесь, что проектирование GUI – это важная часть проектирования ПО.

Но для нашего обсуждения более важен второй вид интерфейсов – программные интерфейсы. Здесь также используется трехбуквенный акроним API (Abstract Program Interface, старая расшифровка для буквы A – "Application").

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

4.2. Классы

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

  • город, где операции доступа и модификации могли включать поиск характеристик транспортной системы, добавление новых транспортных средств. В качестве примера использовался город Париж, но можно получить объект, представляющий любой другой город, если обеспечить для него релевантные данные;
  • маршрут путешествия. И снова можно иметь различные маршруты, а не только объект Route1, используемый в примерах;
  • список автомобилей, остановившихся на красный свет светофора. Опять речь идет о множестве объектов;
  • элементы GUI, такие как кнопки и окна на экране компьютера. Их может быть довольно много.

Внутри каждой категории объектов, например, для всех объектов, представляющих города, существует сильная схожесть. Операции, применимые к объекту Paris, будут также применимы к любому другому объекту – городу, скажем New_York или Tokyo. Эти операции не применимы к объектам другой категории, например, к объекту Route1. Аналогично операция добавления новой ветки в маршрут, допустимая для Route1, допустима и для всех других объектов, задающих маршрут.

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

"Класс" на самом деле – это технический термин. Характеризует объекты данного класса общее множество применимых операций – методов (features). Отсюда следует определение:

Определение: Класс

Класс является описанием множества объектов периода выполнения, к которым применимы одни и те же методы.

В программах имена классов всегда будем писать заглавными буквами: CITY, ROUTE, CAR_LIST, WINDOW. Имена объектов всегда будут строиться из строчных букв, но если речь идет о предопределенных объектах, таких как Paris, то их имена будут начинаться с заглавной буквы.

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

Определения: Экземпляр, Генерирующий класс

Если объект O – один из объектов, заданных классом C, то O является экземпляром (instance) класса C, и C является генерирующим классом (generating class) для O.

Класс CITY представляет все возможные города (поскольку мы решили моделировать их в нашей программе). Объект Paris обозначает экземпляр этого класса.

Отношение между классами и объектами является типичным отношением между категорией и ее членами. "Human" – это категория, описывающая людей, "Socrates" – человек, член этой категории. Моделируя эти понятия в программной системе, мы бы создали класс HUMAN, и один из объектов этого класса мог быть назван Socrates.

Существенное различие между объектами и классами проявляется в ПО. Классы являются статическими, объекты – динамическими.

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

Как следствие, термин "объект времени выполнения", появляющийся в определении класса, является избыточным, поскольку объекты по определению могут существовать только в период выполнения ("run time"). С этого момента мы будем просто говорить "объект", не подчеркивая его динамическую сущность.

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

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Ирина Калашникова
Ирина Калашникова

Добрый день, подскажите на тест после каждой лекции сколько дается попыток? 

Наталья Король
Наталья Король

Что это значит?) Зранее спасибо)