Лекция: Языки программирования. Ассемблеры, языки высокого уровня. Объектно-ориентиро-ванное программирование
Delphi(от 1 до 7 версии), QuickBasic, Virtual Basic, Turbo Pascal, Borland Pascal, Java, С++ — всё это языки программирования.
Языки программирования принято делить на две основные группы, по мере их близости или удалённости от языка машинных команд.
Языки низкого уровня---например, язык ассемблера — мало похожи на нормальный, привычный человеку язык.
Языки высокого уровня---например, известные всем BASIC, PASCAL,C++ — в значительно большей степени ориентированы на человека. Команды этих языков — понятные человеку английские слова(goto, ren, list, if).
И пусть каждая из этих команд для человека- всего лишь слово. Но компьютеру для выполнения любой из них придётся проделать уже не одну операцию, как в ассемблере, а несколько. И чем «выше» язык, тем больше этих операций. Например, Одна из самых «высоких» программ в компьютере — системные файлы конфигураций autoexec.bat и соnfig.sys. Каждая строчка-команда в этих файлах требует выполнения отдельных программ — например, запуска программы русификации операционной системы или удаления файла.
Понятно, что повседневным орудием программистов сегодня являются именно языки высокого уровня, такие как С++, Delphi(созданный на основе языка Pascal) или Virtual Basic. И практически все программные пакеты, которыми мы пользуемся сегодня, созданы с помощью именно этих или подобных им языков. Поэтому и обучение программированию начинают именно с таких языков, как Pascal или Basic- они просты и лучше других иллюстрируют принципы программирования. К тому же практически навыки работы с этими языками обязательно пригодятся в будущем.
Существуют как универсальные, так и специализированные языки программирования. Например, вряд ли кто будет создавать бытовые программы для домашнего компьютера, пользуясь языком Java- зато для разработки Интернет-программ он незаменим. Специализированным языком программирования является и язык HTML- на этом языке создаются WWW-страницы Интернет.
У каждого языка есть свой лексикон — системы- системы команд-операторов, которые могут значительно отличаться друг от друга в разных языках. И даже типы их могут быть различны: если в одном языке для выполнения какой-то операции требуется одна команда, то в другом — целый блок. И наоборот.
Поэтому помимо «лексических» различий, для каждого языка программирования существует свой особый метод создания алгоритмов, приёмов «конструирования» программы и подходов к написанию каждого её элемента.
Объектно-ориентированное программирование: Не все языки программирования могут быть объектно-ориентированными. Слово «объектно-ориентированный» стало в области программирования синонимом слово «хорошо». В печати чаще всего встречаются элементы такого вида: «Ada — это хорошо; объектной ориентированности — это хорошо; отсюда следует, что Ada — объектно-ориентированный язык».
Из множества промышленных объектно-ориентированных расширений языков, которых сейчас создается все больше и больше, одним из самых интересных является Prolog++, объектно-ориентированная версия Пролога, созданная Logic Programming Associates (LPA). LPA давно находится в числе основных поставщиков Пролога и имеет версии языка как для PC, так и для Macintosh. Рассмотрим MacObject, версия Prolog ++ для Macintosh. MacObject используется вместе с MacProlog3.1. Итак, что же предлагает Prolog ++ такого, чего не могут предложить другие объектно-ориентированные среды, и как объектно-ориентированное расширение вписывается в язык, основанный на правилах?
Prolog и Prolog ++
Пролог — это язык, предназначенный для поиска решений. Это декларативный язык, то есть формальное определение (постановка) задачи может быть использовано для ее решения. Пролог определяет логические отношения в задаче, как отличные от пошагового решения этой задачи. Центральной частью Пролога являются средства логического вывода, которые решают запросы, используя заданное множество фактов и правил, к которым обращаются как к утверждениям. Пролог также не имеет деления переменных на типы и может динамически добавлять правила и факты к средствам вывода. Таким образом, это гибкий язык, и он более пригоден для объектно-ориентированного расширения, чем язык со строго заданными типами, например, Паскаль.
Объектно-ориентированная разработка программного обеспечения связана с применением объектно-ориентированных моделей при разработке программных систем и их компонентов. Говоря об объектно-ориентированной разработке, имеют в виду:
- объектно-ориентированные методологии (технологии) разработки программных систем;
- инструментальные средства, поддерживающие эти технологии.
Объектно-ориентированная разработка может начаться на самом первом этапе жизненного цикла; она не связана с языком программирования, на котором предполагается реализовать разрабатываемую программную систему: этот язык может и не быть объектно-ориентированным. На этапе разработки объекты — это некоторые формальные конструкции (например, прямоугольники с закругленными углами, с помощью которых они изображаются на схемах), никак пока не связанные с их будущей реализацией на одном из языков программирования. Объектно-ориентированная разработка программного обеспечения связана с применением объектно-ориентированных методологий (технологий). Обычно эти объектно-ориентированные методологии поддерживаются инструментальными программными средствами, но и без таких средств они полезны, так как позволяют хорошо понять различные аспекты и свойства разрабатываемой программной системы, что в последующем существенно облегчает ее реализацию, тестирование, сопровождение, разработку новых версий и более существенную модификацию.
Показано, что наиболее удобными для реализации программных систем, разработанных в рамках объектно-ориентированного подхода, являются объектно-ориентированные языки программирования, хотя возможна реализация и на обычных (не объектно-ориентированных) языках (например, на языке C и на языке Fortran).
Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения.
Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Однако современники (программисты 60-х годов) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что он был реализован как интерпретируемый (а не компилируемый) язык, что было совершенно неприемлемым в 60-е годы, так как интерпретация связана со снижением эффективности (скорости выполнения) программ.
Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования: C++, Smalltalk, Eiffel и др.
Наиболее распространенным объектно-ориентированным языком программирования безусловно является C++. Свободно распространяемые коммерческие системы программирования C++ существуют практически на любой платформе. Широко известна свободно распространяемая система программирования G++, которая дает возможность всем желающим разобрать достаточно хорошо и подробно прокомментированный исходный текст одного из образцовых компиляторов языка C++. Завершается работа по стандартизации языка C++: последний Draft стандарта C++ выпущен в июне 1995 г. (он доступен по Internet).
Разработка новых объектно-ориентированных языков программирования продолжается. С 1995 года стал широко распространяться новый объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает синтаксис языка C++, однако эти языки имеют мало общего. Java интерпретируемый язык: для него определены внутреннее представление (bytecode) и интерпретатор этого представления, которые уже сейчас реализованы на большинстве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java, обеспечивает их переносимость на новые платформы и адаптируемость к новым окружениям. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet).