Опубликован: 17.10.2005 | Доступ: свободный | Студентов: 8825 / 590 | Оценка: 4.38 / 4.10 | Длительность: 41:16:00
ISBN: 978-5-7502-0255-3
Специальности: Программист
Лекция 7:

Статические структуры: классы

Ключевые концепции

  • Фундаментальная концепция объектной технологии основана на понятии класса. Класс это абстрактный тип данных, частично или полностью реализованный.
  • Класс может иметь экземпляры, называемые объектами.
  • Нельзя путать объекты (динамические элементы) с классами (статическим описанием свойств, общих для множества объектов времени выполнения).
  • При последовательном подходе к объектной технологии каждый объект является экземпляром класса.
  • Класс одновременно служит модулем и типом. Оригинальность и мощь ОО-модели следует частично из интеграции этих понятий.
  • Класс характеризуется компонентами, включая атрибуты, представляющие поля в экземплярах класса, и подпрограммы, представляющие вычисления с участием данных экземпляров. Подпрограмма может быть функцией возвращающей результат или процедурой, если результат не возвращается.
  • Базовым механизмом ОО-вычислений является вызов компонентов (обращение к компонентам) класса. Вызов компонента применяет компонент к экземпляру класса (возможно с аргументами).
  • При вызове именованных компонентов используется точечная нотация, а при вызове компонент-операций - инфиксная или префиксная нотация.
  • Каждая операция относительна к "текущему экземпляру" класса.
  • Для клиентов класса (других классов, которые используют его компоненты) атрибут ничем не отличается от функции без аргументов, в соответствии с принципом унифицированного доступа.
  • Исполняемый ансамбль классов называется системой. Система содержит корневой класс и все классы, которые необходимы корневому прямо или косвенно через клиентские отношения или наследование. Выполнение системы сводится к созданию экземпляра корневого класса и вызову процедуры создания для данного экземпляра.
  • Системы имеют децентрализованную архитектуру. Порядок действий несущественен для разработки.
  • Уточнение процесса сборки достигается с помощью простого языка описания систем Lace. В спецификации Lace, называемой файлом Ace, указывается корневой класс и набор каталогов, в которых размещены кластеры системы.
  • Процесс компоновки может быть автоматизирован без использования Make-файлов и директив Include.
  • Механизм скрытия информации требует гибкости. Наряду с неограниченным доступом и полным скрытием может потребоваться экспорт только для части клиентов. Атрибуты могут быть доступны только для чтения, для чтения и ограниченной модификации и в режиме полного доступа.
  • Экспорт атрибута означает доступ к нему только для чтения. Модификация требует вызова соответствующей экспортированной процедуры.
  • Селективный экспорт дает возможность группам родственных классов обеспечить специальный режим доступа для каждого компонента.
  • Необходимость в надстройках над классами - супермодулей - отсутствует. Классы должны оставаться независимыми программными компонентами.
  • Модульный стиль ОО-разработок требует большого числа небольших подпрограмм. Потенциальная опасность снижения производительности может быть достигнута путем встраивания этих подпрограмм оптимизирующим компилятором. Ответственность за поиск таких фрагментов следует возложить на компилятор, а не на разработчиков.

Библиографические замечания

Понятие класса пришло из языка Simula 67 (см. библиографические ссылки к лекции 17 курса "Основы объектно-ориентированного проектирования"). Класс в Simula является одновременно модулем и типом, однако эта особенность специально не подчеркивалась и была утрачена у преемников Simula.

Принцип единственности цели может рассматриваться как аналог приема, хорошо известного в математической логике и теоретической компьютерной науке: редукция (currying). Редукция функции двух переменных f означает замену ее функцией g одной переменной, возвращающей в качестве результата функцию одной переменной. В результате редукции для любых допустимых значений x и y:

(g (x)) (y)= f (x, y)

Редуцировать функцию это, другими словами, специализировать ее по первому аргументу. Этот прием аналогичен использованной в данной лекции замене традиционной процедуры rotate, имеющей два параметра:

rotate (some_point, some_angle)

на функцию с одним параметром, имеющую цель:

some_point.rotate (some_angle)

В [M 1990] описана редукция и некоторые из ее применений в информатике, в частности, при формальном изучении синтаксиса и семантики языков программирования. Редукция будет еще рассматриваться при обсуждении графического интерфейса пользователя (лекция 14 курса "Основы объектно-ориентированного проектирования").

В отличие от положений данной лекции в некоторых языках объект рассматривается как языковая конструкция, а не как понятие времени выполнения. Такой подход предназначен для исследовательских целей и не нуждается в понятии класса. Наиболее известным представителем этой школы является язык Self [Chambers 1991], в котором вместо классов используются "прототипы".

Детали соглашения об инфиксных и префиксных операциях, в частности таблица приоритетов, приведены в [M 1992].

James McKim обратил мое внимание на последний аргумент в пользу соглашения Result (использование для постусловий).

Упражнения

У7.1 POINT как абстрактный тип данных

Напишите спецификацию абстрактного типа данных для описания точки на плоскости.

У7.2 Завершение реализации POINT

Завершите исходный текст класса POINT. Заполните недостающие фрагменты, добавьте процедуру rotate (вращение точки вокруг начала координат), а также другие компоненты, которые считаете необходимыми.

У7.3 Полярные координаты

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

Александр Шалухо
Александр Шалухо
Анатолий Садков
Анатолий Садков

При заказе pdf документа с сертификатом будет отправлен только сертификат или что-то ещё?