Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 22.05.2023

Просмотров: 538

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

С наследованием связан особый тип полиморфизма – включение (чистый полиморфизм). Данный тип полиморфизма реализуется при вызове виртуальных функций для указателей (ссылок) на объекты. При открытом наследовании указатель родительского класса может указывать на объекты всех подклассов. Если виртуальная функция имеет различные реализации в подклассах, то выбор, какую ее реализацию вызывать, определяется с учетом выяснения подтипа на этапе выполнения. То есть виртуальная функция вызывается в зависимости не от типа указателя, а от реального типа объекта, на который он указывает. Данная ситуация называется механизмом позднего связывания.

Рассмотрим две проблемы, которые возникают при множественном наследовании: конфликт имен между суперклассами и повторное наследование.

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

Повторное наследование возникает тогда, когда при задании более чем одного базового класса какой-либо класс дважды является базовым для другого класса.

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

4.4. Зависимость

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

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

4.5. Инстанцирование

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


4.6. Переменные и операции класса

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

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

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

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

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


Между интерфейсами могут существовать отношения обобщения, ассоциации и зависимости, аналогичные одноименным отношениям между классами. Между классом и интерфейсом могут существовать отношения реализации и зависимости. Будем говорить, что класс реализует (или поддерживает) интерфейс, если он содержит методы, реализующие все операции интерфейса. Интерфейс может реализовываться несколькими классами, а класс может реализовывать несколько интерфейсов. С другой стороны, класс может зависеть от нескольких интерфейсов, при этом предполагается, что какие-то классы эти интерфейсы реализуют.


4.8 Группирование классов

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

Пакет не имеет операций или состояний в явном виде, они содержатся в нем неявно в описаниях агрегированных классов.

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

Заключение

Основные выводы по работе.

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

Объектно-ориентированный подход основывается на определенных принципах: абстрагирование, инкапсуляция, модульность, иерархичность (главные); типизация, параллелизм, сохраняемость (дополнительные).

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

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


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

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

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

Идентичность – это такое свойство объекта, которое отличает его от всех других объектов.

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

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

Структура и поведение схожих объектов определяет общий для них класс.

Большинство объектно-ориентированных языков поддерживает следующие виды отношений: ассоциация (смысловая связь); агрегация ( частный случай ассоциации); обобщение (наследование); зависимость (использование); инстанцирование (подстановка фактических параметров шаблона на место формальных).

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

Литература

  1. Сергей Бобровский. История объектно-ориентированного программирования. http://www.info-system.ru/retro/po/po_object_prog.htm
  2. Бадд Т. Объектно-ориентированное программирование в действии. СПб.: "Питер", 1997.
  3. Буч Г. Объектно-ориентированное проектирование с примерами применения. – М.: Конкорд, 1992.
  4. Пол А. Объектно-ориентированное программирование на С++. – СПб.; М.: "Невский диалект" – "Издательство Бином", 1999.
  5. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. – М.: Финансы и статистика, 2000
  1. Сергей Бобровский. История объектно-ориентированного программирования

  2. Буч Г. Объектно-ориентированное проектирование с примерами применения

  3. Фридман А.Л. Основы объектно-ориентированной разработки программных систем

  4. Бадд Т. Объектно-ориентированное программирование в действии.

  5. Пол А. Объектно-ориентированное программирование на С++.

  6. Фридман А.Л. Основы объектно-ориентированной разработки программных систем

  7. Буч Г. Объектно-ориентированное проектирование с примерами применения.

  8. диапазон значений и определенную точность и означающий число градусов по Цельсию.

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

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

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

    Центральной идеей абстракции является понятие инварианта. Инвариант – это некоторое логическое условие, значение которого (истина или ложь) должно сохраняться. Для каждой операции объекта можно задать предусловия (т.е. инварианты, предполагаемые операцией) и постусловия (т.е. инварианты, которым удовлетворяет операция).

    Рассмотрим инварианты, связанные с операцией currentTemperature. Предусловие включает предположение, что датчик установлен в правильном месте в теплице, а постусловие – что датчик возвращает значение температуры в градусах Цельсия.

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

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

    2.2. Инкапсуляция

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

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

    Пример?. Для программиста, использующего стек, важно только то, что он может помещать и извлекать нужные ему объекты с помощью ? Буч Г. Объектно-ориентированное проектирование с примерами применения

  9. Бадд Т. Объектно-ориентированное программирование в действии

  10. Буч Г. Объектно-ориентированное проектирование с примерами применения

  11. Пол А. Объектно-ориентированное программирование на С++

  12. Фридман А.Л. Основы объектно-ориентированной разработки программных систем