Файл: История возникновения и развития языков программирования Си (С++) и Java (Структурное программирование).pdf
Добавлен: 28.03.2023
Просмотров: 268
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Эволюция программирования
1.2. Структурное программирование
1.3. Объектно-ориентированное программирование
1.4. Компонентное программирование
Глава 2. История возникновения и развития языка программирования C++
2.1. Возникновение и эволюция языка C++
2.2. Структура и эффективность C++
Глава 3. История возникновения и развития языка программирования Java
3.1. Возникновение и эволюция языка Java
Объект N
Подпрограммы с локальными данными
…
Рисунок 4 – Структура программы, реализующей объектно-ориентированный подход
Впервые объектно-ориентированный подход был воплощен в языке имитационного моделирования сложных систем Simula (60-е годы XX в.), затем в специализированном языке моделирования Smalltalk (70-е годы XX в.), а уже позже он нашел свою реализацию в новых версиях универсальных языков программирования, таких, как Pascal, C++, Modula, Java.
Многие проблемы позволило решить бурное развитие технологий программирования, основанных на объектном подходе. Так, например, появились среды визуального программирования, которые давали программисту возможность проектирования некоторой части программного обеспечения с помощью визуальных средств добавления и настройки специальных библиотечных компонентов. Результатом визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды.
Использование объектно-ориентированного подхода обладает большим количеством преимуществ, однако его конкретная реализация в языках программирования высокого уровня, таких, как Pascal и C++, имеет серьезные недостатки: так, например, в случае использования этих языков сохраняется зависимость модулей программного обеспечения от адресов экспортируемых свойств и методов, а также форматов и структур данных. В силу того, что отдельные модули должны взаимодействовать между собой, обращаясь к ресурсам - эта зависимость является объективной. Можно попробовать стандартизировать их взаимодействие, хотя связи модулей и не могут быть разорваны, на этой теории и основан компонентный подход к программированию [16].
1.4. Компонентное программирование
Четвертый этап принято называть компонентным подходом и CASE-технологии (с середины 90-х годов ХХ века и нынешнего времени). Идея построения программ из отдельных частей, взаимодействующих между собой посредством стандартизованных двоичных интерфейсов, является фундаментом компонентного подхода. Объекты-компоненты могут собираться в исполняемые файлы или динамически вызываемые библиотеки, передаваться в двоичном виде (без исходных текстов) и применяться в любых языках программирования, поддерживающих соответствующую технологию – это основное отличие от обычных объектов. Особенность современного этапа развития технологии программирования, кроме изменения подхода, заключается во введении в эксплуатацию автоматизированных технологий разработки и сопровождения программного обеспечения, названных CASE-технологиями (Computer-Aided Software/System Engineering – разработка программных систем / программного обеспечения с использованием компьютерной поддержки).
Человеческая память не в способна учитывать все детали, которые должны быть задействованы в процессе разработки программного обеспечения, поэтому в наше время разработка сложных программ без применения средств автоматизации становится практически невозможной. В настоящее время существуют технологии, которые поддерживают как структурный, так и объектный (в том числе и компонентный) подходы к программированию и это CASE-технологии [7].
Глава 2. История возникновения и развития языка программирования C++
2.1. Возникновение и эволюция языка C++
Бьерн Страуструп - разработчик языка С++ и создатель первого транслятора, также известен как сотрудник AT&T Bell Laboratories. Он является магистром вычислительной техники и математики, закончив Кембридж по специальности «распределенные системы, операционные системы, моделирование и программирование». Именно Страуструп является автором полного руководства по языку С++ [4].
Определенно С++ вобрал в себя все основные возможности языка С, который является его подмножеством. Также сохранены и все присущие С средства низкого уровня, которые предназначены для решения всевозможных проблем системного программирования. С, также, многим обязан предшествующему языку BCPL – в C++ был восстановлен комментарий языка. Еще один источник - это язык SIMULA-67, из которого была взята концепция классов (в том числе возможность создания производных классов и виртуальных функций). Также стоит упомянуть язык Алгол-68, в котором уже существовали возможности перегрузки операций и свобода размещения описаний [5].
Предыдущие версии языка, которые назывались «С с классами», применялись с 1980 г. Данный язык возник, так как автору было необходимо создавать приложения для моделирования, которые управлялись бы прерываниями. Язык программирования SIMULA-67 для этого идеально подходит, если не рассматривать эффективность. Язык «С с классами» применялся для больших задач моделирования. Тогда подверглись строгой проверке возможности создания с его помощью приложений, для которых ресурсы памяти и времени критичны. В данном языке недоставало перегрузки операций, использования виртуальных функций, ссылок и многих иных возможностей. В июле 1983 г. С++ впервые покинул пределы исследовательской группы, где работал автор, однако многие возможности С++ тогда еще не были разработаны [9].
Само название С++ придумал Рик Маскитти в 1983 г. Данное название как бы выделяет эволюционный прорыв в изменении языка С. Так как обозначение ++ описывает операцию инкремента С. Имя просто С+ представляет синтаксическую ошибку. Помимо этого, оно уже используется как название совершенно другого языка программирования. Многие ученые-семантики в сфере языка С считают, что С++ слабее, чем ++С. Язык не назван D, так как он представляет расширение С, и в нем отсутствуют попытки решения каких-либо проблем посредством отказа от возможностей С.
Сначала С++ был задуман для того, чтобы избежать программирования на ассемблере, С либо иных языках программирования того времени. Его главное предназначение заключается в упрощении и оптимизации процесса программирования для отдельного программиста. Еще не так давно не было на бумаге плана разработки С++. Все этапы создания программного продукта выполнялись параллельно. Не формировалось отдельного «проекта С++», вследствие чего язык развивается так, чтобы решить все проблемы, с которыми сталкиваются пользователи. Также толчками к развитию выступает обсуждение автором проблем языка с его коллегами и друзьями [8].
С момента первого издания книги Страуструпа язык С++ неоднократно был подвержен серьезным уточнениям и изменениям. Преимущественно это затрагивает разрешение неоднозначности при перегрузке, связывание и управление памятью. Также, были внесены несущественные изменения для увеличения совместимости с языком С. Кроме того, были созданы некоторые обобщения, а также ряд расширений, например: возможность множественного наследования, реализация функций-членов со спецификаторами const и static, наличие защищенных членов класса (protected), возможность обработки исключительных ситуаций и т.п. Все названные нововведения были сделаны для того, чтобы С++ стал языком, позволяющим разрабатывать и использовать библиотеки.
Иные расширения, которые были введены в период 1985-1991 г.г. (например, чистые виртуальные функции или статические функции-члены), вероятнее появились как результат обобщения опыта программирования на С++, нежели были почерпнуты из иных языков.
Сделанные расширения языка за указанные шесть лет, прежде всего, были нацелены на рост выразительности С++ в качестве объектно-ориентированного языка программирования, и как средства создания качественных и универсальных библиотек в том числе и с типами данных, определяемыми пользователями.
В середине 1987 г. стало понятно, что работа по стандартизации С++ необходима и что нужно незамедлительно создавать основу для нее.
Основной вклад в эту работу внесла компания AT&T Bell Laboratories. Около сотни представителей из порядка двух десятков различных компаний занимались изучением и комментированием того, что является современной версией справочного руководства и исходными материалами для ANSI по стандартизации. С++. Как следствие, в 1989 г. по инициативе компании Hewlett-Packard в составе ANSI был сформирован комитет X3J16. Прогнозируется, что работы по стандартизации С++ в ANSI будут составным элементом работ по международной стандартизации ISO [10].
2.2. Структура и эффективность C++
С++ был развит на базе языка программирования C и сохраняет C как подмножество за очень немногими исключениями. Первоначальный язык C был спроектирован таким образом, что в С++ сохраняется близкое соответствие между типами данных, операторами и операциями, и компьютерными объектами, с которыми приходится иметь дело: символами, числами и адресами. В качестве исключения можно назвать операции работы с памятью new и delete, а также отдельные операторы и выражения С++, которые не нуждаются в скрытой поддержке в процессе исполнения программного кода.
В С++ применяются такие же последовательности возврата и вызова из функций, как и в C. В случаях, когда даже приведенный достаточно эффективный механизм становится слишком затратным, С++ функции могут подставляться inline, таким образом, удовлетворяя соглашение о записи функций без дополнительных расходов времени исполнения.
Одно из начальных предназначений C – это использование его вместо программирования на ассемблере в задачах системного программирования. При проектировании С++, принимались меры, чтобы не подставлять данную область под угрозу. Отличие между C и С++ в первую очередь состоит в степени внимания, которое уделяется типам и структурам. C снисходителен и выразителен. С++ еще более выразителен, но, чтобы добиться этой выразительности, программисту необходимо уделить особое внимание типам объектов. Когда типы объектов известны, компилятор может верно обрабатывать выражения, однако в противном случае программисту нужно было бы задавать действия с подробнейшим описанием. Наличие знаний типов объектов также дает возможность компилятору выявить ошибки, которые могли остаться до тестирования в противном случае. Нужно отметить, что применение системы типов для получения проверки параметров функций, реализации защиты данных от случайного искажения, задания новых функций и т.д. не вызывает рост расходов памяти и времени исполнения кода.
Особенное внимание, уделенное структуре в ходе разработки С++, отражается на росте масштаба программ, которые были написаны со времени разработки C. Небольшие программы могут работать при помощи грубой силы, даже обходя все условия хорошего стиля программирования. Но это не совсем так для больших программных кодов. Если программа в десятки тысяч строк обладает плохой структурой, то можно заметить, что новые ошибки возникают так же быстро, как старые удаляются. С++ был разработан так, чтобы позволить структурировать большие программы разумным образом так, чтобы для одного человека не было невозможным справляться с программами в сотни тысяч строк. В настоящее время используются программы куда больших размеров, однако работающие, в общем, как правило, состоят из большого количества практически независимых частей, размер каждой из них намного ниже определенных пределов. Как правило, сложность разработки и последующей поддержки программного кода также определяется сложностью алгоритма, а не только количеством строк текста программы.
Однако, не каждый элемент программы может быть верно структурирован, независим от используемого аппаратного обеспечения, легко читаем и т.п. С++ имеет возможности, предназначенные для непосредственной и эффективной работы с аппаратными средствами, не уделяя внимания вопросам безопасности и простоте понимания. Также он обладает возможностями, позволяющими скрывать такие программы за надежными, но элегантными интерфейсами.
Может сложится мнение, что спецификация программы при помощи более подробной системы типов станет причиной увеличения объема исходного кода программы, но это не так. Программа на C++, которая описывает типы параметров функций, использует классы и т.д., как правило, немного короче той же программы на C, где данные средства не применяются [3].
Глава 3. История возникновения и развития языка программирования Java
3.1. Возникновение и эволюция языка Java
Язык Java зародился в качестве элемента в проекте разработки передовых приложений для разных бытовых приборов. Проект начали реализовать на языке С++, но вскоре обнаружился ряд проблем, лучшее средство борьбы с которыми - это изменение непосредственно инструмента, а именно языка программирования. Было очевидно, что нужен платформенно-независимый язык, позволяющий создавать программы, не нуждающиеся в компиляции отдельно для каждой архитектуры и так же возможно было бы использование на разных процессорах под разными операционными системами [12].