Полезная статья? Пожалуйста, поставьте "+"
Языки программирования и методы трансляции - Содержание
С появлением первой вычислительной машины возникла необходимость управлять процессом вычисления, задавать алгоритм и данные для вычисления, т.е. составлять набор действий (команд) машины. Первые вычислительные машины имели небольшой набор команд, составляющих в общей сложности машинный язык. Все команды реализовывались аппаратно, а программа представляла собой последовательность команд и данных в числовом виде. Мало-мальски сложная программа становилась трудночитаемой даже для автора и эффект от вычислительных машин был невелик. В этот момент стало ясно, что «язык» общения человека и машины нуждается в совершенствовании. Изображение машинных команд в виде слов или символов стал первым шагом, а полученный язык называли ассемблером или мнемокодом. С одной стороны, программы стали более читабельными, а с другой стороны понадобился транслятор – для перевода из мнемонического описания в машинные коды. Необходимость трансляции породила целый класс новых задач. Язык ассемблера существует практически для любой машины, и на нем до сих пор пишут системные программы, требующие работы со специфичными аппаратными возможностями. Следующий шаг в создании языка общения компьютера и человека – это появление языков высокого уровня. Т.к. перед выполнением программы ее все равно необходимо транслировать, то почему бы не изменить сам язык написания программы? Ввести новые команды, не имеющие соответствующих машинных команд, но реализуемые набором аппаратных команд? Ведь это может упростить понимание программы и ее составление. Сами языки высокого уровня по сравнению с ассемблером обладают определенными свойствами: - возможность использовать переменные;
- возможность записи сложных выражений;
- расширяемость типов данных (возможность конструировать новые);
- расширяемость набора команд (использование функций, библиотек);
- слабая зависимость от используемой вычислительной машины.
Языки высокого уровня являются универсальными – т.е. на них можно составить любую программу. Транслятор, преобразующий программу на таком языке в машинный код стал более сложным. Возникла необходимость в текстовом редакторе для удобного написания программ, в отладчике. Весь этот набор инструментов является средой программирования.
Было создано большое множество универсальных языков программирования (Паскаль, Си, Modula-2, …), многие их которых являлись предпочтительнее один другого в зависимости от класса задач. В связи с этим появились и ярко выраженные проблемно- ориентированные языки, такие как COBOL, GPSS, Simula, Snobol.
Языки высокого уровня позволяют повысить уровень абстракции проблемы при составлении программы и позволяют представить ее в достаточно наглядной форме. Это привело к тому, что языки программирования стали не только языками общения человека с машиной, но и языками общения человека с человеком. Порой проще показать программу на достаточно понятном языке, чем объяснять алгоритм «на пальцах». И этим свойством стали активно пользоваться. Более того, появились псевдокоды – некое подобие языка высокого уровня, который имеет очень короткое описание, но позволяет написать практические любые программы и достаточно понятен любому человеку, хоть раз использовавшему какой-либо язык программирования. Псевдокод не обязательно должен быть так же детален как язык программирования, например блок-схемы не определяют команды, но являются одновременно точным и простым синтаксисом описания алгоритмов. Сильное влияние на развитие программирования оказал Э. Дейкстра, предложивший метод структурного программирования. Одновременно позиция Ч. Хоара, показавшего, что любая программа может быть математически проанализирована, позволяет избежать часть ошибок, если использовать соответствующие формальные приемы проверки программ и алгоритмов. Дейкста же заметил, что язык программирования влияет на способ мышления [1]. Освоение алгоритмических языков программирования заставляет мыслить формальными категориями, «прививает» определенную логику, которая несколько отличается от логики написания программ на ассемблере. Программирование – это конструирование [2] и чтобы конструировать следует последовательно использовать элементарные принципы конструирования, начиная от проектирования функций, модулей, абстрактных типов данных и заканчивая построением сложных систем. Сложность современных программных систем уже достигла такого уровня, когда для создания конечной системы необходимо участие нескольких разработчиков в течение достаточно долгого времени. Здесь встает проблема координирования их действий, фиксация всех условностей, разработка исходных требований и их согласование с конечными пользователями и заказчиками. Разработка программ уже стала инженерией, и четкое следование заранее выработанному процессу построения системы – залог успеха. Кроме написания работающей программы существует проблема оценки соответствия этой программы требованиям к ней. Тут необходимо проводить тестирование, которое не всегда будет являться полным, но в конечном итоге должно привести к появлению качественного продукта, т.е. программы, соответствующей ожиданиям от нее. Первая глава пособия дает общее представление о процессе разработки программного обеспечения, а последняя глава о правильном подходе к построению самой программы.
|