Файл: История возникновения и развития языка программирования Си (С++) и Java (Достоинства и недостатки).pdf
Добавлен: 18.05.2023
Просмотров: 224
Скачиваний: 3
СОДЕРЖАНИЕ
1. История и развитие языка С++
1.1. История возникновения языка
1.2. Развитие и стандартизация языка С++
1.3. Необъектно-ориентированные особенности
1.4. Объектно-ориентированные особенности в С++
2. История и развития языка Java
2.2. Развитие и стандарты языка
Инкапсуляция – это объединение в одно целое данных и алгоритмы их обработки, иными словами, позволяет максимально изолировать объект, тем самым повышает качество разработки программ. В 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.
- Исправлено большое количество ошибок.