Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 97

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 97 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 972019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В качестве примера рассмотрим следующую подпрограмму на языке ГОЕТВАИ 90: ЯОВВООТ1НЕ ИАТЯОМ(МАТВ1Х, ВО(ЯБ, СОЬЯ, ГТЬЕО ЕОЫЯ, Г1ЬЕО СОЬЯ, БОИ) 1НТЕОЕВ ВОИБ, СОЬЯ, Г1ЬЬЕО ВОНЯ, Г1ЬЬЕО СОЬЯ, )(Ои 1МОЕХ, СОЬ 1МОЕХ ВЕАЬ ИАТВ1Х(ВОЫЯ, СОЬЯ), ЯОИ ЯОМ = О.О 00 20 ВОЫ 1НОЕХ = 1, Г1ЬЬЕО ВОНБ 00 10 СОЬ 1)(ОЕХ = 1, Г1ЬЬЕО-СОЬБ ЯОМ = ЯОМ = ИАТВ1Х(ВО(Я 1)(ОЕХ, СОЬ 1))ОЕХ) 10 СОИТ1(ЧОЕ 20 СО)(Т1(ЧОЕ ВЕТОК(Ч ЕИ0 В языке Зата лля передачи многомерных массивов в качестве параметров используется способ, похожий на способ, применяемый в языке Ада.

В языке )ата массивы являются объектами. Все они одномерны, однако их элементы могут быть массивами. Каждый массив наследует именованную константу (1еп9г)з), определяющую длину массива при создании соответствующего объекта. Формальный параметр, являющийся матрицей, используется с двумя парами квадратных скобок, как показано в методе, приведенном ниже, который выполняет то же, что и функция ЯОИЕй на языке Ада: Г1оас вивег(Й1оас вас[][]) ( Е1оак вив = 0.011 Еок (апк гои = О; гои < вас.1епОГ)зг гон++] ( Гог (Епс со1 = О; со1 < вас [гои].1епдГПг со1++) ( вив += вас [гои] [со1] з ) //** Гог (Ьпг гои ) //** Гог (Ьпг со1- касигп вив' ) Поскольку каждый массив имеет свою собственную длину, длина строк в матрице может быть различной. 8.5.У. Вопросы разработки Выбор метода передачи параметров связан с двумя важными аспектамю первый из них — эффективность, второй — способ передачи данных (односторонний или лвусторонний).

Принципы современного проектирования программного обеспечения диктуют, что доступ кода подпрограммы к данным, находящимся вне подпрограммы, должен быть минимизирован. Учитывая это, следовало бы выбирать передачу параметров в режиме ввода всякий раз, когда в вызывающий модуль через параметры не возвращаются никакие данные. Если никакие данные в подпрограмму не передаются, но при этом подпро- 368 Глава 8. Подпрограммы "эачма должна возвращать результаты обратно в вызывающий модуль, слелует приме-ять передачу параметров в режиме вывода.

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

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

та причина, по которой определение языка Аг(а 83 позволяет создателям срелств реа-нзации языка самим делать выбор между двумя методами передачи структурированных -зраметров. Другим решением этой проблемы являются параметры, передаваемые в :зыке С++ как константные ссылки. В качестве альтернативы используется также пол° эв состоящий в том, что пользователю позволяют самому выбирать метод передачи -зраметров. Выбор метода передачи параметров в функции связан с другим вопросом разработки мыков программирования — побочным эффектом функций. Этот вопрос обсуждается в гззделе 8.10. 8.$.8. Примеры передачи параметрае Рассмотрим следующую функцию на языке С: чойа виар(йпк а, дпе Ь) ( 1пс севр = а; а = Ь! Ь = Се!ар! ".редположим, что эта функция вызывается следующим образом: зиар1(с, с()! Напомним, что в языке С используется передача параметров по значению.

Действия =ункцин виар1 можно описать с помощью следующего псевдокода: а=с о = с( — передать значение первого параметра передать значение второго параметра =евр = а а - Ь '-" = севр 369 8.5. Методы передачи параметров Несмотря на то что при завершении работы подпрограммы переменная а содержит зна-ение переменной с(, а переменная Ь вЂ” значение переменной с, значения переменных с л " остаются неизменными, поскольку в вызывающий модуль ничего не возвращается. В языке Риса! функцию виар1 можно записать в вгше процедуры с той же семантикой режима ввода, как показано ниже: ргосесЫге яиар1(а, Ь: йпседег) Севр : йптедег; Ьедйп Севр := а; а := Ьг Ь := тевр епс(; Теперь модифицируем функцию перестановки на языке С так, чтобы она работала с указателями в качестве параметров, что позволяет достичь эффекта передачи параметров по ссылке: чоЫ яиар2 (Впг *а, дпс *Ь) ( ьпи севр - *а; *а = *Ьг *Ь = севрг ) Функцию яиар2 можно вызвать следующим образом: яиар2(йс, йс()г Действия функции яиар2 можно описать с помощью следующего псевдокода: а = йс — передать адрес первого параметра Ь = йс( — передать адрес второго параметра севр = *а *а *Ь *Ь = севр В этом случае операция перестановки является успешной: значения переменных с и б действительно меняются местами.

Функцию яиар2 можно переписать на языке С++ с использованием ссылок в качестве параметров, как показано ниже: чово яиар2(ьпс йа, дпс йЬ) ( впг Севр = а; а=Ьг Ь = севрг ) Эта простая операция перестановки невозможна в языке Зача, поскольку в нем нет ни указателейг. ни ссылок, аналогичных ссылкам в языке С++. В языке ]ача ссылка может указывать только на обьект, а не на скалярную величину. В языке Разов! функцию яиар2 можно переписать так: ргооес(иге яиар2(чаг а, Ь: 1пседег] севр : 1пседег; Ьедвп севр := аг а := Ь; Ь := теврг епс(г Предположим, что процелура яиар2 на языке Рааса! вызывается следующим образом: яиар2 (1, 11яс [1] ) г ЗУО Глава 8. Подпрограммы В этом случае ее действия можно описать так: з = ь1 6115С [1] =ево = *а -а = *Ь вЂ” передать адрес первого параметра — передать адрес второго параметра = гевр ргооес[чге яиарЗ[а : дп оик 1псеаег, Ь : зп оис 1пгедег] зв =евр : 1пседегг Ьеаьп гевр := а; а: Ь; Ь:- Севрз впс] яиарЗ; ...

г] стим, что процедура яиарЗ вызывается следующим образом: зиарЗ [с, с]] ] ствия процедуры яиарЗ при этом вызове можно описать так: ь='бг с = ьс 'г г] = йс] э = 'ас]с]г с *ас]с]г с] :евр = а з Ь передать адрес первого параметра передать адрес второго параметра передать значение первого параметра передать значение второго параметра = гевр а"ог с = а зсс]г а = Ь вернуть значение первого параметра вернуть значение второго параметра "; ч образом, снова эта подпрограмма перестановки работает правильно.

Далее, рас: -.рим вызов тиарЗ[1, 11яс[1]]; :-оч случае действия процедуры я нар 3 можно описать следующим образом: ьз"г 1 ь1 - передать адрес первого параметра ь="'г 11ят1 = Ь11яГ[1] — передать адрес второго параметра 371 5. Методы передачи параметров Несмотря на то что значение разыменованной ссылки *а [равное значению перемен-.д .) изменяется до того, как изменится значение разыменованой ссылки *Ь (равное -эчению 11яс[ 1]), это никак не влияет на правильность перестановки, поскольку ад—:.

переменной 11яг [1] вычисляется в момент вызова и после этого уже не изменяет- . - независимо от того, что происходит с переменной 1. :ечантика передачи параметров по значению и результату идентична семантике пере.з-:и по ссылке, за исключением того случая, когда возникает совмещение имен. Напом- ч. что в языке Аг[а передача по значению и результату в режиме ввода-вывода испольется для передачи скалярных параметров. Для того чтобы исследовать передачу пара=гров по значению и результату, рассмотрим следующую функцию яиарЗ, в которой предположению используется этот метод.

Она записана с помощью синтаксиса, близ. -о к языку Ада. а = *асс)г 1 Ь = *ас)с)г 11зС1 Сепо = а а = Ь Ъ = Сеязр ас)с(г 1 = а *ас(ог 11вС1 = Ь вЂ” передать значение первого параметра передать значение второго параметра вернуть значение первого параметра вернуть значение второго параметра В данном случае подпрограмма снова работает правильно, потому что адреса ячеек, в которые записываются возвращаемые значения параметров, вычисляются в момент вызова, а не в момент возврата из подпрограммы. Если бы адреса фактических параметров вычнслялись в момент возврата из подпрограммы, результаты были бы неправильными.

Рассмотрим, что произойдет при совмещении имен, возникающем, когда параметры передаются по значению и результату нлн по ссылке. Рассмотрим следующую скелетную программу, написанную с помощью синтаксиса, близкого к языку С: 1пС 1 = 3; /* 1 — глобальная переменная */ чоЫ 1ип(зпС а, дпС Ь) ( 1=Ь; ) чеза яза1п() 1пС 1з.вС [10] 11вс[1) = 5; 1цп(1, 11вС[1))' ) В функции 1ип используется передача параметров по ссылке. причем переменные 1 и а являются альтернативными именами. Если используется передача параметров по значе- нию и результату, то переменные з. и а альтернативными именами не являются.

В этом случае действия функции 1ип таковы; аг)с(г 1 = ь1 асс(с 11вС1 = 61з.вС[1] а = "ас)с)г 1 Ь = *ас(с) 11всз 1.=Ь *ас)Ш 1 = а ас(с)г 11всз = Ь передать адрес первого параметра передать адрес второго параметра передать значение первого параметра передать значение второго параметра установить 1 равным 5 вернуть значение первого параметра вернуть значение второго параметра Глава 8. Подпрограммы 372 В этом случае присвоение глобальной переменной 1 в подпрограмме 1цп изменяет ее значение с 3 на 5, а назад возвращается копия первого формального параметра (вторая снизу строка псевдокода), которая содержит значение 3. Здесь важно отметить, что если используется передача по ссылке, то возвращение копии уже не будет частью семантики передачи параметров, поэтому переменная 1 останется равной 5.

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

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

Список файлов книги

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