
- •Лекция 1. Введение в программирование План
- •1. Языки программирования. Общая характеристика
- •2. Краткая история языков программирования Машинные команды
- •Мнемокоды
- •Структурное программирование
- •Современное программирование
- •Некоторые причины и тенденции развития языков программирования
- •3. Парадигмы программирования
- •Процедурная (директивная) парадигма
- •Функциональное и логическое программирование
- •Объектно-ориентированное программирование
- •Объектно-ориентированное программирование
- •4. Особенности и применение разных классов языков программирования
- •Неструктурные языки (широко использовались 40-е годы)
- •Директивные (структурные) языки (появились в 50-е годы)
- •Декларативные (функциональные и логические) языки (зародились в 60-е годы)
- •A) Функциональные языки
- •B) Логические языки
- •Объектно-ориентированные языки
- •Языки сценариев
- •Краткая характеристика некоторых языков программирования
- •5. Этапы разработки программы
- •Этапы разработки программы для компьютера (решения задачи на эвм)
- •Качество программы и ее разработка
- •Тестирование и отладка программ
- •Проектирование программ
- •6. Система программирования
Лекция 1 Программирование (Б-И)
Лекция 1. Введение в программирование План
1. Языки программирования. Общая характеристика
Программи́рование — в обычном понимании, это процесс создания компьютерных программ.
Программированием также называют настройку электронных устройств и программно-аппаратных комплексов. В общем понимании, программирование — это процесс описания функционирования устройства, который может быть выражен либо в структуре самого устройства, либо в виде набора команд, выполняемых устройством. Программирование сочетает в себе элементы науки (логики, математики, информатики, кибернетики), инженерной дисциплины и искусства (авторской творческой деятельности).
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
Программирование для ЭВМ основывается на использовании языков программирования, на которых записывается программа.
Первый вопрос, который обычно задает человек, впервые сталкивающийся с новым языком программирования: Что этот язык может «делать»?
Неявно мы сравниваем новый язык с другими. Ответ очень прост: все языки могут «делать» одно и то же — производить вычисления! Однако, если все они могут выполнять одно и то же — вычисления — то, несомненно, причины существования сотен языков программирования должны быть в чем-то другом.
Программа — это последовательность символов, определяющая вычисление.
Язык программирования — это набор правил, определяющих, какие последовательности символов составляют программу и какое вычисление описывает программа.
Вас может удивить, что в определении не упоминается слово «компьютер»! Программы и языки могут быть определены как сугубо формальные математические объекты.
Однако люди больше интересуются программами, чем другими математическими объектами типа групп, именно потому, что программу — последовательность символов — можно использовать для управления работой компьютера.
И мы с вами ограничимся, в основном, изучением того, как программы выполняются на компьютере.
Первые цифровые компьютеры были очень похожи на простые калькуляторы, какими сегодня пользуются для расчетов на рынке. Они работали по «жесткой» программе, которую нельзя изменить.
Наиболее значительным из первых шагов в усовершенствовании компьютеров была идея Джона фон Неймана о том, что описание вычисления (программу) можно хранить в памяти компьютера так же, как данные. Компьютер с запоминаемой программой, таким образом, становится универсальной вычислительной машиной, а программу в нем стало возможно изменять, только заменяя коммутационную доску, вводя перфокарты, вставляя дискету или подключаясь к телефонной линии.
Каждая ЭВМ является автоматом, состоящим из памяти, образуемой внешним и оперативным запоминающими устройствами, устройства управления (УУ) и арифметические устройства (АУ), в котором могут выполняться некоторые действия или операции. Память имеет вид занумерованной последовательности ячеек, в каждой из которых хранится порция двоичной информации в виде серии нулей и единиц.
Автоматическая работа ЭВМ, управляемая программой, состоит из последовательности тактов. На каждом такте УУ выбирает из предписанной ему ячейки памяти порцию информации. Эта порция трактуется как команда, т. е. предписание АУ выполнить некоторую операцию.
Обычно в ЭВМ выполнение операции состоит в том, чтобы из определённых ячеек памяти взять хранящуюся там информацию, передать её в АУ для выполнения над ней нужного действия, результат которого отправить в указанную ячейку памяти, и сообщить УУ номер ячейки следующей команды.
Отдельные действия, совершаемые ЭВМ, весьма просты — это арифметические и логические операции, операции сравнения, переписывания порции информации и т.п. Т. о., составить программу для ЭВМ — это значит представить способ решения задачи в виде такой совокупности машинных команд (программы), чтобы они, будучи размещенными в памяти, поочерёдно выполняясь и вызывая одна другую, реализовали нужные вычисления.
Поскольку компьютеры — двоичные машины, распознающие только нули и единицы, то хранить программы в компьютере технически просто, но практически неудобно: каждая команда должна быть записана в виде двоичных цифр (битов), которые можно представить механически или электрически.
Одним из первых программных средств был символический ассемблер. Ассемблер берет программу, написанную на языке ассемблера (каждая команда представлена в нем в символьном виде), и транслирует символы в двоичное представление, пригодное для выполнения на компьютере.
Например, команду load R3,54 означающую «загрузить в регистр 3 данные из ячейки памяти 54», намного легче прочитать, чем эквивалентную последовательность битов.
Если проследить эволюционный путь развития языков программирования, то можно заметить аналогию с развитием живого мира. Когда сначала существовали лишь простые организмы (и языки программирования), а потом появились более сложные. Причем и там и там можно отметить следующие:
низкоуровневые языки и простейшие организмы не потеряли своего значения и по сегодняшний день. Например, бактерии являются первопроходцами при освоении новых сред обитания. А язык ассемблер является незаменимым инструментом при отдаче прямых команд процессору и обеспечении высокой эффективности вычислений.
как высокоорганизованные организмы, так и языки высокого и сверхвысокого уровней очень разнообразны и специфичны. Например, очень многообразны млекопитающие, при этом каждое животное жестко приспособлено к конкретным условиям среды. Многообразны и языки сверхвысокого уровня, причем каждый из них хорошо решает лишь определенный класс задач.
Термин |
Англ. термин |
Разъяснение |
программирование |
programming |
Раздел прикладной математики, изучающий и разрабатывающий методы и средства составления, проверки и улучшения программ на ЭВМ. |
программирование |
programming |
Процесс подготовки задач для их решения на ЭВМ. Включает следующие этапы: 1) поиск алгоритмического решения, 2) составление программы на языке ЭВМ, 3) трансляцию с языка программирования на машинный язык. |
язык (программирования) |
programming language |
Формальный язык, состоящий из переменных, операторов, операций и других синтаксических конструкций, применяемых для описания информации (данных) и алгоритма (программы) для их отображения на ЭВМ. |
Развитие Программирования как науки началось с 1947 в работах американских математиков Дж. Неймана, А. Беркса и Г. Голдстайна, которые описали принципы ЭВМ, управляемой программой, хранящейся в памяти. Они же ввели в употребление блок-схемы программы.
Понятие подпрограммы и методики её использования было введено в 1951 английскими учёными М. Уилксом, Дж. Уилером и С. Гиллом.
Советский математик А. А. Ляпунов, первым в СССР прочитавший в МГУ в 1952 курс Программирования, определил Программирование как многоэтапный процесс и ввёл в Программирование аппарат символических обозначений, явившийся предвестником языков Программирование высокого уровня.
По сути, язык программирования — это механизм абстрагирования. Он дает возможность программисту описать вычисления абстрактно и в то же время позволяет программе (обычно называемой ассемблером, компилятором или интерпретатором) перевести это описание в детализированную форму, необходимую для выполнения на компьютере.
Все программы, по сути, обрабатывают данные. При этом понятие данных можно трактовать весьма широко. Однако все они для современных ЭВМ кодируются определенным набором нулей и единиц. Внутри машины программы работают именно с такими битовыми данными, но современный программист может не видеть такой «мелочности» и оперировать привычными для человека понятиями: числами, строками, объектами и т.п.
Зачастую, именно программы, установленные на компьютере, определяют его назначение. Конструкторские особенности могут уйти на второй план.
Машины с точки зрения их возможностей обработки данных универсальны (работают с 0 и 1), а человек пишет команды на языке программирования, который больше удовлетворяет его возможностям. Следовательно, должна существовать промежуточная программа для преобразования команд с языка программирования на язык машин. И такие программы существуют в виде так называемых компиляторов и интерпретаторов.
транслятор (языка программирования) |
translator (of the programming language) |
Программа, переводящий алгоритм, написанный на языке программирования высокого уровня, в объектный код или в псевдокод исполнителя. По этому принципу трансляторы делятся на компиляторы и интерпретаторы. |
компилятор |
compiler |
Транслятор, преобразующий текст программы в объектный код. |
интерпретатор |
interpreter |
Транслятор, преобразующий текст программы на языке высокого уровня в псевдокод, немедленно исполняющийся на компьютере. К "интерпретируемым" языкам относят языки: "Бейсик", "Perl", "Python", Java и т.д. |
объектный код |
object code |
Код, генерируемый компилятором, который максимально приближен к машинным кодам ЭВМ. В готовую к исполнению на ЭВМ программу этот код преобразуется при помощи компоновщика. |
Они весьма разнообразны, т.к. существует множество языков программирования, каждый из которых имеет свой компилятор или интерпретатор. Другими словами вычислительные машины «говорят» почти всегда на одном языке, а программисты – на разных языках.
Разнообразие языков программирования можно объяснить многообразием сфер человеческой деятельности, историческим развитием компьютерных технологий и конкуренцией разработчиков систем программирования, а также рядом других факторов.
Различные языки программирования поддерживают различные стили программирования (т. е. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать язык программирования, наиболее полно подходящий для решения поставленной задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).