235
В связи с активным маркетинговым продвижением в последние годы
языка Java и переходом его в стадию зрелости о языке C
++
стали понемногу
забывать (незаслуженно). Однако, несмотря на присущие ему отдельные
недостатки, язык C
++
был и остается проверенным и надежным инструментом
решения практически любых задач среди инструментальных средств
профессионального программирования. Его доминирующая роль сохраняется в
реализации приложений для бытовой электроники и в критически важных,
наиболее сложных программных системах корпоративного уровня, требующих
быстродействия и оптимизации работы с памятью. Следует отметить, что язык
C
++
доступен на любых платформах.
Язык
Java, как один из наиболее современных языков
программирования, изначально предназначался для разработки надежных,
переносимых, распределенных сетевых программных приложений,
функционирующих в многооконных системах (Windows-подобных) в условиях
архитектуры клиент-сервер.
Язык
Java одновременно является языком программирования и моделью
для разработки программ для сетей. Java в целом предоставляет такой же
уровень гибкости как и C
++
, и также является кроссплатформным средством
разработки. Во многом синтаксис и семантика языка Java аналогичны
принятым в языке C
++
. Существенными отличиями Java от C
++
являются:
семантика ссылок, полиморфные структуры данных, инкапсуляция,
параллелизм и библиотеки. В целом Java-приложения работают быстрее, чем
приложения, созданные на основе C
++
.
Современные программные пакеты, как правило, представляют собой
языки высокого уровня абстракции. Генератор приложений позволяет описать
последовательность экранов и структур базы данных и по этим описаниям
автоматически генерирует команды, реализующие приложения. Точно так же
электронные таблицы, настольные издательские системы, пакеты
моделирования и другие системы имеют обширные средства абстрактного
программирования. Недостаток программного
обеспечения этого типа в том,
что оно обычно ограничивается приложениями, которые можно легко
запрограммировать. Их можно назвать параметризованными программами в
том смысле, что, получая описания как параметры, пакет конфигурирует себя
для выполнения нужной программы.
Другой подход к абстрактному программированию с использованием
языков непроцедурного программирования состоит в том, чтобы описывать
вычисления, используя уравнения, функции, логические импликации или
другие формации подобного рода. Благодаря подобным формализмам языки
оказываются действительно универсальными, выходящими за рамки
конкретных прикладных областей. Компилятор реально не преобразует
программу в машинные коды; скорее он пытается решать математическую