c1-s1-ss-1simple project+jupyter sample
This commit is contained in:
parent
bc8f578b98
commit
1a69fe24b9
BIN
build/j-spec.pdf
BIN
build/j-spec.pdf
Binary file not shown.
95
j-spec.tex
95
j-spec.tex
|
@ -12,7 +12,7 @@
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
\usepackage{multicol,multirow}
|
\usepackage{multicol,multirow}
|
||||||
\usepackage{float,adjustbox}
|
\usepackage{float,adjustbox}
|
||||||
\usepackage{fontawesome}
|
%\usepackage{fontawesome}
|
||||||
\usepackage{longtable}
|
\usepackage{longtable}
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
\usepackage{hyperref}
|
\usepackage{hyperref}
|
||||||
|
@ -52,8 +52,8 @@
|
||||||
\lhead{\includegraphics[height=5mm]{logo.png}}
|
\lhead{\includegraphics[height=5mm]{logo.png}}
|
||||||
\rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
|
\rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
|
||||||
\chead{\thepage}
|
\chead{\thepage}
|
||||||
\cfoot{\faRocket}
|
% \cfoot{\faRocket}
|
||||||
\rfoot{Всего слов: \wordcount}
|
% \rfoot{Всего слов: \wordcount}
|
||||||
}
|
}
|
||||||
|
|
||||||
\geometry{
|
\geometry{
|
||||||
|
@ -211,7 +211,19 @@ ivan-igorevich@gb sources % java Main
|
||||||
Hello, world!
|
Hello, world!
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\textbf{Скриптовый проект} это достаточно новый тип проектов, он получил развитие благодаря растущей популярности Jupyter Notebook. Скриптовые проекты удобны, когда нужно отработать какую-то небольшую функциональность или пошагово пояснить работу какого-то алгоритма.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=12cm]{jc-01-jupyter-example.png}
|
||||||
|
\caption{Пример простого Java проекта в Jupyter Notebook}
|
||||||
|
\label{pic:jupyter-sample}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
\textbf{Обычный проект} состоит из пакетов, которые содержат классы, которые в свою очередь как-то связаны между собой и содержат код, который исполняется.
|
\textbf{Обычный проект} состоит из пакетов, которые содержат классы, которые в свою очередь как-то связаны между собой и содержат код, который исполняется.
|
||||||
|
\begin{itemize}
|
||||||
|
\item Пакеты. Классы, находящиеся в одном пакете доступны друг другу даже если находятся в разных проектах. Пакеты объединяют классы по смыслу. У пакетов есть правила именования: обычно это обратное доменное имя (например, для gb.ru это будет ru.gb), название проекта, и далее уже внутренняя структура. Чтобы явно отнести класс к пакету, нужно прописать в классе название пакета после оператора \code{package}.
|
||||||
|
\item Классы. Основная единица исходного кода программы.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
|
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
|
||||||
\subsubsection{Документирование (Javadoc)}
|
\subsubsection{Документирование (Javadoc)}
|
||||||
|
@ -233,6 +245,68 @@ Hello, world!
|
||||||
|
|
||||||
\section{Специализация: данные и функции}
|
\section{Специализация: данные и функции}
|
||||||
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций;
|
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций;
|
||||||
|
\subsection{Данные}
|
||||||
|
Хранение данных в Java осуществляется привычным для программиста образом: в переменных и константах. Языки программирования бывают типизированными и нетипизированными (бестиповыми).
|
||||||
|
|
||||||
|
Отсутствие типизации в основном присуще старым и низкоуровневым языкам программирования, например, Forth, некоторые ассемблеры. Все данные в таких языках считаются цепочками бит произвольной длины и, как следует из названия, не делятся на типы. Работа с ними часто труднее, и при чтении кода не всегда ясно, о каком типе переменной идет речь. При этом часто безтиповые языки работают быстрее типизированных, но описывать с их помощью большие проекты со сложными взаимосвязями довольно утомительно.
|
||||||
|
\begin{frm}
|
||||||
|
Java является языком со строгой (сильной) явной статической типизацией.
|
||||||
|
\end{frm}
|
||||||
|
Что это значит?
|
||||||
|
\begin{itemize}
|
||||||
|
\item Статическая - у каждой переменной должен быть тип и мы этот тип поменять не можем. Этому свойству противопоставляется динамическая типизация;
|
||||||
|
\item Явная - при создании переменной мы должны ей обязательно присвоить какой-то тип, явно написав это в коде. Бывают языки с неявной типизацией, например, Python;
|
||||||
|
\item Строгая(сильная) - невозможно смешивать разнотипные данные. С другой стороны, существует JavaScript, в котором запись \code{2 + true} выдаст результат \code{3}.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Все данные в Java делятся на две основные категории: примитивные и ссылочные.
|
||||||
|
|
||||||
|
Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными);
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\begin{tabular}{|p{17mm}|p{80mm}|p{55mm}|}
|
||||||
|
\hline
|
||||||
|
Тип & Пояснение & Диапазон \\
|
||||||
|
\hline
|
||||||
|
byte & Самый маленький из адресуемых типов, 8 бит, знаковый & [\textminus128, +127] \\
|
||||||
|
\hline
|
||||||
|
short & Тип короткого целого числа, 16 бит, знаковый & [\textminus32 768, +32 767]\\
|
||||||
|
\hline
|
||||||
|
char & Целочисленный тип для хранения символов в кодировке UTF-8, 16 бит, беззнаковый & [0, +65 535]\\
|
||||||
|
\hline
|
||||||
|
int & Основной тип целого числа, 32 бита, знаковый & [\textminus2 147 483 648, +2 147 483 647] \\
|
||||||
|
\hline
|
||||||
|
long & Тип длинного целого числа, 64 бита, знаковый & [\textminus9 223 372 036 854 775 808, +9 223 372 036 854 775 807] \\
|
||||||
|
\hline
|
||||||
|
float & Тип вещественного числа с плавающей запятой (одинарной точности, 32 бита) & \\
|
||||||
|
\hline
|
||||||
|
double & Тип вещественного числа с плавающей запятой (двойной точности, 64 бита) & \\
|
||||||
|
\hline
|
||||||
|
boolean & Логический тип данных & true, false \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\caption{Основные типы данных в языке С}
|
||||||
|
\label{tab:types}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы;
|
||||||
|
|
||||||
|
Функции: параметры, возвращаемые значения, перегрузка функций;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection{Антипаттерн "магические числа"}
|
||||||
|
В прошлом примере мы использовали антипаттерн - плохой стиль для написания кода. Число 18 используется в коде коде без пояснений. Такой антипаттерн называется "магическое число". Рекомендуется помещать числа в константы, которые храняться в начале файла.
|
||||||
|
ADULT = 18
|
||||||
|
age = float(input('Ваш возраст: '))
|
||||||
|
how\_old = age - ADULT
|
||||||
|
print(how\_old, "лет назад ты стал совершеннолетним")
|
||||||
|
|
||||||
|
Плюсом такого подхода является возможность легко корректировать большие проекты. Представьте, что в вашем коде несколько тысяч строк, а число 18 использовалось несколько десятков раз.
|
||||||
|
● При развертывании проекта в стране, где совершеннолетием считается 21 год вы будете перечитывать весь код в поисках магических "18" и править их на "21". В случае с константой изменить число нужно в одном месте.
|
||||||
|
● Дополнительный сложности могут возникнуть, если в коде будет 18 как возраст совершеннолетия и 18 как коэффициент для рассчёт чего-либо. Теперь править кода ещё сложнее, ведь возраст изменился, а коэффициент -нет. В случае с сохранением значений в константы мы снова меняем число в одном месте.
|
||||||
|
|
||||||
\subsection*{Задания к семинару}
|
\subsection*{Задания к семинару}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода);
|
\item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода);
|
||||||
|
@ -285,5 +359,20 @@ Socket, ServerSocket, Многопоточность, абстрагирован
|
||||||
|
|
||||||
\chapter{Java Junior+}
|
\chapter{Java Junior+}
|
||||||
|
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
\appendix
|
||||||
|
\chapter*{Приложения}
|
||||||
|
\addcontentsline{toc}{chapter}{Приложения}
|
||||||
|
\renewcommand{\thesection}{\Asbuk{section}}
|
||||||
|
|
||||||
|
\section{Термины, определения и сокращения}
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{UTF-8} (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в UNIX-подобных операционных системах.
|
||||||
|
\item Операционная система, сокр. \textbf{ОС} (англ. operating system, OS) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений.
|
||||||
|
\item \textbf{IDE} (Integrated Development Environment) – это интегрированная, единая среда разработки, которая используется разработчиками для создания различного программного обеспечения. IDE представляет собой комплекс из нескольких инструментов, а именно: текстового редактора, компилятора или интерпретатора, средств автоматизации сборки и отладчика.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
Binary file not shown.
|
@ -18,8 +18,8 @@
|
||||||
|
|
||||||
\usetheme{Madrid}
|
\usetheme{Madrid}
|
||||||
\usecolortheme{seahorse}
|
\usecolortheme{seahorse}
|
||||||
\setmainfont{IBM Plex Sans}
|
\setmainfont{PT Astra Sans}
|
||||||
\setsansfont{IBM Plex Sans}
|
\setsansfont{PT Astra Sans}
|
||||||
|
|
||||||
\title{Платформа: история и окружение}
|
\title{Платформа: история и окружение}
|
||||||
\author{Иван Игоревич Овчинников}
|
\author{Иван Игоревич Овчинников}
|
||||||
|
@ -130,6 +130,51 @@
|
||||||
|
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Структура проекта}
|
\frametitle{Структура проекта}
|
||||||
|
\begin{itemize}
|
||||||
|
\item простейшие (один файл)
|
||||||
|
\item обычные (несколько пакетов)
|
||||||
|
\item шаблонные (формируются сборщиками)
|
||||||
|
\item скриптовые (jupyter notebook)
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
\note{...}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Простейший проект}
|
||||||
|
Думаю, тут надо вживую покодить, благо немного
|
||||||
|
\begin{multicols}{2}
|
||||||
|
public class Main
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
|
||||||
|
System.out.println("Hello, world!");
|
||||||
|
|
||||||
|
\columnbreak
|
||||||
|
|
||||||
|
ivan@gb src > javac Main.java
|
||||||
|
|
||||||
|
ivan@gb src > java Main
|
||||||
|
|
||||||
|
Hello, world!
|
||||||
|
\end{multicols}
|
||||||
|
\end{frame}
|
||||||
|
\note{...}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Jupyter Notebook}
|
||||||
|
также вживую открыть юпитер ноутбук, показать, что возможно запускать код в скриптовом формате
|
||||||
|
\end{frame}
|
||||||
|
\note{...}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Проект на Java}
|
||||||
|
\begin{itemize}
|
||||||
|
\item пакеты,
|
||||||
|
\item классы,
|
||||||
|
\item метод main,
|
||||||
|
\item комментарии
|
||||||
|
\item ресурсы
|
||||||
|
\end{itemize}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\note{...}
|
\note{...}
|
||||||
|
|
||||||
|
|
|
@ -69,5 +69,21 @@
|
||||||
|
|
||||||
% -----------------------------------------------------------------------------------
|
% -----------------------------------------------------------------------------------
|
||||||
\showslide{build/jc-1-b.pdf}
|
\showslide{build/jc-1-b.pdf}
|
||||||
|
Ну, наконец-то проект. Проекты бывают разной сложности, сейчас поговорим о проектах без применения сборщиков, потому что сборщикам и соответствующим проектам у нас будет посвящено отдельное занятие. Все проекты по сложности структуры можно разделить на четыре основные категории: простейшие, обычные, шаблонные, скриптовые.
|
||||||
|
|
||||||
|
% -----------------------------------------------------------------------------------
|
||||||
|
\showslide{build/jc-1-b.pdf}
|
||||||
|
Начнём с простейшего проекта, который будет состоять из одного файла исходников. Естественно, вы спросите, что за чушь, мы же уже сотни раз писали «привет мир» и запускали его удобной зелёной стрелочкой в ИДЕ. Есть ответ. Мы же выясняем, что там внутри, под капотом этих удобных стрелочек и привычных процессов. Да и ради простейшего проекта запускать тяжеловесную среду программирования как-то неестественно что ли.
|
||||||
|
|
||||||
|
% -----------------------------------------------------------------------------------
|
||||||
|
\showslide{build/jc-1-b.pdf}
|
||||||
|
Пока далеко не ушли от простейших проектов, думаю, целесообразно будет проговорить о скриптовых возможностях Java. Поскольку язык является не только компилируемым, но и интерпретируемым благодаря работе JVM, его возмжоно использовать как скриптовый внутри юпитер ноутбука, подключив соответствующее ядро. Интересной особенностью юпитер ноутбука является разделение фронтенда и ядра, что даёт возможность заменять эти самые ядра (в терминах юпитера они называются кернелы). скачав и установив ядро IJava мы получаем шикарную возможность делать простые наброски логики, снабжая их комментариями в формате маркдаун. На самом деле можно делать и непростые наброски, но это выходит далеко за рамки нашего курса о языке. Если будет очень интересно, призываю вас самостоятельно почитать о возможностях ядра, благо на него очень хорошая документация с примерами.
|
||||||
|
|
||||||
|
% -----------------------------------------------------------------------------------
|
||||||
|
\showslide{build/jc-1-b.pdf}
|
||||||
|
Как я сказал в начале этого блока, шаблонные проекты, создаваемые сборщиками мы обсудим на следующей лекции, поэтому осталось только поговорить о том, из чего состоит обычный простой проект. Итак чаще всего, это пакеты, классы, метод main, комментарии, ресурсы. Обо всём по порядку. Давайте сразу договоримся, что я сначала буду давать формальное понятие, а потом буду говорить, как его можно представить в более простом виде.
|
||||||
|
|
||||||
|
Пакет - это пространство имён языка. Теоретически, как мы видели на примере простейшего проекта, класс может не находиться в пакете, но на практике такого положения дел не встретить. Например, в проекте из нескольких модулей классы без пакетов просто не будут найдены. Пакет - это некоторое место хранения и создания иерархии классов проекта. Проще всего представить пакет как папку на диске, тем более, что в файловой системе пакеты так и показываются. Но пакет - это чуть более сложная сущность. Для пакетов существуют модификаторы доступа, классы, находящиеся в одном пакете доступны друг другу даже если находятся в разных проектах (это как раз и есть отличие пакетов от папок на диске). Для нас пока достаточно, что пакеты объединяют классы по смыслу. У пакетов есть правила именования: обычно это обратное доменное имя (например, для гб.ру это будет ру.гб), название проекта, и далее уже внутренняя структура. Чтобы явно отнести класс к пакету недостаточно его просто туда положить, нужно ещё прописать в классе название пакета после специального оператора package.
|
||||||
|
|
||||||
|
Класс - это основная единица
|
||||||
\end{document}
|
\end{document}
|
Loading…
Reference in New Issue