Последние темы
» Вити больше нет!автор bug19 Пн Фев 20 2023, 19:54
» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47
» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05
» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03
» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02
» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52
» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36
» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37
» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33
» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00
» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58
» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17
» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07
» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08
» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09
» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02
» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47
» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11
» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33
» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38
» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12
» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01
» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22
» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08
» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08
Самые активные пользователи за месяц
Нет пользователей |
Поиск
Изучаем Java. Основы.
RUЭВМ :: Языки программирования :: Java
Страница 1 из 1 • Поделиться
Изучаем Java. Основы.
1
Изучаем Java. Основы.
Данная тема, это своего рода конспект, в процессе создания которого и будет происходить процесс обучения.
Для того, чтобы хорошо представлять себе экосистему языка Java, ниже будет помещена картинка, которая в достаточной мере отображает устройство экосистемы языка Java и те огромные возможности, которые он предоставляет.
Представленная выше картинка отображает экосистему языка Java, она конечно не покрывает всех аспектов, но для понимания её более чем достаточно. В центре, это сам язык Java, а именно Java Core. На данный момент свет увидела Java JDK 17.
Далее идут дополнительные инструменты, такие как система контроля версий (Version Control System) и система для сборки проектов. В качестве VCS лучше использовать Git, который является абсолютным лидером среди себе подобных. Все остальные системы, такие как: Subversion и Perforce уходят в прошлое. Плюс можно использовать репозитории Github или GitLab, для кода бесплатно. С большой долей вероятности в энтерпрайзе потребуется использовать BitBucket от Atlassian. Но это всего лишь оболочка. Если научиться пользоваться Git, то всё остальное будет не существенно. Компания Atlassian является так же поставщиком таких продуктов как Jira и Confluence, но сейчас, на этапе учёбы это роли не играет.
Что касается инструментов для сборки проектов, то тут есть два варианта: Maven и Gradle. Maven предпочтительнее. В принципе оба фреймворка являются равноценными.
После того как изучены вышеперечисленные вещи, стоит задуматься в какую сторону двигаться дальше. На рисунке выше видно четыре основных направления движения: Front-End (HTML, CSS, JS), Back-End (Hibernate, Spring, SQL), Android и Big Data. Эти четыре части хоть и разделены на рисунке, но на самом деле довольно плотно связаны. Например, если Вы решили стать Full-Stack Java разработчиком, то Вам придётся хорошо изучить Back-End часть и иметь общее понимание основ Front-End части. От Вас не должны ожидать что Вы будете заниматься вёрсткой сайта, но знать HTML стоит. Также, в разделе Back-End под Spring подразумевается в первую очередь Spring Core. Именно с этой части фреймворка нужно начинать. Сейчас он уже разросся до такой степени, что покрывает все аспекты Java разработки. В качестве альтернативы, компания Oracle пытается продвигать Java EE спецификацию, но у них это не слишком хорошо получается.
Что касается BigData, то тут тоже довольно большой стек технологий. В основном все они рассчитаны на распределённое хранение и распределённую обработку данных с помощью подхода Map-Reduce. Самой древней и самой известной технологией здесь является Hadoop.
Думаю, что такое Android, объяснять не стоит. Скажу только, что для того чтобы писать приложения под эту мобильную платформу, придется выучить Java. [1]
Полезные ссылки:
1. Статья на Habr "Как стать программистом Java". https://habr.com/ru/post/423987/
2. ...
Продолжение в следующем посте...
Последний раз редактировалось: Viktor2312 (Ср Окт 06 2021, 13:26), всего редактировалось 6 раз(а)
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
.
2
История и развитие языка программирования Java.
Чтобы досканально изучить язык программирования Java, следует понять причины его создания, факторы, обусловившие его формирование, а также унаследованные им особенности. Подобно другим удачным языкам программирования, предшествовавшими Java, этот язык сочетает в себе лучшие элементы из своего богатого наследия и новаторские концепции, применение которых обусловлено его особым положением. Далее мы рассмотрим как и почему был разработан этот язык, что делает его столь важным и как он развивался за годы своего существования.
Несмотря на то что язык Java неразрывно связан с Интернетом, важно помнить, что это, прежде всего, язык программирования. Разработка и усовершенствование языков программирования обусловлены двумя основными причинами:
- адаптация к изменяющимся средам и областям применения;
- реализация улучшений и усовершенствований в области программирования.
Разработка языка Java почти в равной мере была обусловлена обеими этими причинами.
Происхождение Java.
Язык Java тесно связан с языком С++, который, в свою очередь, является прямым наследником языка Си. Многие особенности Java унаследованы от обоих этих языков. От Си язык Java унаследовал свой синтаксис, а многие его объектно-ориентированные свойства были перенесены из С++. Собственно говоря, ряд определяющих характеристик языка Java был перенесён - или разработан в ответ на возросшие потребности - из его предшественников. Более того, создание Java своими корнями уходит глубоко в процесс усовершенствования и адаптации, который происходит в языках программирования на протяжении нескольких последних десятилетий. Поэтому далее рассматривается последовательность событий и факторов, приведших к появлению Java. Как станет ясно в дальнейшем, каждое новшество в архитектуре языка, как правило, было обусловлено необходимостью найти решение той или иной основной проблемы, которую не могли разрешить существовавшие до этого языки. И язык Java не является исключением из этого правила.
Зарождение современного программирования: язык Си.
Язык Си буквально потряс компьютерный мир. Его влияние нельзя недооценивать, поскольку он полностью изменил подход к программированию. Создание языка Си было прямым следствием потребности в структурированном, эффективном и высокоуровневом языке, который мог бы заменить код ассемблера в процессе создания системных программ. Как вы, вероятно, знаете, при проектировании языка программирования часто приходится находить компромиссы между:
- простотой использования и предоставляемыми возможностями;
- безопасностью и эффективностью;
- устойчивостью и расширяемостью.
До появления языка Си программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной ряд характеристик. Так, на языке FORTRAN можно было писать достаточно эффективные программы для научных вычислений, но он не совсем подходил для написания системного кода. Аналогично язык BASIC был очень прост в изучении, но у него было не очень много функциональных возможностей, а недостаточная структурированность ставила под сомнение его полезность для написания крупных программ. На языке ассемблера можно писать очень эффективные программы, но его трудно изучать и эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей.
Ещё одна усложнявшая дело проблема состояла в том, что первые языки программирования вроде BASIC, COBOL и FORTRAN были разработаны без учёта принципов структурирования. Вместо этого основными средствами управления программой в них были операторы безусловного перехода GOTO. В результате программы, написанные на этих языках, проявляли тенденцию к появлению так называемого "макаронного кода" - множества запутанных переходов и условных ветвей, которые делали программу едва ли доступной для понимания. И хотя языки вроде Pascal структурированы, они не были предназначены для написания эффективных программ и лишены ряда важных средств, необходимых для написания разнообразных программ. (В частности применять Pascal для написания системного кода было нецелесообразно, принимая во внимание наличие нескольких стандартных диалектов этого языка.)
Таким образом, до изобретения языка Си, несмотря на затраченные усилия, ни одному языку не удавалось разрешить существующие в то время противоречия в программировании. Вместе с тем потребность в таком языке становилась всё более насущной. В начале 1970-х годов началась компьютерная революция, и потребность в программном обеспечении быстро превысила возможности программистов по его созданию. В академических кругах большие усилия были приложены к созданию более совершенного языка программирования. Но в то же время стало всё больше ощущаться влияние ещё одного, очень важного фактора. Компьютеры, наконец, получили достаточно широкое распространение, чтобы была достигнута "критическая масса". Компьютерное оборудование больше не находилось за закрытыми дверями. Впервые программисты получили буквально неограниченный доступ к своим вычислительным машинам. Это дало свободу для экспериментирования. Программисты смогли также приступить к созданию своих собственных инструментальных средств. Накануне создания Си произошёл качественный скачок в области языков программирования.
Язык Си, изобретённый и впервые реализованный Деннисом Ритчи на мини-ЭВМ DEC PDP-11, работавшей под управлением операционной системы UNIX, явился результатом процесса разработки, начавшегося с предшествующего ему языка BCPL, разработанного Мартином Ричардсом. BCPL оказал влияние на язык, получивший название B, который был изобретён Кеном Томпсоном и в начале 1970-х гг. привёл к появлению языка Си. В течение долгих лет фактическим стандартом языка Си была его версия, которая поставлялась вместе с операционной системой UNIX. Язык Си был формально стандартизирован в декабре 1989г., когда Национальный институт стандартизации США (ANSI) принял стандарт на Си.
Многие считают создание Си началом современного этапа развития языков программирования. Этот язык успешно соединил противоречивые свойства, которые доставляли столько неприятностей в предыдущих языках. В итоге появился мощный, эффективный, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща ещё одна, почти непостижимая особенность: он был разработан специально для программистов. До появления Си языки программирования проектировались в основном в качестве академических упражнений или бюрократическими организациями. Иное дело - язык Си. Он был спроектирован, реализован и разработан практикующими программистами и отражал их подход к программированию. Его функции были отлажены, проверенны и многократно переработаны людьми, которые действительно пользовались этим языком. Таким образом, получился язык, который сразу же понравился программистам. И действительно, язык Си быстро приобрёл много приверженцев, которые едва ли не молились на него. Благодаря этому Си получил быстрое и широкое признание среди программистов. Короче говоря, Си - это язык, разработанный программистами для программистов. Как станет ясно в дальнейшем, эту замечательную особенность унаследовал и язык Java.
Следующий этап: язык С++.
В конце 1970-х - начале 1980-х гг. язык Си стал господствующим языком программирования и продолжает широко применяться до сих пор. А если Си - удачный и удобный язык, то может возникнуть вопрос: чем обусловлена потребность в каком-то другом языке? Ответ состоит в постоянно растущей сложности программ. На протяжении всей истории развития программирования постоянно растущая сложность программ порождала потребность в более совершенных способах преодоления их сложности. Язык С++ явился ответом на эту потребность. Чтобы лучше понять, почему потребность преодоления сложности программ является главной побудительной причиной создания языка С++, рассмотрим следующие факторы.
С момента изобретения компьютеров подходы к программированию коренным образом изменились. Когда компьютеры только появились, программирование осуществлялось изменением двоичных машинных инструкций вручную с панели управления компьютера. До тех пор, пока длина программ не превышала нескольких сотен инструкций, этот подход был вполне приемлем. В связи с разрастанием программ был изобретён язык ассемблера, который позволил программистам работать с более крупными и всё более сложными программами, используя символьные представления инструкций. По мере того как программы продолжали увеличиваться в объёме, появились языки высокого уровня (ЯВУ), которые предоставили программистам дополнительные средства для преодоления сложности программ.
Первым языком программирования, который получил широкое распространение, был, конечно же, FORTRAN. Хотя он и стал первым впечатляющим этапом в программировании, его вряд ли можно считать языком, который способствует созданию ясных и простых для понимания программ. 1960-е годы ознаменовались зарождением структурного программирования. Эта методика программирования наиболее ярко проявилась в таких языках, как Си. Пользуясь структурированными языками, программисты впервые получили возможность без особых затруднений создавать программы средней сложности. Но и методика структурного программирования уже не позволяла программистам справиться со сложными проектами, когда они достигали определённых масштабов. К началу 1980-х. сложность многих проектов начала превышать предел, позволявший справиться с ними, применяя структурный подход. Для решения этой проблемы была изобретена новая методика программирования, получившая название объектно-ориентированного программирования (ООП). ООП - это методика программирования, которая помогает организовать сложные программы, применяя принципы наследования, инкапсуляции и полиморфизма.
Из всего сказанного выше можно сделать следующий вывод: не смотря на то, что Си является одним из лучших в мире языков программирования, существует предел его способности справляться со сложностью программ. Как только размеры программы превышают определённую величину, она становится слишком сложной, чтобы её можно было охватить как единое целое. Точная величина этого предела зависит как от структуры самой программы, так и от подходов, используемых программистом, но, начиная с определённого момента, любая программа становится слишком сложной для понимания и внесения изменений, а следовательно, неуправляемой. Язык С++ предоставил возможности, которые позволили программистам преодолеть этот порог сложности, чтобы понимать крупные программы и управлять ими.
Язык С++ был изобретён Бьярне Страуструпом в 1979г., когда он работал в компании Bell Laboratories в городе Мюррей-Хилл, шт. Нью-Джерси. Вначале Страуструп назвал новый язык "C with Classes" (Си с классами). Но в 1983г. это название было изменено на С++. Язык С++ расширяет функциональные возможности языка Си, добавляя в него объектно-ориентированные свойства. А поскольку язык С++ построен на основе Си, то в нём поддерживаются все функциональные возможности, свойства и преимущества Си. Это обстоятельство явилось главной причиной успешного распространения С++ в качестве языка программирования. Изобретения языка С++ не было попыткой создать совершенно новый язык программирования. Напротив, все усилия были направлены на усовершенствование уже существующего очень удачного языка.
Предпосылки к созданию Java.
К концу 1980-х и в начале 1990-х гг. объектно-ориентированное программирование на С++ стало основной методикой программирования. И в течении некоторого, хотя и не продолжительного периода времени казалось, что программисты наконец изобрели идеальный язык. Ведь язык С++ сочетал в себе высокую эффективность и стилистические элементы языка Си наряду с объектно-ориентированным подходом, и поэтому его можно было использовать для создания самых разных программ. Но, как и прежде, уже вызревали факторы, которые должны были в очередной раз стимулировать развитие языков программирования. Прошло ещё несколько лет, и развитие Всемирной паутины и Интернета достигло "критической массы", что привело к ещё одной революции в программировании.
Создание языка Java.
Начало разработке языка Java было положено в 1991г. Джеймсом Гослингом, Патриком Нотоном, Крисом Уартом, Эдом Франком и Майком Шериданом, работавшими в компании Sun Microsystems, Inc. Разработка первой рабочей версии заняла 18 месяцев. Вначале язык получил название "Oak" (Дуб), но в 1995г. он был переименован в "Java". Между первой реализацией языка Oak в конце 1992г. и публичном объявлении о создании Java весной 1995г. в разработке и развитии этого языка приняли участие немало других специалистов.
Как ни странно, первоначальной побудительной причиной для создания языка Java послужил совсем не Интернет, а потребность в независящем от конкретной платформы (т. е. архитектурно нейтральном) языке, который можно было бы использовать для создания программного обеспечения, встраиваемого в различные бытовые электронные устройства, в том числе микроволновые печи и устройства дистанционного управления. Не трудно догадаться, что в контроллерах таких устройств применяются разнотипные процессоры. Но трудность применения Си и С++ (как и большинства других языков) состоит в том, что написанные на них программы должны компилироваться для конкретной платформы. И хотя программы на С++ могут быть скомпилированы практически для любого типа процессора, тем не менее для этого потребуется наличие полного компилятора С++, предназначенного для данного конкретного процессора. Но дело в том, что создание компиляторов обходится дорого и отнимает немало времени. Поэтому требовалось более простое и экономически выгодное решение. Пытаясь найти такое решение, Гослинг и другие разработчики начали работу над переносимым, не зависящем от конкретной платформы языком, который можно было бы использовать для создания кода, пригодного для выполнения на различных процессорах в различных средах. И в конечном итоге их усилия привели к созданию языка Java.
Примерно в то же время, когда определялись основные характеристики языка Java, появился второй, ещё более важный фактор, который должен был сыграть решающую роль в судьбе этого языка. И этим вторым фактором, конечно же, стала Всемирная паутина (веб). Если бы формирование веб не проходило почти одновременно с реализацией языка Java, он мог бы остаться полезным, но незамеченным языком программирования бытовых электронных устройств. Но с появлением веб язык Java вышел на передний край разработки языков программирования, поскольку среда веб также нуждалась в переносимых программах.
С самых первых шагов своей карьеры большинству программистов приходится твёрдо усваивать, что переносимость программ столь же недостижима, сколь и желательна. Несмотря на то что потребность в средствах для создания эффективных, переносимых (не зависящих от конкретной платформы) программ существовала в программировании с самого начала, она отодвигалась на задний план другими, более насущными, задачами. Более того, львиная доля отрасли вычислительной техники была разделена на три конкурирующих лагеря (Intel, Macintosh и UNIX), и поэтому большинство программистов оставались на своих закреплённых аппаратно-программных рубежах, что несколько снижало потребность в переносимом коде. Тем не менее с появлением Интернета и веб старая проблема переносимости возникла снова, а её решение стало ещё более актуальным. Ведь Интернет представляет собой разнообразную и распределённую сетевую среду с разнотипными компьютерами, операционными системами и процессорами. Несмотря на то что к Интернету подключены разнотипные платформы, пользователям желательно, чтобы на всех этих платформах можно было выполнять одинаковые программы. То, что в начале было неприятной, но не слишком насущной задачей, стало потребностью первостепенной важности.
К 1993г. членам группы разработчиков Java стало очевидно, что проблемы переносимости, часто возникающие при создании кода, предназначенного для встраивания в контроллеры, возникают также и при попытках создания кода для Интернета. Фактически та же проблема, для решения которой в мелком масштабе предназначался язык Java, была актуальна в большом масштабе и в среде Интернета. Понимание этого обстоятельства вынудило разработчиков Java перенести своё внимание с бытовой электроники на программирование для Интернета. Таким образом, Интернет обеспечил крупномасштабный успех Java, несмотря на то, что потребность в архитектурно нейтральном языке программирования послужила для этого своего рода "первоначальной искрой".
Как упоминалось ранее, язык Java наследует многие из своих характеристик от языков Си и С++. Это сделано намеренно. Разработчики Java знали, что использование знакомого синтаксиса Си и повторение объектно-ориентированных свойств С++ должно было сделать их язык привлекательным для миллионов, имеющих опыт программирования на Си/С++. Во-первых, язык Java был разработан, проверен и усовершенствован людьми, имевшими солидный практический опыт программирования. Этот язык разработан с учётом потребностей и опыта его создателей. Таким образом, Java - это язык для программистов. Во-вторых, Java целостен и логически непротиворечив. В-третьих, Java предоставляет программисту полный контроль над программой, если не учитывать ограничения, налагаемые средой Интернета. Если программирование выполняется грамотно, это непосредственно отражается на самих программах. В равной степени справедливо и обратное. Иначе говоря, Java - это язык не для обучающихся программированию, а для тех, кто занимается им профессионально.
Из-за сходства характеристик языков Java и Си некоторые склонны считать Java просто "версией языка С++ для Интернета". Но это серьёзное заблуждение. Языку Java присущи значительные практические и концептуальные отличия. Язык С++ действительно оказал влияние на характеристики Java, но Java не является усовершенствованной версией С++. Например, Java не совместим с языком С++. Разумеется, у него немало сходств с языком С++, и в исходном коде программы на Java программирующий на С++ будет чувствовать себя почти как дома. Вместе с тем язык Java предназначен не для замены С++, а для решения одних задач, тогда как язык С++ - для решения других задач. Оба языка будут ещё долго сосуществовать.
Как отмечалось ранее, развитие языков программирования обусловлено двумя причинами: адаптацией к изменениям в среде и реализацией новых идей в области программирования. Изменения в среде которые побудили к разработке языка, подобного Java, вызвали потребность в независящих от платформы программах, предназначенных для распространения в Интернете. Но язык Java изменяет также подход к написанию программ. В частности, язык Java углубил усовершенствовал объектно-ориентированный подход, использованный в С++, добавил в него поддержку многопоточной обработки и предоставил библиотеку, которая упростила доступ к Интернету. Но столь поразительный успех Java обусловлен не отдельными его особенностями, а их совокупностью как языка в целом. Он явился прекрасным ответом на потребности в то время лишь зарождавшейся среды в высшей степени распределённых вычислительных систем. В области разработки программ для Интернета язык Java стал тем, чем язык Си стал для системного программирования: революционной силой, которая изменила мир.
Связь с языком С#.
Многообразие и большие возможности языка Java продолжают оказывать влияние на всю разработку языков программирования. Многие из его новаторских характеристик, конструкций и концепций становятся неотъемлемой частью основы любого нового языка. Успех Java слишком значителен, чтобы его можно было игнорировать.
Вероятно, наиболее наглядным примером влияния языка Java на программирование служит язык C#. Он создан в корпорации Microsoft для поддержки платформы .NET Framework и тесно связан с Java. В частности, в обоих этих языках используется один и тот же общий синтаксис, поддерживается распределённое программирование и применяется одна и та же объектная модель. Разумеется, у Java и C# имеется целый ряд отличий, но в целом они внешне очень похожи. Ныне такое "перекрёстное опыление" Java и C# служит наилучшим доказательством того, что язык Java коренным образом изменил представление о языках программирования и их применении.
Каким образом язык Java повлиял на Интернет.
Интернет способствовал выдвижению Java на передний край программирования, а язык Java, в свою очередь, оказал очень сильное влияние на Интернет. Язык Java не только упростил создание программ для Интернета в целом, но и обусловил появление нового типа прикладных программ, предназначенных для работы в сети и получивших название аплетов, которые изменили понятие содержимого сетевой среды. Кроме того, язык Java позволил решить две наиболее острые проблемы программирования, связанные с Интернетом: переносимость и безопасность. Рассмотрим каждую из этих проблем в отдельности.
Аплеты на Java.
Аплет - это особый вид прикладной программы на Java, предназначенный для передачи через Интернет и автоматического выполнения в совместимом с Java веб-браузере. Более того, аплет загружается по требованию, не требуя дальнейшего взаимодействия с пользователем. Если пользователь щёлкает кнопкой мыши на ссылке, которая содержит аплет, он автоматически загружается и запускается в браузере. Аплеты создаются в виде небольших программ. Как правило, они служат для отображения данных, предоставляемых сервером, обработки действий пользователя или выполнения локально, а не на сервере, таких простых функций, например, как вычисление процентов по кредитам. По существу, аплет позволяет перенести ряд функций со стороны сервера на сторону клиента.
Появление аплетов изменило характер программирования приложений для Интернета, поскольку они расширили совокупность объектов, которые можно свободно перемещать в киберпространстве. В общем, между сервером и клиентом передаются две крупные категории объектов: пассивные данные и динамически активизируемые программы. Например, чтение сообщений электронной почты подразумевает просмотр пассивных данных. Даже при загрузке программы её код по-прежнему остаётся пассивными данными до тех пор, пока он не начнёт выполняться. И напротив, аплет представляет собой динамическую, автоматически выполняющуюся прикладную программу. Такая программа является активным агентом на клиентской машине, хотя она инициируется сервером.
На ранней стадии развития Java аплеты были самой важной составляющей программирования на Java. Они демонстрировали эффективность и преимущества Java, повышали привлекательность веб-страниц и давали программистам возможность в полной мере исследовать, на что был способен язык Java. И хотя аплеты находят применение и ныне, со временем они потеряли своё значение. Начиная с версии JDK 9, а на данный момент актуальна версия JDK 17, аплеты постепенно выходят из употребления, поскольку им на смену пришли другие механизмы доставки динамических, активных программ через Интернет.
Безопасность.
За привлекательностью динамических сетевых программ скрываются серьёзные трудности обеспечения безопасности и переносимости. Очевидно, что клиентскую машину нужно обезопасить от нанесения ей ущерба программой, которая сначала загружается в неё, а затем автоматически запускается на выполнение. Кроме того, такая программа должна быть в состоянии выполняться в различных вычислительных средах и под управлением разных операционных систем. Эти трудности эффективно и изящно решаются в Java. Рассмотрим их подробнее, начиная с безопасности.
Как известно, каждая загрузка обычной программы сопряжена с риском, поскольку загружаемый код может содержать вирус, "троянский конь" или вредоносный код. Дело в том, что вредоносный код может сделать своё чёрное дело, если получит несанкционированный доступ к системным ресурсам. Например, просматривая содержимое локальной файловой системы компьютера, вирусная программа может собирать конфиденциальную информацию вроде номеров кредитных карточек, сведений о состоянии банковских счетов и паролей. Для безопасной загрузки и выполнения аплетов Java на клиентской машине нужно было предотвратить подобные атаки со стороны аплетов.
Java обеспечивает такую защиту, ограничивая действие аплета исполняющей средой Java и не предоставляя ему доступ к другим частям операционной системы компьютера. Возможность загружать аплеты в полной уверенности, что это не нанесёт системе никакого вреда и не нарушит её безопасность, многие специалисты и пользователи считают наиболее новаторским аспектом Java.
Переносимость.
Переносимость - основная особенность Интернета, поскольку эта глобальная сеть соединяет вместе множество разнотипных компьютеров и операционных систем. Чтобы программа на Java могла выполняться практически на любом компьютере, подключённом к Интернету, требуется каким-то образом обеспечить её выполнение в разных системах. В частности, один и тот же аплет должен иметь возможность загружаться и выполняться на широком спектре процессоров, операционных систем и браузеров, подключённых к Интернету. А создавать разные версии аплетов для разнотипных компьютеров совершенно не рационально. Один и тот же код должен работать на всех компьютерах. Поэтому требовался какой-то механизм для создания переносимого исполняемого кода. Как станет ясно в дальнейшем, тот же самый механизм, который обеспечивает безопасность, способствует и созданию переносимых программ.
Чудо Java: байт-код.
Основная особенность Java, которая позволяет решать описанные выше проблемы обеспечения безопасности и переносимости программ, состоит в том, что компилятор Java выдаёт не исполняемый код, а так называемый байт-код - в высшей степени оптимизированный набор инструкций, предназначенных для выполнения в исполняющей системе Java, называемой виртуальной машиной Java (Java Virtual Machine - JVM). Собственно говоря, первоначальная версия виртуальной машины JVM разрабатывалась в качестве интерпретатора байт-кода. Это может вызывать недоумение, поскольку для обеспечения максимальной производительности компиляторы многих современных языков программирования призваны создавать исполняемый код. Но то, что программа на Java интерпретируется виртуальной машиной JVM, как раз помогает решить основные проблемы разработки программ для Интернета. И вот почему.
Трансляция программы Java в байт-код значительно упрощает её выполнение в разнотипных средах, поскольку на каждой платформе необходимо реализовать только виртуальную машину JVM. Если в отдельной системе имеется исполняющий пакет, в ней можно выполнять любую программу на Java. Следует, однако, иметь в виду, что все виртуальные машины JVM на разных платформах, несмотря на некоторые отличия и особенности их реализации, способны правильно интерпретировать один и тот же байт-код. Если бы программа на Java компилировалась в машинонезависимый код, то для каждого типа процессоров, подключённых к Интернету, должны были бы существовать отдельные версии одной и той же программы. Ясно, что такое решение не приемлемо. Таким образом, организация выполнения байт-кода виртуальной машины JVM - простейший способ создания по-настоящему переносимых программ.
Тот факт, что программа на Java выполняется виртуальной машиной JVM, способствует также повышению её безопасности. Виртуальная машина JVM управляет выполнением программы, поэтому она может изолировать программу, чтобы создать ограниченную исполняющую среду, которая называется "песочницей" и содержит программу, препятствующую неограниченному доступу к машине. Как станет ясно в дальнейшем, ряд ограничений, существующих в языке Java, также способствует повышению безопасности.
В общем, когда программа компилируется в промежуточную форму, а затем интерпретируется виртуальной машиной JVM, она выполняется медленнее, чем если бы она была скомпилирована в исполняемый код. Но в Java это отличие в производительности не слишком заметно. Байт-код существенно оптимизирован, и поэтому его применение позволяет виртуальной машине JVM выполнять программы значительно быстрее, чем следовало ожидать.
Язык Java был задуман как интерпретируемый, но ни что не препятствует ему оперативно выполнять компиляцию байт-кода в машинозависимый код для повышения производительности. Поэтому вскоре после выпуска Java появилась технология HotSpot, которая предоставляет динамический компилятор (или так называемый JIT-компилятор) байт-кода. Если динамический компилятор входит в состав виртуальной машины JVM, то избранные фрагменты байт-кода компилируются в исполняемый код по частям, в реальном времени и по требованию. Важно понимать, что одновременная компиляция всей программы Java в исполняемый код нецелесообразна, поскольку Java производит различные проверки, которые могут быть сделаны только во время выполнения. Вместо этого динамический компилятор компилирует код во время выполнения по мере надобности. Более того, компилируются не все фрагменты байт-кода, а только те, которым компиляция принесёт выгоду, а остальной код просто интерпретируется. Тем не менее принцип динамической компиляции обеспечивает значительное повышение производительности. Даже при динамической компиляции байт-кода характеристики переносимости и безопасности сохраняются, поскольку виртуальная машина JVM по-прежнему отвечает за целостность исполняющей среды.
Но, начиная с версии JDK 9, в избранные среды Java включён статический компилятор, предназначенный для компиляции байт-кода в платформенно-ориентированный код перед его выполнением машиной JVM, а не динамически. Статическая компиляция имеет свои особенности и не подменяет собой описанный выше традиционный подход, принятый в Java. Более того, статической компиляции присущи свои ограничения, которых мы пока вообще не будем касаться.
Выход за пределы аплетов.
Как пояснялось ранее, на ранней стадии развития Java аплеты были важной частью программирования на Java. Они не только повысили привлекательность веб-страниц, но и стали самой заметной особенностью Java, заметно повысив его притягательность. Тем не менее аплеты опираются на подключаемый к браузеру модуль Java. Поэтому для нормальной работы аплета он должен поддерживаться браузером. Отныне подключаемый к браузеру модуль Java больше не поддерживается. Проще говоря, без такой поддержки со стороны браузера аплеты нежизнеспособны. Вследствие этого, начиная с версии JDK 9, поддержка аплетов в Java считается устаревшей. В языке Java устаревшим считается средство, которое по-прежнему доступно, но отмечено как не рекомендованное к употреблению. Такое языковое средство будет исключено в последующем выпуске Java. Следовательно, не рекомендованные к употреблению языковые средства не следует применять в новом коде.
Имеются различные альтернативы аплетам, самой важной из которых, безусловно, является технология Java Web Start, которая позволяет динамически загружать приложение из веб-страницы. Отличие заключается в том, что приложение выполняется самостоятельно, а не в самом браузере, т. е. оно не опирается на подключаемый к браузеру модуль Java. Технология Java Web Start предоставляет механизм развёртывания, пригодный для работы со многими типами программ на Java.
Сервлеты: серверные программы на Java.
Как ни полезны аплеты, они решают лишь половину задачи в архитектуре "клиент-сервер". Вскоре после появления языка Java стало очевидно, что он может пригодиться и на серверах. В результате появились сервлеты. Сервлет - это небольшая прикладная программа, выполняемая на сервере.
Сервлеты служат для создания динамически генерируемого содержимого, которое затем предоставляется клиенту. Например, интерактивный склад может использовать сервлет для поиска стоимости товара в базе данных. Затем информация о цене используется для динамического создания веб-страницы, отправляемой браузеру. И хотя динамически создаваемое содержимое доступно и с помощью таких механизмов, как CGI (Common Geteway Interface - интерфейс общего шлюза), применение сервлетов даёт ряд преимуществ, в том числе повышает производительность.
Подобно всем программам на Java, сервлеты компилируются в байт-код и выполняются виртуальной машиной JVM, поэтому они в высшей степени переносимы. Следовательно, один и тот же сервлет может применяться в различных серверных средах. Единственным необходимым условием для этого является поддержка на сервере виртуальной машины JVM и контейнера для сервлета.
Продолжение в следующем посте...
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
.
3
Терминология Java.
Рассмотрение истории создания и развития языка Java было бы неполным без описания терминологии, характерной для Java. Основным фактором, обусловившим изобретение Java, стала потребность в обеспечении переносимости и безопасности, но свою роль в формировании окончательной версии языка сыграли и другие факторы. Группа разработчиков обобщила основные понятия Java в следующем перечне терминов:
- простота;
- безопасность;
- переносимость;
- объектная ориентированность;
- надёжность;
- многопоточность;
- архитектурная нейтральность;
- интерпретируемость;
- высокая производительность;
- распределённость;
- динамичность.
Мы уже рассмотрели такие термины, как безопасность и переносимость. А теперь поясним значение остальных терминов.
Простота.
Язык Java был задуман как простой в изучении и эффективный в употреблении профессиональными программистами. Овладеть языком Java тем, у кого имеется некоторый опыт программирования, не составит особого труда. если вы уже знакомы с основными принципами объектно-ориентированного программирования, то изучить Java вам будет ещё проще. А от тех, кто имеет опыт программирования на С++, переход на Java вообще потребует минимум усилий. Язык Java наследует синтаксис Си/С++ и многие объектно-ориентированные свойства С++, поэтому для большинства программистов изучение Java не составит больших трудностей.
Объектная ориентированность.
Хотя предшественники языка Java и оказали влияние на его архитектуру и синтаксис, при его проектировании не ставилась задача совместимости по исходному коду с каким-нибудь другим языком. Это позволило группе разработчиков создавать Java, по существу, с чистого листа. Одним из следствий этого явился чёткий, практичный, прагматичный подход к объектам. Помимо того, что язык Java позаимствовал свойства многих удачных объектно-программных сред, разработанных на протяжении нескольких последних десятилетий, в нём удалось достичь золотой середины между строгим соблюдением принципа "все элементы программы являются объектами" и более прагматичного принципа "прочь с дороги". Объектная модель Java проста и легко расширяема. В то же время такие элементарные типы данных, как целочисленные, сохраняются в виде высокопроизводительных компонентов, не являющихся объектами.
Надёжность.
Многоплатформенная среда веб предъявляет к программам повышенные требования, поскольку они должны надёжно выполняться в разнотипных системах. Поэтому способность создавать надёжные программы была одним из главных приоритетов при разработке Java. Для обеспечения надёжности в Java налагается ряд ограничений в нескольких наиболее важных областях, что вынуждает программистов выявлять ошибки на ранних этапах разработки программы. В то же время Java избавляет от необходимости беспокоиться по поводу многих наиболее часто встречающихся ошибок программирования. А поскольку Java - строго типизированный язык, то проверка кода выполняется во время компиляции. Но проверка кода делается и во время выполнения. В результате многие трудно обнаруживаемые программные ошибки, которые часто приводят к возникновению с трудом воспроизводимых ситуаций во время выполнения, попросту не возможны в программе на Java. Предсказуемость кода в разных ситуациях - одна из основных особенностей Java.
Чтобы понять, каким образом достигается надёжность программ на Java, рассмотрим две основные причины программных сбоев: ошибки управления памятью и неправильная обработка исключений (т. е. ошибки при выполнении). В традиционных средах создания программ управление памятью - сложная и трудоёмкая задача. Например, в среде Си/С++ программист должен вручную резервировать и освобождать всю динамически распределяемую память. Иногда это ведёт к возникновению трудностей, поскольку программисты забывают освободить ранее зарезервированную память или, что ещё хуже, пытаются освободить область памяти, всё ещё используемую другой частью кода. Java полностью исключает такие ситуации, автоматически управляя резервированием и освобождением памяти. (Освобождение оперативной памяти полностью выполняется автоматически, поскольку Java предоставляет средства сборки неиспользуемых объектов в "мусор".) В традиционных средах условия для исключений часто возникают в таких ситуациях, как деление на ноль или отсутствие искомого файла, а управление ими должно осуществляться с помощью громоздких и трудных для понимания конструкций. Java облегчает выполнение этой задачи, предлагая объектно-ориентированный механизм обработки исключений. В грамотно написанной программе на Java все ошибки при выполнении могут (и должны) обрабатываться самой программой.
Многопоточность.
Язык Java был разработан в ответ на потребность создавать интерактивные сетевые программы. Для этой цели в Java поддерживается написание многопоточных программ, способных одновременно выполнять многие действия. Исполняющая система Java содержит изящное, но вместе с тем сложное решение задачи синхронизации многих процессов, которое позволяет строить устойчиво работающие интерактивные системы. Простой подход к организации многопоточной обработки, реализованный в Java, позволяет программистам сосредоточивать основное внимание на конкретном поведении программы, а не на создании многозадачной подсистемы.
Архитектурная нейтральность.
Основной задачей, которую ставили перед собой разработчики Java, было обеспечение долговечности и переносимости кода. Одной из главных трудностей, стоявших перед разработчиками, когда они создавали Java, было отсутствие всяких гарантий, что код, написанный сегодня, будет успешно выполняться завтра - даже на одном и том же компьютере. Операционные системы и процессоры постоянно совершенствуются, и любые изменения в основных системных ресурсах могут стать причиной неработоспособности программ. Пытаясь каким-то образом изменить это положение, разработчики приняли ряд жёстких решений в самом языке и в виртуальной машине Java. Они поставили перед собой следующую цель: "Написанное однажды выполняется везде, в любое время и всегда". И эта цель была в значительной степени достигнута.
Интерпретируемость и высокая производительность.
Как упоминалось ранее, выполняя компиляцию программ в промежуточное представление, называемое байт-кодом, Java позволяет создавать межплатформенные программы. Такой код может выполняться в любой системе, которая реализует виртуальную машину JVM. С первых же попыток разработать межплатформенные решения удалось достичь поставленной цели, хотя и за счёт снижения производительности. Как пояснялось ранее, байт-код Java был тщательно разработан таким образом, чтобы его можно было с высокой эффективностью преобразовывать непосредственно в машинозависимый код на конкретной платформе с помощью динамического компилятора. Исполняющие системы Java, обеспечивающие такую возможность, сохраняют все преимущества кода, не зависящего от конкретной платформы.
Распределённость.
Язык Java предназначен для распределённой среды Интернета, поскольку он поддерживает семейство сетевых протоколов TCP/IP. По существу, обращение к ресурсу по унифицированному указателю информационного ресурса (URL) мало чем отличается от обращения к файлу. В языке Java поддерживается также удалённый вызов методов (Remote Method Invocation - RMI). Такая возможность позволяет вызывать методы из программ через сеть.
Динамичность.
Программы на Java содержат значительный объём данных динамического типа, используемых для проверки полномочий и разрешения доступа к объектам во время выполнения. Это позволяет безопасно и рационально выполнять динамическое связывание кода. Данное обстоятельство исключительно важно для устойчивости среды Java, где небольшие фрагменты байт-кода могут динамически обновляться в действующей системе.
Эволюция языка Java.
Первоначальная версия Java не представляла собой ничего особенно революционного, но она и не ознаменовала завершение периода быстрого совершенствования этого языка. В отличие от большинства других систем программирования, совершенствование которых происходило понемногу и постепенно, язык Java продолжает стремительно развиваться. Вскоре после выпуска версии Java 1.0 разработчики уже создали версию Java 1.1. Внедрённые в этой версии функциональные возможности оказались более значительными и существенными, чем можно было ожидать, судя по увеличению дополнительного номера версии. В новой версии разработчики добавили много новых библиотечных элементов, переопределили механизм обработки событий и изменили конфигурацию многих библиотечных средств из версии 1.0. Кроме того, они отказались от нескольких средств, первоначально представленных в Java 1.0, но признанных затем устаревшими. Таким образом, в версии Java 1.1 были внедрены новые характерные свойства и в то же время исключены некоторые свойства, определённые в первоначальной спецификации.
Следующей основой стала версия Java 2, где номер "2" означает второе поколение. Создание версии Java 2 стало знаменательным событием, означавшим начало "современной эпохи" Java. Первой версии Java 2 был присвоен номер 1.2, что может показаться несколько странным. Дело в том, что вначале номер относился к внутреннему номеру версии библиотек Java, но затем он был распространён на всю версию в целом. С появлением версии Java 2 компания Sun Microsystems начала выпускать программное обеспечение Java в виде пакета J2SE (Java 2 Platform Standard Edition - Стандартная версия платформы Java 2), и с тех пор номера версий стали присваиваться именно этому программному продукту.
В версии Java 2 была добавлена поддержка ряда новых средств, в том числе Swing и Collections Framework. Кроме того, были усовершенствованы виртуальная машина JVM и различные инструментальные средства программирования. В то же время версия Java 2 содержала некоторые не рекомендованные к употреблению средства. Наибольшие изменения претерпел класс Thread, где методы suspend (), resume () и stop () стали рекомендованными к употреблению в многопоточном программировании.
Версия J2SE 1.3 стала первой серьёзной модернизацией первоначальной версии Java J2SE. Эта модернизация состояла, главным образом, в расширении существующих функциональных возможностей и "уплотнении" среды разработки. В общем случае программы, написанные для версий 1.2 и 1.3, совместимы по исходному коду. И хотя изменений в версии 1.3 оказалось меньше, чем в трёх предшествующих основных версиях, это не сделало её менее важной.
Совершенствование языка Java было продолжено в версии J2SE 1.4. Эта версия содержала несколько важных усовершенствований и добавлений. Например, в неё были добавлены новое ключевое слово assert, цепочки исключений и подсистема ввода-вывода на основе каналов. Изменения были внесены и в каркас Collections Fгamework, а также в классы, предназначенные для работы в сети. В эту версию было также внесено много мелких изменений. Несмотря на значительное количество новых функциональных возможностей, версия 1.4 почти полностью сохранила совместимость по исходному коду с предшествующими версиями.
В следующую версию Java, названную J2SE 5, был внесён ряд революционных изменений. В отличие от большинства предшествующих обновлений Java, которые предоставляли важные, но постепенные усовершенствования, в версии J2SE 5 была коренным образом расширена область, возможности и пределы применения языка. Чтобы стало понятнее, насколько существенными оказались изменения, внесённые в версии J2SE 5, ниже перечислены лишь самые основные из новых функциональных возможностей Java в данной версии.
- Обобщения.
- Аннотации.
- Автоупаковка и автораспаковка.
- Перечисления.
- Усовершенствованный цикл for в стиле for each.
- Аргументы переменной длины (varargs).
- Статический импорт.
- Форматированный ввод-вывод.
- Утилиты параллельной обработки.
В этом перечне не указаны незначительные изменения или постепенные усовершенствования. Каждый пункт перечня представлял значительное дополнение языка Java. Одни из них, в том числе обобщения, усовершенствованный цикл for и аргументы переменной длины, представляли новые синтаксические элементы, а другие, например автоупаковка и автораспаковка, изменяли семантику языка. Аннотации придали программированию совершенно новые черты. В любом случае влияние всех этих дополнений вышло за рамки их прямого действия. Они полностью изменили сам характер языка Java.
Значение новых функциональных возможностей нашло отражение в присвоенном данной версии номере - "5". Если следовать привычной логике, то следующим номером версии Java должен был быть 1.5. Однако новые средства оказались столь значительными, что переход от версии 1.4 к версии 1.5 не отражал бы масштабы внесенных изменений. Поэтому в компании Sun Micгosystems решили присвоить новой версии номер 5, чтобы тем самым подчеркнуть значимость этого события. Поэтому версия данного программного продукта была названа J2SE 5, а комплект разработчика - JDK 5. Тем не менее для сохранения единообразия в компании Sun Microsystems решили использовать номер 1.5 в качестве внутреннего номера версии, называемого также номером версии разработки. Цифра 5 в обозначении версии называется номером версии продукта.
Следующая версия получила название Java SE 6. С выходом этой версии в компании Sun Microsystems решили в очередной раз изменить название платформы Java. В названии была опущена цифра 2. Таким образом, данная платформа теперь называется сокращенно Java SE, а официально - Java Platform, Standard Edition 6 (Платформа Java, стандартная версия 6). Комплект разработчика был назван JDK 6. Как и в обозначении версии J2SE 5, цифра 6 в названии Java SE 6 означает номер версии продукта. Внутренним номером разработки этой версии является 1.6.
Версия Java SE 6 была построена на основе версии J2SE 5 с рядом дальнейших усовершенствований. Она не содержала дополнений к числу основных языковых средств Java, но расширяла библиотеки API, добавляя несколько новых пакетов и предоставляя ряд усовершенствований в исполняющей системе. В этой версии было сделано ещё несколько усовершенствований и внесено несколько дополнений. В целом версия Java SE 6 призвана закрепить достижения в J2SE 5.
Далее была выпущена версия Java SE 7 с комплектом разработчика Java JDK 7 и внутренним номером версии 1.7. Это был первый главный выпуск Java с тех пор, как компания Sun Microsystems была приобретена компанией Oracle. Версия Java SE 7 содержит много новых средств, включая существенные дополнения языка и библиотек Java API. В данной версии была усовершенствована исполняющая система Java, а также включена в неё поддержка других языков, кроме Java, но программирующих на Java больше интересовали дополнения, внесённые в сам язык и его библиотеку.
Новые языковые средства были разработаны в рамках проекта Project Coin. Этот проект должен был обозначать многие так называемые "мелкие" изменения в Java, которые предполагалось включить в JDK 7, хотя эффект от всех этих новых "мелких" новшеств весьма велик с точки зрения их воздействия на код. В действительности для большинства программистов эти изменения могут стать самым важным нововведением в Java SE 7. Ниже перечислены новые языковые средства, внедрённые в JDK 7.
- Расширение типа String возможностями управлять ветвлением в операторе switch.
- Двоичные целочисленные литералы.
- Символы подчёркивания в числовых литералах.
- Расширение оператора try, называемое оператором try с ресурсами, обеспечивающее
автоматическое управление ресурсами. (Например, потоки
ввода-вывода могут теперь быть закрыты автоматически, когда они больше
не нужны.) - Выводимость типов (с помощью ромбовидного оператора < >) при создании
обобщённого экземпляра. - Улучшенная обработка исключений, благодаря которой два исключения или
больше могут быть обработаны в одном блоке оператора catch (многократный
перехват), а также улучшенный контроль соответствия типов повторно
генерируемых исключений. - Улучшение предупреждений компилятора, связанных с некоторыми типами методов
с переменным количеством аргументов. И хотя это нельзя считать изменением
в синтаксисе, оно даёт больший контроль над предупреждениями.
Несмотря на то что средства, внедрённые в рамках проекта Project Coin, считаются мелкими изменениями в языке Java, в целом они тем не менее дают много больше преимуществ, чем подразумевает само понятие "мелкие". В частности, оператор try с ресурсами оказывает существенное влияние на порядок написания кода, опирающегося на потоки ввода-вывода. Кроме того, возможность использовать объекты типа String в операторе switch оказалась долгожданным усовершенствованием, позволившим во многом упростить код.
В версии Java SE 7 внесено несколько дополнений в библиотеку Java API. Важнейшими из них являются усовершенствования каркаса NIO Framework и дополнения каркаса Fork/Join Framework. Новая система ввода-вывода NIO (первоначально называвшаяся New I/O) была внедрена в версии Java 1.4. Но изменения, внесенные в версии Java SE 7, значительно расширили возможности этой системы, причём настолько, что она зачастую обозначается как NIO.2.
Каркас Fork/Join Framework обеспечивает важную поддержку параллельного программирования. Термином параллельное программирование обычно обозначаются технологии, повышающие эффективность применения компьютеров с несколькими процессорами, включая многоядерные системы. Преимущества, которые дают многоядерные системы, позволяют в перспективе значительно повысить производительность программ. Каркас Fork/Join Framework позволяет решать задачи параллельного программирования в следующих областях:
- упрощение составления и использования заданий, которые могут выполняться параллельно;
- автоматическое использование нескольких процессоров.
Следовательно, с помощью каркаса Fork/Join Framework можно создавать приложения, в которых автоматически используются процессоры, доступные в исполняющей среде. Разумеется, не все алгоритмы оказываются параллельными, но те из них, которые таковыми все же являются, позволяют добиться существенных преимуществ в скорости выполнения.
Следующей была выпущена версия Java SE 8 с комплектом разработчика JDK 8 и внутренним номером версии 1.8. Значительные усовершенствования в ней произошли благодаря внедрению лямбда-выражений - нового языкового средства с далеко идущими последствиями. Лямбда-выражения позволяют совершенно иначе подходить к программированию и написанию кода. Лямбда выражения вносят в Java возможности функционального программирования. В процессе программирования лямбда выражения способны упростить и сократить объём исходного кода, требующегося для создания определенных конструкций, в том числе некоторых типов анонимных классов. Кроме того, лямбда-выражения вводят в язык новую операцию (->) и элемент синтаксиса.
Внедрение лямбда-выражений оказало обширное влияние и на библиотеки Java, которые были дополнены новыми средствами, выгодно использующими лямбда-выражения. К наиболее важным новшествам в библиотеке Java относится новый прикладной программный интерфейс API потоков ввода-вывода, входящий в пакет java. util. stream. В этом прикладном интерфейсе API, оптимизированном с учётом лямбда-выражений, поддерживаются конвейерные операции с данными. Еще одним важным новшеством является пакет java. util. function, в котором определён целый ряд функциональных интерфейсов, обеспечивающих дополнительную поддержку лямбда-выражений. В библиотеке Java API внедрены и другие, менее значительные средства, имеющие отношение к лямбда-выражениям.
Ещё одно нововведение, навеянное лямбда-выражениями, касается интерфейсов. В версии JDK 8 появилась возможность определять реализацию по умолчанию метода, объявленного в интерфейсе. Если конкретная реализация такого метода отсутствует, то используется его реализация по умолчанию в интерфейсе. Таким образом, обеспечивается постепенное развитие интерфейсов, поскольку новый метод можно ввести в интерфейс, не нарушая существующий код. Это новшество позволяет также рационализировать реализацию интерфейса при наличии подходящих средств, доступных по умолчанию. К числу других средств, появившихся в JDK 8, относятся новый прикладной программный интерфейс API для обработки даты и времени, типовые аннотации и возможность использовать параллельную обработку при сортировке массива. Кроме того, в состав JDK 8 включена поддержка JavaFX 8 - последней версии нового каркаса приложений Java с графическим пользовательским интерфейсом (ГПИ). Предполагается, что каркас JavaFX станет неотъемлемой частью практически всех приложений Java и в конечном итоге заменит Swing для разработки большинства проектов на основе ГПИ.
Версия Java SE 9.
Версия Java SE 9 с комплектом разработчика JDK 9. При выпуске JDK 9 внутренний номер версии также оказался равным 9. В комплекте JDK 9 представлен главный выпуск Java, включая существенные улучшения как языка Java, так и его библиотек. Подобно выпускам JDK 5 и JDK 8, выпуск JDK 9 оказал значительное влияние не только на язык Java, но и на его библиотеки.
Главным нововведением в версии JDK 9 являются модули, позволяющие указывать взаимосвязи и зависимости в прикладном коде, а также расширяющие возможности управления доступом в Java. Вместе с модулями в языке Java появился новый синтаксический элемент и несколько ключевых слов. Кроме того, в состав JDK была включена утилита jlink, позволяющая создавать на стадии выполнения образ прикладного файла типа JMOD, содержащего только нужные модули. Модули также оказали заметное влияние на библиотеку Java API, поскольку, начиная с версии JDK 9, библиотечные пакеты организованы в модули.
Несмотря на то что модули являются главным усовершенствованием Java в версии 9, они принципиально просты и понятны. А поскольку модули совсем не нарушают поддержку кода, унаследованного из предыдущих версий Java, то их нетрудно внедрить в процесс текущей разработки. Для этого не придётся сразу вносить изменения в уже существующий код. Короче говоря, модули значительно расширяют функциональные возможности, не меняя существо языка Java.
Помимо модулей, в состав JDK 9 вошло многих других новых средств. Особый интерес представляет утилита JShell, поддерживающая экспериментирование с программами и изучение языка Java в интерактивном режиме. Еще одним интересным новшеством является поддержка закрытых интерфейсных методов. Их внедрение дополнительно расширило поддержку методов с реализацией по умолчанию, появившихся в версии JDK 8. В версии JDK 9 возможности утилиты javadoc были расширены средствами поиска, а также новым дескриптором @index для их поддержки. Как и в предыдущих выпусках, в версии JDK 9 были продолжены усовершенствования библиотек Java API.
Как правило, в любом выпуске Java можно обнаружить новые средства, привлекающие наибольшее внимание. Но версии JDK 9 присуща одна существенная особенность - упразднение аплетов. Начиная с версии JDK 9, аплеты больше не рекомендованы для применения в новых проектах. Как пояснялось ранее, весь прикладной интерфейс API для аплетов не рекомендован в JDK 9 для применения, поскольку аплеты больше не поддерживаются в браузерах, а также по ряду других причин. В настоящее время для развертывания прикладных программ на Java в Интернете рекомендуется технология Java Web Staгt.
Подводя краткий итог, можно сказать, что JDK 9 продолжает наследие нововведений в Java, помогающих сохранить живость и проворство, которые пользователи уже привыкли ожидать от этого языка программирования.
Культура нововведений.
С самого начала язык Java оказался в центре культуры нововведений. Его первоначальная версия трансформировала подход к программированию для Интернета. Виртуальная машина Java (JVM) и байт-код совершенно изменили представление о безопасности и переносимости. Переносимый код вдохнул жизнь в веб. Процесс Java Community Pгocess (JCP) преобразовал способ внедрения новых идей в язык. Область применения Java никогда не оставалась без изменений в течение длительного периода времени.
Продолжение в следующем посте...
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
.
4
Краткий обзор Java.
Как и во всех остальных языках программирования, элементы Java существуют не сами по себе. Они скорее действуют совместно, образуя язык в целом . Но такая их взаимосвязанность может затруднять описание какого-то одного аспекта Java, не затрагивая ряда других. Зачастую для понимания одного языкового средства необходимо знать другое средство. Поэтому рассмотрим краткий обзор ряда основных языковых средств Java. Приведенный ниже материал послужит отправной точкой для создания и понимания простых программ на Java.
Объектно-ориентированное программирование.
Объектно-ориентированное программирование (ООП) составляет основу Java. По существу, все программы на Java являются в какой-то степени объектно-ориентированными. Язык Java связан с ООП настолько тесно, что, прежде чем приступить к написанию на нём даже простейших программ, следует вначале ознакомиться с основными принципами ООП. Поэтому начнём с рассмотрения теоретических вопросов ООП.
Две парадигмы.
Все компьютерные программы состоят из двух элементов: кода и данных. Более того, программа принципиально может быть организована вокруг своего кода или своих данных. Иными словами, организация одних программ определяется тем, "что происходит", а других - тем, "на что оказывается влияние". Существуют две парадигмы создания программ. Первая из них называется моделью, ориентированной на процессы, и характеризует программу как последовательность линейных шагов (т. е. кода). Модель, ориентированную на процессы, можно рассматривать в качестве кода, воздействующего на данные. Такая модель довольно успешно применяется в процедурных языках вроде Си. Но, как отмечалось ранее, подобный подход порождает ряд трудностей в связи с увеличением размеров и сложности программ.
С целью преодолеть увеличение сложности программ была начата разработка подхода, называемого объектно- ориентированным программированием. Объектно-ориентированное программирование позволяет организовать программу вокруг её данных (т. е. объектов) и набора вполне определенных интерфейсов с этими данными. Объектно-ориентированную программу можно охарактеризовать как данные, управляющие доступом к коду. Как будет показано далее, передавая функции управления данными, можно получить несколько организационных преимуществ.
Абстракция.
...
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Похожие темы
» Изучаем основы VHDL, ISE, ПЛИС Xilinx.
» Изучаем основы VHDL, ISE, ПЛИС Xilinx. Старые семейства.
» Основы языка VHDL
» Литература о ИИ и ИР
» Изучаем язык программирования С++
» Изучаем основы VHDL, ISE, ПЛИС Xilinx. Старые семейства.
» Основы языка VHDL
» Литература о ИИ и ИР
» Изучаем язык программирования С++
RUЭВМ :: Языки программирования :: Java
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|