Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История возникновения и развития языка программирования Си (С++)

Содержание:

ВВЕДЕНИЕ

Актуальность темы курсовой работы состоит в том, что языки Си и Java являются универсальными языками программирования, которым свойственны современный набор типов данных и операторов.

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

Язык программирования Си является универсальным языком программирования. Впервые он появился в ОС UNIX, и развивался как основной язык систем, совместимых с операционной системой UNIX.

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

Язык программирования Си предлагает лишь простые, последовательные конструкции управления: подпрограммы, проверки, группирование и циклы. Сюда не могут войти параллельные операции, мультипрограммирование, синхронизация либо сопрограммы.

Язык программирования Java разработан для облегчения работы на компьютерах в WWW посредством браузеров. Сегодня на каждом компьютере имеется браузер, который, в свою очередь, поддерживает Java. Это значит, что пользователь может просматривать документы, которые хранятся в разных точках земного шара, и с помощью ссылки активизировать Java-программу, которая будет передана через сеть и запущена на его машине.

Одним из основных плюсов языка Java является то, что он независим от платформы и типа компьютера, на котором реализуются программы. Так, один и тот же код можно запускать под управлением операционных систем Windows, FreeBSD, Linux, Solaris, Apple Mac и т.п. Это весьма важно в тех случаях, когда программы загружаются через Интернет и используются на различных платформах. Java может работать как со статичными текстами и графикой, так и с различными динамическими объектами.

Еще одним важным достоинством данного языка является большая схожесть с языком программирования Cи. Поэтому разработчикам, знакомым с синтаксисом Си, будет просто освоить Java.

Объектом исследования курсовой работы являются «Основы программирования», а предметом исследования – «языки программирования Си и Java».

Цель курсовой работы состоит в изучении языков программирования Си и Java.

Для того, чтобы достичь поставленные цели в курсовой работе требуется выполнить следующие задачи:

1) изучить историю возникновения и развития языка программирования Си;

2) изучить историю возникновения и развития языка программирования Java;

3) изучить достоинства и недостатки языков программирования Си и Java.

При написании данной курсовой работы были использованы научные труды следующих авторов: Авдеева С.М. [1], Брикман С.Л. [2], Гончаров Д.[3] и другие.

1. ВОЗНИКНОВЕНИЕ И ЭВОЛЮЦИЯ ЯЗЫКА СИ

С тем количеством программного обеспечения, которое было разработано на языке Си, пожалуй, не сравнится ни один другой язык программирования. История языка программирования Си полна ложных стереотипов и мифов, самым популярным из которых является авторство языка. Часто люди заблуждаются, считая одним из разработчиков языка Си Брайана Кернигана. Керниган не был участником создания языка, однако активно популяризировал его и вместе с Деннисом Ритчи написал бестселлер «Язык программирования Си».

Истоки языка программирования Си.

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

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

Все это способствовало возникновению концепции машинно-ориентированных языков промежуточного уровня. Необходимо признать, что язык программирования Си был не единственным языком подобного рода и тем более не самым первым. В то время появлялось все большее количество машинно-ориентированных языков, которые были похожи друг на друга, однако причиной этому явилось вовсе не списывание их авторами друг у друга, а то, что они были под влиянием одинаковых идей [1, с. 311].

BCPL стал основным прародителем языка программмирования Си. Он был разработан Мартином Ричардсом во время посещения последнего в 1966–1967 гг. Массачусетского технологического института. Изначально компилятор BCPL был создан для ОС MULTICS и GECOS, которые работали на компьютерах компании General Electric. BCPL применялся для реализации ОС TRIPOS, впоследствии положенной в основу AmigaDOS. Примерно таким же как и BCPL, является язык BLISS, создателем которого является Билл Вульф [2, с. 156].

В 1969 г. Дуг Макилроем был создан язык TMG, задуманный специально для создания компиляторов. Кен Томпсон пришел к выводу, что для ОС UNIX (тогда она имела другое название) необходим свой язык системного программирования.

После того, как он сделал несколько неудачных попыток создать Фортран, им был разработан такой язык, которому он дал название B (Би). По большому счету, B является синтаксически видоизмененным BCPL, который Томпсон смог вместить в 8 Кбайт памяти.

Общеизвестно, языком написания компилятора языка Си был сам Си. Но не все знают, что его разработчики во многом пошли по следам компилятора языка B. В результате работ Макилроя был создан компилятор компиляторов TMGL, с помощью которого была проведена программная раскрутка сначала языка B, а потом и Си. Иначе говоря, для написания компиляторов для этих языков были использованы те же самые языки.

Компилятор языка B в первый раз появился на компьютере PDP-7. Данные фрагменты совершают элементарные операции. Примечательно, что у языка программирования B первый компилятор занимал объем памяти восемь Кбайт, а у языка Си - шестнадцать Кбайт [3, с. 311].

Несмотря на то, что родственные языки BCPL, B и Си имеют общий фундамент, они имеют различия в синтаксисе. Все эти языки программирования ориентированы на системное программирование. Программы, которые написаны на них, включают последовательность глобальных описаний и описания функций. При этом в BCPL процедуры могут быть вложенными, а в языках программирования B и Cи - нет.

Отличием BCPL от потомков заключается в том, что он имел широкий набор управляющих конструкций.

Языки BCPL и B являются бестиповыми, они работают со словом, которое содержит фиксированное число разрядов. Память рассматривается ими как линейный массив слов, в котором значение ячейки памяти можно рассматривать как индекс в данном массиве. Язык BCPL для этого применяет оператор «!», тогда как язык программирования B - оператор «*».

Успех Си напрямую зависел от того, что одновременно появились язык программирования Си, ОС UNIX и мини-компьютер PDP-11. За прошедшие несколько десятков лет PDP-11 и пришедший ему на смену VAX-11 сменили более совершенные технические решения, однако языки программирования UNIX и Си все еще остаются на лидерских позициях программной индустрии.

В разработке ОС UNIX приняли участие шесть человек. Катализатором создания UNIX стала система MULTICS, применяемая по сей день. Данная система была создана как результат проекта MAC, который стартовал в ноябре 1962 г. в MIT [4, с. 219].

Становление и развитие языка

Эволюция языка программирования Си состоит из трех этапов: детство (1971–1977), юность (1978–1988) и зрелость (с 1989 г.).

На первой стадии главный акцент ставился на техническую сторону дела. На второй стадии основное внимание было уделено популяризации и формированию сообщества пользователей. На третьей стадии начался процесс активного промышленного применения языка [5, с. 433].

Выход в свет в 1978 г. бестселлера «Белая книга», стало одним из определяющих событий [1]. Бестселлер фактически установил стандарт языка и сделал его каноническим как минимум на целых десять лет.

Юридически язык программирования Си был стандартизирован в 1989 г. ANSI. Годом позже фактически этот же стандарт был принят организацией ISO.

Помимо BCPL и B, большое влияние на язык Си оказал Алгол-68. Основные изменения язык претерпел в 1972–1973 гг., во время подготовки к «погружению» в него ОС UNIX. Самым главным по значимости из них стал препроцессор. В то же время благодаря работам Джона Рейзера и Майка Леска появились компиляция и макросы в Си. В 1973 году Майком Леском была создана стандартная библиотека ввода-вывода, ставшая важной составляющей популярности и практической ценности языка [6, с. 288].

К главным особенностям языка Си относятся:

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

Одновременно с этим в языке Си отсутствуют:

  • вложенные функции;
  • прямое возвращение нескольких значений из функций;
  • средства автоматического управления памятью;
  • средства объектно-ориентированного программирования, а также средства функционального программирования [7, с. 254].

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

Есть несколько громоздкая, однако вполне работоспособная методика, которая позволяет выполнять на Си механизмы ООП, основанная на фактической полиморфности указателей в Си и поддержке в данном языке указателей на функции. Механизмы ООП, базированные на этой модели, выполнены в библиотеке GLib и активно применяются в фреймворке GTK+. GLib предоставляет базовый класс GObject, возможности наследования от одного класса и реализации множества интерфейсов.

После появления язык был хорошо принят, так как он давал возможность создавать компиляторы для новых платформ, а также довольно точно представлять, как реализуются их программы. Благодаря близости к языкам низкого уровня программы на Си работали эффективнее написанных на большинстве языков высокого уровня, и только оптимизированный вручную код на ассемблере мог работать ещё оперативнее, так как давал полный контроль над компьютером [8, с. 121].

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

Сегодня язык Си часто критикуют, недостатком его является отсутствие поддержки модулей. Препроцессорная директива «#include» только усугубляет ее еще больше.

Однако эти недостатки являются оборотной стороной достоинств. При разработке Си++ Бьерн Страуструп искал основной язык для того, чтобы расширить его концепцией классов из языка Симула. В качестве альтернативы рассматривались Smalltalk, Модула-2, Ада, Mesa и CLU, но предпочтение все же было отдано языку Си.

Благодаря работам Бьерна Страуструпа появился язык Си++ (1984), который стал фактически основным языком программной индустрии, а также всеобщее увлечение программированием и объектно-ориентированным проектированием вынудили сойти с арены знаменитого предшественника - язык программирования Си. В процессе программной эволюции возникли два направления, закрепившие за языком программирования Си статус безусловного лидерства: перенацеливаемые компиляторы и API-программирование [9, с. 173].

Программные интерфейсы (API), которые порождаются бесчисленными производителями программного обеспечения и понимаемые как интерфейсы системного и прикладного программирования. Всем другим языкам приходится пользоваться этим слоем или подстраивать его под себя, тем самым создавая массу проблем.

Таким образом, при формировании программной инфраструктуры язык Си стал главным связующим слоем между разного рода компонентами и системами.

Постоянность языка программирования Си в течении многих лет и стала одной из основных причин для его лидерства в перечисленных сферах. С выходом стандарта C99 ситуация стала менее ясной. Язык Си практически превратился из подмножества Си++ в самостоятельно развивающийся язык.

2. ВОЗНИКНОВЕНИЕ И ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА JAVA

История создания языка программирования Java начинается в июне 1991 года, когда Джеймс Гослинг создал проект для применения в одном из своих многочисленных сет-топ проектов.

Однако официальной датой создания языка Java считается 23 мая 1995 года, после выпуска компанией Sun первой реализации Java 1.0. Она гарантировала «Напиши один раз, запускай везде», обеспечивая недорогой стоимостью на популярных платформах.

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

Стало понятно, что нужен платформо-независимый язык программирования, который позволяет писать программы, которые не нужно компилировать отдельно для каждой архитектуры и можно было бы применять на различных процессорах под различными операционными системами [10, с. 147].

Язык Java был нужен для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с C и C++.

В Java применяются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

В технологии языка Java объединились три ключевых элемента:

  • Java предоставляет для широкого применения свои апплеты - небольшие, динамичные, надежные, не зависящие от платформы активные сетевые приложения, которые встраиваются в страницы Web. Апплеты Java могут настраиваться и распространяться потребителям также легко, как любые документы HTML;
  • Java высвобождает мощь объектно-ориентированной разработки приложений, комбинируя знакомый и простой синтаксис с удобной и надежной в работе средой разработки. Это дает возможность широкому кругу разработчиков в короткие сроки писать новые апплеты и программы;
  • Java предоставляет программисту большой набор классов объектов для ясного абстрагирования большинства системных функций, применяемых при работе с сетью, окнами и для ввода-вывода. Головная особенность данных классов состоит в том, что они обеспечивают создание независимых от используемой платформы абстракций для широкого спектра системных интерфейсов [11, с. 123].

Существовали четыре основных цели при создании языка Java, которые приведены на рисунке 1.

Основные цели при создании языка Java

Объектно-ориентированный язык

Независим от целевой платформы

Должен содержать объекты и библиотеки для работы в сети

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

Рисунок 1 - Основные цели при создании языка Java

Объектная ориентация.

Первая характеристика, объектно-ориентированный подход, относится к методу программирования для чайников и дизайну язык. Основная идея объектно-ориентированного подхода заключается в разработке программного обеспечения все это «вещи» (объекты), которыми можно манипулировать, а не действия, которые нужно выполнять. Это основано на том, что первое (объекты) изменяются реже и радикальнее, чем действия, что делает такие объекты (содержащие данные) более стабильной основу для разработки программного обеспечения.

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

Независимость от платформы.

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

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

Кроме того, предоставляются стандартизированные библиотеки для обеспечения доступа к особенностям архитектуры конкретной машины (например, графики и сетей) единым способам. Язык Java также включает поддержку для многопоточных программ - жизненно важная необходимость для многих сетевых приложений и основа программирования [12, с. 306].

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

Однако, эти реализации создают программы, которые выполняются медленнее, чем полностью скомпилированные программы, созданные типичным компилятором С++ и немного позднее появившимися компиляторами языка Java, поэтому язык страдает от приобретенной репутации «производитель медленных программ». В более поздних реализациях Java VM создает программы, которые работают намного быстрее, используя несколько методов. 

Первый метод - это просто компиляция непосредственно в машинный код, как традиционные компилятор, пропуская этап превращения программы в байт-код целиком. Этим достигается большая производительность, но за счет утраты мобильности и переносимости программ. Другой метод, «в процессе исполнения» или «JIT», компилирует байт-код Java в машинный код во время выполнения программы. Более сложные виртуальные машины даже использовали динамические перекомпиляции, в которой VJM может анализировать поведение работы программы и выборочно перекомпилировать и оптимизировать критические части программы. Обе эти технологии позволяют программе воспользоваться скоростью машинного код без потери мобильности. 

Портативность является технически трудной целью для достижение и успех Java вдостижении этой цели является предметом споров. Хотя на самом деле можно писать программы для платформы Java, которые ведут себя одинаково на многих платформах, но все же большее количество доступных платформ не выполняет программу как ожидалось, а выдает небольшое количество ошибок или несоответствий, что привело к появлению пародии на известный лозунг компании Sun «Написал один раз, работает везде» в другой «Написал один раз, отлаживал везде».

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

Безопасное выполнение удаленного кода.

Платформа Java была одной из первых систем для обеспечения широкой поддержки для выполнения кода из удаленных источников.

Апплет может работать в браузере пользователя, в процессе выполнения кода может загрузить маленький кусочек чужого кода с удаленного сервера HTTP и выполнить.

Удаленное выполнение кода происходит в весьма ограниченной "песочнице", которая защищает пользователя от некорректного или вредоносного кода. Издатели таких приложений могут подать заявку на сертификат, который они могли бы использовать для цифровой подписи апплетов как "безопасный", что дает им разрешение, чтобы вырваться из "песочницы" и получить доступ к локальной файловой системе и сети, конечно, предположительно этот процесс происходит под контролем пользователя.

По мнению большинства людей, Java технология достаточно хорошо подходит для всех этих целей. Язык, однако, не без недостатков.

Java как правило, более высокого уровня, чем аналогичные языки (такие как C++), что означает, что языку Java не хватает функций, таких как аппаратные или для работы с конкретными типами данных или, например, низкоуровневыме указатели на произвольные ячейки памяти [13, с. 179].

Хотя этими функциями часто злоупотребляют или используются программистами неправильно, они также являются мощными инструментами. Однако, технология Java включает Java Native Interface (JNI), способ вызова машинного кода из кода на языке Java. С JNI можно использовать эти возможности.

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

Для выполнения данного байт-кода используется виртуальная Java-машина JVM, версии которой созданы сегодня для любых платформ.

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

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

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

За последнее время были внесены некоторые усовершенствования, увеличившие скорость реализации программ на Java:

  • использование технологии трансляции байт-кода в машинный код во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое применение платформенно-ориентированного кода в стандартных библиотеках,
  • аппаратные средства, которые обеспечивают ускоренную обработку байт-кода (к примеру, технология Jazelle, которая поддерживается определенными процессорами компании ARM) [14, с. 189].

Заложенные в концепцию и разного рода реализации идеи среды Javа вдохновили большое количество энтузиастов на расширение списка языков, которые могли бы быть использованы для написания исполняемых на виртуальной машине программ.

Данные идеи нашли также выражение вспецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы.NET компанией Microsoft.

Основные достоинства языка программирования Java представлены на рисунке 2.

Основные достоинства языка программирования Java

Наибольшая среди всех языков программирования степень переносимости программ

Мощные стандартные библиотеки

Встроенная поддержка работы в сетях

Рисунок 2 - Основные достоинства языка программирования Java

Основными недостатками языка программирования Java являются низкое, в сравнении с другими языками, быстродействие, повышенные требования к объему оперативной памяти [15, с. 189].

Благодаря своей уникальности, Java приобрела популярность в самых различных областях. Прежде всего, это различные приложения для компьютеров – они несложные, не требуют предварительной установки – просто запускаются. Единственным требование является то, что в операционную систему должна быть встроена среда исполнения Java.

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

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

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

Интерфе

Система Java создана на основе «простого» языка программирования, техника применения которого близка к общепринятой и обучение которому не требует существенных усилий. Язык Java обладает библиотеками, обеспечивающими функциональность от стандартного ввода/вывода и сетевых протоколов до графических пользовательских интерфейсов, которые без труда могут быть расширены.

Java значительно облегчает создание надежного программного обеспечения. Помимо исчерпывающей проверки на этапе компиляции, система предусматривает анализ на этапе реализации. Сам язык спроектирован таким образом, чтобы вырабатывать у разработчика привычку писать «правильно». Модель работы с памятью, где запрещено применение указателей, делает невозможными целый класс ошибок, характерных для С и С++.

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

Компилятор Java производит байт-коды, то есть модули приложения обладают архитектурно-независимым форматом, который может быть проинтерпретирован на множестве разнообразных платформ.

Следующим шагом является «замораживание» стандарта на формат основных встроенных типов данных. Написанная на одной платформе программа функционирует на всех остальных.

Данный стандарт может быть реализован на любой аппаратно-программной платформе, которая поддерживает многопотоковость.

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

Работа с базовыми типами является максимально эффективной, для операций с ними зарезервированы специальные байт-коды.

Методы в классах не обязательно связываются динамически. Автоматический сборщик мусора работает отдельным фоновым потоком, не замедляя основную работу программы, однако одновременно с этим обеспечивая своевременный возврат свободной памяти в систему.

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

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

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

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

Поддержка многопоточности выполняется на уровне языка - часть примитивов синхронизации встроена в систему реального времени, а в библиотекау включен базовый класс Thread. К тому же системные библиотеки написаны thread-safe, то есть они применимы в многопотоковых приложениях.

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

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

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

Полная система Java содержит готовый набор библиотек, который можно разбить на следующие пакеты:

  • java.lang - базовый набор типов, отраженных в самом языке. Данный пакет в обязательном порядке входит в состав любого приложения.

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

  • java.io - потоки и файлы произвольного доступа. Аналог библиотеки стандартного ввода-вывода системы UNIX. Поддержка сетевого доступа (sockets, telnet, URL) содержится в пакете java.net.
  • java.util - классы-контейнеры (Dictionary, HashTable, Stack) и некоторые другие утилиты. Кодирование и декодирование. Классы Date и Time.
  • java.awt - Abstract Windowing Toolkit, архитектурно-независимый оконный интерфейс, благодаря которому можно производить запуск интерактивных оконных Java-приложений на любой платформе.

Включает такие базовые компоненты интерфейса, как события, цвета, фоны, а также основные оконные элементы - кнопки, scrollbars и т.д. [15, с. 209].

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

ЗАКЛЮЧЕНИЕ

В курсовой работе были изучены история возникновения и эволюция языков программирования Си и Java.

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

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

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

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

История создания языка программирования Java начинается в июне 1991 года, когда Джеймс Гослинг создал проект для применения в одном из своих многочисленных сет-топ проектов.

Однако официальной датой создания языка Java считается 23 мая 1995 года, после выпуска первой реализации Java 1.0 компанией Sun.

Язык Java был нужен для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с C и C++.

В Java применяются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

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

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

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

1. Авдеева С.М. Си в примерах и задачах. – Мн.: Новое знание, 2011. – С.4

2. Брикман С.Л. Практическое руководство по Си. – Вильямс, 2013. – С.56-90

3. Васильев, А.Н. Программирование на Java для начинающих / А.Н. Васильев. - М.: Эксмо, 2014. - 416 c.

4. Великович, Л.С. Программирование для начинающих / Л.С. Великович. - М.: Бином. Лаборатория знаний, 2011. - 287 c.

5. Иванов, В.Б. Программирование микроконтроллеров для начинающих Визуальное проектирование, язык C, ассемблер / В.Б. Иванов. - СПб.: Корона-Век, 2015. - 176 c.

6. Гончаров Д. Основы программирования. - Вильямс, 2010. – С.125

7. Дейт К. Введение в системное программирование. – Вильямс, 2006. – С.725

8. Дейт К. Как писать программы на Си. – Символ-Плюс, 2010. – С.123

9. Дейт К., Дарвен Х. Основы программирования. – Янус-К, 2011. – С.102

10. Дунаев В.В. Язык Си. – СПб. : БХВ-Петербург, 2010. – С.88

11. Дж. Кастаньетто, Х.Рават, С.Шуман, К.Сколло, Д.Велиаф «Профессиональное программирование». – Пер. с англ. – СПб: Символ-Плюс, 2010. – С.76

12. Кортсон. Полное руководство по Си – М.: Вильямс, 2012 – С.336

13. Кренке Д. Теория и практика программирования на Си. – Питер, 2010. – С.206

14. МакГрат, М. Программирование на Java для начинающих / М. МакГрат. - М.: Эксмо, 2016. - 192 c.

15. Мирошниченко Г. Основы программирования Java. Практические приемы оптимальных решений. – СПб. : БХВ-Петербург, 2012. – С.199

16. Новиков Б. Пишем на Java. – BHV, 2013. – С.64

17. Java для начинающих – Кудиц-образ, 2012 – С.44-108

18. Теория и практика программирования на Си: Д. Крёнке. – Питер, 2012. – С.119-223

19. Шкарина Л. Язык Си: учебный курс. – СПб.: Питер, 2001 – С.23-96