diff --git a/.gitignore b/.gitignore index 2244648..eb5c559 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ !/build/*.pdf !/*/build/*.pdf +/methodist-share Icon* \ No newline at end of file diff --git a/build/j-spec.pdf b/build/j-spec.pdf index 5266492..b3f9b0c 100644 Binary files a/build/j-spec.pdf and b/build/j-spec.pdf differ diff --git a/j-spec.tex b/j-spec.tex index 2d1d35a..2f4c7e8 100644 --- a/j-spec.tex +++ b/j-spec.tex @@ -1,4 +1,4 @@ -\immediate\write18{texcount -sum -1 j-spec.tex > /tmp/wordcount.tex} +%\immediate\write18{texcount -sum -1 j-spec.tex > /tmp/wordcount.tex} %\immediate\write18{texcount -sum -1 scenarios/jc-1-c.tex > /tmp/wordcount.tex} \documentclass[12pt, a4paper]{report} \usepackage[english,russian]{babel} % локализация и переносы @@ -87,6 +87,8 @@ \section{Платформа: история и окружение} \subsection{В этом разделе} Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; + +В этом разделе происходит первое знакомство со внутреннем устройством языка Java и фреймворком разработки приложений с его использованием. Рассматривается примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. Разбирается структура проекта, а также происходит ознакомление с базовым инструментарием для разработки на Java. \begin{itemize} \item \nom{JDK}{(от англ. Java Development Kit) — комплект разработчика приложений на языке Java, включающий в себя компилятор, стандартные библиотеки классов, примеры, документацию, различные утилиты и исполнительную систему. В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки.} \item \nom{JRE}{(от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.} @@ -94,6 +96,7 @@ \item \nom{JIT}{(англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.} \item \nom{CLI}{(англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».} \end{itemize} + \subsection{Теория} \subsubsection{Краткая история (причины возникновения)} \begin{itemize} @@ -108,6 +111,16 @@ \label{pic:java-in-tiobe} \end{figure} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3) + \begin{itemize} + \item существовавшие на тот момент Pascal и C++ были слишком сложными; + \item Java быстрее C++; + \item Однажды написанная на Java программа работает везде. + \end{itemize} +\end{enumerate} + \subsubsection{Базовый инструментарий, который понадобится (выбор IDE)} \begin{itemize} \item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком; @@ -116,7 +129,18 @@ \item Android Studio - если заниматься мобильной разработкой. \end{itemize} -\subsubsection{Что нужно скачать, откуда (как выбрать вендора, выбор версии)} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4) + \begin{itemize} + \item NetBeans перестали поддерживать; + \item Eclipse слишком медленный и тяжеловесный; + \item IDEA оказалась самой дружелюбной к начинающему программисту; + \item Все варианты верны. + \end{itemize} +\end{enumerate} + +\subsubsection{Что нужно скачать, откуда (как выбрать вендора, версии)} Для разработки понадобится среда разработки (\nom{IDE}{(от англ. Integrated Development Environment) – это интегрированная, единая среда разработки, которая используется разработчиками для создания различного программного обеспечения. IDE представляет собой комплекс из нескольких инструментов, а именно: текстового редактора, компилятора или интерпретатора, средств автоматизации сборки и отладчика.}) и инструментарий разработчика (JDK). JDK выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы. В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в \nom{CI}{(англ. Continious Integration) практика разработки программного обеспечения, которая заключается в постоянном слиянии рабочих копий в общую основную ветвь разработки и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем.} или на целевом сервере. @@ -129,6 +153,13 @@ Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Чем отличается SDK от JDK? (J это частный случай, больше спец. библиотек) +\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java? (8, 1.8) +\item Какие ещё JVM языки существуют? (Scala, Kotlin, Groovy) +\end{enumerate} + \subsubsection{Из чего всё состоит (JDK, JRE, JVM и их друзья)} TL;DR: \begin{itemize} @@ -143,7 +174,7 @@ TL;DR: JVM для своей работы запрашивает у ОС некоторый сегмент оперативной памяти, в котором хранит данные программы. Это хранение происходит «слоями»: \begin{enumerate} -\item Eden Space (heap) – в этой области выделятся память под все создаваемые из программы объекты. Большая часть объектов живёт недолго (итераторы, временные объекты, используемые внутри методов и т.п.), и удаляются при выполнении сборок мусора это области памяти, не перемещаются в другие области памяти. Когда данная область заполняется (т.е. количество выделенной памяти в этой области превышает некоторый заданный процент), сборщик мусора выполняет быструю (minor collection) сборку. По сравнению с полной сборкой, она занимает мало времени, и затрагивает только эту область памяти, а именно, очищает от устаревших объектов Eden Space и перемещает выжившие объекты в следующую область. +\item Eden Space (heap) – в этой области выделяется память под все создаваемые из программы объекты. Большая часть объектов живёт недолго (итераторы, временные объекты, используемые внутри методов и т.п.), и удаляются при выполнении сборок мусора это области памяти, не перемещаются в другие области памяти. Когда данная область заполняется (т.е. количество выделенной памяти в этой области превышает некоторый заданный процент), сборщик мусора выполняет быструю (minor collection) сборку. По сравнению с полной сборкой, она занимает мало времени, и затрагивает только эту область памяти, а именно, очищает от устаревших объектов Eden Space и перемещает выжившие объекты в следующую область. \item Survivor Space (heap) – сюда перемещаются объекты из предыдущей области после того, как они пережили хотя бы одну сборку мусора. Время от времени долгоживущие объекты из этой области перемещаются в Tenured Space. \item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты. \item Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.). @@ -199,6 +230,18 @@ Java Development Kit является изрядно дополненным сп \caption{Общее представление состава JDK} \end{table} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item JVM и JRE - это одно и тоже? (нет) +\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания) +\item Утечки памяти (2) + \begin{itemize} + \item Невозможны, поскольку работает сборщик мусора; + \item Возможны; + \item Существуют только в С++ и других языках с открытым менеджментом памяти. + \end{itemize} +\end{enumerate} + \subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)} Проекты могут быть любой сложности. Часто структуру проекта задаёт сборщик проекта, предписывая в каких папках будут храниться исходные коды, исполняемые файлы, ресурсы и документация. Без их использования необходимо задать структуру самостоятельно. @@ -301,6 +344,17 @@ public class OtherClass { } \end{lstlisting} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Зачем складывать классы в пакеты? (структурирование, видимость*) +\item Может ли существовать класс вне пакета? (да*, нет) +\item Комментирование кода(2) + \begin{itemize} + \item Нужно только если пишется большая подключаемая библиотека; + \item Хорошая привычка; + \item Захламляет исходники. + \end{itemize} +\end{enumerate} \subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)} Простейший проект возможно скомпилировать и запустить без использования тяжеловесных сред разработки, введя в командной строке ОС две команды: @@ -349,6 +403,18 @@ Hello, world! Here is your number: 4. \end{lstlisting} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Что такое javac? (компилятор) +\item Кофе, крошка? (да) +\item Где находится класс в папке назначения работы компилятора? (1) + \begin{itemize} + \item В подпапках, повторяющих структуру пакетов в исходниках + \item В корне плоским списком; + \item Зависит от ключей компиляции. + \end{itemize} +\end{enumerate} + \subsubsection{Документирование (Javadoc)} Документирование конкретных методов и классов всегда ложится на плечи программиста, потому что никто не знает программу и алгоритмы в ней лучше, чем программист. Утилита Javadoc избавляет программиста от необходимости осваивать инструменты создания веб-страниц и записывать туда свою документацию. Достаточно писать хорошо отформатированные комментарии, а остальное Javadoc возьмёт на себя. \begin{figure}[H] diff --git a/scenarios/build/jc-1-c.pdf b/scenarios/build/jc-1-c.pdf index e1556cc..ad83caf 100644 Binary files a/scenarios/build/jc-1-c.pdf and b/scenarios/build/jc-1-c.pdf differ