Merge branch 'master' of https://git.c68.spacecorp.ru/ivan-igorevich/devel-gb
This commit is contained in:
commit
4d820a5893
|
@ -10,4 +10,5 @@
|
||||||
!/build/*.pdf
|
!/build/*.pdf
|
||||||
!/*/build/*.pdf
|
!/*/build/*.pdf
|
||||||
|
|
||||||
|
/methodist-share
|
||||||
Icon*
|
Icon*
|
BIN
build/j-spec.pdf
BIN
build/j-spec.pdf
Binary file not shown.
72
j-spec.tex
72
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}
|
%\immediate\write18{texcount -sum -1 scenarios/jc-1-c.tex > /tmp/wordcount.tex}
|
||||||
\documentclass[12pt, a4paper]{report}
|
\documentclass[12pt, a4paper]{report}
|
||||||
\usepackage[english,russian]{babel} % локализация и переносы
|
\usepackage[english,russian]{babel} % локализация и переносы
|
||||||
|
@ -87,6 +87,8 @@
|
||||||
\section{Платформа: история и окружение}
|
\section{Платформа: история и окружение}
|
||||||
\subsection{В этом разделе}
|
\subsection{В этом разделе}
|
||||||
Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование;
|
Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование;
|
||||||
|
|
||||||
|
В этом разделе происходит первое знакомство со внутреннем устройством языка Java и фреймворком разработки приложений с его использованием. Рассматривается примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. Разбирается структура проекта, а также происходит ознакомление с базовым инструментарием для разработки на Java.
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \nom{JDK}{(от англ. Java Development Kit) — комплект разработчика приложений на языке Java, включающий в себя компилятор, стандартные библиотеки классов, примеры, документацию, различные утилиты и исполнительную систему. В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки.}
|
\item \nom{JDK}{(от англ. Java Development Kit) — комплект разработчика приложений на языке Java, включающий в себя компилятор, стандартные библиотеки классов, примеры, документацию, различные утилиты и исполнительную систему. В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки.}
|
||||||
\item \nom{JRE}{(от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.}
|
\item \nom{JRE}{(от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.}
|
||||||
|
@ -94,6 +96,7 @@
|
||||||
\item \nom{JIT}{(англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.}
|
\item \nom{JIT}{(англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.}
|
||||||
\item \nom{CLI}{(англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».}
|
\item \nom{CLI}{(англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsection{Теория}
|
\subsection{Теория}
|
||||||
\subsubsection{Краткая история (причины возникновения)}
|
\subsubsection{Краткая история (причины возникновения)}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
@ -108,6 +111,16 @@
|
||||||
\label{pic:java-in-tiobe}
|
\label{pic:java-in-tiobe}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
\subsubsection{Задания для самопроверки}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3)
|
||||||
|
\begin{itemize}
|
||||||
|
\item существовавшие на тот момент Pascal и C++ были слишком сложными;
|
||||||
|
\item Java быстрее C++;
|
||||||
|
\item Однажды написанная на Java программа работает везде.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
\subsubsection{Базовый инструментарий, который понадобится (выбор IDE)}
|
\subsubsection{Базовый инструментарий, который понадобится (выбор IDE)}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком;
|
\item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком;
|
||||||
|
@ -116,7 +129,18 @@
|
||||||
\item Android Studio - если заниматься мобильной разработкой.
|
\item Android Studio - если заниматься мобильной разработкой.
|
||||||
\end{itemize}
|
\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 выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы.
|
Для разработки понадобится среда разработки (\nom{IDE}{(от англ. Integrated Development Environment) – это интегрированная, единая среда разработки, которая используется разработчиками для создания различного программного обеспечения. IDE представляет собой комплекс из нескольких инструментов, а именно: текстового редактора, компилятора или интерпретатора, средств автоматизации сборки и отладчика.}) и инструментарий разработчика (JDK). JDK выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы.
|
||||||
|
|
||||||
В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в \nom{CI}{(англ. Continious Integration) практика разработки программного обеспечения, которая заключается в постоянном слиянии рабочих копий в общую основную ветвь разработки и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем.} или на целевом сервере.
|
В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в \nom{CI}{(англ. Continious Integration) практика разработки программного обеспечения, которая заключается в постоянном слиянии рабочих копий в общую основную ветвь разработки и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем.} или на целевом сервере.
|
||||||
|
@ -129,6 +153,13 @@
|
||||||
|
|
||||||
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava.
|
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится 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 и их друзья)}
|
\subsubsection{Из чего всё состоит (JDK, JRE, JVM и их друзья)}
|
||||||
TL;DR:
|
TL;DR:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
@ -143,7 +174,7 @@ TL;DR:
|
||||||
|
|
||||||
JVM для своей работы запрашивает у ОС некоторый сегмент оперативной памяти, в котором хранит данные программы. Это хранение происходит «слоями»:
|
JVM для своей работы запрашивает у ОС некоторый сегмент оперативной памяти, в котором хранит данные программы. Это хранение происходит «слоями»:
|
||||||
\begin{enumerate}
|
\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 Survivor Space (heap) – сюда перемещаются объекты из предыдущей области после того, как они пережили хотя бы одну сборку мусора. Время от времени долгоживущие объекты из этой области перемещаются в Tenured Space.
|
||||||
\item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты.
|
\item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты.
|
||||||
\item Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.).
|
\item Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.).
|
||||||
|
@ -199,6 +230,18 @@ Java Development Kit является изрядно дополненным сп
|
||||||
\caption{Общее представление состава JDK}
|
\caption{Общее представление состава JDK}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
|
\subsubsection{Задания для самопроверки}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item JVM и JRE - это одно и тоже? (нет)
|
||||||
|
\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания)
|
||||||
|
\item Утечки памяти (2)
|
||||||
|
\begin{itemize}
|
||||||
|
\item Невозможны, поскольку работает сборщик мусора;
|
||||||
|
\item Возможны;
|
||||||
|
\item Существуют только в С++ и других языках с открытым менеджментом памяти.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
\subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)}
|
\subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)}
|
||||||
Проекты могут быть любой сложности. Часто структуру проекта задаёт сборщик проекта, предписывая в каких папках будут храниться исходные коды, исполняемые файлы, ресурсы и документация. Без их использования необходимо задать структуру самостоятельно.
|
Проекты могут быть любой сложности. Часто структуру проекта задаёт сборщик проекта, предписывая в каких папках будут храниться исходные коды, исполняемые файлы, ресурсы и документация. Без их использования необходимо задать структуру самостоятельно.
|
||||||
|
|
||||||
|
@ -301,6 +344,17 @@ public class OtherClass {
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\subsubsection{Задания для самопроверки}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Зачем складывать классы в пакеты? (структурирование, видимость*)
|
||||||
|
\item Может ли существовать класс вне пакета? (да*, нет)
|
||||||
|
\item Комментирование кода(2)
|
||||||
|
\begin{itemize}
|
||||||
|
\item Нужно только если пишется большая подключаемая библиотека;
|
||||||
|
\item Хорошая привычка;
|
||||||
|
\item Захламляет исходники.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
|
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
|
||||||
Простейший проект возможно скомпилировать и запустить без использования тяжеловесных сред разработки, введя в командной строке ОС две команды:
|
Простейший проект возможно скомпилировать и запустить без использования тяжеловесных сред разработки, введя в командной строке ОС две команды:
|
||||||
|
@ -349,6 +403,18 @@ Hello, world!
|
||||||
Here is your number: 4.
|
Here is your number: 4.
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\subsubsection{Задания для самопроверки}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Что такое javac? (компилятор)
|
||||||
|
\item Кофе, крошка? (да)
|
||||||
|
\item Где находится класс в папке назначения работы компилятора? (1)
|
||||||
|
\begin{itemize}
|
||||||
|
\item В подпапках, повторяющих структуру пакетов в исходниках
|
||||||
|
\item В корне плоским списком;
|
||||||
|
\item Зависит от ключей компиляции.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
\subsubsection{Документирование (Javadoc)}
|
\subsubsection{Документирование (Javadoc)}
|
||||||
Документирование конкретных методов и классов всегда ложится на плечи программиста, потому что никто не знает программу и алгоритмы в ней лучше, чем программист. Утилита Javadoc избавляет программиста от необходимости осваивать инструменты создания веб-страниц и записывать туда свою документацию. Достаточно писать хорошо отформатированные комментарии, а остальное Javadoc возьмёт на себя.
|
Документирование конкретных методов и классов всегда ложится на плечи программиста, потому что никто не знает программу и алгоритмы в ней лучше, чем программист. Утилита Javadoc избавляет программиста от необходимости осваивать инструменты создания веб-страниц и записывать туда свою документацию. Достаточно писать хорошо отформатированные комментарии, а остальное Javadoc возьмёт на себя.
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue