Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 116
Текст из файла (страница 116)
Инкапсуляция также обеспечивает управление доступом к своим сущностям. Инкапсуляции предоставляют программисту метод организации програмл1, который ограничивает количество повторных компиляций. ][ее основные особенности абстрактных типов данных состоят в упаковке данных вместе со связанными с ними операциями в елиное целое и сокрытии информации. Язык люжет поддерживать абстрактные типы данных непосредственно или моделировать их с помощью более общих видов инкапсуляции. Глава ] О.
Абстрактные типы данных Язык 5!М13ЬА 67 реализовал первую конструкцию для инкапсуляции данных вместе операциями над ними — класс. Однако конструкция класса в языке 5!М!Л.А 67 не беспечила сокрытия информации. Языки Ада и Модо!а-2 реализовали инкапсуляции. которые можно использовать для моделирования абстрактных типов данных. Основное различие между ними состоит в -:и. что в языке Мог!ц!а-2 существует ограничение на экспортированные типы со скрыгыми представлениями указателей. Это ограничение позволяет изменять представления :знных без повторной компиляции модулей, содержащих их определения, и кодов их 'лиентов.
Язык Ада допускает экспортирование любого типа. Если экспортируются тисы. не являющиеся указателями, то при изменении представления данных модули-.лненты должны быть перекомпилированы. В языке С++ абстракция данных обеспечивается с помощью классов, подобных клас;ам в языке 5!МБЕА 67. Классы являются типами, и экземпляры классов могут быть ;юланы теми же способами, что и объекты другого типа. Абстракции данных в языке :зла похожи на абстракции данных в языке С++, за исключением того, что объекты в языке 1ача размещаются в динамической памяти, и доступ к ним осуществляется с по'юшью ссылок.
Кроме того. в языке !ача существует конструкция инкапсуляции более лысокого уровня, чем класс, — пакет. Отчасти вследствие доступности пакетов язык 1ача -е имеет ни дружественных функций, нн дружественных классов. И язык Аг!а, и язык С++ допускают параметризацию абстрактных типов данных: язык ада — с помощью пакетов. а язык С++ — посредством шаблонных классов. 1. Дайте определение абстрактного типа банных. Какие преимушества дает разделение определения абстрактного типа данных на две части? Какие требования предъявляются к разработке языка.
который подлерживает абстрактные типы данных". Какие проблемы разработки языка связаны с абстрактными типами данных". Чего нехватает в поддержке абстрактных типов данных языком 5!МБЕА 67? Какие особенности классов в языке 5!М1/!.А 67 позднее стали основой объектноориентированных языков? Назовите две причины, по которым абстрактные типы данных в языке Моди!а-2 могут быть только указателями.
Объясните, как в пакете языка Ада обеспечивается сокрытие информации. ч. В чем заключается различие между типами ркдчаев и 1зждсвсз ркдчаев в языке Ада? 10. Как создаются объекты классов в языке Сч-л? 11. Как создаются объекты классов в языке 1ача? 12. Почему в языке 1ача нет деструкторов? 13. Что такое конструктор? Что такое деструктор? Вопросы Что такое дружественная функция? Что такое дружественный класс? По какой причине язык )ача не имеет ни дружественных функций, ни дружествен- ных классов? 14. 15.
Как создаются объекты шаблонных классов в языке С++? 16. 1О. Напишите абстрактный тип данных для очередей, элементы которых хранят имена, состоящие из 1О символов. Элементы очереди должны размещаться в динамической памяти. Операции с очередью: постановка элемента в очередь; исключение элемента из очереди и проверка заполненности очереди. Используйте языки Моди)а-2, Ада, С++ или )ача. або Глава 1 О. Абстрактные типы даннмх Разработайте пример абстрактного типа для стека на языке Рааса!, предполагая, что определение стека, операции с ним и код, который его использует. находятся в одной и той же программе.
Какой важной части или частей определения абстрактного типа данных недостает в реализации типа для стека на языке Рааса! из упражнения 1? Разработайте пример абстрактною типа лля стека на языке РОйТйАХ 77, исполь- зуя отдельную подпрограмму с несколькими вхоламн для определения типа и опе- раций. Сравните надежность и гибкость решения упражнения 3 на языках РОйТКА1Ч и Ада. Модифицируйте класс в языке С++, определяющий абстрактный тип для стека, ис- пользуя представление стека в виде связного списка, и проверьте его вместе с ко- дом, который приведен в этой главе.
Некоторые разработчики программного обеспечения считают, что все импорти- руемые сущности должны уточняться именем экспортирующего программного модуля. Вы согласны с этой точкой зрения? Обоснуйте свой ответ. Разработайте абстрактный тип данных для матрицы на языке, который вы знаете, включая операции сложения, вычитания и умножения матриц. Разработайте абстрактный тип данных лля очереди на языке, который вы знаете, включая операции постановки элемента в очередь, исключения элемента из очере- ди и проверки заполненности очереди. Предположим, что был разработан абстрактный тип данных для стека, в котором функция сор возвращала путь доступа (или указатель), а не копию верхнего эле- мента.
Это не настоящая абстракция данных. Почему? Приведите пример, иллюст- рирующий эту задачу. Напишите абстрактный тип данных лля комплексных чисел, включая операции сложения, вычитания, умножения, деления, выделения действительной и мнимой части комплексного числа и построения комплексного числа из двух констант с плавающей точкой, переменных или выражений. Используйте языки Моби!а-2, Ада, С++ нли Зача. оддержка объектно-ориентированного программирования -зль Голдберг (Дбе)е ВоЫЬег9! :-» Голдберг провела 14 лет : "..-лвдовательском центре : » -змии Хвгох в Пало-Альто -:".х'з Рам Айо йезеагси . з".зг), возглавляя группу по . г: габотке и Реализации языка : -з:авг.
Она и~папа ведущую :: -= не только в разработке язы. :б зажав, но и в создании па:з.. мы пользовательского ин"-.= =айса, основанного на ис.: -»зоваиии окон и пиктограмм. ВОННОГО ЙД4Иф©ММИ~ЗО- а©н-и% 11.1. Введение 11.2. Объектно-ориентированное программирование 11.3. Вопросы разработки объектноориентированных языков 11.4. Об зор языка Згпа!!!а)Х 11.6. Введение в язык Згпа!)!а!к 11.6. Примеры программ на языке Згпа!)!а!к 11.г. Главные особенности языка Зп)а!!!а!)г 11.В.
Оценка языка Згпа!!!а)Х 11.9. Поддержка объектно-ориентированного программирования в языке С++ 11.10. Поддержка объектно-ориентированного программирования в языке )ача 11.11. Поддержка объектно-ориентированного программирования в языке Аба 95 11.12.
Поддержка объектно-ориентированного программирования в языке Е)!уе! 11.13. Реализация объектно-ориентированных конструкций та глава начинается с введения в объектно-ориентированное программирование. Э Затем обсуждаются основные вопросы разработки программ, касающиеся наследования и динамического связывания. Далее приводится обзор языка 5щайга(к и детальное описание подмножества этого языка, которое иллюстрируется двумя полными программами на языке 5щай1аГк. После этого дается краткое описание поддержки объектно-ориентированного программирования в языках С++, )ача, Ада 95 и ЕПТе1. 11 1.
Введение Языки, поддерживающие объектно-ориентированное программирование, в настоящее время занимают прочное положение среди основных тенденций программирования. Начиная с языка СОВОГО и заканчивая языком Е!5Р, практически для каждого языка были разработаны объектно-ориентированные диалекты. К ним относятся языки С++, Аг!а 95 и СЕО5, а также объектно-ориентированная версия языка Ы5Р (ВоЬгозч е1 а1., 1988). Языки С++ и Ада 95, кроме объектно-ориентированного программирования, поддерживают процедурно-ориентированное и информационно-ориентированное программирование. Язык СЕО5 поддерживает также функциональное программирование. Некоторые из современных языков, разработанных для объектно-ориентированного программирования, не полдерживают другие парадигмы программирования, но продолжают использовать некоторые основные структуры прежних императивных языков и внешне на них похожи.
К таким языкам относятся Е!йе1 и )ача. Кроме того, существует один полностью обьектно-ориентированный язык, являющийся совершенно нетрадиционным. — 5гла!йа18. Язык 5ща!Май был первым языком, предназначенным для полной поддержки объелтно-ориентированного программирования. Конкретный способ поддержки объектно-ориентированного программирования в разных языках обсуждается в этой главе. Данная глава является продолжением главы 10. поскольку объектно-ориентированное программирование — это, по сути, приложение принципа абстракции к абстрактным типам данных. Так, в объектно-ориентированном программировании часть, общая для набора похожих абстрактных типов данных, выделяется в новый тип.
Члены набора наследуют общие части от этого нового типа. Это называется наследованием, являющимся сердцевиной объектно-ориентированного программирования и языков, которые его поддерживают. 11.2. Обьектно-ориентированное программирование 11.2.1. Введение Концепция объектно-ориентированного программирования (оЬ)есг-анен!ей ргойгагппипй) уходит корнями в язык 51МО( А 67, но она не была полностью разработана, пока эволюция языка 5глайга1к не привела к появлению языка 5щай!а!к 80 (в 1980 году, конечно).
Действительно, некоторые исследователи рассматривают язык 5тай1а!к в качестве единственного полностью объектно-ориентированного языка программирования. Объектно-ориентированный язык должен обеспечивать поддержку трех ключевых языковых свойств: абстрактные типы данных, наследование и какой-лнбо частный вид динамического связывания. 452 Глава 11. Поддержка объектно-ориентированного программирования Процедурно-ориентированное программирование.
которое было наиболее популяр-ой парадигмой разработки программного обеспечения в 1970-х годах, фокусировалось -з подпрограммах и библиотеках подпрограмм. Данные передавались подпрограммам :ля вычислений. Например, массив целых чисел, подлежавший упорядочению. передаззлся в качестве параметра подпрограмме, сортируюшей такие массивы. Информационно-ориентированное программирование сосредоточивает внимание на г.страктных типах данных. детально рассмотренных в главе 1О. В этой парадигме вы.нсяение, которое требуется выполнить лля обьекта, содержащего ланные, определяется зызовом подпрограмм, связанных с этим объектом. Если объект представляет собой . ассив.