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

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

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

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

Добавлен: 18.05.2023

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

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

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

Инкапсуляция – это объединение в одно целое данных и алгоритмы их обработки, иными словами, позволяет максимально изолировать объект, тем самым повышает качество разработки программ. В C++ этому помогают специальные ключевые слова, такие как private, protected, public позволяющее контролировать доступ из вне см. таб. 1.

Доступ

private

protected

public

Сам класс

да

да

да

Наследники

нет

да

да

Извне

нет

нет

да

Таблица 1. Доступ к свойствам классов

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

Наследование – это свойство объектов порождать своих потомков, т.е объект-потомок автоматически наследует все свойства и методы объекта-родителя. Это дает нам возможность дополнять объекты новыми полями и также заменять их. В С++ наследование от каждого класса может быть публичным, защищённым или закрытым см. таб.2.

Доступ базового класса

Private

Protected

Public

Private- наследование

недоступен

private

private

Protected- наследование

недоступен

protected

protected

Public- наследование

недоступен

protected

public

Таблица 2. Доступность свойств объекта

По умолчанию базовый класс наследуется как закрытый.

Полиморфизм – это свойство родственных объектов решать схожие задачи по смыслу. В С++ поддерживается два вида полиморфизма: динамический полиморфизм и параметрический полиморфизм.

Параметрический полиморфизм представлен:

  • Аргументами по умолчанию для функций
  • Перегрузка функций: функция с одним именем может иметь разное число и разные по типу аргументы.
  • Механизмом шаблонов

Динамический полиморфизм реализуется с помощью виртуальных методов и иерархии наследования. Полиморфным в C++ является тип имеющий хотя бы один виртуальный метод

1.5. Достоинства и недостатки

С++ — язык, складывающийся эволюционно. Каждый элемент С++ заимствовался из других языков отдельно и независимо от остальных элементов (ничто из предложенного С++ за всю историю его развития не было новшеством в Computer Science), что сделало язык чрезвычайно сложным, со множеством дублирующихся и взаимно противоречивых элементов, блоки которых основаны на разных формальных базах.


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

Достоинства:

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

Недостатки:

  • Плохо продуманный синтаксис сужает спектр применимости языка
  • Язык не содержит многих важных возможностей
  • Язык содержит опасные возможности
  • Производительность труда программистов на языке оказывается неоправданно низка
  • Громоздкость синтаксиса
  • Тяжелое наследие
  • Необходимость следить за памятью

1.6. Вывод

Основываясь на исследования описанного выше, можно судить о хорошем преимуществе языка С++. Главной особенностью которого является очень большую гибкость использования, производительность. Возможность использования обектно-ориентированного программирования позволяет разрабатывать большие и сложные приложения используя популярные патерны программирования. Можно легко интегрировать с другими языками программирования. Есть конечно и недостатки это его сложный порог вхождения.


2. История и развития языка Java

2.1. История возникновения

К концу 1980-х и в начале 1990-х гг. объектно-ориентированное программиро­вание на C++ стало основной методикой программирования. И в течение некото­рого, хотя и непродолжительного периода времени казалось, что программисты наконец изобрели идеальный язык. Ведь язык C++ сочетал в себе высокую эффективность и стилистические элементы языка С наряду с объектно-ориентирован­ным подходом, и поэтому его можно было использовать для создания самых раз­ных программ. Но, как и прежде, уже вызревали факторы, которые должны были в очередной раз стимулировать развитие языков программирования. Прошло еще несколько лет, и развитие Всемирной паутины и Интернета достигло “критиче­ской массы”, что и привело к еще одной революции в программировании.

Язык Java был разработан компанией Sun Microsystems Патрик Нотон в 1995 году. Нотон, хотя и не рассчитывал на то, что кто-то обратит внимание на его письмо, все же изложил свои претензии, беспощадно раскритиковав недостатки Sun Microsystems, в частности, разрабатываемую в тот момент архитектуру ПО NeWS. К удивлению Нотона, его письмо возымело успех: оно было разослано всем ведущим инженерам Sun Microsystems, которые не замедлили откликнуться и высказать горячую поддержку своему коллеге и одобрение его взглядов на ситуацию в Sun Microsystems. Обращение вызвало одобрение и у высшего руководства компании, а именно, у Билла Джоя, основателя Sun Microsystems, и Джеймса Гослинга, начальника Нотона.

Java – это строго типизированный объектно-ориентированный язык программирования. Изначально язык назывался Oak и был предназначен для программирования бытовых устройств. В дальнейшим его переименовали в Java. Был назван в честь марки кофе Java, который в свою очередь получил названия в честь острова Ява.

В результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер Star7, который опередил своё время более чем на 10 лет, но из-за большой стоимости в 50 долларов не смог произвести переворот в мире технологии и был забыт.

С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же определённое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц в 2000-е годы технология стала применяться редко.


2.2. Развитие и стандарты языка

Языка Java начал свое развитие с 1996 года. Вышла первая версия JDK (Java Development Kit) 1.0 созданный компанией Oracle Corporation. JDK – это бесплатно распространяемый стандарт библиотек классов написанных на языке Java включающий в себя компилятор javac. Далее в феврале 1997 года, вышло более значимое дополнение JDK 1.1, включающее в себя:

  • обширное изменение событий библиотеки AWT в язык добавлены внутренние классы
  • JavaBeans (классы в языке Java, написанные по определённым правилам. Они используются для объединения нескольких объектов в один для удобной передачи данных)
  • JDBC (соединение с базами данных) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД
  • RMI (программный интерфейс вызова удаленных методов)
  • ограниченная рефлексия (модификация во время выполнения невозможна, есть только наблюдение собственной структуры)

8 декабря 1998 Oracle выпустила JDK 1.2 под кодовым названием Playground. Следующей базовой версией Java стала версия Java 2, символизировавшая собой второе поколение. Первой версии Java 2 был присвоен номер 1.2. С появлением версии 2, SUN Microsystems стала выпускать Java в виде пакета J2SE (Java 2 Platform Standard Edition — Стандартная версия платформы Java 2) и теперь номера версий указываются применительно к этому продукту.

Java 2, или Java 2.0 — дальнейшее развитие и усовершенствование спецификации исходного стандарта языка и платформы Java, на который теперь принято ссылаться как на Java 1.0. В настоящее время спецификация платформы Java 2 продолжает интенсивно развиваться и обогащаться, пополняясь новыми возможностями, особенно из-за конкуренции с платформой .Net, перенявшей у Java ряд ключевых особенностей.

  • Основными усовершенствованиями Java 2 по сравнению с Java 1.0 являются:
  • Swing включен в спецификацию платформы Java 2
  • Коллекции
  • Policy файлы
  • Цифровые сертификаты пользователя
  • Библиотека Accessibility
  • Java 2D
  • Поддержка технологии drag-and-drop
  • Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках
  • Поддержка воспроизведения аудиофайлов нескольких популярных форматов
  • Полная поддержка технологии CORBA
  • Включение в JDK для Java 2 JIT-компилятора, улучшенная производительность
  • Усовершенствования инструментальных средств JDK, включая поддержку профилирования Java-программ

30 сентября 2004 была выпущена еще одно спецификация JDK 5.0 с кодовым названием Tiger. C этой версии изменена официальная индексация, вместо Java 1.5 правильнее называть Java 5.0. Внутренняя же индексация Sun осталась прежней — 1.x. Минорные изменения теперь включаются без изменения индексации, для этого используется слово «Update» или буква «u», например, Java Development Kit 5.0 Update 22. Предполагается, что в обновления могут входить как исправления ошибок, так и небольшие добавления в API, JVM.


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

  • Перечислимые типы (англ. enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей
    • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.
    • Перечисление может реализовывать интерфейсы.
    • Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым.
  • Аннотации — возможность добавления в текст программы метаданных, непосредственно не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнении. Одновременно выпущен инструментарий для использования аннотированного кода. Одно из применений аннотаций — упрощение создания тестовых модулей для Java-кода.
  • Средства обобщённого программирования (англ. generics) — механизм, аналогичный средствам языков Ada и Eiffel (позже также появились и в C#, принципиально отличаются от шаблонов C++), дающий возможность создавать классы и методы с полями и параметрами произвольного объектного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java.
  • Методы с неопределённым числом параметров.
  • Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-обёртками (например, между int — Integer). Наличие такой возможности сокращает код, поскольку исключает необходимость выполнения явных преобразований типов в очевидных случаях.
  • Разрешён импорт статических полей и методов.
  • В язык введён цикл по коллекции объектов (итератор, англ. foreach).
  • Было введено использование Javadoc-комментариев, которые используются для автоматического оформления документации по комментариям в исходном коде.

Глобальный релиз состоялся 11 декабря 2006 года, кодовое имя Mustang. Изменена официальная индексация — вместо ожидаемой 6.0 версия значится как 6. Минорные изменения, как и в Java 5.0, вносятся в обычные обновления версии, например, Java Standard Edition Development Kit 6 Update 27. Внесены следующие изменения:

  • Коллекции — добавлены интерфейсы для организации очереди, работающей с двух сторон коллекции; организовывающие поиск по ближайшему соответствию; блокирующие себя во время ожидания элемента. Организованы новые классы, реализующие перечисленные интерфейсы.
  • Добавлена поддержка японского императорского календаря (наряду с уже существующими григорианским и буддийским календарями).
  • Доступны классы-потоки для чтения и передачи сжатых данных, с возможностью передачи их по сети. Сняты ограничения на количество файлов в архиве (ранее 64 Кб), длину названия файла (ранее 256 символов) и количество одновременно открытых файлов (ранее 2000 шт).
  • Организована система управления кэшем и добавлена поддержка параметра «no-cache» в HTTP-запросе.
  • JConsole, графический мониторинг JVM, стала официально поддерживаемой утилитой.
  • Java HTTP Server, позволяет создать полноценный HTTP-сервер, с минимально необходимыми функциональными свойствами.
  • Повысилась скорость вычислений на 70 %, скорость операций ввода-вывода возросла в два раза.
  • Swing — улучшена работоспособность OpenGL и DirectX; обработка текста на LCD; добавлен GifWriter, для работы с файлами формата GIF.
  • Исправлено большое количество ошибок.