Light-electric.com

IT Журнал
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Методы в программировании

Методы в программировании

Название работы: Методы программирования. Объектно-ориентированное программирование

Предметная область: Информатика, кибернетика и программирование

Описание: Структурное программирование Основные положения концепции структурного программирования были сформулированы в 60х годах XX века голландским ученым Э. Технология структурного программирования зиждется на идее о выделении множества базисных элементов.

Дата добавления: 2015-01-15

Размер файла: 29.25 KB

Работу скачали: 78 чел.

В рамках курса рассматриваются следующие методы программирования:

  1. структурное;
  2. модульное;
  3. объектно-ориентированное;
  4. компонентное.

Основные положения концепции структурного программирования были сформулированы в 60-х годах XX века голландским ученым Э. Дейкстрой.

Технология структурного программирования зиждется на идее о выделении множества базисных элементов, из которых можно собрать любой объект из некоторого широкого набора.

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

  1. структуру последовательного действия,
  2. структуру выбора одного из двух действий,
  3. структуру цикла (многократного повторения некоторого действия с проверкой условия остановки повторения).

На рис. 5 представлено изображение указанных алгоритмических конструкций в виде блок-схем.

Рис. 5. Блок-схемы базисных алгоритмических конструкций

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

Таким образом, центральный технологический принцип структурного программирования состоит в том, что формулировку алгоритма и его запись в виде программы рекомендуется выполнять на основе базиса из трех алгоритмических конструкций, применяя при необходимости их суперпозицию.

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

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

С применением модульного программирования появляются возможности коллективной разработки программ как набора «независимых» частей, последовательного уменьшения сложности методом разбиения сложной задачи на более простые подзадачи, наконец, возможности повторного использования созданного ранее кода.

Развитие аппаратной базы привело к возможности решения все более сложных задач, а, значит, разработки все более сложных программ. Программы стали большими, разработка – коллективной, объем работы увеличился, код «разбух», и появились новые проблемы: выяснилось, что возможности структурного и модульного программирования ограничены и зачастую не позволяют добиваться желаемого результата.

В отличие от рассмотренных выше, объектно-ориентированная технология работает на стадиях анализа и проектирования, а не только программирования. Суть объектной декомпозиции состоит в выделении в предметной области классов и объектов, а также связей между ними, и лишь потом данных и алгоритмов, которыми характеризуется каждый класс. Таким образом, именно классы становятся основным «строительным блоком» в объектно-ориентированном программировании (ООП), тогда как ранее таковыми блоками являлись алгоритмы.

К основным принципам объектной модели часто относят следующие:

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

  1. программный код в виде самостоятельного модуля;
  2. может быть использован в неизменном виде;
  3. может допускать настройку;
  4. обладает поведением (функциональностью).

Основной принцип компонентного программирования: сборка приложения из готовых компонентов, в общем случае написанных на разных языках.

Компонент изолирован от внешнего мира своим интерфейсом – набором методов. Компонентная программа – это набор независимых компонентов, связанных друг с другом посредством интерфейсов.

Методы в программировании

РАЗДЕЛ II. ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Тема 4. Основные методы программирования

Архитектура ПО

В зависимости от варианта размещения элементов программного обеспечения по отношению к средствам вычислительной системы возможно формирование следующих вариантов построения ПО и правил взаимодействия составляющих его компонент [9]:

  • автономное ПО;
  • ПО файл-серверной архитектуры;
  • ПО клиент-серверной архитектуры;
  • ПО многозвенной архитектуры;
  • ПО распределенной архитектуры.

Автономные программы функционируют, как правило, на одном, отдельном компьютере (рис. 2.1).

Рис. 2.1. Автономная персональная обработка данных

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

Рис. 2.2. Коллективная обработка данных с использованием сетевых версий ПО и файлового сервера

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

Рис. 2.3. Обработка данных в архитектуре «клиент/сервер»

Благодаря этому удается повысить общую надежность системы, так как сервер работает значительно более устойчиво, чем клиентские ПК, и снять лишнюю нагрузку с клиентских мест, на которых удается использовать дешевые компьютеры. Запускаемые на них приложения реально осуществляют небольшие объемы вычислений, а иногда занимаются только отображением получаемой от сервера информации, поэтому они называются тонкими клиентами. Частный (вырожденный) случай этого варианта – терминальный режим обработки данных с помощью одной общей ЭВМ (рис. 2.4). Характерной особенностью такой системы является полная «неинтеллектуальность» терминалов, используемых в качестве рабочих мест их работой управляет так называемый хост-компьютер. При этом имеется возможность совместного использования различных ресурсов хост-комьютера (оперативной памяти, процессорного времени и дорогих периферийных устройства (принтеров, графопостроителей и т.д.), что существенно облегчает и удешевляет эксплуатацию такой системы. Разумеется, употребляемые при этом операционные системы должны поддерживать многопользовательский многозадачный режим.

Рис. 2.4. Модель обработка данных «хост-компьютер + терминалы»

К недостатку подобной архитектуры следует отнести полную зависимость пользователя от администратора хосткомьютера. Фактически пользователь (а нередко и программист) не имел возможности настроить рабочую среду под свои потребности используемое программное обеспечение. ПО многозвенной архитектуры. Недостаток предыдущей архитектуры в том, что резко возрастает нагрузка на сервер, а если он выходит из строя, то работа всей системы останавливается. Поэтому в некоторых случаях в систему добавляется так называемый сервер приложений, на котором выполняется вся вычислительная работа. Другой сервер баз данных обрабатывает запросы пользователей, на третьем может быть установлена специальная программа — монитор транзакций, которая оптимизирует обработку транзакций и балансирует нагрузку на серверы. В большинстве практических случаев все серверы соединены последовательно — позвенно, и выход из строя одного звена, если и не останавливает всю работу, то, по крайней мере, резко снижает производительность системы. ПО распределенной архитектуры. Чтобы избежать недостатков рассмотренных архитектур, были придуманы специальные технологии, позволяющие создавать программу в виде набора компонентов, которые можно запускать на любых серверах, связанных в сеть (компоненты как бы распределены по сети). Основное преимущество подобного подхода в том, что при выходе из строя любого компьютера специальные программымониторы, которые следят за корректностью работы компонентов и позволяют им «переговариваться» между собой, сразу перезапуская временно пропавший компонент на другом компьютере. При этом общая надежность всей системы становится очень высокой, а вычислительная загрузка распределяется между серверами оптимальным образом. Доступ к возможностям любого компонента, предназначенного для общения с пользователем, осуществляется с произвольного клиентского места. При этом, так как все вычисления происходят на серверах, появляется возможность создавать сверхтонкие клиенты — программы, только отображающие получаемую из сети информацию и требующие минимальных компьютерных ресурсов. Благодаря атому доступ к компонентной системе возможен не только с ПК, но и с небольших мобильных устройств. Частный случай компонентного подхода — доступ к серверным приложениям из броузеров через Интернет. Сегодня наиболее популярны три компонентные технологии — СОRВА консорциума OMGJava Beans компании Sun и СОМ+ корпорации Microsoft. Эти технологии будут определять развитие информационной индустрии в ближайшие десятилетия.

Принцип декомпозиции ПО.

Алгоритмическое (или линейное) программирование

Как уже отмечалось в теме 1, алгоритм — это формальное описание способа решения задачи путем разбиения ее на конечную по времени последовательность действий (элементарных операций). Под словом «формальное» подразумевается, что описание должно быть абсолютно полным и учитывать все возможные ситуации, которые могут встретиться по ходу решения. Под элементарной операцией понимается действие, которое по заранее определенным критериям (например, очевидности) не имеет смысла детализировать. В связи с этим основная идея самого простого варианта программирования алгоритмического (линейного) — разбиение (декомпозиция) программы на последовательность фрагментов, каждый из которых выполняет одно или несколько действий. Линейность алгоритма и программы состоит в данном случае в характерном требовании к фрагменту — чтобы его выполнение всегда начиналось с первой команды и всегда заканчивалось на самой последней, то есть, чтобы нельзя было попасть на команды фрагмента извне и передать управление из фрагмента на другие команды в обход заключительной. Алгоритм программы на выбранном языке записывается с помощью команд описания данных, вычисления значений и управления последовательностью выполнения программы. При этом предполагается, что текст программы представляет собой линейную последовательность операторов присваивания, цикла и условных операторов. Для алгоритмического описания способа решения задачи в виде конечной (по времени) последовательности действий характерны:

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

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

  • последовательной структурой (линейные алгоритмы рис. 2.5.а.
  • условной структурой (разветвляющиеся алгоритмы рис. 2.5.б);
  • циклической структурой (циклические алгоритмы рис. 2.5.в).

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

Рис. 2.5. Основные комбинации логической структуры алгоритмов

Методика нисходящего (структурного) программирования

При создании средних по размеру приложений (несколько тысяч строк исходного кода) чаще используется структурное программирование, идея которого заключается в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Для этого надо иметь средства для создания программы не только с помощью трех простых комбинаций операторов, но и с помощью средств, более точно отражающих конкретную структуру алгоритма. С этой целью в программирование введено понятие подпрограммы — набора операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. Программа разбивается на множество мелких подпрограмм (занимающих до 50 операторов — критический порог для быстрого понимания цели подпрограммы), каждая из которых выполняет одно из действий, предусмотренных исходным заданием. Комбинируя эти подпрограммы, удается формировать итоговый алгоритм уже не из простых операторов, а из законченных блоков кода, имеющих определенную смысловую нагрузку, причем обращаться к таким блокам можно по названиям. Получается, что подпрограммы — это новые операторы или операции языка, определяемые программистом. Наличие подпрограмм позволяет вести проектирование и разработку приложения сверху вниз — такой подход называется нисходящим проектированием. Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (например, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной (рис. 2.6).

Рис. 2. 6. Декомпозиция задачи при структурном программировании

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

Метод (программирование)

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

Различают простые методы и статические методы (методы класса):

  • простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса),
  • статические методы не имеют доступа к данным объекта и для их использования не нужно создавать экземпляры (данного класса).

Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных.

В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:

  • открытый ( public ) интерфейс — общий интерфейс для всех пользователей данного класса;
  • защищённый ( protected ) интерфейс — внутренний интерфейс для всех наследников данного класса;
  • закрытый ( private ) интерфейс — интерфейс, доступный только изнутри данного класса.

Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию.

В function-oriented-языках (C++, C# или Pascal) методы реализованы как классические процедуры (функции), которые неявно используют указатель на объект (экземпляр класса). В message-oriented-языках (smalltalk) принято говорить о сообщениях и о том, что объекты обрабатывают сообщения.

См. также

  • Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.

Актор • Артефакт • Атрибут • Интерфейс • Класс • Компонент • Объект • Пакет

Деятельность • Метод • Прецедент • Событие • Сообщения • Состояние

Коммуникации • Обзора взаимодействия • Последовательности • Синхронизации

Wikimedia Foundation . 2010 .

Смотреть что такое «Метод (программирование)» в других словарях:

Метод Ньютона — Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном… … Википедия

Метод золотого сечения — метод поиска значений действительно значной функции на заданном отрезке. В основе метода лежит принцип деления в пропорциях золотого сечения. Наиболее широко известен как метод поиска экстремума в решении задач оптимизации Содержание 1 Описание… … Википедия

Метод сопряжённых градиентов — Метод сопряженных градиентов метод нахождения локального минимума функции на основе информации о её значениях и её градиенте. В случае квадратичной функции в минимум находится за шагов. Содержание 1 Основные понятия … Википедия

Метод множителей Лагранжа — Метод множителей Лагранжа, метод нахождения условного экстремума функции , где , относительно ограничений , где меняется от единицы до . Содержание … Википедия

Метод одной касательной — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Метод Гаусса — Ньютона — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Метод Ньютона-Рафсона — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Метод Ньютона — Рафсона — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Метод касательной — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Метод касательной (Метод Ньютона) — Метод Ньютона (также известный как метод касательных) это итерационный численный метод нахождения корня (нуля) заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643 1727), под именем… … Википедия

Методы в программировании

РАЗДЕЛ II. ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Тема 4. Основные методы программирования

Архитектура ПО

В зависимости от варианта размещения элементов программного обеспечения по отношению к средствам вычислительной системы возможно формирование следующих вариантов построения ПО и правил взаимодействия составляющих его компонент [9]:

  • автономное ПО;
  • ПО файл-серверной архитектуры;
  • ПО клиент-серверной архитектуры;
  • ПО многозвенной архитектуры;
  • ПО распределенной архитектуры.

Автономные программы функционируют, как правило, на одном, отдельном компьютере (рис. 2.1).

Рис. 2.1. Автономная персональная обработка данных

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

Рис. 2.2. Коллективная обработка данных с использованием сетевых версий ПО и файлового сервера

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

Рис. 2.3. Обработка данных в архитектуре «клиент/сервер»

Благодаря этому удается повысить общую надежность системы, так как сервер работает значительно более устойчиво, чем клиентские ПК, и снять лишнюю нагрузку с клиентских мест, на которых удается использовать дешевые компьютеры. Запускаемые на них приложения реально осуществляют небольшие объемы вычислений, а иногда занимаются только отображением получаемой от сервера информации, поэтому они называются тонкими клиентами. Частный (вырожденный) случай этого варианта – терминальный режим обработки данных с помощью одной общей ЭВМ (рис. 2.4). Характерной особенностью такой системы является полная «неинтеллектуальность» терминалов, используемых в качестве рабочих мест их работой управляет так называемый хост-компьютер. При этом имеется возможность совместного использования различных ресурсов хост-комьютера (оперативной памяти, процессорного времени и дорогих периферийных устройства (принтеров, графопостроителей и т.д.), что существенно облегчает и удешевляет эксплуатацию такой системы. Разумеется, употребляемые при этом операционные системы должны поддерживать многопользовательский многозадачный режим.

Рис. 2.4. Модель обработка данных «хост-компьютер + терминалы»

К недостатку подобной архитектуры следует отнести полную зависимость пользователя от администратора хосткомьютера. Фактически пользователь (а нередко и программист) не имел возможности настроить рабочую среду под свои потребности используемое программное обеспечение. ПО многозвенной архитектуры. Недостаток предыдущей архитектуры в том, что резко возрастает нагрузка на сервер, а если он выходит из строя, то работа всей системы останавливается. Поэтому в некоторых случаях в систему добавляется так называемый сервер приложений, на котором выполняется вся вычислительная работа. Другой сервер баз данных обрабатывает запросы пользователей, на третьем может быть установлена специальная программа — монитор транзакций, которая оптимизирует обработку транзакций и балансирует нагрузку на серверы. В большинстве практических случаев все серверы соединены последовательно — позвенно, и выход из строя одного звена, если и не останавливает всю работу, то, по крайней мере, резко снижает производительность системы. ПО распределенной архитектуры. Чтобы избежать недостатков рассмотренных архитектур, были придуманы специальные технологии, позволяющие создавать программу в виде набора компонентов, которые можно запускать на любых серверах, связанных в сеть (компоненты как бы распределены по сети). Основное преимущество подобного подхода в том, что при выходе из строя любого компьютера специальные программымониторы, которые следят за корректностью работы компонентов и позволяют им «переговариваться» между собой, сразу перезапуская временно пропавший компонент на другом компьютере. При этом общая надежность всей системы становится очень высокой, а вычислительная загрузка распределяется между серверами оптимальным образом. Доступ к возможностям любого компонента, предназначенного для общения с пользователем, осуществляется с произвольного клиентского места. При этом, так как все вычисления происходят на серверах, появляется возможность создавать сверхтонкие клиенты — программы, только отображающие получаемую из сети информацию и требующие минимальных компьютерных ресурсов. Благодаря атому доступ к компонентной системе возможен не только с ПК, но и с небольших мобильных устройств. Частный случай компонентного подхода — доступ к серверным приложениям из броузеров через Интернет. Сегодня наиболее популярны три компонентные технологии — СОRВА консорциума OMGJava Beans компании Sun и СОМ+ корпорации Microsoft. Эти технологии будут определять развитие информационной индустрии в ближайшие десятилетия.

Принцип декомпозиции ПО.

Алгоритмическое (или линейное) программирование

Как уже отмечалось в теме 1, алгоритм — это формальное описание способа решения задачи путем разбиения ее на конечную по времени последовательность действий (элементарных операций). Под словом «формальное» подразумевается, что описание должно быть абсолютно полным и учитывать все возможные ситуации, которые могут встретиться по ходу решения. Под элементарной операцией понимается действие, которое по заранее определенным критериям (например, очевидности) не имеет смысла детализировать. В связи с этим основная идея самого простого варианта программирования алгоритмического (линейного) — разбиение (декомпозиция) программы на последовательность фрагментов, каждый из которых выполняет одно или несколько действий. Линейность алгоритма и программы состоит в данном случае в характерном требовании к фрагменту — чтобы его выполнение всегда начиналось с первой команды и всегда заканчивалось на самой последней, то есть, чтобы нельзя было попасть на команды фрагмента извне и передать управление из фрагмента на другие команды в обход заключительной. Алгоритм программы на выбранном языке записывается с помощью команд описания данных, вычисления значений и управления последовательностью выполнения программы. При этом предполагается, что текст программы представляет собой линейную последовательность операторов присваивания, цикла и условных операторов. Для алгоритмического описания способа решения задачи в виде конечной (по времени) последовательности действий характерны:

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

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

  • последовательной структурой (линейные алгоритмы рис. 2.5.а.
  • условной структурой (разветвляющиеся алгоритмы рис. 2.5.б);
  • циклической структурой (циклические алгоритмы рис. 2.5.в).

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

Рис. 2.5. Основные комбинации логической структуры алгоритмов

Методика нисходящего (структурного) программирования

При создании средних по размеру приложений (несколько тысяч строк исходного кода) чаще используется структурное программирование, идея которого заключается в том, что структура программы должна отражать структуру решаемой задачи, чтобы алгоритм решения был ясно виден из исходного текста. Для этого надо иметь средства для создания программы не только с помощью трех простых комбинаций операторов, но и с помощью средств, более точно отражающих конкретную структуру алгоритма. С этой целью в программирование введено понятие подпрограммы — набора операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. Программа разбивается на множество мелких подпрограмм (занимающих до 50 операторов — критический порог для быстрого понимания цели подпрограммы), каждая из которых выполняет одно из действий, предусмотренных исходным заданием. Комбинируя эти подпрограммы, удается формировать итоговый алгоритм уже не из простых операторов, а из законченных блоков кода, имеющих определенную смысловую нагрузку, причем обращаться к таким блокам можно по названиям. Получается, что подпрограммы — это новые операторы или операции языка, определяемые программистом. Наличие подпрограмм позволяет вести проектирование и разработку приложения сверху вниз — такой подход называется нисходящим проектированием. Сначала выделяется несколько подпрограмм, решающих самые глобальные задачи (например, инициализация данных, главная часть и завершение), потом каждый из этих модулей детализируется на более низком уровне, разбиваясь в свою очередь на небольшое число других подпрограмм, и так происходит до тех пор, пока вся задача не окажется реализованной (рис. 2.6).

Рис. 2. 6. Декомпозиция задачи при структурном программировании

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

Языки и методы программирования

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

В том случае, когда исполнителем является компьютер, то такое предписание оформляется как компьютерная программа. Таким образом, компьютерная программа – последовательность команд, понятная компьютеру. Используемый при этом язык называется языком программирования.

Сам процесс написания программ называется программированием. Более точно, программирование – это раздел информатики, изучающий методы и приемы составления программ для компьютера.

Язык программирования содержит три основных компонента:

Эти компоненты определяют правила записи программ.

Алфавит языка – это набор символов, которые можно применять в инструкциях языка программирования. Другие символы допустимы только в особых случаях, например в строковых константах.

Синтаксис языка определяет правила построения операторов.

Семантика – это смысловое содержание операторов языка программирования. Семантические правила определяют действия, описываемые различными операторами, и, в итоге сущность всего алгоритма.

Языки программирования можно разделить на две группы – языки высокого уровня и языки низкого уровня (машинные).

6.5.1 Языки низкого уровня

Машинный язык. Компьютер как исполнитель может только выполнять определенный набор цифровых команд. Такой набор команд составляет язык компьютера или машинный язык. По форме записи программа на машинном языке представляет собой битовую последовательность нулей и единиц. Это единственная форма информации, непосредственно доступная компьютеру. Все остальные формы программ перед их исполнением на компьютере должны быть предварительно преобразованы (переведены) на машинный язык.

Типичная команда машинного языка состоит из двух частей или полей: поля операции и поля операндов (рисунок 6.9).

Каждая машинная команда записывается в соответствующем двоичном коде. Приведем пример такой машинной команды для компьютера IBM-360, записанной в различных кодах (рисунок 6.10). Данная команда означает: «Загрузить содержимое ячейки с адресом, указанным в операнде 2, в регистр общего назначения, указанного в операнде 1».

Машинные команды в двоичной форме (см. рисунок 6.10а) могут непосредственно выполняться компьютером. Однако, написание даже относительно небольших программ в таких кодах требует от программиста больших затрат времени и усилий по причине малой наглядности и громоздкости используемого языка. Кроме того, ошибка в каком-либо бите, внешне малозаметная, как правило, приводит к фатальным для всей программы последствиям. Поиск такой ошибки становится непростой и чрезвычайно малоприятной задачей.

Язык ассемблера.В языке ассемблера программа пишется на уровне программных кодов, однако при этом используется символьная форма записи машинных команд. Например, приведенная выше команда (см. рисунок 6.10в) на языке ассемблера может быть записана так:

L Reg, Number1Загрузить содержимое ячейки Number1 в регистр Reg.

Очевидно, что благодаря символьным обозначениям, программу на ассемблере легче писать и воспринимать.

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

При работе компьютера каждая команда на ассемблере однозначно преобразуется (транслируется) в соответствующую одну команду на машинном языке.

Машинный язык и язык ассемблера относятся к языкам низкого уровня. С их помощью создаются, как правило, небольшие, но эффективные компьютерные программы, учитывающие все особенности компьютера, – драйверы, некоторые системные приложения и пр.

6.5.2 Языки высокого уровня

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

Языки программирования высокого уровня существенно отличаются от машинных языков. Основные отличия:

1) алфавит языка значительно шире, что позволяет создавать тексты программ в более наглядной и понятной форме;

2) набор операций, допустимых при написании программ, не зависит от набора машинных команд, т.е. языки являются машинно-независимыми;

3) конструкции операторов языка задаются в более привычном для человека виде;

4) наличие библиотек стандартных подпрограмм.

Первым и одним из самых популярных языков высокого уровня стал язык Фортран (Fortran – от FORmula TRANslator), разработанный группой программистов фирмы IBM в 1954 г. Модификации данного языка до сих пор широко используются при решении инженерных и научных задач, требующих большого объема вычислений.

Классификация языков программирования высокого уровня приведена на рисунке 6.11.

Каждый язык программирования имеет свое название. История этих названий восходит к моменту создания языков. Правила программ в некоторых языках неоднократно менялись, но названия языков остались без изменения.

Рисунок 6.11 – Классификация языков программирования высокого уровня

Читать еще:  A b c программирование
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×