env + removed right answers

This commit is contained in:
Ivan I. Ovchinnikov 2022-08-18 12:39:04 +03:00
parent 4d820a5893
commit 23fbc91b2e
6 changed files with 116 additions and 14 deletions

Binary file not shown.

View File

@ -113,7 +113,7 @@
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3)
\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки?
\begin{itemize}
\item существовавшие на тот момент Pascal и C++ были слишком сложными;
\item Java быстрее C++;
@ -131,7 +131,7 @@
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4)
\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java?
\begin{itemize}
\item NetBeans перестали поддерживать;
\item Eclipse слишком медленный и тяжеловесный;
@ -149,15 +149,26 @@
\end{frm}
На курсе будет использоваться BellSoft Liberica JDK 11, но возможно использовать и других производителей, например, самую распространённую Oracle JDK. Производителя следует выбирать из требований по лицензированию, так, например, Oracle JDK можно использовать бесплатно только в личных целях, за коммерческую разработку с использованием этого инструментария придётся заплатить.
\begin{frm}
Для корректной работы самого инструментария и сторонних приложений, использующих инструментарий, проследите, пожалуйста, что установлены следующие переменные среды ОС:
\begin{itemize}
\item в системную \code{PATH} добавить путь до исполняемых файлов JDK, например, для UNIX-подобных систем: \code{PATH=$PATH:/usr/lib/jvm/jdk1.8.0_221/bin}
\item \code{JAVA_HOME} путь до корня JDK, например, для UNIX-подобных систем: \code{JAVA_HOME=/usr/lib/jvm/jdk1.8.0_221/}
\item \code{JRE_HOME} путь до файлов JRE из состава установленной JDK, например, для UNIX-подобных систем: \code{JRE_HOME=/usr/lib/jvm/jdk1.8.0_221/jre/}
\item \code{J2SDKDIR} устаревшая переменная для JDK, используется некоторыми старыми приложениями, например, для UNIX-подобных систем: \code{J2SDKDIR=/usr/lib/jvm/jdk1.8.0_221/}
\item \code{J2REDIR} устаревшая переменная для JRE, используется некоторыми старыми приложениями, например, для UNIX-подобных систем: \code{J2REDIR=/usr/lib/jvm/jdk1.8.0_221/jre/}
\end{itemize}
\end{frm}
Также возможно использовать и другие версии, но не старше 1.8. Это обосновано тем, что основные разработки на данный момент только начинают обновлять инструментарий до более новых версий (часто 11 или 13) или вовсе переходят на другие JVM-языки, такие как Scala, Groovy или Kotlin.
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava.
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item Чем отличается SDK от JDK? (J это частный случай, больше спец. библиотек)
\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java? (8, 1.8)
\item Какие ещё JVM языки существуют? (Scala, Kotlin, Groovy)
\item Чем отличается SDK от JDK?
\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java?
\item Какие ещё JVM языки существуют?
\end{enumerate}
\subsubsection{Из чего всё состоит (JDK, JRE, JVM и их друзья)}
@ -232,9 +243,9 @@ Java Development Kit является изрядно дополненным сп
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item JVM и JRE - это одно и тоже? (нет)
\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания)
\item Утечки памяти (2)
\item JVM и JRE - это одно и тоже?
\item Что входит в состав JDK, но не входят в состав JRE?
\item Утечки памяти
\begin{itemize}
\item Невозможны, поскольку работает сборщик мусора;
\item Возможны;
@ -346,9 +357,9 @@ public class OtherClass {
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item Зачем складывать классы в пакеты? (структурирование, видимость*)
\item Может ли существовать класс вне пакета? (да*, нет)
\item Комментирование кода(2)
\item Зачем складывать классы в пакеты?
\item Может ли существовать класс вне пакета?
\item Комментирование кода
\begin{itemize}
\item Нужно только если пишется большая подключаемая библиотека;
\item Хорошая привычка;
@ -405,9 +416,9 @@ Here is your number: 4.
\subsubsection{Задания для самопроверки}
\begin{enumerate}
\item Что такое javac? (компилятор)
\item Кофе, крошка? (да)
\item Где находится класс в папке назначения работы компилятора? (1)
\item Что такое javac?
\item Кофе, крошка?
\item Где находится класс в папке назначения работы компилятора?
\begin{itemize}
\item В подпапках, повторяющих структуру пакетов в исходниках
\item В корне плоским списком;

Binary file not shown.

Binary file not shown.

View File

@ -119,6 +119,18 @@
\end{frame}
\note{...}
\begin{frame}
\frametitle{Переменные среды}
\begin{itemize}
\item \code{PATH}
\item \code{JAVA_HOME}
\item \code{JRE_HOME}
\item \code{J2SDKDIR}
\item \code{J2REDIR}
\end{itemize}
\end{frame}
\note{...}
\begin{frame}
\frametitle{JDK и его друзья}
TL;DR:

View File

@ -38,6 +38,16 @@
Поскольку язык изначально проектировался для множества разнообразных исполнителей с разными архитектурами процессоров и систем, было принято решение отделить исполнителя от решаемой прикладной задачи, так появилась виртуальная машина Java, речь о которой пойдёт немного позже. Основной смысл в том, что у языка Java появился девиз: Написано однажды, работает везде.
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3)
\begin{itemize}
\item существовавшие на тот момент Pascal и C++ были слишком сложными;
\item Java быстрее C++;
\item Однажды написанная на Java программа работает везде.
\end{itemize}
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт.
@ -51,6 +61,17 @@
Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio.
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4)
\begin{itemize}
\item NetBeans перестали поддерживать;
\item Eclipse слишком медленный и тяжеловесный;
\item IDEA оказалась самой дружелюбной к начинающему программисту;
\item Все варианты верны.
\end{itemize}
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Для разработки на языке Java вам может понадобиться довольно много разного инструментария, тем более, что требования к инструментарию отличаются ещё и от команды к команде, вам может потребоваться средство для работы с БД, средства моделирования и описания систем, дополнительные средства документирования кода и решений. Но совершенно точно можно сказать, что без двух вещей обойтись не удастся: это иде, они же среды программирования и ждк, он же инструментарий разработчика на java. О средах программирования дополнительно только что поговорили, нужно выбрать какую-нибудь, и скачать. Скорее всего вы это сделали для прохождения более ранних курсов, сейчас сможете для себя выбрать инструмент более осознанно. В курсе, кроме этой лекции и следующего за ней семинара, будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её, что вы уже скорее всего и сделали. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK какой-нибудь хорошей новой версии, а сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак.
@ -69,6 +90,28 @@
\showslide{build/jc-1-b.pdf}
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. Да, многие думают, что Jupyter ноутбуки - это только для языка пайтон или для скриптовых языков, но это не так. Архитектура юпитер ноутбука позволяет ему работать с любым ядром, главное, чтобы ядро умело корректно интерпретировать написанное в ячейке с кодом. Ядро IJava делает именно это - интерпретирует Java-код, используя установленный на компьютере разработчика JDK.
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Для корректной работы самого инструментария и сторонних приложений, использующих тот инструментарий, проследите, пожалуйста, что установлены следующие переменные среды ОС:
\begin{itemize}
\item [] в системную \code{PATH} добавить путь до исполняемых файлов JDK
\item [] \code{JAVA_HOME} путь до корня JDK
\item [] \code{JRE_HOME} путь до файлов JRE из состава установленной JDK
\item [] \code{J2SDKDIR} устаревшая переменная для JDK, используется некоторыми старыми приложениями
\item [] \code{J2REDIR} устаревшая переменная для JRE, используется некоторыми старыми приложениями
\end{itemize}
Это позволит вам не особенно много думать о настройках видимости библиотек ОС при дальнейшей установке инструментария, например, сборщиков проектов.
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item Чем отличается SDK от JDK? (J это частный случай, больше спец. библиотек)
\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java? (8, 1.8)
\item Какие ещё JVM языки существуют? (Scala, Kotlin, Groovy)
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Очень часто в интернете, при скачивании какого-то программного обеспечения, связанного с Java можно увидеть разные аббревиатуры: JRE, JVM, JDK и тому подобные, и чтобы в них не запутаться давайте коротко и быстро разберёмся что они значат, потому что я чувствую, как вам уже начинают надоедать все эти вступления.
@ -81,6 +124,18 @@
\showslide{build/jc-1-b.pdf}
Инструментарий разработчика мы будем так или иначе рассматривать весь оставшийся курс, части среды исполнения мы тоже будем всесторонне изучать на последующих уроках. Сейчас хотелось бы подробнее остановиться на виртуальной машине Java, поскольку понимание того, как она устроена, должно значительно облегчить для вас понимание процесса исполнения программы и, как следствие, процесс разработки этих самых программ. Виртуальная машина Java осуществляет загрузку классов программы в оперативную память, причём здесь имеется ввиду не оперативная память как аппаратная часть компьютера, а некая выделенная часть этой оперативной памяти, которой с нами поделилось операционная система. Также осуществляется управление памятью, а именно очистка и сборка мусора и непосредственное исполнение классов нашего приложения, путём компиляции методов из промежуточного байткода в непосредственные вызовы операционной системы или другого исполнителя, то есть грубо говоря преобразования классов Java в ассемблерный код конкретного компьютера. Этот процесс называется JIT компиляция. Существуют разные Реализация виртуальных машин (\href{https://ru.m.wikipedia.org/wiki/Список_виртуальных_машин_Java}{Wikipedia: Список виртуальных машин Java}), даже экзотические, например мультиязыковой интерпретатор GraalVM. По большей части виртуальные машины отличаются как раз этой частью, с Just In Time компиляцией, то есть с преобразованием методов в непосредственные машинные вызовы в реальном времени. Чем быстрее происходит эта JIT компиляция, тем, соответственно, быстрее работает приложение на виртуальной машине. JVM самостоятельно осуществляет сборку так называемого мусора, что значительно облегчает работу программиста по отслеживанию утечек памяти, но, на мой взгляд, не способствует должной концентрации внимания программиста на этом вопросе. Важно помнить, что в Java утечки памяти всё равно существуют, особенно при программировании многопоточных приложений.
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item JVM и JRE - это одно и тоже? (нет)
\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания)
\item Утечки памяти (2)
\begin{itemize}
\item Невозможны, поскольку работает сборщик мусора;
\item Возможны;
\item Существуют только в С++ и других языках с открытым менеджментом памяти.
\end{itemize}
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Ну, наконец-то проект. Проекты бывают разной сложности, сейчас поговорим о проектах без применения сборщиков, потому что сборщикам и соответствующим проектам у нас будет посвящено отдельное занятие. Все проекты по сложности структуры можно разделить на четыре основные категории: простейшие, обычные, шаблонные, скриптовые.
@ -120,6 +175,18 @@
Есть ещё такое собирательное понятие, как ресурсы, но его, возможно не следует рассматривать прямо сейчас потому что оно не является обязательным для вообще любого проекта, в отличие от пакетов, классов и комментариев. Работу с ресурсами мы разберём когда будем беседовать о более сложных проектах.
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item Зачем складывать классы в пакеты? (структурирование, видимость*)
\item Может ли существовать класс вне пакета? (да*, нет)
\item Комментирование кода(2)
\begin{itemize}
\item Нужно только если пишется большая подключаемая библиотека;
\item Хорошая привычка;
\item Захламляет исходники.
\end{itemize}
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Для дальнейших упражнений на сегодняшнем уроке нам понадобится небольшой проект, буквально из двух классов в двух пакетах, без каких-то ограничений видимости и других усложнений. На основе этого проекта мы и поговорим об оставшихся на сегодня двух несложных темах - терминальная сборка и генерация документации. Дерево проекта представлено на слайде, где папка с выходными (скомпилированными) бинарными файлами пуста, а файл README.md создан для лучшей демонстрации корня проекта.
@ -144,6 +211,18 @@ javac -sourcepath ./src -d out src/ru/gb/jcore/sample/Main.java
java -classpath ./out ru.gb.jcore.sample.Main
\end{verbatim}
\paragraph{Задания для самопроверки}
\begin{enumerate}
\item Что такое javac? (компилятор)
\item Кофе, крошка? (да)
\item Где находится класс в папке назначения работы компилятора?
\begin{itemize}
\item В подпапках, повторяющих структуру пакетов в исходниках
\item В корне плоским списком;
\item Зависит от ключей компиляции.
\end{itemize}
\end{enumerate}
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
И к последней на сегодня теме, которая мочему-то вызывает у многих даже активно практикующих программистов отторжение. К самому полезному для передачи опыта между программистами и командами программистов. К документации на свой код. Конечно, особенно ярые противники описывать свою работу сейчас возмутятся, мол, я ж программист, пусть программную документацию пишут технические писатели. Но если подумать, то техпис фактически всё равно придёт к вам, программисту, за разъяснениями, что именно делает тот или иной фрагмент кода. А комментарии к коду всё равно писать, да и техпису, скорее всего придётся отвечать в текстовом виде, так почему бы не облегчить себе жизнь сразу, документируя свой код по мере написания, например, между спринтами.