Пятница, 11.10.2024, 01:35

Я программист!
Меню сайта
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 2
    Гостей: 2
    Пользователей: 0

    Рассылки Subscribe.Ru
    Как я стал программистом
    Подписаться письмом

    Рассылки Subscribe.Ru
    Как заработать капитал на уникальном бизнесе
    Подписаться письмом

    Рассылки Subscribe.Ru
    Как хорошо потрабатывать без отрыва от роботы
    Подписаться письмом

    Занятие 3. Технология программирования (2 часа)

    Этапы создания программы

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

    В процессе создания программы можно выделить следующие этапы:

    - постановка задачи;

    - математическое описание (для научно-инженерных задач);

    - алгоритмизация вычислительного процесса;

    - составление программы;

    - отладка программы;

    - решение задачи на ЭВМ и анализ результатов. 

    Постановка задачи

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

    Математическое описание

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

    - реалистичности (правильное отражение моделью наиболее существенных черт исследуемого явления)

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

    Алгоритмизация вычислительного процесса

    На данном этапе составляется алгоритм решения задачи. Процесс обработки данных разбивается на отдельные относительно самостоятельные блоки, и устанавливается последовательность выполнения блоков. Разрабатывается блок-схема алгоритма.

    Составление программы

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

    Отладка программы

    Отладка заключается в поиске и устранении синтаксических и логических ошибок в программе.

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

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

    Решение задачи на ЭВМ и анализ результатов

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

    Разработанная программа длительного использования устанавливается на ЭВМ, как правило, в виде готовой к выполнению машинной программы. К программе прилагается документация, включая инструкцию для пользователя.

    Компиляция и интерпретация программ

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

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

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

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

    - интерпретаторы

    - трансляторы.

    Интерпретатор

    Интерпретатор — это программа, которая получает исходную программу и по мере распознавания конструкций языка переводит каждую команду программы и одновременно её выполняет; если обнаруживается ошибка, сообщает о ней и прекращает выполнение программы.

    Транслятор

    Транслятор — это программа, которая принимает исходную программу и порождает на своем выходе программу, записываемую на объектном языке программирования (объектную программу). В частном случае объектным может служит машинный язык, и в этом случае полученную на выходе транслятора программу можно сразу же выполнить на ЭВМ. В общем случае объектный язык необязательно должен быть машинным  или близким к нему (автокодом). В качестве объектного языка может служить и некоторый промежуточный язык.

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

    Транслятор с языка высокого уровня называют компилятором. Он переводит всю программу целиком и в конце работы выдаёт список ошибок, если они обнаружены.

    Стили программирования

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

    Процедурное  программирование

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

    Процедурные языки характеризуются следующими особенностями:

    - необходимостью явного управления памятью, в частности, описанием переменных;

    - малой пригодностью для символьных вычислений;

    - отсутствием строгой математической основы;

    - высокой эффективностью реализации на традиционных ЭВМ.

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

    Двоичный язык

    Двоичный язык является непосредственно машинным языком. В настоящее время программистами практически не применяются.

     

    Язык Ассемблера

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

    Язык Макроассемблера

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

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

    С

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

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

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

    Ваsic

    Ваsic (Beginners All-purpose Symbolic Instruction Code - многоцелевой язык символических инструкций для начинающих) представляет собой простой язык программирования, разработанный в 1964 году. Первоначально работа велась с использованием интерпретаторов, в настоящее время для этого языка имеются также и компиляторы.

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

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

    Pascal

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

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

    - упорядочивание связей между фрагментами программы;

    - структуризация данных;

    - реализована концепция определения новых типов данных на основе уже имеющихся.

    В отличие от С, является строго типизированным.

     

    Функциональное программирование

    Сущность функционального (аппликативного) программирования определена А. П. Ершовым как «... способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение имени для функции, а единственным правилом композиции — оператор суперпозиции функции. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».

    Роль основной конструкции в функциональных языках играет выражение.

    Аппликативный язык программирования включает следующие элементы:

    - классы констант, которыми могут манипулировать функции;

    - набор базовых функций, которые программист может использовать без предварительного объявления и описания;

    - правила построения новых функций из базовых;

    - правила формирования выражений на основе вызовов функций.

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

    - вызовы базовых функций заменяются соответствующими значениями;

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

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

    Первым таким языком был LISP (LISt Processing — обработка списков), созданный в 1959 году. Цель его создания состояла в организации удобства обработки символьной информации. Существенная черта этого языка — унификация программных структур и структур данных: все выражения записываются в виде списков.

    Логическое программирование

    Логическое, или реляционное программирование, — открыло появление языка PROLOG (PROgramming in LOGic — программирование в терминах логики). Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки. Языки логического программирования широко используются в системах искусственного интеллекта.

    Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является побочным продуктом этого процесса. В реляционном программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Это свидетельствует о декларативности языка логического программирования. Она метко выражена в формуле Р. Ковальского: «алгоритм = логика + управление». Языки логического программирования характеризуются:

    - высоким уровнем;

    - строгой ориентацией на символьные вычисления;

    - возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные;

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

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