Оператор безусловного перехода имеет следующий вид: goto, здесь goto — зарезервированное слово: — метка.
Метка — это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него.
Можно теоретически показать, что достаточно if- и while-операторов, чтобы записать любую необходимую управляющую структуру. Однако есть несколько вполне определенных ситуаций, где лучше использовать оператор goto.
Первая состоит в том, что многие циклы не могут завершаться в точке входа, как этого требует цикл while.
Вторая ситуация, которую легко запрограммировать с помощью goto, — выход из глубоко вложенного вычисления. Например, если глубоко внутри вызовов процедур обнаружена ошибка, что делает неверным все вычисление. В этой ситуации естественно запрограммировать выдачу сообщения об ошибке и возвратить в исходное состояние все вычисление. Однако для этого требуется сделать возврат из многих процедур, которые должны знать, что произошла ошибка. Проще и понятнее выйти в основную программу с помощью goto.
Лекция 4. Встроенные типы, инструкции и операторы (Программирование на C++, часть 1)
В языке С нет никаких средств для обработки этой ситуации (не подходит даже goto по причине ограниченности рамками отдельной процедуры), поэтому для обработки серьезных ошибок нужно использовать средства операционной системы.
В современных языках Object Pascal, Ada, C++ и Eiffel есть специальные языковые конструкции, так называемые исключения, которые непосредственно решают и эту проблему.
2.5. Подпрограммы. Процедуры и функции
Часто некоторую последовательность инструкций требуется повторить в нескольких местах программы. Чтобы программисту не приходилось тратить время и усилия на копирование этих инструкций, в большинстве языков программирования предусматриваются средства для организации подпрограмм. Таким образом, программист получает возможность присвоить последовательности инструкций произвольное имя и использовать это имя в качестве сокращенной записи в тех местах, где встречается соответствующая последовательность инструкций.
Подпрограмма — некоторая последовательность инструкций, которая может повторяться в нескольких местах программы.
Процедурой называется особым образом оформленный фрагмент программы, имеющий собственное имя (идентификатор), который выполняет некоторую четко определенную операцию над данными, определяемыми параметрами.
Упоминание имени процедуры в тексте программы приводит к ее активизации и называется вызовом процедуры. Вызов может быть осуществлен из любой точки программы. При каждом таком вызове могут пересылаться различные параметры. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу, и выполняются операторы, стоящие непосредственно за оператором вызова процедуры.
здесь имя процедуры (правильный идентификатор); — список формальных параметров.
Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например procedure MyProc (a: Real; b: Integer; с: Char);
Структура программы. Управляющие последовательности. Курс по разработке на Си и Си++. Урок 2
function MyFunc (a, b: Real): Real;
Операторы тела подпрограммы рассматривают список формальных параметров как своеобразное расширение раздела описаний: все переменные из этого списка могут использоваться в любых выражениях внутри подпрограммы. Так осуществляется настройка алгоритма подпрограммы на конкретную задачу. Работа с процедурами и функциями отличаются в следующем:
- в заголовке функции помимо описания формальных параметров обязательно указывается тип возвращаемого ею результата;
- для возврата функцией значения в точку вызова среди ее операторов должен быть хотя бы один, в котором имени функции или переменной Result присваивается значение результата;
- вызов процедуры выполняется отдельным оператором;
- вызов функции может выполняться там, где допускается ставить выражение, например, в правой части оператора присваивания.
Источник: studfile.net
Подпрограммы. Процедуры и функции
Часто некоторую последовательность инструкций требуется повторить в нескольких местах программы. Чтобы программисту не приходилось тратить время и усилия на копирование этих инструкций, в большинстве языков программирования предусматриваются средства для организации подпрограмм. Таким образом, программист получает возможность присвоить последовательности инструкций произвольное имя и использовать это имя в качестве сокращенной записи в тех местах, где встречается соответствующая последовательность инструкций.
Подпрограмма — некоторая последовательность инструкций, которая может повторяться в нескольких местах программы.
Процедурой называется особым образом оформленный фрагмент программы, имеющий собственное имя (идентификатор), который выполняет некоторую четко определенную операцию над данными, определяемыми параметрами.
Упоминание имени процедуры в тексте программы приводит к ее активизации и называется вызовом процедуры. Вызов может быть осуществлен из любой точки программы. При каждом таком вызове могут пересылаться различные параметры. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу, и выполняются операторы, стоящие непосредственно за оператором вызова процедуры.
здесь имя процедуры (правильный идентификатор); — список формальных параметров.
Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например procedure MyProc (a: Real; b: Integer; с: Char);
function MyFunc (a, b: Real): Real;
Операторы тела подпрограммы рассматривают список формальных параметров как своеобразное расширение раздела описаний: все переменные из этого списка могут использоваться в любых выражениях внутри подпрограммы. Так осуществляется настройка алгоритма подпрограммы на конкретную задачу. Работа с процедурами и функциями отличаются в следующем:
1) в заголовке функции помимо описания формальных параметров обязательно указывается тип возвращаемого ею результата;
2) для возврата функцией значения в точку вызова среди ее операторов должен быть хотя бы один, в котором имени функции или переменной Result присваивается значение результата;
3) вызов процедуры выполняется отдельным оператором;
4) вызов функции может выполняться там, где допускается ставить выражение, например, в правой части оператора присваивания.
Источник: studopedia.su
Технологии программирования 48 стр.
Один из самых многообещающих аспектов внедрения компонентной архитектуры — быстрая разработка программ. Вы сможете выбирать компоненты из библиотеки и составлять из них, как из деталей конструктора, цельные приложения методом морфологического синтеза! Практически все продаваемые сегодня приложения Microsoft используют СОМ.
Технология ActiveX этой фирмы построена на основе компонент СОМ. Программисты на Visual Basic, C++, Delphi и Java могут воспользоваться управляющими элементами ActiveX для ускорения разработки своих приложений и страниц Web. Конечно, каждому приложению по-прежнему будут нужны и некоторые специализированные компоненты, но для построения простых приложений можно обойтись стандартными.
Создать из обычной программы распределенную программу легче, если эта обычная программа состоит из компонент. Во-первых, она уже разделена на функциональные части, которые могут располагаться вдали друг от друга. Во-вторых, поскольку компоненты заменяемы, вместо некоторой компоненты можно подставить другую, единственной задачей которой будет обеспечивать связь с удаленной компонентой.
Преимущества использования компонент непосредственно вытекают из способности последних подключаться к приложению и отключаться от него. Для этого компоненты должны удовлетворять двум требованиям. Во-первых, они должны компоноваться динамически. Во-вторых, должны скрывать (или инкапсулировать) детали своей реализации.
Чтобы понять, как это связано с инкапсуляцией, необходимо определить некоторые термины. Программа или компонента, использующая другую компоненту, называется клиентом (client). Клиент подсоединяется к компоненте через интерфейс (interface). Если компонента изменяется без изменения интерфейса, то изменений в клиенте не потребуется.
Аналогично если клиент изменяется без изменения интерфейса, то нет необходимости изменять компоненту. Однако если изменение либо клиента, либо компоненты вызывает изменение интерфейса, то и другую сторону интерфейса также необходимо изменить.
Таким образом, для того чтобы воспользоваться преимуществами динамической компоновки, компоненты и клиенты должны стараться не изменять свои интерфейсы и быть инкапсулирующими. Детали реализации клиента или компоненты не должны отражаться в интерфейсе. Чем надежнее интерфейс изолирован от реализации, тем менее вероятно, что он изменится при модификации клиента или компоненты. Если интерфейс не изменяется, то изменение компоненты оказывает лишь незначительное влияние на приложение в целом.
Необходимость изоляции клиента от деталей реализации накладывает на компоненты ряд важных ограничений, список которых приведен ниже.
Ограничение 1. Компонента должна скрывать используемый язык программирования. Компоненты могут быть разработаны с помощью практически любого процедурного языка, включая Ada, С, Java, Modula-3, Oberon и Pascal. Любой язык, в том числе Smalltalk и Visual Basic, можно приспособить к использованию компонент СОМ. Любой клиент должен иметь возможность использовать компоненту независимо от языков программирования, на которых написаны тот и другой.
Ограничение 2. Компоненты должны распространяться в двоичной форме. Действительно, поскольку они должны скрывать язык реализации, их необходимо поставлять уже откомпилированными и готовыми к использованию (DLL).
Ограничение 3. Компоненты СОМ можно модернизировать, не нарушая работы старых клиентов. СОМ предоставляет стандартный способ реализации разных версий компонент. Новые версии компонент должны работать как с новыми клиентами, так и старыми.
Ограничение 4. Компоненты СОМ являются перемещаемыми по сети, причем перемещаемость по сети должна быть прозрачной. Компонента на удаленной системе рассматривается так же, как компонента на локальном компьютере. Необходимо, чтобы компонента и использующая ее программа могли выполняться внутри одного процесса, в разных процессах или на разных машинах. Клиент должен рассматривать удаленную компоненту так же, как локальную. Если бы с удаленными компонентами надо было бы работать иначе, чем с локальными, то потребовалось бы перекомпиляция клиента всякий раз, когда локальная компонента перемещается в другое место сети.
Пользователь может иметь два клиентских приложения, использующих одну и ту же компоненту. Предположим, что одно приложение применяет новую версию этой компоненты, а другое — старую. Установка новой версии не должна нарушать работу приложения, которое использовало старую версию. Старое приложение использует новую компоненту vi абсолютно так же, как это делает новое (рис. 6.2).
Однако обратная совместимость не должна ограничивать развитие компонент. Нужно, чтобы поведение компоненты для новых приложений можно было радикально изменять, не нарушая поддержку старых приложений.
Рис. 6.2. Поэтапное получение новых приложений
Таким образом, технология предусматривает взаимозаменяемость компонент во время выполнения посредством установления стандарта, которому должны следовать компоненты; практически прозрачной поддержки нескольких версий компоненты; обеспечения возможности работы со сходными компонентами одинаковым способом; определения архитектуры, независимой от языка; поддержки прозрачных связей с удаленными компонентами.
• Разработка архитектуры — это процесс разбиения большой системы на более мелкие части. Процесс разработки архитектуры — этап, необходимый при проектировании систем или комплексов, но необязательный при создании программы. Если внешние спецификации (экранные формы, организация файлов. ) описывают программную систему с точки зрения пользователя, то следующий шаг проектирования состоит в разработке архитектуры, а за ним следует проектирование структуры каждой программы.
• Программная система может состоять из отдельных, разработанных разными организациями выполняемых программ; из программ, обменивающихся данными через порты; из отдельных резидентных программ.
• Традиционно программа проектировалась из отдельных файлов, модулей или классов, которые компилировались и компоновались в единое целое.
• Разработка программ из компонент — так называемых приложений компонентной архитектуры — происходит совершенно иначе. С появлением технологии разработки развивающихся и рассредоточенных (многомашинных) комплексов программ, основанной на модели компонентных объектов (СОМ), единого целого больше нет: программы состоят из отдельных компонент. Компонента поставляется пользователю как двоичный код, скомпилированный, скомпонованный и готовый к использованию. Доступ к этому коду осуществляется через точно документированный интерфейс. Во время выполнения компоненты подключаются к другим компонентам, формируя программу.
Контрольные вопросы
1. Что такое архитектура программ?
2. Являются ли синонимами понятия «структура» и «архитектура»?
3. В чем заключается процесс разработки архитектуры программы?
4. Как реализуется архитектура системы из отдельных программ?
5. Что такое резидентная программа?
6. Как осуществляется обмен данными через порты?
7. Перечислите принципы подхода к проектированию архитектуры системы с позиции уровней абстракции Дейкстры.
8. Почему из обычной программы создать распределенную программу легче, если она состоит из компонент?
9. Перечислите ряд ограничений, которые накладываются на компоненты.
10. Посредством чего предусматривается взаимозаменяемость компонент?
Глава 7
ТЕХНОЛОГИЯ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ
7.1. ПОНЯТИЕ СТРУКТУРЫ ПРОГРАММЫ
Структура программы — искусственно выделенные программистом взаимодействующие части программы. Использование рациональной структуры устраняет проблему сложности разработки; делает программу понятной людям; повышает надежность работы программы при сокращении срока ее тестирования и сроков разработки вообще.
Часто некоторую последовательность инструкций требуется повторить в нескольких местах программы. Чтобы программисту не приходилось тратить время и усилия на копирование этих инструкций, в большинстве языков программирования предусматриваются средства для организации подпрограмм. Таким образом, программист получает возможность присвоить последовательности инструкций произвольное имя и использовать это имя в качестве сокращенной записи в тех местах, где встречается соответствующая последовательность инструкций. Подпрограмма — некоторая последовательность инструкций, которая может вызываться в нескольких местах программы.
Вряд ли стоило подробно говорить о столь простой форме записи, если бы за ней не скрывались важные и основополагающие понятия. В действительности процедуры и функции, называемые подпрограммами, являются одним из тех немногих фундаментальных инструментов в искусстве программирования, которые оказывают решающее влияние на стиль и качество работы программиста.
Источник: sharlib.com