05 workshop done + refactoring

This commit is contained in:
Ivan I. Ovchinnikov 2023-01-20 00:56:30 +03:00
parent 6f0bcb21c6
commit bef6708291
24 changed files with 175 additions and 85 deletions

Binary file not shown.

BIN
build/jtc1-01-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc1-01-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc2-02-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc2-02-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc3-03-abstract.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
build/jtc4-04-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc4-04-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc5-05-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc5-05-workshop.pdf Normal file

Binary file not shown.

View File

@ -1,7 +1,12 @@
\immediate\write18{texcount -sum -1 -inc j-spec.tex > /tmp/wordcount.tex} \immediate\write18{texcount -sum -1 -inc j-spec.tex > /tmp/wordcount.tex}
\documentclass[a4paper,12pt]{report} % report is for the complete book
%\documentclass[a4paper,12pt]{report}
% article is for single section compilation
\documentclass[a4paper,12pt]{article}
\usepackage[english,russian]{babel} \usepackage[english,russian]{babel}
\usepackage{ifthen}
\input{settings/main-style-preamble} \input{settings/main-style-preamble}
\input{settings/fancy-listings-preamble} \input{settings/fancy-listings-preamble}
@ -11,16 +16,27 @@
\author{Иван Игоревич Овчинников} \author{Иван Игоревич Овчинников}
\date{\today{} (\DTMcurrenttime)} \date{\today{} (\DTMcurrenttime)}
% defining if document is compiled as book or as articles
\def\isSingle{1}
\usepackage{subfiles} \usepackage{subfiles}
\begin{document} \begin{document}
\maketitle \maketitle
\ifx\isSingle\undefined
\tableofcontents \tableofcontents
\fi
\pagestyle{plain} \pagestyle{plain}
\sloppy \sloppy
\newpage \newpage
\ifx\isSingle\undefined
\chapter{Java Core} \chapter{Java Core}
\fi
\subfile{jtc1-01-abstract} \subfile{jtc1-01-abstract}
\newpage \newpage
\subfile{jtc2-02-abstract} \subfile{jtc2-02-abstract}
@ -32,15 +48,20 @@
\subfile{jtc5-05-abstract} \subfile{jtc5-05-abstract}
\newpage \newpage
\ifx\isSingle\undefined
\chapter{Java Development Kit} \chapter{Java Development Kit}
\fi
%\subfile{jtd6-11a} %\subfile{jtd6-11a}
\appendix \appendix
\setcounter{secnumdepth}{5}
\printnomenclature[40mm]
\setcounter{secnumdepth}{5}
\ifx\isSingle\undefined
\printnomenclature[40mm]
\appendix
\chapter*{Семинары} \chapter*{Семинары}
\addcontentsline{toc}{chapter}{Семинары} \addcontentsline{toc}{chapter}{Семинары}
\fi
\renewcommand{\thesection}{\Asbuk{section}} \renewcommand{\thesection}{\Asbuk{section}}
\subfile{jtc1-01-workshop} \subfile{jtc1-01-workshop}
\newpage \newpage

View File

@ -2,9 +2,10 @@
\begin{document} \begin{document}
\pagestyle{plain} \pagestyle{plain}
%\tableofcontents \tableofcontents
\section{Платформа: история и окружение} \section{Платформа: история и окружение}
\subsection{В этом разделе} \subsection*{В этом разделе}
Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; некоторые интересные способы сборки проектов. Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; некоторые интересные способы сборки проектов.
В этом разделе происходит первое знакомство со внутреннем устройством языка Java и фреймворком разработки приложений с его использованием. Рассматривается примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. Разбирается структура проекта, а также происходит ознакомление с базовым инструментарием для разработки на Java. В этом разделе происходит первое знакомство со внутреннем устройством языка Java и фреймворком разработки приложений с его использованием. Рассматривается примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. Разбирается структура проекта, а также происходит ознакомление с базовым инструментарием для разработки на Java.
@ -466,7 +467,7 @@ Docker-образ и, как следствие, Docker-контейнеры в
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их. \item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их.
\end{itemize} \end{itemize}
% \newpage \newpage
% \printnomenclature[40mm] \printnomenclature[40mm]
\end{document} \end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\begin{document} \begin{document}
\sloppy \sloppy

View File

@ -3,9 +3,9 @@
\begin{document} \begin{document}
\setcounter{section}{1} \setcounter{section}{1}
\pagestyle{plain} \pagestyle{plain}
%\tableofcontents \tableofcontents
\section{Специализация: данные и функции} \section{Специализация: данные и функции}
\subsection{В предыдущем разделе} \subsection*{В предыдущем разделе}
\begin{itemize} \begin{itemize}
\item Краткая история (причины возникновения); \item Краткая история (причины возникновения);
\item инструментарий, выбор версии; \item инструментарий, выбор версии;
@ -15,7 +15,7 @@
\item некоторые интересные способы сборки проектов. \item некоторые интересные способы сборки проектов.
\end{itemize} \end{itemize}
\subsection{В этом разделе} \subsection*{В этом разделе}
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами). Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
\begin{itemize} \begin{itemize}
\item \nom{Метод}{функция в языке программирования, принадлежащая классу}; \item \nom{Метод}{функция в языке программирования, принадлежащая классу};
@ -688,7 +688,7 @@ Constare - (лат. стоять твёрдо). Константность эт
\item Написать метод, которому можно передать в качестве аргумента массив, состоящий строго из единиц и нулей (целые числа типа \code{int}). Метод должен заменить единицы в массиве на нули, а нули на единицы и не содержать ветвлений. Написать как можно больше вариантов метода. \item Написать метод, которому можно передать в качестве аргумента массив, состоящий строго из единиц и нулей (целые числа типа \code{int}). Метод должен заменить единицы в массиве на нули, а нули на единицы и не содержать ветвлений. Написать как можно больше вариантов метода.
\end{enumerate} \end{enumerate}
% \newpage \newpage
% \printnomenclature[40mm] \printnomenclature[40mm]
\end{document} \end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab} \usepackage{spreadtab}
\begin{document} \begin{document}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt} \setlength{\columnsep}{22pt}
\pagestyle{plain} \pagestyle{plain}
\sloppy \sloppy
%\tableofcontents \tableofcontents
\section{Специализация: ООП} \section{Специализация: ООП}
\subsection{В предыдущем разделе} \subsection*{В предыдущем разделе}
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами). Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
\subsection{В этом разделе} \subsection*{В этом разделе}
Разберём такие основополагающих в Java вещи, как классы и объекты, а также с тем, как применять на практике основные принципы ООП: наследование, полиморфизм и инкапсуляцию. Дополнительно рассмотрим устройство памяти в джава. Разберём такие основополагающих в Java вещи, как классы и объекты, а также с тем, как применять на практике основные принципы ООП: наследование, полиморфизм и инкапсуляцию. Дополнительно рассмотрим устройство памяти в джава.
\begin{itemize} \begin{itemize}
\item \nom{Класс}{определяет форму и сущность объекта и является логической конструкцией, на основе которой построен весь язык Java. Определяет новый тип данных}; \item \nom{Класс}{определяет форму и сущность объекта и является логической конструкцией, на основе которой построен весь язык Java. Определяет новый тип данных};
@ -330,13 +331,26 @@ public class Cat {
} }
\end{lstlisting} \end{lstlisting}
Помимо того, что статические поля - это полезный инструмент создания общих свойств это ещ§ и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не 6 и не 8. Не создавая никакого барсика будет понятно, что у кота - 4 лапы. Это полезное поведение. Помимо того, что статические поля -- это полезный инструмент создания общих свойств это ещё и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не шесть и не восемь. Не создавая никакого Барсика будет понятно, что у кота -- четыре лапы. Это полезное поведение любого класса и его объектов.
лайвкод 03-статическое-поле-ошибка Посмотрим на опасность. Мы видим, что у каждого кота есть имя, и помним, что коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. Но что если мы по невнимательности добавим свойство статичности к имени кота? \begin{lstlisting}[language=Java,style=JCodeStyle]
public class Cat {
static int pawsCount = 4;
03-статическое-поле-признак Создав тех же самых котов, которых мы создавали весь урок, мы получим двух мурзиков и ни одного барсика. Почему это произошло? По факту переменная у нас одна на всех, и значение тоже одно, а значит каждый раз мы меняем именно его, а все остальные коты ничего не подозревая смотрят на значение общей переменной и бодро его возвращают. Поэтому, чтобы не запутаться, к статическим переменным, как правило, обращаются не по ссылке на объект — cat1.name, а по имени класса — Cat.name. static String name;
String color;
int age;
03-статические-поля К слову, статические переменные — редкость в Java. Вместо них применяют статические константы. Они определяются ключевыми словами static final и по соглашению о внешнем виде кода пишутся в верхнем регистре. // ...
}
\end{lstlisting}
У каждого кота есть имя, и коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. В чём опасность? Что если по невнимательности добавить свойство статичности к имени кота?
Создав тех же котов, такой класс вернёт двух Мурзиков и ни одного Барсика. Почему это произошло? По факту переменная одна на всех, и значение тоже одно, а значит при каждом вызове конструктора меняется именно оно, а все остальные коты, ничего не подозревая, смотрят на значение общей переменной и возвращают его. Поэтому, к статическим переменным, как правило, обращаются не по ссылке на объект -- \code{cat1.name}, а по имени класса -- \code{Cat.name}.
\begin{frm} \info Статические переменные -- редкость в Java. Вместо них применяют статические константы. Они определяются ключевыми словами \code{static final} и по соглашению о внешнем виде кода пишутся в верхнем регистре, разделяя слова символом нижнего подчёркивания, так называемым \code{UPPER_SNAKE_CASE}.
\end{frm}
\subsubsection{Задание для самопроверки} \subsubsection{Задание для самопроверки}
\begin{enumerate} \begin{enumerate}
@ -681,8 +695,9 @@ public class Cat {
Представим, что есть необходимость создать помимо класса котиков, класс собачек. Данный класс будет выглядеть очень похожим образом, только он будет не мяукать, а гавкать, и заменим обоим животным прыжок на простое перемещение на лапках. Представим, что есть необходимость создать помимо класса котиков, класс собачек. Данный класс будет выглядеть очень похожим образом, только он будет не мяукать, а гавкать, и заменим обоим животным прыжок на простое перемещение на лапках.
\begin{multicols}{2} \begin{figure}[H]
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpcat},caption={Класс кота}] \begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpcat},caption={Класс кота}]
public class Cat { public class Cat {
private String name; private String name;
private String color; private String color;
@ -695,27 +710,27 @@ public class Cat {
} }
public String getName() { public String getName() {
return name; return name;
} }
public String getColor() { public String getColor() {
return color; return color;
} }
public int getAge() { public int getAge() {
return age; return age;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public void setColor(String color) { public void setColor(String color) {
this.color = color; this.color = color;
} }
public void setAge(int age) { public void setAge(int age) {
this.age = age; this.age = age;
} }
void voice() { void voice() {
@ -726,9 +741,9 @@ public class Cat {
System.out.println(name + " walks on paws"); System.out.println(name + " walks on paws");
} }
} }
\end{lstlisting} \end{lstlisting}
\columnbreak \columnbreak
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog},caption={Класс собаки}] \begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog},caption={Класс собаки}]
public class Dog { public class Dog {
private String name; private String name;
private String color; private String color;
@ -741,27 +756,27 @@ public class Dog {
} }
public String getName() { public String getName() {
return name; return name;
} }
public String getColor() { public String getColor() {
return color; return color;
} }
public int getAge() { public int getAge() {
return age; return age;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public void setColor(String color) { public void setColor(String color) {
this.color = color; this.color = color;
} }
public void setAge(int age) { public void setAge(int age) {
this.age = age; this.age = age;
} }
void voice() { void voice() {
@ -772,8 +787,9 @@ public class Dog {
System.out.println(name + " walks on paws"); System.out.println(name + " walks on paws");
} }
} }
\end{lstlisting} \end{lstlisting}
\end{multicols} \end{multicols}
\end{figure}
Очевидно это не DRY и неприемлемо, если появится необходимость описать классы для целого зоопарка. В приведённых классах есть очень много абсолютно одинаковых и очень похожих полей и методов. Очевидно это не DRY и неприемлемо, если появится необходимость описать классы для целого зоопарка. В приведённых классах есть очень много абсолютно одинаковых и очень похожих полей и методов.
@ -819,6 +835,7 @@ public class Animal {
Простой перенос кода в родительский класс показал наличие проблемы. Модификатор \code{private} определяет область видимости только внутри класса, а если нужно чтобы переменную было видно ещё и в классах-наследниках, нужен хотя бы модификатор доступа по умолчанию. Если же класс наследник создаётся в каком-то другом пакете, то и default не подойдёт. Простой перенос кода в родительский класс показал наличие проблемы. Модификатор \code{private} определяет область видимости только внутри класса, а если нужно чтобы переменную было видно ещё и в классах-наследниках, нужен хотя бы модификатор доступа по умолчанию. Если же класс наследник создаётся в каком-то другом пакете, то и default не подойдёт.
\begin{figure}[H]
\begin{multicols}{2} \begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog1},caption={Класс собаки}] \begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog1},caption={Класс собаки}]
public class Dog extends Animal { public class Dog extends Animal {
@ -856,6 +873,7 @@ public class Cat extends Animal {
} }
\end{lstlisting} \end{lstlisting}
\end{multicols} \end{multicols}
\end{figure}
То есть, к членам данных и методам класса можно применять следующие модификаторы доступа То есть, к членам данных и методам класса можно применять следующие модификаторы доступа
\begin{itemize} \begin{itemize}
@ -882,6 +900,7 @@ public class Cat extends Animal {
При описании класса, можно явно вызвать конструктор базового класса в конструкторе класса-потомка. Базовый класс еще называют «суперклассом», поэтому в Java для его обозначения используется ключевое слово \code{super}. Здесь такое же ограничение, как и при вызове конструкторов данного класса (через \code{this}) - вызов такого конструктора может быть только один и быть только первой строкой. Таким образом, код, для всех животных в программе будет выглядеть следующим образом: При описании класса, можно явно вызвать конструктор базового класса в конструкторе класса-потомка. Базовый класс еще называют «суперклассом», поэтому в Java для его обозначения используется ключевое слово \code{super}. Здесь такое же ограничение, как и при вызове конструкторов данного класса (через \code{this}) - вызов такого конструктора может быть только один и быть только первой строкой. Таким образом, код, для всех животных в программе будет выглядеть следующим образом:
\begin{figure}[H]
\begin{multicols}{2} \begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:animal-full},caption={Класс животного}] \begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:animal-full},caption={Класс животного}]
public class Animal { public class Animal {
@ -968,6 +987,7 @@ public class Bird extends Animal {
} }
\end{lstlisting} \end{lstlisting}
\end{multicols} \end{multicols}
\end{figure}
Для примера, создали ещё один класс, наследника животного, чтобы использовать наследование по назначению. Наследование реализуется через ключевое слово \code{extends}, расширять. Важно, что класс-родитель расширяется функциональностью или свойствами класса-наследника. Это позволило, например, добавить в птичку такое свойство как высота полёта и такой метод как летать, в дополнение к тому, что умеют все животные. Для примера, создали ещё один класс, наследника животного, чтобы использовать наследование по назначению. Наследование реализуется через ключевое слово \code{extends}, расширять. Важно, что класс-родитель расширяется функциональностью или свойствами класса-наследника. Это позволило, например, добавить в птичку такое свойство как высота полёта и такой метод как летать, в дополнение к тому, что умеют все животные.
@ -1187,7 +1207,7 @@ public class Cat extends Animal {
\item * Добавить механизм, создающий 25\% разброс значений каждого ограничения для каждого объекта. \item * Добавить механизм, создающий 25\% разброс значений каждого ограничения для каждого объекта.
\end{enumerate} \end{enumerate}
% \newpage \newpage
% \printnomenclature[40mm] \printnomenclature[40mm]
\end{document} \end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab} \usepackage{spreadtab}
\begin{document} \begin{document}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt} \setlength{\columnsep}{22pt}
\pagestyle{plain} \pagestyle{plain}
\sloppy \sloppy
%\tableofcontents \tableofcontents
\section{Специализация: ООП и исключения} \section{Специализация: ООП и исключения}
\subsection{В предыдущем разделе} \subsection*{В предыдущем разделе}
Была рассмотрена реализация объектно-ориентированного программирования в Java. Рассмотрели классы и объекты, а также наследование, полиморфизм и инкапсуляцию. Дополнительно был освещён вопрос устройства памяти. Была рассмотрена реализация объектно-ориентированного программирования в Java. Рассмотрели классы и объекты, а также наследование, полиморфизм и инкапсуляцию. Дополнительно был освещён вопрос устройства памяти.
\subsection{В этом разделе} \subsection*{В этом разделе}
В дополнение к предыдущему, будут разобраны такие понятия, как внутренние и вложенные классы; процессы создания, использования и расширения перечислений. Более детально будет разобрано понятие исключений и их тесная связь с многопоточностью в Java. Будут рассмотрены исключения с точки зрения ООП, процесс обработки исключений. В дополнение к предыдущему, будут разобраны такие понятия, как внутренние и вложенные классы; процессы создания, использования и расширения перечислений. Более детально будет разобрано понятие исключений и их тесная связь с многопоточностью в Java. Будут рассмотрены исключения с точки зрения ООП, процесс обработки исключений.
\begin{itemize} \begin{itemize}
\item \nom{Перечисление}{это упоминание объектов, объединённых по какому-либо признаку. Фактически, представляет новый тип данных, поэтому возможно определить переменную данного типа и использовать её.}; \item \nom{Перечисление}{это упоминание объектов, объединённых по какому-либо признаку. Фактически, представляет новый тип данных, поэтому возможно определить переменную данного типа и использовать её.};
@ -749,7 +750,7 @@ try (TestStream stream = new TestStream()) {
\item для проверки напишите программу, преобразующую квадратный массив целых чисел 5х5 в сумму чисел в этом массиве, при этом, программа должна выбросить исключение, если строк или столбцов в исходном массиве окажется не 5. \item для проверки напишите программу, преобразующую квадратный массив целых чисел 5х5 в сумму чисел в этом массиве, при этом, программа должна выбросить исключение, если строк или столбцов в исходном массиве окажется не 5.
\end{enumerate} \end{enumerate}
% \newpage \newpage
% \printnomenclature[40mm] \printnomenclature[40mm]
\end{document} \end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab} \usepackage{spreadtab}
\begin{document} \begin{document}
@ -150,7 +150,7 @@ private static final class RowMismatchException extends RuntimeException {
\subsubsection*{Вопросы и ответы} \subsubsection*{Вопросы и ответы}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями. \item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
\item \textbf{Тайминг} 5-15 минут \item \textbf{Тайминг} 5-15 минут
\item \textbf{Действия преподавателя} \item \textbf{Действия преподавателя}
\begin{itemize} \begin{itemize}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt} \setlength{\columnsep}{22pt}
\pagestyle{plain} \pagestyle{plain}
\sloppy \sloppy
%\tableofcontents \tableofcontents
\section{Специализация: тонкости работы} \section{Специализация: тонкости работы}
\subsection{В предыдущем разделе} \subsection*{В предыдущем разделе}
Рассмотрены понятия внутренних и вложенных классов; процессы создания, использования и расширения перечислений. Подробно рассмотрены исключения с точки зрения ООП, их философия и тесная связь с многопоточностью в Java, обработка, разделение понятия штатных и нештатных ситуаций. Рассмотрены понятия внутренних и вложенных классов; процессы создания, использования и расширения перечислений. Подробно рассмотрены исключения с точки зрения ООП, их философия и тесная связь с многопоточностью в Java, обработка, разделение понятия штатных и нештатных ситуаций.
\subsection{В этом разделе} \subsection*{В этом разделе}
Файловые системы и представление данных в запоминающих устройствах; Начало рассмотрения популярных пакетов ввода-вывода \code{java.io}, \code{java.nio}. Более подробно будет разобран один из самых популярных ссылочных типов данных \code{String} и механики вокруг него. Файловые системы и представление данных в запоминающих устройствах; Начало рассмотрения популярных пакетов ввода-вывода \code{java.io}, \code{java.nio}. Более подробно будет разобран один из самых популярных ссылочных типов данных \code{String} и механики вокруг него.
\begin{itemize} \begin{itemize}
\item \nom{Файл}{именованная область данных на носителе информации, используемая как базовый объект взаимодействия с данными в операционных системах.}; \item \nom{Файл}{именованная область данных на носителе информации, используемая как базовый объект взаимодействия с данными в операционных системах.};
@ -705,13 +706,11 @@ cat0 equal to cat3? false
\item Написать метод поиска слова внутри файла. \item Написать метод поиска слова внутри файла.
\end{enumerate} \end{enumerate}
% \newpage \newpage
% \printnomenclature[40mm] \printnomenclature[40mm]
\end{document} \end{document}
% Основная загрузочная запись (MBR)
% Основная загрузочная запись (MBR) — это устаревшая форма разделения загрузочного сектора. Это первый сектор диска, который содержит информацию о том, как разбит диск. Он также содержит загрузчик, который сообщает вашей машине, как загрузить ОС. % Основная загрузочная запись (MBR) — это устаревшая форма разделения загрузочного сектора. Это первый сектор диска, который содержит информацию о том, как разбит диск. Он также содержит загрузчик, который сообщает вашей машине, как загрузить ОС.
% MBR состоит из трех частей: % MBR состоит из трех частей:

View File

@ -1,12 +1,12 @@
\documentclass[../j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab} \usepackage{spreadtab}
\begin{document} \begin{document}
\setcounter{section}{4} \setcounter{section}{4}
\section{Семинар: обработка исключений} \section{Семинар: тонкости работы}
\subsection{Инструментарий} \subsection{Инструментарий}
\begin{itemize} \begin{itemize}
\item \href{https://docs.google.com/presentation/d/}{Презентация} для преподавателя, ведущего семинар; \item \href{https://docs.google.com/presentation/d/1zW_qrNiH5xH0jRZApzWQWH3eC_qJuzRJAPPsnpNDSig}{Презентация} для преподавателя, ведущего семинар;
\item \href{https://drive.google.com/file/d/1LWyE8aEy4-1gsognqhXIXwDcoLviVge4/view}{Фон} GeekBrains для проведения семинара в Zoom; \item \href{https://drive.google.com/file/d/1LWyE8aEy4-1gsognqhXIXwDcoLviVge4/view}{Фон} GeekBrains для проведения семинара в Zoom;
\item JDK любая 11 версии и выше; \item JDK любая 11 версии и выше;
\item \href{https://www.jetbrains.com/idea/download}{IntelliJ IDEA Community Edition} для практики и примеров используется IDEA. \item \href{https://www.jetbrains.com/idea/download}{IntelliJ IDEA Community Edition} для практики и примеров используется IDEA.
@ -31,15 +31,21 @@
\hline \hline
@ Quiz & 5 & @ 6-18 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (6 вопросов, по минуте на ответ) \\ @ Quiz & 5 & @ 6-18 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (6 вопросов, по минуте на ответ) \\
\hline \hline
@ Рассмотрение ДЗ лекции & 10 & @ 19-23 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\ @ Рассмотрение ДЗ лекции & 10 & @ 19-27 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\
\hline \hline
@ Вопросы и ответы & 10 & @ 24 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\ @ Вопросы и ответы & 10 & @ 28 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\
\hline \hline
@ Задание 1 & 30 & @ 25-35 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\ @ Задание 1 & 10 & @ 29-33 & @ Сохранение состояния приложения между запусками \\
\hline \hline
@ Перерыв (если нужен) & 5 & @ 36 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\ @ Задание 2 & 15 & @ 34-37 & @ Загрузка состояния приложения при запуске \\
\hline \hline
@ Задание 2 & 40 & @ 37-49 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\ @ Перерыв (если нужен) & 5 & @ 38 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\
\hline
@ Задание 3 & 10 & @ 39-42 & @ Работа с текстом (автоматизированный поиск и замена текста в файле или группе файлов) \\
\hline
@ Задание 4 & 15 & @ 43-46 & @ Работа с файловой системой \\
\hline
@ Задание 5 (необязат) & 20 & @ 47-49 & @ Описание часто недостающих механик операционной системы по «массовой» работе с файлами \\
\hline \hline
@ Домашнее задание & 5 & @ 50-51 & @ Объясните домашнее задание, подведите итоги урока \\ @ Домашнее задание & 5 & @ 50-51 & @ Объясните домашнее задание, подведите итоги урока \\
\hline \hline
@ -282,7 +288,7 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\subsubsection*{Вопросы и ответы} \subsubsection*{Вопросы и ответы}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями. \item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
\item \textbf{Тайминг} 5-15 минут \item \textbf{Тайминг} 5-15 минут
\item \textbf{Действия преподавателя} \item \textbf{Действия преподавателя}
\begin{itemize} \begin{itemize}
@ -297,7 +303,7 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\subsubsection*{Задание 1} \subsubsection*{Задание 1}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Сохранение состояния приложения между запусками \item \textbf{Ценность этапа} Сохранение состояния приложения между запусками
\item \textbf{Тайминг} 15-20 мин \item \textbf{Тайминг} 10-15 мин
\item \textbf{Действия преподавателя} \item \textbf{Действия преподавателя}
\begin{itemize} \begin{itemize}
\item Выдать задание студентам; \item Выдать задание студентам;
@ -504,7 +510,7 @@ void printContents(".");
\subsubsection*{Задание 5 (необязательное)} \subsubsection*{Задание 5 (необязательное)}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Описание часто недостающих механик операционной системы по «массовой» работе с файлами. \item \textbf{Ценность этапа} Описание часто недостающих механик операционной системы по «массовой» работе с файлами.
\item \textbf{Тайминг} 15-20 мин \item \textbf{Тайминг} 20-25 мин
\item \textbf{Действия преподавателя} \item \textbf{Действия преподавателя}
\begin{itemize} \begin{itemize}
\item Выдать задание студентам; \item Выдать задание студентам;

View File

@ -21,6 +21,7 @@
\usepackage{amsmath} \usepackage{amsmath}
\usepackage{spreadtab} \usepackage{spreadtab}
\usepackage{svg} \usepackage{svg}
\usepackage{afterpage}
\newcommand{\tabitem}{~~\llap{\textbullet}~~} \newcommand{\tabitem}{~~\llap{\textbullet}~~}
@ -66,10 +67,10 @@
} }
\geometry{ \geometry{
left=2cm, lmargin=1.5cm,
right=1cm, rmargin=2.5cm,
top=2cm, tmargin=2.5cm,
bottom=2cm bmargin=2.5cm,
} }
\setlist{nolistsep} \setlist{nolistsep}

View File

@ -1483,7 +1483,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 1,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
@ -1813,7 +1813,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 2,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
@ -1837,13 +1837,21 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 3,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
} }
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6, 7, 8, 0, 8, 7, 6, 5, 4, 3]\n"
]
}
],
"source": [ "source": [
"int[] ar00 = new int[15];\n", "int[] ar00 = new int[15];\n",
"final int DIGIT_BOUND = 48;\n", "final int DIGIT_BOUND = 48;\n",
@ -1958,7 +1966,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 5,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
@ -2016,16 +2024,49 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 7,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
} }
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"./file_7.txt\n",
"./file_6.txt\n",
"./file_4.txt\n",
"./file_5.txt\n",
"./file_1.txt\n",
"./.DS_Store\n",
"./save1.out\n",
"./save0.out\n",
"./file_0.txt\n",
"./Icon\n",
"./file_2.txt\n",
"./file_3.txt\n",
"./FILE_OUT.txt\n",
"./Sample.zip\n",
"./Makefile\n",
"./notebook.ipynb\n",
"./Main.java.new\n",
"./Main.java\n",
"./save.out\n",
"./test.txt\n",
"./Main.class\n",
"./cat.txt\n",
"./file_8.txt\n",
"./bytes.txt\n",
"./file_9.txt\n",
"./sources-draft.iml\n"
]
}
],
"source": [ "source": [
"int count = 0;\n", "int count = 0;\n",
"File path = new File( new File(\".\").getCanonicalPath() );\n", "File path = new File( new File(\".\").getPath() );\n",
"File[] dir = path.listFiles();\n", "File[] dir = path.listFiles();\n",
"for (int i = 0; i < dir.length; i++) {\n", "for (int i = 0; i < dir.length; i++) {\n",
" if (dir[i].isDirectory()) continue;\n", " if (dir[i].isDirectory()) continue;\n",
@ -2069,7 +2110,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 21, "execution_count": 9,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
@ -2105,7 +2146,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 22, "execution_count": 10,
"metadata": { "metadata": {
"vscode": { "vscode": {
"languageId": "java" "languageId": "java"
@ -2146,7 +2187,7 @@
"mimetype": "text/x-java-source", "mimetype": "text/x-java-source",
"name": "Java", "name": "Java",
"pygments_lexer": "java", "pygments_lexer": "java",
"version": "11.0.17+7-LTS" "version": "11.0.15.1+2-LTS"
}, },
"orig_nbformat": 4 "orig_nbformat": 4
}, },