Главная » Просмотр файлов » Лекции по информатике

Лекции по информатике (984119), страница 31

Файл №984119 Лекции по информатике (Лекции по информатике) 31 страницаЛекции по информатике (984119) страница 312015-07-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 31)

Уже в языке Алгол 68 можно описывать полиморфные процедуры или операции, называемые также родовыми или семействами (депепс). Например, можно ввести процедуру асЫ(х, у), которая будет складывать либо целые числа, либо логические значения, либо векторы в зависимости от типов фактических параметров. Пользу такого вида полиморфизма обычно видят в удобстве иметь одно обозначение для нескольких вещей.

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

Для разных типов-значений параметра С алгоритм сортировки будет одним и тем же, использующим только свойства отношения < Средства абстракции (инкапсуляции) данных представляют хорошую возможность введения полиморфных процедур с параълетрами-типами. 11роцедуру эот1() можно включить как одну из операций в параметризованный абстрактный тип данных и описать как параметр АТД типа Суре в заголовке его спецификации. Эта возъгожностыгоявилась более 20 лет назад в экспериментальных языках С1Л." и А!р1гагг1, на которых отрабатывались идеи и методы обьектно-ориентирова,нного программирования, и была поддержана существенной интерп1гетативностью систем программи1гования на этих языках.

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

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

Самым распространенным в настоящее время языком, поддерживающим обобщеьшое программирование, является язык С вЂ”,+. Обобщенное программирование в С-1 — ,'— реализовано в виде набора алгоритмов, являгощихся, наряду с итераторами и контейнерами, одним из трех китов, на котором основана библиотека ЯТ1 . Так, для реализации полиморфных функций, зависящих от типа передаваемых аргументов, в С вЂ” , '— используется понятие игаблона функции.

Шаблон это некоторая подпрограмма (или итератор, или контейнер), ггредъявляющая определенные требования к типу своих аргументов. Рассмотрим пример с функцией (обобщенным алгоритмом!) аиарО; Сешр1аСе<с1авв Т> ъгоЫ ш1ше эггар(ТЙ 1Ьв, ТЙ гЬа) ТС -11гв; 1Ьз - гЬа; гЬэ ....С; Единственным требованием, предьявляемым к типу аргумента, является наличие у типа оператора, присваивания орегаСог = (). Вызов функции-шаблона выглядит так: шСх бу 7; с1опЫе х — 10; аиар<шС>(х, у); агкар(х, у);,'У Компиллтор С-,' э сам определяет параметризаиию шаблогга аи'ар(х, у~;, Ошибка — неоднозггачность! Рассмотрим еще один пример функция гпгп(); Сешр1аСе<с1авв Т> 'Гтс ш1ше тпттт('Гтс Птгь ТЙ г|та) геСнгп (11!в < г|та)? 11!э: гйа; Эта функция предьявляет помимо наличия у типа Т орегагог = () еще и требование наличия орега1ог < () для сравнения двух значений типа.

Функции сортировки (особенно устойчивой) могут пред"ьявлять дополнительные требования наличия орстгаХог == () для проверки аргументов на равенство. Главным достоинством такого подхода является по.шое отсутствие затрат на вызов виртуальных функций и вообще приведения к некоему «об!!тек!у» типу О|е)есГ, СО1т)есГ, ТО|э)стог и др., что только ускоряет работу программ. 7.3.7 Процедурный тип Еще одним средством реализации родовых модулей является процедурный тип.

Фа,ктически процедурный тип представляет собой целый класс типов, отдельные типы которого есть множества глобально определенных процедур с идентичной спецификацией, включая и тип результата для функций [59~. Константами процедурных типов являются имена глобальных процедур, также разбитые на непересекающиеся классы равнозначности в соответствии с заголовками этих процедур. Таким образом, процедурный тип есть своеобразный вариант перечислимого (порядок можно задать через адресный и целый типье!).

Переменные процедурных типов принимают значения из соответствующего сттецификации заголовка множества процедур. Процедурную переменную можно сравнить с од!тоти!те!ой или присвоить ей допустимое значение другой переменной тлтти константы того же типа. Но, главное, ее можно вызвать, как и любую другую обычнуто процедуру. Согласно этому делс.нине все процсттуры без параметров совместимы и такжс- составляют единый тип. 1|ОскОльку 'тля ВызоВа проттедуре>1 В кОетсчнОтст счсттс нужно знй;гь ее аттрс!с с.гО роль может играть ссылка на процедуру. Комбинация бестипового указателя и процедурных типот! образует эффективную и опасную гремучую смесь, позволякицую, например, не покидал Паскаль-программы, построить в целочисленном массиве программу на машинном языке и тут жс выполнить ее. Заметим также,.

ЕтО прОттеду|тньтст типы В раздсэльнО кОмпилирус',мых ыОдулях дс.лают эти мочули родовыми по отношенинт к процедурам, а не к типам данных. Процедурный тип позволяет просто и систематически описывать более универсальные родовыс модули с хранимыми процедурами, поскольку подстановка параметров проттедурного типа стутттествстнно НОВЫ!пает па|тетметризетттттю такого тстодуля. Можит! такжс.

Нмпо|ттировать тип элемента очереди из модуля-посредника, с заранее фиксированным именем, обеспечивая строгий контроль использования типов. Внимательный слушатель заметит, что это уже почти обьектно-ориентированное программирование. В Си и С+-, таких тонких понятий, как процедурный тип, просто нет. Вместо этого предусмотрены указатели на функции -- такие же, как на, скалярные типы данных, с возможностью приведения к обобщенному указателю ~ОЫ"': Сурес|еК с1оцЫе (»1ттттагу Епттсгтотт)(с|ОНЪ|е, с|ОНЫе)„О' Указатель на фттпкеттсто детттх' перел«енетыгл с|опЫе 1(с|опЫе х, с|опЫе у) геСпгп х; — у; Ьшагу ЙшсС1оп р1 = 1; с1опЫе яО р1(1, 2); ','Вызов фрикции через иказатель с1опЫе я1 (~р1)(3, .4);,'' Тоже вариант вызова Указатели на функции очень распространены в системном программировании вообще и в %1пАР1 в частности, где они используются для задания оконных процедур, функций обратного вызова для обработки срабатывания таймера и др.

7.3.8 Элементы объектно-ориентированного программирования в расширениях языка Паскаль Для рсализспщи полиморфизма в аострактном типс данных очередь напишем дополнения к модулю С~пенсе, 1'ассмотрим т1ги подхода к 1зешению п1юблемы. 7.3.8.1 Полиморфизм с использованием бестиповых указателей Полиморфная очередь может содержать объекты разнысс типов: ТСп'с1е (окружность), ТТг1ап~1е (треугольник), ТЕхсспсаЫе (выполняемый объект, вызываниций процедуру саморисования) . ~Яюро1 уор1: Сосаников Д.В.) Суре оЬ1есС1Р -- (1с1Мопе, 1с1С1гс1е, 1с1Тг1апа1е, 1с1ЕхеспсаЫе); 1' Вспомоголпельный тип дяя идентификации обаекта ) Суре ТРошс — гесогс1 х,у: геа1 епс1; 1' тип, точки, используемый в описании геометрических фигцр ~ Суре ТСп.с1с — гесогс1 й1: оЬ)есс1Р; 1' идентификатор должен идти первым( ) сепсег: ТРо1пс", гас1шз: геа1; епс1:, РС1гс1с — ТС1 гс1с; Суре ТТг|апя1с = гесогс1 1с1: оЬ1есСН): ~с идентификатор долслсен идти первым! ) А, В, С: ТРошС; епс1; РТг1ащ!е — "П1бапй1е; Суре ТРгоссс1ше Ргосес1гне: РРгосес1пге "ТРгосес1пге., Суре ТЕхеспсаЫе — гесогс? !с?: о!э)есСНЭ: 1' иденгпификагпор должен идгпи первымl г 1'госРСг: 1'Ргосей~ге; епс1:, РЕхеспга!э!с ТЕхесп?аЫе; Суре Т?ЕЖесогс? гесогс1 1' зались, необходимая д.гя иденгпификации реального объекта в памяти 1 и1: оЬ)есСЮ; епс?: РИ)Кесогс? =- "ТПЖесогс?; Абстрактный указатель должен иметь размер адреса конкретной архитектуры.

Например, возможно использование указателя (айаг 1, ?п1сдег"!), в этом случае размер определяетз я автоматически; или использование типа соответствующего размера: Суре иогс? !ог1д шСеиег; 1' СЛ"сг Разса1 для БЕС Л?р/ш Г' 1' юогд = гп?едегб? дл„я Сотрад Разса1 ~ Суре Ро1пгег — "иогс?; Тип данных для элемента очереди ТУа!пе определяется как абстрактный указатель: Суре ТЪ"а!пе — Ропйег; Везде, где для печати элемента очереди вызывается процедура ит!Се1п, необходимо заменить ее на вызов процедуры ??гав, которая, в свою очередь, вызывает конкретные методы печати для соответствующих типов элементов очереди: ргосес?иге ??гаиС1гс?е(Т: ТСггс1е): 1' особенности отрисовки на экране или вывода, на экран определяются конкретной реализацией 3 Ьефп 1' йито — версия., распе сотка на принтере ! ит?Се?п('ОКРУЖНОСТЬ(Х ', Т.сепсег.х,', У - ', Т.Сепгег.у, ', 1? ', Т.

гас1гиз); епс1; ргосес1пге ??гач Тг!ап?11е(Т: ТТг?апа!е); Ьеи?п ит?Се('ТРЕУГ(А (', Т.А.х, ', ', Т.А.у, '),'): ит?Се('В (',Т.В.х,', ',Т.В.у, '), '); ит?Се?п('С (',Т.С.х,', ,'.'Г.С.у, ') '); епс?; ргосес?пге Вгаи ЕхеспгаЫе(Т: ТЕхеспгаЫе); Ьеиш И Т.ЕъгосРСг < > гй1 СЬеп Т.Е'госРСг"; ?' выпояпение процедуры ТРгосРСг" по указателло Т.РгосРСт. Эта процедура сагиосгпоятельпо визуализирует встроенный объект 3 епс1; ргосес1пге 1)гаи (Р: ТЧа1пе); Ьедш саве РИЖесогл1(Р) эс! оГ ( для определения типа реального обаекпла используется прглведелллле указагпеля на него к типу РЮКесотй л П1Слгс1е: 1лгичС1гс!е(РС1гс!е(Р) ): нП11агга1е: 1)гажТг1аггфе(РТпаг1~1с(Р) ); 1йЕхеспгаЫе: Е)гав ЕхеспгаЫе(РЕхеспгаЫе(Р) ); епс1; епс1; Для создания нового объекта и помещения его в очередь используются следующие функции-конструкторы.

сводящие все к стандартной процедуре печ: Гппс1юп Хеи С!гс1е(х, у, г; геа1): ТЪа1пе; айаг Х: РС1гс1е: Ьеыш пеи (Х); ( Соэдаьпле нового типизллровагилого обаекта типа ТС1гс1я; пеш не может создавать нетипизировагнньле обаектпьл, поскольку их рллзмер глеизвесплен со время комтлляции; компилятор преобразует, вызов пети таким образом, что вгпорым его параметром становится размер обьекта. л! ( В языках СХС+-' обьекту "шогй соответствует иолйг, но типа иолй, в отличие от шогй в Расширенном Паскале, нет в силу того, что ио1йл является абстрактным указателем на все, что лложет храниться в бестиповой пимяти, при этом пе имеющим никакого конкретного ук зуемого типа а 1а Паскаль 3 Х .сеп1ег.х: — х: Х .серег.у: — у: Х".тай!пя: — г; Х йй: =-!йС1гс!е; 'ХетгС1гс!е: — гТЪ~а!пе(Х); ( приведение конкрегпного типа окружность к типу универсальньлх элементов очереди ТЪа1ие ("шогй) ~ епс1; ГппсСюп МелчТг!апд!е(ах, .ау, Ьх, !эу,.

Характеристики

Тип файла
DJVU-файл
Размер
675,15 Kb
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6314
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее