Файл: История возникновения и развития языка программирования Си (С++) и Java (ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ).pdf

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

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

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

Добавлен: 31.03.2023

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

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

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

В 2002 году выходит J2SE 1.4 — это был первый выпуск платформы Java, разработанный в рамках процесса java community, как JSR 59. основными изменениями, которой являлись:

  • регулярное выражение;
  • цепочка исключений;
  • API ввода-вывода изображений, для чтения и записи изображений;
  • включение Java Web start. [11, 18]

В 2004 выходит J2SE 5.0 под кодовым именем Tiger. Добавлены новые языковые функции:

  • Generics;
  • Metadata;
  • Autoboxing;
  • Enumeratations;
  • Swing;
  • Var args;
  • коллекции статического импорта и т. д.

В 2006 выходит Java SE 6 основными изменениями, которой являлись:

  • поддержка языка Scripting Language;
  • улучшенная поддержка веб-сервисов через JAX-WS;
  • поддержка JDBC 4.0;
  • поддержка подключаемых аннотаций;
  • усовершенствования JVM, включая оптимизацию производительности синхронизации и компилятора;
  • алгоритмы сбора Garbaze. [4, 5]

Java SE 7.0 D 2011 г. Java SE 7.0 основными изменениями, которой являлись:

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

Java SE 8.0 18 марта В 2014 г. Вышла Java SE 8.0 включавшая различные исправления ошибок и улучшения.

В создании языка Java было пять основных целей:

  1. Он должен был использовать методологию объектно-ориентированного программирования.
  2. Он должен позволять выполняться одной и той же программы на нескольких операционных системах.
  3. Он должен содержать встроенную поддержку для использования компьютерных сетей.
  4. Он должен быть разработан для безопасного выполнения кода из удаленных источников.
  5. Он должен быть удобным в использовании, выбрав то пункты, которые считалось хорошей частью других объектно-ориентированных языков. [5]

Для достижения целей сетевой поддержки и удаленного выполнения кода разработчикам Java иногда приходится использовать такие расширения, как CORBA, Internet Communications Engine или OSGi. [13]

Первая характеристика, объектной ориентации («OO»), относится к методу программирования и языкового дизайна. Хотя существует много интерпретаций OO, одна из основных отличительных идей заключается в разработке программного обеспечения, так что различные типы данных, которыми он управляет, объединяются вместе с их соответствующими операциями. Таким образом, данные и код объединяются в сущности, называемые объектами. Объект можно рассматривать как автономный пучок поведения (кода) и состояния (данных). Принцип состоит в том, чтобы отделить вещи, которые изменяются от вещей, которые остаются неизменными; часто изменение в некоторой структуре данных требует соответствующего изменения кода, который работает с этими данными, или наоборот. Это разделение на когерентные объекты обеспечивает более стабильную основу для разработки программной системы. [4, 18]


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

Вторая характеристика, независимость от платформы, означает, что программы, написанные на языке Java, должны работать аналогично на разных аппаратных средствах. Разработчик должен иметь возможность написать программу один раз и запустить ее в любом месте. [5, 19]

Это достигается большинством компиляторов Java путем компиляции кода языка Java в байт-код (в частности, байт-код Java) - упрощенные машинные инструкции, характерные для платформы Java. Затем код запускается на виртуальной машине (VM), программе, которая интерпретирует и выполняет общий байт-код Java. Кроме того, стандартизованные библиотеки предоставляются для обеспечения единого доступа к функциям хост-машин (таких как графика, потоковая передача и сетевое взаимодействие). Хотя есть явный этап компиляции, в какой-то момент байт-код Java интерпретируется или преобразуется в собственные машинные инструкции компилятором JIT.

Существуют также реализации компиляторов Java, которые компилируют собственный код объекта, такой как GCJ, удаляя промежуточную стадию байт-кода, но вывод этих компиляторов можно запускать только в одной архитектуре. [12]

Лицензия Sun на Java настаивает на том, чтобы все реализации были «совместимыми». Это привело к юридическому спору с Microsoft после того, как Sun заявила, что реализация Microsoft не поддерживает интерфейсы RMI и JNI и добавила собственные функции платформы. В ответ Microsoft больше не переносит Java с Windows, а в последних версиях Windows Internet Explorer не может поддерживать Java-апплеты без стороннего плагина. Тем не менее, Sun и другие разработчики, предоставили доступные системы времени исполнения Java бесплатно для этих и других версий Windows.


Первые реализации языка использовали интерпретированную виртуальную машину для обеспечения переносимости. В этих реализациях выполнялись программы, которые выполнялись медленнее, чем программы, скомпилированные для собственных исполняемых файлов, например, написанные на C или C++, поэтому язык приобрёл репутацию плохой производительности. Более поздние реализации JVM создают программы, которые работают значительно быстрее, чем раньше, используя несколько методов. [13]

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

Второй метод, известный как компиляция «точно в момент времени» (JIT), переводит байт-коды Java в собственный код во время запуска программы, что приводит к выполнению программы, которая выполняется быстрее, чем интерпретируемый код, но также приводит к сбоям на этапе компиляции во время выполнения.

Более сложные виртуальные машины используют динамическую перекомпиляцию, в которой виртуальная машина может анализировать поведение запущенной программы и выборочно перекомпилировать, и оптимизировать критические части программы. Динамическая перекомпиляция может обеспечить оптимизацию, превосходящую статическую компиляцию, потому что динамический компилятор может использовать варианты оптимизации на знаниях о среде выполнения и наборе загруженных классов. [11, 17]

Переносимость — это технически трудная цель, и успех Java в этой цели был смешанным. Хотя на самом деле можно писать программы на платформе Java, которые ведут себя последовательно на многих системах, но большое количество доступных платформ с небольшими ошибками или несогласованностями привело к тому, что некоторые слоганы «Write once, Run anywhere» (писать один раз, запускать везде) в Sun называли «Write once, debug anywhere» (писать один раз, отлаживать везде).

Независимая от платформы Java, однако, очень успешна с серверными приложениями, такими как веб-сервисы, сервлеты и Enterprise JavaBeans, а также с встроенными системами на основе OSGi с использованием встроенных сред Java. [4]

3.3 Перспективы развития языка Java

Мир Java уже давно меняется не так стремительно, но в этом и преимущество –инвестиции в изучение Java будут актуальны достаточно долго. Сейчас Oracle запускает новую версию каждые полгода: последняя – Java 13, притом, что большинство проектов работает с Java 8, а то и более древней. Но по количеству новых фич это скорее минорные релизы и в Java 10–13 не так уж много нового. [16, 19]


Главные тренды в разработке на Java – переход к реактивному асинхронному программированию и рост популярности Kotlin как удобной и мощной альтернативы Java, а также рост популярности микросервисов и переход к облачной архитектуре. Последний уже не очень новый, но продолжает захватывать мир промышленной разработки: все больше приложений переезжает в облачную инфраструктуру благодаря низкой стоимости владения и возможности быстро и просто масштабироваться по мере необходимости. Благо сейчас большой выбор облачных решений и готовых облачных сервисов от Amazon, Google, Microsoft и «Яндекса». [24]

Еще один яркий тренд – развитие технологий искусственного интеллекта – связан прежде всего с успехами нейронных сетей глубокого обучения. По всей видимости, нас ожидает взрывной рост интеллектуальных сервисов, построенных на распознавании образов, работе с текстами на естественных языках, обработке фото- и видеоматериалов, а также рекомендательных сервисов и систем принятия решений. Сегодня многие облачные платформы предлагают интеллектуальные системы для распознавания образов, речи, перевода, синтеза речи и других подобных задач, и, поскольку качество таких сервисов обещает расти, они найдут более широкое применение в реальных задачах. Таким образом, не исключено, что в скором времени уже не понадобится вводить информацию в компьютер с помощью клавиатуры и мышки – мы будем просто общаться с системой на человеческом языке.

В свою очередь, нейронные сети становятся особенно эффективны, если обучены на больших наборах данных, а это достигается благодаря прогрессу в области big data. Так, появилась возможность собирать очень большие объемы данных, хранить их, отбраковывать некорректные, обрабатывать и получать обучающие выборки. Все это поддерживается современными инструментами, написанными на Java (Hadoop) или Scala (Spark). Самой популярной библиотекой машинного обучения остается гугловский TensorFlow (Питон, С++). [24]

Наконец, еще один тренд – рост популярности систем обмена сообщениями. По сути это продолжение тренда реактивного программирования, но в глобальном распределенном формате, когда контрагенты расположены не внутри одной виртуальной машины, а распределены по сети. [16, 19]

В обычной жизни мы тоже наблюдаем переход к мессенджингу предпочитая не звонить, а отправлять сообщения: звонок отрывает нас от текущих дел, а на эсэмэску можно ответить, когда будет удобно. То же самое в бизнес-системах: если обычный вызов метода – как звонок по телефону, то использование брокеров сообщений – как отправка письма или СМС. То есть позволяет более равномерно распределять загрузку систем и отвечать на запросы по мере возможности (для чего имеются очереди сообщений).


Самые известные системы мессенджинга – RabbitMQ и Kafka, и, похоже, их популярность продолжит расти. Тогда как классический JMS начнет терять свои позиции.

В рамках данной главы были рассмотрены вопросы, связанные с историей и развитием языка программирования Java.

ЗАКЛЮЧЕНИЕ

В рамках курсового проекта были решены следующие задачи:

  • раскрыто понятия «программирование»;
  • проведён анализ высокоуровневых языков программирования;
  • проведено исследование возникновения и развития языков C, C++ и Java;
  • проведён анализ перспективы развития этих языков;
  • изучена литература в данной области.

Таким образом можно сказать, что оба языка, и С/С++, и Java прошли большой путь развития. Причиной возникновения этих языков были и случайные стечения обстоятельств, и упорный труд их создателей.

Язык C++ в определенном смысле можно назвать улучшенным С. С++ наиболее полно представляет парадигмы современного программирования и является фундаментом, на котором оно строится. В программе на С++ можно динамически управлять памятью, использовать адресную арифметику, обращаться к отдельным разрядам двоичного представления данных и т.д. Но главное в том, что C++ добавляет к С объектную ориентированность: поддерживает объектно-ориентированное программирование и позволяет разрабатывать библиотеки классов. Механизм шаблонов языка С++ и его стандартная библиотека дают возможность создавать программы, применяя методы обобщенного программирования.

Большинство организаций так или иначе используют Java. Широкий спектр вариантов использования Java делает ее практически незаметной в использовании. Однако на самом деле язык является основным во многих областях, таких как приложения под Андроид, финансовые программы, кассовые терминалы и т.д.

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Буч Гради Объектно-ориентированное проектирование с примерами применения. — Конкорд, 2014. — 519 с.
  2. Васильев А. Java. Объектно-ориентированное программирование. — Питер, 2013. — 397 с.
  3. Дейтел Пол, Дейтел Харви С для программистов с введением в С11. — ДМК Пресс, 2013. — 546 с.
  4. Жемеров Д., Исакова С. Kotlin в действии. — ДМК Пресс, 2017. — 404 с.
  5. Крейг Уоллс Spring в действии. — ДМК Пресс, 2013. — 754 с.
  6. Магда Ю. Программирование и отладка C/C++ приложений для микроконтроллеров ARM. — ДМК Пресс, 2012. — 170 с.
  7. Мартин Роберт Идеальный программист. Как стать профессионалом разработки ПО. — Питер, 2011. — 240 с.
  8. Прохоренок Н. Основы Java. — БХВ-Петербург, 2017. — 688 с.
  9. Хабибуллин И. Самоучитель Java (3-е издание). — БХВ-Петербург, 2008. — 759 с.
  10. Bob Bryla, Kevin Loney. Oracle Database 12c The Complete Reference (Oracle Press) 1st Edition. — McGraw-Hill Education, 2013. — 1472 p.
  11. Herbert Schildt Java: A Beginner's Guide, Seventh Edition. — McGraw-Hill Education, 2017. — 752 p.
  12. Joshua Bloch Effective Java. — Addison-Wesley Professional, 2018. — 412 p.
  13. Joyce Farrell Java Programming. — Cengage Learning, 2015. — 976 p.
  14. Scott Meyers Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14. — O'Reilly Media, 2014. — 334 p.
  15. Stroustrup Bjarne Programming: Principles and Practice Using C++. — Addison-Wesley Professional, 2014. — 1282 p.
  16. Stroustrup Bjarne The Design and Evolution of C++. — Addison-Wesley, 2015. — 462 p.
  17. Tony Gaddis Starting Out with C++ from Control Structures to Objects. — Pearson, 2017. — 1344 p.
  18. Программирование [Электронный ресурс] Понятие «программирование». Режим доступа:
    https://sites.google.com/site/wwwprogrammirovaniecom/home/ponatie Дата обращения (01.05.2020)
  19. Сайт с образовательными программами [Электронный ресурс] История программирования и алгоритмических языков перспективы развития средств автоматизации. Режим доступа: http://emirb.org/zadacha-avtomatizacii-sostoit-v-osushestvlenii-avtomaticheskog.html?page=9 Дата обращения (01.05.2020)
  20. Справочник Java [Электронный ресурс] Подробнее о технологии Java Режим доступа: http://www.java.com/ru/about/ Дата обращения (01.05. 2020)
  21. itWeek [Электронный ресурс] Перспективы Java на 2018 год. Режим доступа: https://www.itweek.ru/foss/article/detail.php?ID=199284 Дата обращения (01.05.2020)
  22. TIOBE [Электронный ресурс] TIOBE Index for May 2020. Режим доступа: https://www.tiobe.com/tiobe-index/ Дата обращения (02.05.2020)
  23. Habr [Электронный ресурс] C++ в современном мире Режим доступа: https://habr.com/company/pvs-studio/blog/259777/ Дата обращения (01.05.2020)
  24. It-expert [Электронный ресурс] Тенденции в Web и Java-разработке в 2020 году. Режим доступа: https://www.it-world.ru/tech/admin/150552.html Дата обращения (02.05.2020)