Файл: История возникновения и развития языка программирования Си (С++) и Java (Развитие программирования в СССР).pdf
Добавлен: 30.04.2023
Просмотров: 67
Скачиваний: 2
4 Сравнение Java и С++
В области прикладного программирования альтернативой языку C++ является потомок данного языка язык Java.
Несмотря на большое сходство, язык Java создавался на другой основе, у его разработчиков не было цели сделать язык Java совместимым с языком-предком и обеспечить максимальную эффективность, благодаря этому разработчики смогли кардинальным образом переработать язык и отказаться от большого количества синтаксических средств, с целью добиться идеологической целостности языка[9].
Компанией Microsoft позже был предложен язык C#, который представлял собой очередную переработку C++ в том же направлении, что и Java. Затем появился язык Nemerle, в котором к средствам C# добавлены средства функционального программирования. Ещё позже появилась попытка объединения эффективности C++ с безопасностью и скоростью разработки Java и C# — был предложен язык D, который до сих пор не получил широкого признания.
Java и C++ обычно рассматриваются как два языка-потомка C, которые были разработаны из различных соображений и пошли, исходя их этого, каждый по своему пути. В связи с вышесказанным интерес представляет сравнение данных языков.[8].
4.1 Синтаксис
C++ сохраняет совместимость с C, насколько это возможно. Java сохраняет внешнее подобие C и C++, но во многом очень сильно отличается от данных языков. Из Java удалено огромное количество синтаксических средств, которые были объявлены необязательными. В результате этого программы, написанные на Java, иногда являются более громоздкими в сравнении с аналогичными программами, написанными на языке С++. С другой стороны, язык программирования Java проще, что облегчает как создание трансляторов для этого языка, так и его изучение[9].
4.2 Исполнение программы
Java-код компилируется в промежуточный код, который в дальнейшем интерпретируется или компилируется, а C++ изначально ориентирован на компиляцию в машинный код заданной платформы (хотя, теоретически, можно создавать для C++ трансляторы в промежуточный код).
Все это определяет сферу применения данных языков, например, на Java не напишешь низкоуровневые системные утилиты или драйверы для устройств[11].
Механизм исполнения Java делает программы, даже откомпилированные полностью переносимыми. Стандартное окружение и среда исполнения делают программы на Java на любой аппаратной платформе и в любой операционной системе, без изменений, усилия по переносу программ минимальны (при соблюдении рекомендаций по созданию переносимых программ — и вовсе нулевые). Ценой переносимости становится потеря эффективности — работа среды исполнения приводит к дополнительным накладным расходам[12].
4.3 Управление ресурсами
C++ позволяет использовать принцип «захват ресурсов путём инициализации» (RAII), при котором ресурсы ассоциированы с объектом и автоматически освобождаются при разрушении объекта (например, std::vector и std::ifstream). Также возможен подход, когда программист, выделяя ресурсы, обязан явно позаботиться о своевременном их освобождении[12].
Java же работает в среде со сборкой мусора, она автоматически отслеживает прекращение использования объектов и освобождает занимаемую ими память, если в этом есть необходимость, в некоторый неопределённый момент времени. Ручное управление предпочтительнее в системном программировании, где требуется полный контроль над ресурсами, RAII и сборка мусора удобнее в прикладном программировании, поскольку в значительной степени освобождают программиста от необходимости отслеживать момент прекращения использования ресурсов. Сборщик мусора Java использует системные ресурсы, именно это снижает эффективность выполнения программ и лишает программы на Java детерминированности выполнения. Файлы, сокеты, каналы, объекты графического интерфейса программист на Java всегда освобождает явно.
4.4 Стандартизация окружения
В Java есть чётко определённые стандарты на ввод-вывод, диалог, геометрию, графику, доступ к базам данных и прочим типовым приложениям. C++ в этом отношении гораздо более свободен. Стандарты на доступ к базам данных, графику и тому подобное являются недостатком, если программист хочет определить свой собственный стандарт[14].
4.5 Указатели
В C++ есть возможность работы с низкоуровневыми указателями. В Java же указателей нет.
Применение указателей зачастую является причиной труднообнаруживаемых ошибок, что является необходимым для низкоуровневого программирования[14].
Не смотря на это, C++ обладает набором средств (конструкторы и деструкторы, стандартные шаблоны, ссылки), которые позволяют почти полностью исключить выделение и освобождение памяти вручную и опасные операции с указателями. Но такое исключение зачастую требует определённой культуры программирования, в то время как в языке Java это все реализуется автоматически.
4.6 Парадигма программирования
В отличие от С++, язык программирования Java является чисто объектно-ориентированным языком, без возможности процедурного программирования. Для объявления свободных функций или глобальных переменных в Java необходимо создавать фиктивные классы, содержащие только static члены.[13] Для задания главной функции даже самой простой программы на Java необходимо поместить её в класс.[12]
4.7 Динамическая информация о типах
в C++ RTTI ограничена возможностью сравнивать типы объектов между собой и с буквальными значениями типов. В системе Java доступна более подробная информация о типах. Эту возможность можно было бы реализовать в C++, имея полную информацию о типах во время компиляции CTTI.
4.8 Препроцессор
C++ использует препроцессор для включения определений функций и классов, для подключения библиотек, полностью выполненных в исходном коде, а также позволяет осуществлять метапрограммирование с использованием препроцессора, которое, в частности, решает сложные проблемы высокоуровневого дублирования кода[12].
Есть мнение, что этот механизм небезопасен, так как имена макросов препроцессора глобальны, а сами макросы почти никак не связаны с конструкциями языка. Это может приводить к сложным конфликтам имён.
С другой точки зрения, C++ предоставляет достаточно средств (константы, шаблоны, встроенные функции) для того, чтобы практически полностью исключить использование препроцессора.
Java исключила препроцессор полностью, избавившись разом от всех проблем с его использованием, потеряв при этом возможности метапрограммирования препроцессора и текстовых замен в коде средствами языка.
Отличия языков приводят к ожесточённым спорам между сторонниками двух языков о том, какой язык лучше. Споры эти во многом беспредметны, поскольку сторонники Java считают различия говорящими в пользу Java, а сторонники C++ полагают обратное. C++, в свою очередь, развивался, и ряд его недостатков устранён в последних версиях стандарта (например, появился механизм частичной спецификации шаблонов).
Далеко не все программисты являются сторонниками одного из языков. По мнению большинства программистов, Java и C++ не являются конкурентами, потому что обладают различными областями применимости. Другие считают, что выбор языка для многих задач является вопросом личного вкуса.
Заключение
Язык C++ является стремительным и мощным рывком в процессе развития программирования. C++ и в настоящее время занимает господствующее положение среди языков программирования. Множество из профессиональных программистов используют именно его во время разработки различного рода проектов. При этом является очевидным то, что этот язык будет сохранять свое положение ещё не один год, при этом продолжать развиваться и совершенствоваться. C++ является один из самых популярных языков программирования, его широко используют для того, чтобы разработать программное обеспечение. Его область применения включает в себя создание операционных систем, драйверов устройств, различных прикладных программ, приложений для встраиваемых систем, высокопроизводительных серверов, а также возможно создание развлекательных приложений.
Существует много реализаций языка C++, являющиеся как бесплатные, так и коммерческие и для разных платформ.
Относительно языка программирования Java в ходе написания настоящей курсовой работы было выяснено, что он создавался несколько лет и посредством его был совершен прорыв в информационных технологиях, это типичный объектно-ориентированный язык, при этом имеют широкое применения, так как на нем работают приставки, телефоны, медицинские устройства, принтеры и многое другое.
В ходе работы поставленная цель была достигнута, задачи были решены.
Список литературы
1. Себеста, Р. У. Основные концепции языков программирования / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с.
2. Кнут, Д. Искусство программирования. В четырёх томах / Пер. с англ. — М.: Вильямс, 2001 − 2013.
3. Дейтел, П.Дж. Как программировать на С++. Введение в объектно-ориентированное проектирование с использованием UML. / Пер. с англ./ Дейтел П.Дж., Дейтел Х.М. - М.: Издательство «Бином», 2009. – 1454 с.
4. Вязовик, Н.А. Программирование на Java. Курс лекций. – Интернет-университет информационных технологий, 2003. – 592 с.
5. Грэхем, И. Объектно-ориентированные методы. Принципы и практика. — 3-е изд. — М.: «Вильямс», 2004. – 800 с.