Бертран Мейер - Основы объектно-ориентированного программирования

Тут можно читать онлайн Бертран Мейер - Основы объектно-ориентированного программирования - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая околокомпьтерная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Бертран Мейер - Основы объектно-ориентированного программирования краткое содержание

Основы объектно-ориентированного программирования - описание и краткое содержание, автор Бертран Мейер, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

В книге Бертрана Мейера рассматриваются основы объектно-ориентированного программирования. Изложение начинается с рассмотрения критериев качества программных систем и обоснования того, как объектная технология разработки может обеспечить требуемое качество. Основные понятия объектной технологии и соответствующая нотация появляются как результат тщательного анализа и обсуждений. Подробно рассматривается понятие класса - центральное понятие объектной технологии. Рассматривается абстрактный тип данных, лежащий в основе класса, совмещение классом роли типа данных и модуля и другие аспекты построения класса. Столь же подробно рассматриваются объекты и проблемы управления памятью. Большая часть книги уделена отношениям между классами – наследованию, универсализации и их роли в построении программных систем. Важную часть книги составляет введение понятия контракта, описание технологии проектирования по контракту, как механизма, обеспечивающего корректность создаваемых программ. Не обойдены вниманием и другие важные темы объектного программирования – скрытие информации, статическая типизация, динамическое связывание и обработка исключений. Глубина охвата рассматриваемых тем делает книгу Бертрана Мейера незаменимой для понимания основ объектного программирования.

Основы объектно-ориентированного программирования - читать онлайн бесплатно полную версию (весь текст целиком)

Основы объектно-ориентированного программирования - читать книгу онлайн бесплатно, автор Бертран Мейер
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

class C feature

...

end

class COMPOSITE2 feature

x: C

y: expanded C

reattach is

do x := y end

end

При вызове компонента reattach в результате присваивания x будет присоединен к объекту, являющемуся клоном объекта y .

Следующая таблица обобщает семантику присоединения изученных случаев:

Тип цели x Тип источника y
Ссылочный Развернутый
Ссылочный Ссылочное присоединение Клонирование: эффект x := clone(y)
Развернутый Копирование: эффект x.copy(y) Ошибка, если y - void Копирование: эффект x.copy(y)

Таблица 8.1.Эффект присоединения x:=y

Проверка эквивалентности

Семантика операций, проверяющих эквивалентность ( = и /= ) должна быть совместимой с семантикой присваивания. Наряду с операцией = можно использовать и equal . Какую из этих операций следует применять, зависит от обстоятельств.

[x].(E1) Если x и y - ссылки, их можно тестировать как на ссылочную эквивалентность, так и на объектную эквивалентность при условии, что ссылки не void . Мы определили операцию x = y , как обозначающую ссылочную эквивалентность в этом случае. Функция equal , введенная для проверки объектной эквивалентности, дополнена и применима, когда x или y - void .

[x].(E2) Если x и y - развернутого типа, единственный смысл имеет объектное сравнение.

[x].(E3) Если x - ссылка, y - развернутого типа, объектное сравнение - единственно возможный смысл операции и в данном случае. Сравнение расширяется, допуская случай, когда x - void , возвращая значение false в этой ситуации, поскольку y не может быть void .

Этот анализ дает желаемую интерпретацию равенства = во всех случаях. Для объектного сравнения всегда доступна функция equal , расширенная на случаи, когда один или оба операнда принимают значение void . Следующая таблица подводит итог семантике сравнения:

Тип цели x Тип источника y
Ссылочный Развернутый
Ссылочный Ссылочное сравнение equal(x,y) объектное сравнение, если x не void, иначе - false
Развернутый equal(x,y) объектное сравнение, если y не void, иначе - false equal(x,y) объектное сравнение

Таблица 8.2.Семантика сравнения x=y

Сравнение таблиц 8.1 и 8.2 показывает совместимость присваивания и операций сравнения в упоминавшемся уже смысле. Напомним, в частности, что equal (x, y) будет истинно после выполнения x := clone (y) или x. copy (y) .

Обсуждаемые проблемы возникают во всех языках, включающих ссылки и указатели, таких как Pascal, Ada, Modula-2, C, Lisp и другие. Они особенно актуальны для ОО-языков, в которых все создаваемые пользователем типы являются ссылочными. В дополнение к причинам, объясняемых в разделе обсуждения, в синтаксисе явно не отражается факт представления объектов ссылками, так что следует быть особо внимательными при проверке эквивалентности объектов.

Работа со ссылками: преимущества и опасности

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

Динамические псевдонимы

Для x и y ссылочного типа при непустом значении y присваивание x := y или соответствующее присоединение в результате вызова приведут к тому, что x и y будут присоединены к одному и тому же объекту.

Рис. 8.23. Разделение как результат присоединения

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

Присоединение x к тому же объекту, что и y , известно как назначение динамического псевдонима (dynamic aliasing). Псевдоним является динамическим, поскольку существует только во время выполнения.

Статические псевдонимы закрепляют два имени за одним и тем же программным элементом в исходном тексте, и они всегда обозначают одно и то же значение вне зависимости от событий, происходящих во время выполнения. Этот прием включен в некоторые языки программирования. В Fortran директива EQUIVALENCE означает, что две переменные разделяют содержимое одной и той же области памяти. Директива препроцессора C #define x y определяет, что любое упоминание x в тексте программы эквивалентно y .

Наличие динамических псевдонимов оказывает более серьезное влияние на операции присваивания с участием сущностей ссылочного типа, нежели с участием сущностей развернутого типа. В случае x и y развернутого типа INTEGER присваивание x := y просто устанавливает для x значение y и никакого связывания x и y не происходит. После подобного присваивания с участием ссылочных типов x и y становятся псевдонимами одного объекта.

Семантика использования псевдонимов

Неприятным последствием применения псевдонимов (и статических, и динамических) является воздействие операций на сущности, даже не упоминаемые в операциях.

Модель вычислений без псевдонимов обладает приятным свойством: приведенный ниже фрагмент всегда справедлив

[БЕЗ СЮРПРИЗОВ]

-- Предположим, что свойство P(y) выполняется

x := y

C (x)

-- P(y) останется выполнимым.

Этот пример подразумевает, что P (y) это частное свойство y , а C (x) некая операция с участием x , но не y . В этом случае никакие действия над x не влияют на значение y .

Для сущностей развернутых типов это действительно так. Приведем типичный пример с x и y типа INTEGER :

-- Предположим, что здесь y = 0

x := y

x := -1

-- По-прежнему y "= 0.

В этом случае нет никакого способа изменить y путем присваивания значения x . Обратимся теперь к аналогичной ситуации с участием динамических псевдонимов. Пусть x и y экземпляры следующего класса C :

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Бертран Мейер читать все книги автора по порядку

Бертран Мейер - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы объектно-ориентированного программирования отзывы


Отзывы читателей о книге Основы объектно-ориентированного программирования, автор: Бертран Мейер. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x