Файл: История возникновения и развития языка программирования Си (С++) и Java (Понятие языка программирования. Краткая характеристика языков).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 115

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

- Поддержка различных стилей программирования: традиционное императивное программирование (структурное, объектно-ориентированное), обобщённое программирование, функциональное программирование, порождающее метапрограммирование.

- Автоматический вызов деструкторов объектов в адекватном порядке (обратном вызову конструкторов) упрощает и повышает надёжность управления памятью и другими ресурсами (открытыми файлами, сетевыми соединениями, соединениями с базами данных и т. п.).

- Перегрузка операторов позволяет кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.

- Имеется возможность управления константностью объектов (модификаторы const, mutable, volatile). Использование константных объектов повышает надёжность и служит подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять выбор метода в зависимости цели вызова (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при виде извне кода, использующего кэши и ленивые вычисления.

- Шаблоны C++ дают возможность построения обобщённых контейнеров и алгоритмов для разных типов данных. Попутно шаблоны дают возможность производить вычисления на этапе компиляции.

- Возможность встраивания предметно-ориентированных языков программирования в основной код. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.

- Доступность. Для C++ существует огромное количество учебной литературы, переведённой на всевозможные языки. Язык имеет высокий порог вхождения, но среди всех языков такого рода обладает наиболее широкими возможностями.

Что касается недостатков, то к их числу можно отнести:

- Отсутствие системы модулей. C++ унаследовал от Си подключение заголовочных файлов с помощью препроцессора. Это вынуждает дублировать описания объектов, порождает неочевидные требования к коду и увеличивает объём компилируемого текста, а значит и время компиляции.

- Наличие более чем одного механизма для выполнения одних и тех же задач, что усложняет язык и приводит к неоптимальному и небезопасному кодированию.

- Унаследованные от Си опасные и провоцирующие ошибки возможности, такие как макроопределения #define, адресная арифметика и неявное приведение типов.

- Возможность прямого управления распределением памяти провоцирует ошибки, приводящие к внезапному краху программ из-за разрушения стека или обращения к невыделенной памяти.


- Шаблоны порождают объёмный и не всегда оптимальный код. Частичное определение шаблонов усложняет как сам язык, так и программы, где оно используется.

- Объектно-ориентированная подсистема построена так, что оказывается затруднительно применять многие приёмы, обычные для других объектных языков.

- Множественное (в том числе виртуальное) наследование усложняет транслятор и приводит к созданию громоздких иерархий классов, которые при любом изменении требований к программе могут потребовать серьёзного пересмотра.

- Сложный синтаксис и объёмная спецификация языка затрудняют его изучение.

- Язык не поощряет создание надёжного, легко читаемого и удобного в сопровождении кода, вместо этого зачастую предлагая выбор между короткими и простыми, но опасными средствами, унаследованными от Си, и новыми, объёмными и сложными, но более безопасными механизмами.

- Сложная и постоянно разрастающаяся стандартная библиотека, затрудняющая изучение и дополнительно увеличивающая объём программ.

Отсутствие или ограниченность поддержки ряда полезных технологий и методик программирования.

- Существует мнение, что предпочтение использования C++ (при возможности выбора альтернативных языков) отрицательно характеризует профессиональные качества программиста. В частности, Линус Торвальдс говорит, что использует положительное мнение кандидатов о C++ в качестве критерия отсева: «C++ — кошмарный язык. Его делает ещё более кошмарным тот факт, что множество недостаточно грамотных программистов используют его… Откровенно говоря, даже если нет никаких причин для выбора Си, кроме того чтобы держать C++-программистов подальше - то одно это уже будет достаточно веским основанием для использования Си». «…Я пришёл к выводу, что действительно предпочту выгнать любого, кто предпочтёт вести разработку проекта на C++, нежели на Си, чтобы этот человек не загубил проект, в который я вовлечён».

Если сравнивать С++ и Java,то Java не может считаться в полной мере языком, способным заменить C++, так как она принципиально непригодна для некоторых типов приложений, которые могут разрабатываться (и часто разрабатываются) на C++. Однако в области информационных систем общего назначения (учётные, бухгалтерские системы, пользовательские приложения и клиенты информационных систем), систем автоматизации бизнеса, Интернет-систем Java составляет вполне реальную конкуренцию C++. В качестве преимуществ Java обычно называют:

- Отсутствие поддержки указателей и адресной арифметики, ответственных за значительную долю ошибок в программах на C/C++.


- Автоматическая сборка мусора, значительно облегчающая управление памятью. Впрочем, нужно отметить, что эмпирическое исследование не обнаружило существенной разницы в скорости разработки на C++ и на Java.

- Наличие разработанной системы модулей и раздельной компиляции, значительно более быстрой и менее подверженной ошибкам, чем препроцессор и ручная сборка C++.

- Полная стандартизация от определения языка до деталей реализации. Как следствие предыдущего пункта и механизма компиляции в байт-код - реальная многоплатформенность. Встроенная многопоточность. Объектная система поддерживает единичное наследование и явно определяемые интерфейсы. Такая система позволяет обеспечить большинство преимуществ множественного наследования, не вызывая его негативных эффектов.

- Рефлексия значительно более развита, чем в C++ и позволяет реально определять и изменять структуру объектов во время работы программы.

- Встроенные средства безопасности, защищающие от распространённых ошибок программ C++, таких как переполнение буфера или выход за границы массива.

В то же время базовые архитектурные решения, такие как использование сборщика мусора и виртуальной машины, исполняющей байт-код, создаёт трудно преодолимые ограничения. Программы на Java, как правило, медленнее, требуют значительно больше памяти, к тому же виртуальная машина, обеспечивая многоплатформенность, одновременно изолирует программу от операционной системы: невозможно прямое обращение к API операционной системы и внешним библиотекам на других языках. Всё это приводит к тому, что Java малопригодна для создания низкоуровневых приложений, требующих прямого доступа к памяти и оборудованию, приложений реального времени, встроенных приложений, работающих в системах с ограниченными ресурсами.

С точки зрения производительности, то программы, написанные на Java, имеют репутацию более медленных и занимающих больше оперативной памяти, чем написанные на языке C. Тем не менее, скорость выполнения программ, написанных на языке Java, была существенно улучшена с выпуском в 1997-1998 годах так называемого JIT-компилятора в версии 1.1 в дополнение к другим особенностям языка для поддержки лучшего анализа кода (такие, как внутренние классы, класс StringBuffer, упрощённые логические вычисления и так далее). Кроме того, была произведена оптимизация виртуальной машины Java - с 2000 года для этого используется виртуальная машина HotSpot. По состоянию на февраль 2012 года, код Java 7 приблизительно в 1,8 раза медленнее кода, написанного на языке Си.


Объектными являются переменные любого типа, кроме примитивного. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование.

Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот.

Заключение.

Мы проследили историю возникновения и развития языков программирования Си (С++) и Java до наших дней. Рассмотрели сходства и различия, преимущества и недостатки. Хочется отметить важную вещь, все эти три языка, при наличии своих плюсов и минусов остаются рабочими и в настоящее время. На этих языках создаются мощные приложения, на этих языках пишутся программные коды в корпорациях являющихся мировыми лидерами по созданию программного обеспечения. Языки развиваются и продолжают своё развитие. Программисты всего мира используют данные языки для написания собственных программ. О чем свидетельствует таблица популярности:

Список литературы.

1. Берд Б. Java 9 для чайников = Java For Dummies, 7th edition. - М.: «Диалектика», 2018. - 624 с. - ISBN 978-5-9500296-1-5, 978-1-119-23555-2.

2. Блох Д. Java. Эффективное программирование = Effective Java. - 3-е. - М.: Диалектика, 2019. - 464 с. - ISBN 978-5-6041394-4-8.

3. Гослинг Д., Джой Б., Стил Г., Брача Г., Бакли А. Язык программирования Java SE 8. Подробное описание, 5-е издание = The Java Language Specification, Java SE 8 Edition (5th Edition) (Java Series). - М.: «Вильямс», 2015. - 672 с. - ISBN 978-5-8459-1875-8.

4. Гукин Д. Язык программирования Си для «чайников» = C For Dummies. - М.: Диалектика, 2006. - С. 352. - ISBN 0-7645-7068-4.

5. Керниган Б., Ритчи Д. Язык программирования Си = The C programming language. - 2-е изд. - М.: Вильямс, 2007. - С. 304. - ISBN 0-13-110362-8.

6. Лонг Ф., Мохиндра Д., Сикорд Р.С., Сазерленд Д.Ф., Свобода Д. Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищённых программ = Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs. - М.: «Вильямс», 2014. - 256 с. - ISBN 978-5-8459-1897-0.

7. Подбельский В. В., Фомин С. С. Курс программирования на языке Си: учебник. - М.: ДМК Пресс, 2012. - 318 с. - ISBN 978-5-94074-449-8.

8. Прата С. Язык программирования C (C11). Лекции и упражнения, 6-е издание = C Primer Plus, 6th Edition. - М.: Вильямс, 2015. - 928 с. - ISBN 978-5-8459-1950-2.

9. Прата С. Язык программирования С: Лекции и упражнения = C Primer Plus. - М.: Вильямс, 2006. - С. 960. - ISBN 5-8459-0986-4.

10. Сиддхартха Р. Освой самостоятельно C++ за 21 день, 7-е издание (C++11) = Sams Teach Yourself C++ in One Hour a Day, 7th Edition. - М.: «Вильямс», 2013. - 688 с. - ISBN 978-5-8459-1825-3.