Содержание

НОУ ИНТУИТ | Программирование на Java

Форма обучения:

дистанционная

Стоимость самостоятельного обучения:

бесплатно

Доступ:

свободный

Документ об окончании:

Уровень:

Специалист

Длительность:

30:01:00

Студентов:

44472

Выпускников:

3388

Качество курса:

4.28 | 3.68

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

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

Данный курс начинается с изложения истории появления и развития Java. Такие знания позволят лучше понять особенности платформы и спектр существующих продуктов и технологий. Также создание Java является интересным примером истории одного из самых популярных и успешных проектов в компьютерном мире. Затем излагаются основные концепции ООП, необходимые для освоения объектно-ориентированного языка программирования Java. Ключевые понятия и конструкции языка описываются доступным языком, но, тем не менее, на достаточно глубоком уровне. Детально рассмотрены особенности лексики, системы типов данных, объектной модели. Уделяется особое внимание модификаторам доступа, соглашениям по именованию, преобразованию типов, работе с массивами, обработке ошибок (исключительных ситуаций). Курс завершается рассмотрением базовых библиотек Java, предоставляющих всю необходимую функциональность для создания самых разных приложений – коллекции объектов, работа с файлами, сетью, создание GUI приложений, построение многопоточной архитектуры и многое другое.
Описание сетевой библиотеки предваряется изложением основ сетевых протоколов и технологий.

ISBN: 978-5-9556-0006-2

Теги: deprecated, garbage collector, java, mosaic, objective-c, браузеры, вычисления, датаграмма, десериализация, знаковый бит, интерфейсы, класс-обертка, клиенты, компоненты, массив массивов, потоки, приложения, программирование, протоколы, разработка приложений, серверы, составное имя, унарный оператор, элементы

Предварительные курсы

Дополнительные курсы

 

2 часа 30 минут

Что такое Java? История создания
Первая лекция начинается с рассказа о событиях, происходивших задолго до официального объявления Java. Хотя эта технология на сегодняшний день разительно отличается от того, как задумывали ее создатели, однако многие особенности берут свое начало от решений, принятых в то время. Будут освещены все основные этапы создания, появления и развития Java. Также в лекции излагаются необходимые базовые знания для разработчиков – основные свойства платформы Java, и почему она является платформой, а не просто языком программирования. Что входит в пакет разработчика, где найти нужную информацию, какие дополнительные продукты предоставляет Sun, чем различаются Java и Java Script – ответы на эти и другие общие вопросы находятся в первой лекции.

Основы объектно-ориентированного программирования
В этой лекции излагается основная концепция объектно-ориентированного подхода (ООП) к проектированию программного обеспечения. Поскольку в Java почти все типы (за исключением восьми простейших) являются объектными, владение ООП становится необходимым условием для успешного применения языка. Лекция имеет вводный, обзорный характер. Для более детального изучения предлагается список дополнительной литературы и Internet-ресурсов.

Лексика языка
Лекция посвящена описанию лексики языка Java. Лексика описывает, из чего состоит текст программы, каким образом он записывается и на какие простейшие слова (лексемы) компилятор разбивает программу при анализе. Лексемы (или tokens в английском варианте) – это основные «кирпичики», из которых строится любая программа на языке Java. Эта тема раскрывает многие детали внутреннего устройства языка, и невозможно написать ни одной строчки кода, не затронув ее. Именно поэтому курс начинается с основ лексического анализа.

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

Имена. Пакеты
В этой лекции рассматриваются две темы – система именования элементов языка в Java и пакеты (packages), которые являются аналогами библиотек из других языков. Почти все конструкции в Java имеют имя для обращения к ним из других частей программы. По ходу изложения вводятся важные понятия, в частности – область видимости имени. При перекрытии таких областей возникает конфликт имен. Для того, чтобы минимизировать риск возникновения подобных ситуаций, описываются соглашения по именованию, предложенные компанией Sun.
Пакеты осуществляют физическую и логическую группировку классов и становятся необходимыми при создании больших систем. Вводится важное понятие модуля компиляции и описывается его структура.

Объявление классов
Центральная тема лекции – объявление классов, поскольку любое Java-приложение является набором классов. Первый рассматриваемый вопрос – система разграничения доступа в Java. Описывается, зачем вообще нужно управление доступом в ОО-языке программирования и как оно осуществляется в Java. Затем подробно рассматривается структура объявления заголовка класса и его тела, которое состоит из элементов (полей и методов), конструкторов и инициализаторов. Дополнительно описывается сигнатура метода main, с которого начинается работа Java-приложения, правила передачи параметров различных типов в методы, перегруженные методы.

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

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

Массивы
Лекция посвящена описанию массивов в Java. Массивы издавна присутствуют в языках программирования, поскольку при выполнении многих задач приходится оперировать целым рядом однотипных значений. Массивы в Java – один из ссылочных типов, который, однако, имеет особенности при инициализации, создании и оперировании со своими значениями. Наибольшие различия проявляются при преобразовании таких типов. Также объясняется, почему многомерные массивы в Java можно (и зачастую более правильно) рассматривать как одномерные. Завершается классификация типов переменных и типов значений, которые они могут хранить.
В заключение рассматривается механизм клонирования Java, позволяющий в любом классе описать возможность создания точных копий объектов, порожденных от него.

Операторы и структура кода. Исключения
После ознакомления с типами данных в Java, правилами объявления классов и интерфейсов, а также с массивами, из базовых свойств языка остается рассмотреть лишь управление ходом выполнения программы. В этой лекции вводятся важные понятия, связанные с данной темой, описываются метки, операторы условного перехода, циклы, операторы break и continue и другие. Следующая тема посвящена более концептуальным механизмам Java, а именно работе с ошибками или исключительными ситуациями. Рассматриваются причины возникновения сбоев, способы их обработки, объявление собственных типов исключительных ситуаций. Описывается разделение всех ошибок на проверяемые и непроверяемые компилятором, а также ошибки времени исполнения.

Пакет java.awt
Эта лекция начинает рассмотрение базовых библиотек Java, которые являются неотъемлемой частью языка и входят в его спецификацию, а именно описывается пакет java.awt, предоставляющий технологию AWT для создания графического (оконного) интерфейса пользователя – GUI. Ни одна современная программа, предназначенная для пользователя, не обходится без удобного, понятного, в идеале – красивого пользовательского интерфейса. С самой первой версии в Java существует специальная технология для создания GUI. Она называется AWT, Abstract Window Toolkit. Именно о ней пойдет речь в этой лекции. Пакет java.awt претерпел, пожалуй, больше всего изменений с развитием версий Java. Мы рассмотрим дерево компонентов, доступных программисту, специальную модель сообщений, позволяющую гибко обрабатывать пользовательские действия, и другие особенности AWT – работа с цветами, шрифтами, отрисовка графических примитивов, менеджеры компоновки и т.
д. Хотя технология AWT включает в себя гораздо больше, чем можно изложить в рамках одной лекции, здесь собраны все необходимые сведения для создания полноценного оконного интерфейса.

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

Пакет java.lang
В этой лекции рассматривается основная библиотека Java – java.lang. В ней содержатся классы Object и Class, классы-обертки для примитивных типов, класс Math, классы для работы со строками String и StringBuffer, системные классы System, Runtime и другие. В этом же пакете находятся типы, уже рассматривавшиеся ранее,– для работы с исключительными ситуациями и потоками исполнения.

Пакет java.util
Эта лекция посвящена пакету java.util, в котором содержится множество вспомогательных классов и интерфейсов. Они настолько удобны, что практически любая программа использует эту библиотеку. Центральную часть в изложении занимает тема контейнеров, или коллекций, — классов, хранящих упорядоченные ссылки на ряд объектов. Они были существенно переработаны в ходе создания версии Java2. Также рассматриваются классы для работы с датой, для генерации случайных чисел, обеспечения поддержки многих национальных языков в приложении и др.

Пакет java.io
Эта лекция описывает реализованные в Java возможности передачи информации, что является важной функцией для большинства программных систем. Сюда входит работа с файлами, сетью, долговременное сохранение объектов, обмен данными между потоками исполнения и т.п. Все эти действия базируются на потоках байт (представлены классами InputStream и OutputStream) и потоках символов (Reader и Writer). В библиотеке java.io содержатся все эти классы и их многочисленные наследники, предоставляющие полезные возможности. Отдельно рассматривается механизм сериализации объектов и работа с файлами.

Введение в сетевые протоколы
Завершает курс лекция, в которой рассматриваются возможности построения сетевых приложений. Сначала дается краткое введение в сетевые протоколы, семиуровневую модель OSI, стек протоколов TCP/IP и описываются основные утилиты, предоставляемые операционной системой для мониторинга сети. Эти значения необходимы, поскольку библиотека java.net, по сути, является интерфейсом для работы с этими протоколами. Рассматриваются классы для соединений через высокоуровневые протоколы, протоколы TCP и UDP.

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

Разработка web-приложений в среде Eclipse
В практикуме рассмотрен пример разработки простейшего web-приложения, включая все тонкости установки и настройки дополнительного программного обеспечения для его работы.

Лямбда-выражения в Java — Provincial programming

Поддержка лямбда-выражений, реализованная в Java 8, стала одним из наиболее значимых нововведений за последнее время. Будучи упрощённой записью анонимных классов, лямбды позволяют писать более лаконичный код при работе со Stream или Optional. Лямбда-выражения часто используются как совместно со многими API стандартной библиотеки Java, так и со сторонними API, среди которых JavaFX, реактивные стримы и т.д.

Лямбды и функциональные интерфейсы

Лямбда-выражение или просто лямбда в Java — упрощённая запись анонимного класса, реализующего функциональный интерфейс.

Функциональный интерфейс в Java — интерфейс, в котором объявлен только один абстрактный метод. Однако, методов по умолчанию (default) такой интерфейс может содержать сколько угодно, что можно видеть на примере java.util.function. Function. Функциональный интерфейс может быть отмечен аннотацией @FunctionalInterface, но это не обязательное условие, так как JVM считает функциональным любой интерфейс с одним абстрактным методом.

Пример простого функционального интерфейса:

Структура лямбда-выражения

Сигнатура лямбда-выражения соответствует сигнатуре абстрактного метода реализуемого функционального интерфейса. Можно даже сказать, что лямбда-выражение является реализацией абстрактного метода этого функционального интерфейса. Главное отличие сигнатуры лямбда-выражения от сигнатуры метода в том, что она состоит только из двух частей: списка аргументов и тела, разделённых при помощи «->». Возвращаемый тип и возможные выбрасываемые исключения JVM берёт из интерфейса.

Типы аргументов лямбда-выражения опциональны, так как они декларируются интерфейсом, но при использовании обобщений (дженериков) с extends/super может возникнуть необходимость в указании конкретных типов аргументов. При этом стоит отметить, что типы либо указываются для всех аргументов, либо не указываются вообще. Это же касается и использования var, введённой в Java 11. Всё это можно свести к такому правилу: все аргументы объявляются либо с типами, либо с var, либо без них.

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

Аналогичная ситуация и с телом лямбда-выражений: если оно состоит только из одной строки, то фигурные скобки, точку с запятой (;) и директиву return можно тоже опустить.

В качестве тела лямбда-выражения может использоваться ссылка на метод.

Создание лямбда-выражений

Допустим, нам нужна реализация CarFilter, описанного выше, которая проверяла бы, что автомобиль выпущен не раньше 2010 года. Если мы будем использовать анонимный класс, то создание объекта CarFilter будет выглядеть примерно следующим образом:

Но мы можем описать объект CarFilter при помощи лямбда-выражения:

Однако, эту запись можно сделать ещё меньше:

Согласитесь, что такая запись зачительно меньше и лаконичнее, чем использование анонимного класса.

Применение лямбда-выражений

Допустим у нас есть задача написать метод, выводящий из полученного списка автомобили, у которых тип кузова (body) — STATION_WAGON и мощность (power) — больше 200 л.с.

Скорее всего, мы напишем что-то вроде:

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

В этом случае логично было бы использовать сразу два функциональных интерфейса: java.util.function.Predicate — для фильтрации и java.util.function.Consumer — для действия, применяемого к подходящим объектам.

java.util.function.Predicate декларирует абстрактный метод test, который принимает объект и возвращает значение типа boolean в зависимости от соответствия переданного объекта требуемым критериям.

java.util.function.Consumer декларирует абстрактный метод accept, который принимает объект и выполняет над ним требуемые действия.

Метод printCars превратится во что-то похожее на следующий метод:

И первоначальную задачу вывести из полученного списка автомобили, у которых тип кузова (body) — STATION_WAGON и мощность (power) — больше 200 л.с. мы решили бы следующим вызовом метода processCars с использованием лямбда-выражений:

Или при помощи анонимных классов:

Вариант вызова метода processCars с использованием лямбда-выражений значительно компактнее.

Лямбды, анонимные классы и обычные классы

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

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

Но в большинстве случаев, там где можно применять лямбда-выражения, например в Stream, Optional или CompletableFuture, логичнее применять именно лямбды.

Полезные ссылки

Специальность Java developer, обязанности Java разработчиков

Вы можете учиться самостоятельно — по книгам или видео урокам, а можете записаться на курсы Java Developer для максимально эффективного обучения. Вначале вам следует изучить язык программирования Java и принципы ООП. Чтобы оттачивать навыки написания кода, пользуйтесь специальными онлайн-тренажерами. 

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

JDBC (API для взаимодействия Java с базами данных) и Hibernate (фреймворк для связывания ООП с реляционными базами данных) позволят вам в удобной форме работать с данными. Полезны будут знания по веб-технологиям (AJAX, JSON и т. д.) и языку разметки XML. Затем можно переходить к освоению базовых навыков тестирования (TDD), которое понадобятся для написания качественного и читабельного кода.

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

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

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

Если ваши знания английского недостаточны как минимум для чтения технической литературы — обязательно подтяните их при помощи различных курсов либо интернет-материалов свободного пользования.

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


Подробное руководство по освоению профессии Java разработчика вы сможете узнать из нашего вебинара.

Топ-10 фреймворков для разработки на Java

Фреймворки позволяют строить приложения быстро, просто и эффективно, а также использовать готовые фрагменты кода, избавляя от необходимости писать его с нуля. Их выбор из всего многообразия зависит от потребностей конкретного проекта. Ресурс Technotification подготовил подборку из 10 фреймворков для Java-программистов и разработчиков.

Содержание
1. Spring Framework2. PrimeFaces3. Blade4. Dropwizard5. Google Web Toolkit (GWT)6. JavaServer Faces (JSF)7. JHipster8. Spark Framework9. MyBatis10. Play Framework

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

Spring идеально подходит для создания корпоративных приложений и моделей конфигурации на базе Java. Он позволяет разработчикам сосредоточиться на бизнес-логике приложения. Близко связан с фреймворком Spring Boot.

PrimeFaces относится к лучшим лёгким Java-фреймворком. Его можно скачать в одном.jar-файле. PriemFaces существует уже много лет и служит UI-фреймворком для спецификаций JavaServer Faces и Java EE. Также он насчитывает более 100 компонентов, среди ключевых — валидация на стороне клиента и инструментарий для сенсорных смартфонов.

Blade — это легковесный MVC-фреймворк на базе Java 8. Он прост и включает интерфейс маршрутизатора в стиле RESTful. Также он относится к тем немногим Java-фреймворкам, в которых отсутствуют навязчивые перехватчики. Под «легковесностью» имеется в виду небольшой по объёму исходный код, который не превышает 500 Кб.

Для использования Blade понадобится создать типичный Maven-проект. Фреймворк поддерживает модульность в Java 9, а также большое число веб-компонентов Java.

Dropwizard — мощный Java-фреймворк, высоко оптимизированный под разработку RESTful-сервисов. Он также идеален для написания микросервисов на этом языке и даёт лёгкий доступ ко всем мощным Java-библиотекам, например Google Guava, Jetty server, Hibernate Validator, Logback, Joda Time, а также Jackson для обработки JSON-файлов. JSON избавляет от необходимости писать код для метрик и конфигураций, позволяя направить силы на функционал приложения.

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

Фреймворк Google Web Toolkit выпущен Google с целью помочь разработчикам в написании веб-приложений на Java. Он даёт возможность писать Java-код и компилировать в JavaScript для запуска в браузерах.

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

Фреймворк включает ряд уникальных функций, например абстракция UI, кросс‐браузерная совместимость и интернационализация.

MVC-фреймворк JavaServer Faces появился 14 лет назад. Он упрощает разработку пользовательских интерфейсов для веб-приложений. Самая замечательная особенность этого фреймворка в том, что построенные в нём UI-компоненты можно повторно использовать для других веб-страниц. В качестве шаблонов в JSF использует Facelets.

JHipster — относительно молодой фреймворк, вышедший в 2013 году. Он сочетает Spring Boot, Angular и React в одном большом фреймворке. С помощью него можно запросто построить современное веб-приложение на Java.

Интеграция Spring Boot позволяет создавать приложения на базе фреймворка Spring. Помимо Angular и React, JHipster также использует Bootstrap. Кроме того, JHipster предоставляет два вида архитектур: монолитную или микросервисную. В первом случае фронтенд и бэкенд реализованы в едином приложении, во втором — раздельно.

Смотрите бесплатный вебинар «Как стать Java-разработчиком?»

Spark — оптимальный выбор для программистов, разрабатывающих веб-приложения на Java. В нём можно быстро и без усилий строить бэкенд сайтов. Spark поддерживает практически все функции Java 8 и имеет выразительный API.

MyBatis фреймворк для осуществления маппинга между Java-приложениями и базами данных SQL. Обычно для подключения приложения к реляционной БД необходим API Java Database Connectivity. Он позволяет разработчикам выполнять крупные SQL-операции за несколько строчек кода.

MyBatis сравнивают с фреймворком Hibernate, так как оба являются посредниками между приложением и базой данных. Единственное отличие в том, что MyBatis не делает маппинг объектов Java в реляционную БД.

Play — ещё один лёгкий Java-фреймворк, завоевавший расположение большинства разработчиков. Он предоставляет интерфейс, через который можно реализовывать изменения в коде без необходимости заново развёртывать или компилировать его.

Фреймворк имеет асинхронные API, которые позволяют разработчикам масштабировать приложения, обходясь без дополнительных ресурсов. Play прекрасно поддерживает различные микросервисные паттерны.

Записаться на курс Профессия Java-разработчик PRO (Skillbox)

Учебная карта по Java EE и веб-приложениям Java – учебные курсы, руководства и статьи по среде NetBeans

Общее представление о веб-приложении Java

Веб-приложение Java создает интерактивные веб-страницы, содержащие различные типы языков разметки (HTML, XML и т.д.), а также динамическое содержимое. Это содержимое обычно формируется веб-компонентами, например страницами JavaServer (JSP), сервлетами и компонентами JavaBean, которые позволяют изменять данные и осуществлять их временное хранение, взаимодействовать с базами данных и веб-службами, а также отображать содержимое в ответ на запросы клиентов.

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

Общие сведения о Java EE

Java EE (Enterprise Edition) представляет собой широко используемую платформу, содержащую набор взаимосвязанных технологий, которые существенно сокращают стоимость и сложность разработки, развертывания многоуровневых серверных приложений, а также управления ими. Платформа Java EE основана на платформе Java SE и предоставляет набор интерфейсов API (интерфейсов разработки приложений) для разработки и запуска портируемых, надежных, масштабируемых и безопасных серверных приложений.

Java EE в числе прочих содержит следующие компоненты:

  • Enterprise JavaBeans (EJB): управляемая серверная архитектура компонентов, используемая для инкапсуляции бизнес-логики приложения. Технология EJB позволяет осуществлять быструю и упрощенную разработку распределенных, транзакционных, безопасных и переносимых приложений, основанных на технологии Java.
  • Интерфейс API сохранения состояния Java (Java Persistence API, JPA): инфраструктура, позволяющая разработчикам управлять данными с помощью объектно-реляционного сопоставления (ORM) в приложениях, созданных на платформе Java.
Разработка на JavaScript и Ajax

JavaScript представляет собой объектно-ориентированный язык сценариев и в основном используется в клиентских интерфейсах веб-приложений. Ajax (асинхронный JavaScript и XML) является технологией Web 2.0, позволяющей выполнять изменения веб-страницы без ее обновления. Для реализации компонентов и функций Ajax на веб-страницах можно использовать наборы инструментов JavaScript.

 

Учебный курс по электронной коммерции в среде NetBeans

Внедрение контекстов и зависимостей

Разработка веб-приложений на Java

Поддержка облаков

Технология EJB и сохранение состояния объектов Java

Веб-платформы

Разработка на JavaScript и Ajax

Видеоролики о приложении Java EE с поддержкой OSGi, подготовленные Аруном Гупта (Arun Gupta) (YouTube)

Учебный видеокурс по Java EE 6, представленный Аруном Гупта (Arun Gupta) (YouTube)

  • Иерархическая разработка веб-служб с помощью IDE NetBeans (автор Джайсурая Венуг (Jayasurya Venug)) (дополнение к учебному курсу по электронной коммерции в NetBeans)
  • Учебный курс по веб-разработке (с помощью JSF), Майкл Мюллер (Michael Muller)
  • Разработка приложения JavaEE 6 с помощью JSF2, EJB3 и JPA, Кристофер Лэм (Christopher Lam)
  • Обеспечение безопасности приложения JavaEE 6 с помощью функций безопасности JavaEE, Кристофер Лэм (Christopher Lam)
  • Создание веб-приложений обратного Ajax с помощью DWR, GlassFish и среды NetBeans, Зигфрид Болз (Siegfried Bolz)
  • Разработка приложений уровня предприятия для GlassFish с помощью Maven и NetBeans, Вутер Ван Ривен (Wouter van Reeven)
  • Разработка приложения шаблона «модель-представление-контроллер» на платформе Spring с помощью GlassFish, Арулази Дхесиасилан (Arulazi Dhesiaseelan)
  • Разработка EJB для Glassfish при помощи Maven2 и Spring, Кристиан Ринк (Kristian Rink)
  • Простейший компонент EJB 3. 1/REST (JSR 311) , Эдам Бьен (Adam Bien)
  • Разработка приложений JSF2 с использованием Ajax в Netbeans 6.8 и PrimeFaces, Кристофер Лэм (Christopher Lam)

Разработка приложений в IDE NetBeans — Руководство пользователя

Часто задаваемые вопросы

Учебные курсы и другие документы

Блоги

Java и C#: что все-таки выбрать

Сравнение Java и С# — тема многочисленных интернет-баталий и холиваров. Этому противостоянию даже посвящена своя отдельная страничка в Википедии. Схватка в умах разработчиков началась давно и она, кажется, вышла зрелищнее, чем борьба Android с iOS. Но на сегодняшний день страсти вроде бы улеглись. Каждый язык занял свое место и развивается согласно собственной концепции.

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

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

Степан Яковенко, архитектор программного обеспечения в компании “LFIRON” (Словакия), более 10 лет опыта работы на Java, преподаватель курса Java Developer:

Язык C# приятен тем, что там больше синтаксического сахара, проще вызывать виндовые DLL. Мы портировали большой проект с C# на Java и выяснили, что C# работает с файловой системой значительно быстрее; в Java чтение из файла по байтам — разорительная операция.

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

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

Где-то в курсе математики доказывается, что все языки программирования эквивалентны. Ограничение Java как языка — это необходимость что-то делать чересчур быстро, например, потоково сжимать графику или работать с очень большими объектами, которые из-за накладных расходов лучше хранить в куче (heap) C/C++. Но если требования к производительности умеренные, то, в принципе, можно достигнуть высокой нагрузки и на Java.

 

Олег Колесников, Software Engineer, Axmor Software, Inc, Новосибирск, программирует на языках C++/C#, преподаватель курса C# (C Sharp) онлайн:

С# — это очень хорошо продуманный высокоуровневый объектно-ориентированный язык программирования. На платформе .Net можно реализовать любое приложение: от оконной Windows программы (при помощи современной технологии WCF) и современных веб сайтов (с помощью ASP.NET) до мобильных и облачных приложений. Формально владение языком C# позволяет разрабатывать приложения для любой платформы и операционной системы. Например, компания Xamarin активно развивает проект Mono — реализацию .Net   для UNIX-подобных операционных систем. Таким образом, можно сказать, что язык C# успешно конкурирует с другими языками программирования. Он не лучше и не хуже других языков, он просто занимает свою долю рынка, причем очень приличную.

Все эти языки реализуют идею объектно-ориентированного программирования. C#, как и Java является JIT-компилируемым языком, т.е. в процессе компиляции программы создаётся промежуточный байт-код, а в процессе выполнения самой программы, среда исполнения компилирует этот байт-код в машинные команды. Такой подход позволяет разрабатывать кроссплатформенные приложения, в отличие от C++, где для каждой отдельной платформы, скорее всего, придется написать своё приложение. Тем не менее, хорошо написанная программа на С++ будет производительнее аналога, написанного на языке с JIT-компиляцией. Что касается конкуренции между Java и C#, я думаю, что последний развивается быстрее благодаря стараниям компании Microsoft.

 

Николай Толстокулаков, старший преподаватель Факультета Информационных Технологий в НГУ, более 11 лет опыта разработки на Java, преподаватель курса Advanced Java with EE (Java для опытных):

Никто из них не умрет в ближайшее десятилетие. Самый острый этап конкуренции между ними тоже позади лет десять как. У каждого языка есть свои области, в которых они уже прочно обосновались. Конкуренция и обмен идеями между ними пошла на пользу обоим. Сфера применения Java гораздо шире и рынок программистов больше. Формально есть Tiobe index, где рейтинг отличается в три раза. Основное применение C# пока так и ограничивается Windows-платформами, но их доля на мобильном рынке ничтожна, а на серверном рынке испытывает давление со стороны Linux. Такие компании, как Google, Facebook, Twitter, строят свой бизнес из сотен тысяч серверов без использования Windows & .Net/C#. Значение desktop падает из-за планшетов. Альтернативные решения с использованием C# за пределами Windows есть, но особой популярности не завоевали.

Границы применимости Java — работа на низком уровне с hardware, ядром операционной системы, системы реального времени и там, где требуется выжать из железа все, что можно, и даже чуть больше. Стартапы, если речь идет не об Android, а о Web-сервисах, чаще используют другие технологии (PHP, JavaScript, Python, Ruby).

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

Заключение

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

Лямбда-выражения в Java 8