Нажмите, чтобы перейти на главную страницу Софт 54

Разработка программы для компьютера

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

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

Данные — различные информационные объекты (числа, символы и т.п.).

Программа — это упорядоченная последовательность команд (инструкций) для компьютера.

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

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

ИСХОДНЫЕ ДАННЫЕ

ПРОГРАММА
и
ПРОМЕЖУТОЧНЫЕ ДАННЫЕ
РЕЗУЛЬТАТЫ

Например, при решении квадратного уравнения ах2 + Ьх + с = 0 (a ≠ 0) исходными данными являются коэффициенты а, Ь, с; результатами — корни уравнения х1, х2; промежуточным данным — дискриминант уравнения D = b2 − 4ac.

Технологический процесс разработки программы

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

Язык программирования — это знаковая система для описания алгоритмов, обеспечивающая модели для записи формул. Его основная задача — предоставить программисту аппарат для записи действий и описания алгоритмов какой-либо задачи.

Алгоритм — это последовательность команд управления каким-либо исполнителем.

Алгоритм может быть предназначен для его выполнения Человеком или Автоматическим устройством — формальным исполнителем. Задача исполнителя — точная реализация, шаг за шагом, уже имеющегося алгоритма. Формальный исполнитель не обязан понимать или вникать в сущность алгоритма, а возможно, и неспособен его понять. В понимании алгоритма нет необходимости, т.к. в алгоритме закодированы все сведения, необходимые для решения поставленной задачи, что позволяет создавать устройства способные выполнять алгоритмы. В свою очередь, если не существует алгоритма выполнения определенного задания, то его выполнение оказывается за пределами возможностей машин.

Работа по решению любой задачи с использованием компьютера (исполнителя) делится на следующие этапы:

  1. Постановка задачи.
  2. Формализация задачи.
  3. Построение алгоритма.
  4. Составление программы на языке программирования.
  5. Отладка и тестирование программы.
  6. Использование программы.

Часто эту последовательность называют технологической цепочкой решения задачи. Непосредственно к программированию в этом списке относятся пункты 3, 4, 5.

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

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

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

Процесс разработки алгоритма для решения задачи называется алгоритмизацией.

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

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

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

Таким образом, программист должен обладать следующими знаниями и навыками:

  • знать законы логического мышления;
Логическое мышление — это тип мышления человека, посредством которого он может связать в цепочку факты и события, чтобы получить варианты решения задачи.

Как понять есть ли логическое мышление?
Умение логически мыслить предполагает способность правильно строить различные виды суждений, понимать их структурные элементы, признаки, отношения между суждениями, а также проверять является суждение истинным или ложным. ПОДРОБНЕЕ…
  • уметь строить алгоритмы;
  • знать языки программирования;
  • уметь работать в соответствующей системе программирования.

«Первым программистом» принято считать Аду Лавлейс, помощницу изобретателя «Аналитической машины» Чарльза Бэббиджа. Ада понимала необходимость создания специального языка, предназначенного для общения человека и машины. В 1843 году Ада написала несколько программ для не существующей ёще машины Бэббиджа. Ни Чарльз, ни Ада так и не увидели своё детище в работе — «аналитическая машина» так и осталась на бумаге, в виде чертежей и набросков. И лишь в XX веке она была построена группой американских студентов — как дань памяти «отцу компьютеров».

В 40-е годы ХХ века программисты первых компьютеров работали непосредственно с машинными кодами, где каждую, даже самую крохотную операцию с данными в памяти компьютера приходилось описывать отдельно (Рисунок 1).

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

Каждая машинная инструкция выполняет определённое действие, такое как операция с данными (например, сложение или копирование машинного слова в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть безусловным или условным, зависящим от результатов предыдущих инструкций). Любая исполнимая программа состоит из последовательности таких атомарных машинных операций. ПОДРОБНЕЕ…

Например, программа вывода на экран сообщения «Hello, World!» на машинном языке для процессора архитектуры x86 выглядит следующим образом (в шестнадцатеричном представлении): BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Зеленым показаны данные (строка «Hello, World!»).

ENIAC: процесс программирования
Рисунок 1. Ввод машинных команд непосредственно в оперативную память компьютера

В начале 50- годов программирование потихоньку начало приобретать более «человеческие» черты. Новые инструменты программирования (языки ассемблера) работали все с теми же «аппаратными» командами, однако позволяли использовать более привычные для человека буквенные символы и короткие текстовые операторы. Изменился и способ программирования компьютера: если раньше все команды вводились в компьютер напрямую (Рисунок 1), то теперь исходный текст программы нужно было превращать в пригодную для машины систему команд с помощью отдельного инструмента — транслятора. «Ассемблер» — это не название какого-то универсального языка программирования, поскольку ассемблер (как и система машинных кодов) для каждого устройства — свой, собственный.

Идея «универсального языка» более высокого уровня, чем ассемблер, подходящего для различных вычислительных машин, воплотилась в жизнь лишь к концу 50- годов, когда один за другим на свет появились языки Fortran (1955), LISP (1958) и COBOL (1959).

Однако настоящая революция в программировании состоялась в следующее десятилетие: в 1963 году был придуман язык Basic (Томас Курц и Джезеф Кемени), а в 1969 году создан Pascal (Никлаус Вирт). Простая и интуитивная понятная система команд делала эти языки доступными даже для студентов. Оба языка стали на долгие годы основными языками программирования для персональных компьютеров.

Разницу между «высокими» и «низкими» языками программирования удобно показать на примере стандартной «стартовой точки» в обучении программированию — вывода на экран сообщения «Hello, World!».

Вот пример ассемблерного кода для этой операции:

;Title Program (hello.asm)
;displays ‘Hello, World!’
dosseg
.model small
.stack 100h
.data
Hello db ‘Hello, World’, ‘$’
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 9
mov dx, offset hello
int 21h
mov ax, 4C00h
int 21h
main endp
end main

А вот как выглядит эта же программа на языке Basic

10 PRINT «HELLO WORLD»

…и на языке Pascal

program MyProgram;
begin
WriteLn (‘Hello, World’);
end.

…а вот так на языке C#

namespace oap
{
class Program
{
static void Main(void)
{
Console.WriteLine('Hello,World');
}
}
}

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

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

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

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

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

Концепция модульного программирования

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

Коцепция модульного программирования послужила теоретической основой метода структурного программирования

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

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

Каждый вспомогательный алгоритм описывает способ решения некоторой вспомогательной задачи или даже общий способ решения некоторого класса вспомогательных подзадач.

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

Концепция объектно-ориентированные языки программирования

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

Основные представители:

C++ (1986, широко используется во многих областях, обеспечивает хорошее сочетание функциональности и простоты использования)

Java (потомок C++, основным его преимуществом считается платформа-независимость)

C# (200, являющийся удачным сочетанием языков C++ и Java, ориентирован на разработку Web-приложений)

JavaScript, PHP - языки сценариев

Помимо языков, используемых для создания «автономных» программ, существуют и более специализированные инструменты, предназначенные для работы в какой-то особой среде — языки сценариев (JavaScript, PHP, Perl), макросы (наборы инструкций, выполняемых как одна команда). Эти языки отстоят от «железа» ещё дальше. Например, программа на JavaScript выполняется внутри другой программы — браузера, который в свою очередь установлен на компьютере — напрямую же, без посредника, программа на JavaScript работать не может.

JavaScript, PHP - языки сценариев

Концепция визуального программирования

Казалась бы, зачем каждый раз начинать каждую программу с написания интерфейса, создания собственных обработчиков событий и так далее. Главное в программе — достичь хорошего результата и качественно и эффективно запрограммировать алгоритм, уделяя структуре программы большую часть времени. Такой подход в программировании позволяет уделить больше времени на разработку логики программы, а не на создании интерфейса и «рисование» кнопочек будущего приложения. Именно в связи с этим стали появляться программные пакеты для быстрой разработки программного обеспечения. Такие системы имеют свое собственное название — RAD (Rapid Application Development) — быстрая среда разработки приложений. Каждая среда разработки имеет огромный набор встроенных объектов, из которых как из кирпичиков строятся будущие Corel’ы и т.п.

К наиболее известным средствам визуального создания программ относится Visual Studio фирмы Microsoft. Visual Studio — это набор инструментов для программиста. Первая версия вышла в свет 1997 году, и уже тогда в ней можно было найти большую часть инструментов для проектировщиков и разработчиков различных Windows-приложений. Visual Studio может с успехом применятся для разработки, как традиционных клиентских приложений, так и веб-приложений.

Тенденции в программировании компьютеров

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

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

Рекомендуемая литература

  1. Брукшир Дж. Гленн, Брилов Деннис Компьютерные науки. Базовый курс М: Вильямс, 2019.
  2. Леонтьев В.П. Новейшая энциклопедия. Компьютер и Интернет. М.: ОЛМА Медиа Групп.
© Soft54, 2024. All rights reserved.