Compare commits

..

No commits in common. "bef670829134a8f9da9f0300df66aa83f3a3681d" and "c6d3ea0d887362e2e4fc824bf3301ce53cb1d48b" have entirely different histories.

61 changed files with 207 additions and 2545 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,76 +1,44 @@
\immediate\write18{texcount -sum -1 -inc j-spec.tex > /tmp/wordcount.tex} \immediate\write18{texcount -sum -1 -inc j-spec.tex > /tmp/wordcount.tex}
% report is for the complete book
%\documentclass[a4paper,12pt]{report}
% article is for single section compilation
\documentclass[a4paper,12pt]{article} \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}
\graphicspath{{./pics/}} \graphicspath{{./pics/}}
\title{Техническая специализация Java} \title{Техническая специализация Java\\\small{(1. Java Core)}}
\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
%\chapter{Java Core}
\newpage \newpage
\subfile{jtc1-01a}
\ifx\isSingle\undefined
\chapter{Java Core}
\fi
\subfile{jtc1-01-abstract}
\newpage \newpage
\subfile{jtc2-02-abstract} \subfile{jtc2-02a}
\newpage \newpage
\subfile{jtc3-03-abstract} \subfile{jtc3-03a}
\newpage %\newpage
\subfile{jtc4-04-abstract}
\newpage
\subfile{jtc5-05-abstract}
\newpage
\ifx\isSingle\undefined
\chapter{Java Development Kit}
\fi
%\subfile{jtd6-11a} %\subfile{jtd6-11a}
\appendix %\section{Специализация: ООП}
\setcounter{secnumdepth}{5} %\section{Специализация: Тонкости работы}
\ifx\isSingle\undefined %Файловая система и представление данных; Пакеты \code{java.io}, \code{java.nio}, \code{String}, \code{StringBuilder}, string pool, ?JSON/XML?
\printnomenclature[40mm]
\newpage
\appendix \appendix
\chapter*{Семинары} \sloppy
\addcontentsline{toc}{chapter}{Семинары} \printnomenclature[27mm]
\fi
\chapter*{Приложения}
%\addcontentsline{toc}{chapter}{Приложения}
\renewcommand{\thesection}{\Asbuk{section}} \renewcommand{\thesection}{\Asbuk{section}}
\subfile{jtc1-01-workshop}
\newpage
\subfile{jtc2-02-workshop}
\newpage
\subfile{jtc3-03-workshop}
\newpage
\subfile{jtc4-04-workshop}
\newpage
\subfile{jtc5-05-workshop}
\end{document} \end{document}

View File

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

View File

@ -1,11 +1,12 @@
\documentclass[j-spec.tex]{subfiles} \documentclass[j-spec.tex]{subfiles}
\begin{document} \begin{document}
%\setcounter{tocdepth}{3}
\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 +16,7 @@
\item некоторые интересные способы сборки проектов. \item некоторые интересные способы сборки проектов.
\end{itemize} \end{itemize}
\subsection*{В этом разделе} \subsection{В этом разделе}
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами). Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
\begin{itemize} \begin{itemize}
\item \nom{Метод}{функция в языке программирования, принадлежащая классу}; \item \nom{Метод}{функция в языке программирования, принадлежащая классу};

View File

@ -6,12 +6,11 @@
\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. Определяет новый тип данных};
@ -331,26 +330,13 @@ public class Cat {
} }
\end{lstlisting} \end{lstlisting}
Помимо того, что статические поля -- это полезный инструмент создания общих свойств это ещё и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не шесть и не восемь. Не создавая никакого Барсика будет понятно, что у кота -- четыре лапы. Это полезное поведение любого класса и его объектов. Помимо того, что статические поля - это полезный инструмент создания общих свойств это ещ§ и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не 6 и не 8. Не создавая никакого барсика будет понятно, что у кота - 4 лапы. Это полезное поведение.
\begin{lstlisting}[language=Java,style=JCodeStyle] лайвкод 03-статическое-поле-ошибка Посмотрим на опасность. Мы видим, что у каждого кота есть имя, и помним, что коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. Но что если мы по невнимательности добавим свойство статичности к имени кота?
public class Cat {
static int pawsCount = 4;
static String name; 03-статическое-поле-признак Создав тех же самых котов, которых мы создавали весь урок, мы получим двух мурзиков и ни одного барсика. Почему это произошло? По факту переменная у нас одна на всех, и значение тоже одно, а значит каждый раз мы меняем именно его, а все остальные коты ничего не подозревая смотрят на значение общей переменной и бодро его возвращают. Поэтому, чтобы не запутаться, к статическим переменным, как правило, обращаются не по ссылке на объект — cat1.name, а по имени класса — Cat.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}
@ -695,9 +681,8 @@ public class Cat {
Представим, что есть необходимость создать помимо класса котиков, класс собачек. Данный класс будет выглядеть очень похожим образом, только он будет не мяукать, а гавкать, и заменим обоим животным прыжок на простое перемещение на лапках. Представим, что есть необходимость создать помимо класса котиков, класс собачек. Данный класс будет выглядеть очень похожим образом, только он будет не мяукать, а гавкать, и заменим обоим животным прыжок на простое перемещение на лапках.
\begin{figure}[H] \begin{multicols}{2}
\begin{multicols}{2} \begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpcat},caption={Класс кота}]
\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;
@ -741,9 +726,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;
@ -787,9 +772,8 @@ 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 и неприемлемо, если появится необходимость описать классы для целого зоопарка. В приведённых классах есть очень много абсолютно одинаковых и очень похожих полей и методов.
@ -835,7 +819,6 @@ 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 {
@ -873,7 +856,6 @@ public class Cat extends Animal {
} }
\end{lstlisting} \end{lstlisting}
\end{multicols} \end{multicols}
\end{figure}
То есть, к членам данных и методам класса можно применять следующие модификаторы доступа То есть, к членам данных и методам класса можно применять следующие модификаторы доступа
\begin{itemize} \begin{itemize}
@ -900,7 +882,6 @@ 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 {
@ -987,7 +968,6 @@ public class Bird extends Animal {
} }
\end{lstlisting} \end{lstlisting}
\end{multicols} \end{multicols}
\end{figure}
Для примера, создали ещё один класс, наследника животного, чтобы использовать наследование по назначению. Наследование реализуется через ключевое слово \code{extends}, расширять. Важно, что класс-родитель расширяется функциональностью или свойствами класса-наследника. Это позволило, например, добавить в птичку такое свойство как высота полёта и такой метод как летать, в дополнение к тому, что умеют все животные. Для примера, создали ещё один класс, наследника животного, чтобы использовать наследование по назначению. Наследование реализуется через ключевое слово \code{extends}, расширять. Важно, что класс-родитель расширяется функциональностью или свойствами класса-наследника. Это позволило, например, добавить в птичку такое свойство как высота полёта и такой метод как летать, в дополнение к тому, что умеют все животные.

View File

@ -6,12 +6,11 @@
\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{Перечисление}{это упоминание объектов, объединённых по какому-либо признаку. Фактически, представляет новый тип данных, поэтому возможно определить переменную данного типа и использовать её.};

View File

@ -6,12 +6,11 @@
\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{Файл}{именованная область данных на носителе информации, используемая как базовый объект взаимодействия с данными в операционных системах.};
@ -711,6 +710,8 @@ cat0 equal to cat3? false
\end{document} \end{document}
% Основная загрузочная запись (MBR)
% Основная загрузочная запись (MBR) — это устаревшая форма разделения загрузочного сектора. Это первый сектор диска, который содержит информацию о том, как разбит диск. Он также содержит загрузчик, который сообщает вашей машине, как загрузить ОС. % Основная загрузочная запись (MBR) — это устаревшая форма разделения загрузочного сектора. Это первый сектор диска, который содержит информацию о том, как разбит диск. Он также содержит загрузчик, который сообщает вашей машине, как загрузить ОС.
% MBR состоит из трех частей: % MBR состоит из трех частей:

BIN
seminars/build/jtc1-02c.pdf Normal file

Binary file not shown.

BIN
seminars/build/jtc3-03c.pdf Normal file

Binary file not shown.

BIN
seminars/build/jtc4-04c.pdf Normal file

Binary file not shown.

BIN
seminars/build/jtc5-05c.pdf Normal file

Binary file not shown.

View File

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

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

@ -1,4 +1,4 @@
\documentclass[j-spec.tex]{subfiles} \documentclass[../j-spec.tex]{subfiles}
\usepackage{spreadtab} \usepackage{spreadtab}
\begin{document} \begin{document}
@ -56,7 +56,7 @@
\end{spreadtab} \end{spreadtab}
\subsection{Подробности} \subsection{Подробности}
\subsubsection*{Организационный момент} \subsubsection{Организационный момент}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения. \item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения.
\item \textbf{Тайминг:} 3-5 минут. \item \textbf{Тайминг:} 3-5 минут.
@ -68,7 +68,7 @@
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Quiz} \subsubsection{Quiz}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь. \item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь.
\item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ). \item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ).
@ -118,7 +118,7 @@
\end{enumerate} \end{enumerate}
\end{itemize} \end{itemize}
\subsubsection*{Рассмотрение ДЗ} \subsubsection{Рассмотрение ДЗ}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара. \item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара.
\item \textbf{Тайминг:} 15-20 минут. \item \textbf{Тайминг:} 15-20 минут.
@ -131,11 +131,11 @@
\begin{itemize} \begin{itemize}
\item Написать класс кота так, чтобы каждому объекту кота присваивался личный порядковый целочисленный номер; \item Написать класс кота так, чтобы каждому объекту кота присваивался личный порядковый целочисленный номер;
\textbf{Вариант решения в приложении \ref{appendix:sem3-hw1}} \textbf{Вариант решения в приложении \ref{appendix:hw1}}
\item Написать классы кота и собаки, наследники животного. У всех есть три действия: бежать, плыть, прыгать. Действия принимают размер препятствия и возвращают булев результат. Три ограничения: высота прыжка, расстояние, которое животное может пробежать, расстояние, которое животное может проплыть. Следует учесть, что коты не любят воду. \item Написать классы кота и собаки, наследники животного. У всех есть три действия: бежать, плыть, прыгать. Действия принимают размер препятствия и возвращают булев результат. Три ограничения: высота прыжка, расстояние, которое животное может пробежать, расстояние, которое животное может проплыть. Следует учесть, что коты не любят воду.
\textbf{Вариант решения в приложении \ref{appendix:sem3-hw2}} \textbf{Вариант решения в приложении \ref{appendix:hw2}}
\item Добавить механизм, создающий 25\% разброс значений каждого ограничения для каждого объекта. \item Добавить механизм, создающий 25\% разброс значений каждого ограничения для каждого объекта.
@ -157,7 +157,7 @@
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Вопросы и ответы} \subsubsection{Вопросы и ответы}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе. \item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
\item \textbf{Тайминг} 5-15 минут \item \textbf{Тайминг} 5-15 минут
@ -171,7 +171,7 @@
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 1} \subsubsection{Задание 1}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Создание класса и объекта. \item \textbf{Ценность этапа} Создание класса и объекта.
\item \textbf{Тайминг} 5 минут. \item \textbf{Тайминг} 5 минут.
@ -184,7 +184,7 @@
\begin{itemize} \begin{itemize}
\item Создать класс "Сотрудник" с полями: ФИО, должность, телефон, зарплата, возраст; \item Создать класс "Сотрудник" с полями: ФИО, должность, телефон, зарплата, возраст;
\textbf{Вариант исполнения класса в приложении \ref{appendix:sem3-ct1}} \textbf{Вариант исполнения класса в приложении \ref{appendix:ct1}}
\begin{lstlisting}[language=Java,style=JCodeStyle,caption={Создание объекта класса}] \begin{lstlisting}[language=Java,style=JCodeStyle,caption={Создание объекта класса}]
Employee employeeIvan = new Employee("Ivan", "Igorevich", Employee employeeIvan = new Employee("Ivan", "Igorevich",
@ -194,7 +194,7 @@ Employee employeeIvan = new Employee("Ivan", "Igorevich",
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 2} \subsubsection{Задание 2}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Манипуляция информацией об объекте. \item \textbf{Ценность этапа} Манипуляция информацией об объекте.
\item \textbf{Тайминг} 10 минут. \item \textbf{Тайминг} 10 минут.
@ -259,7 +259,7 @@ Employee employeeIvan = new Employee("Ivan", "Igorevich",
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 3} \subsubsection{Задание 3}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Создание и манипуляция множествами объектов. \item \textbf{Ценность этапа} Создание и манипуляция множествами объектов.
\item \textbf{Тайминг} 20-25 минут. \item \textbf{Тайминг} 20-25 минут.
@ -335,7 +335,7 @@ Employee[] employees = {
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 4} \subsubsection{Задание 4}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Манипуляция информацией об объекте. \item \textbf{Ценность этапа} Манипуляция информацией об объекте.
\item \textbf{Тайминг} 15-20 минут. \item \textbf{Тайминг} 15-20 минут.
@ -410,7 +410,7 @@ for (int i = 0; i < employees.length; i++) {
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 5} \subsubsection{Задание 5}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Соблюдение атомарности методов, независимость методов, манипулирующих данными от окружения. \item \textbf{Ценность этапа} Соблюдение атомарности методов, независимость методов, манипулирующих данными от окружения.
\item \textbf{Тайминг} 10-15 минут. \item \textbf{Тайминг} 10-15 минут.
@ -445,7 +445,7 @@ private static float averageAge(Employee[] emp){
\end{lstlisting} \end{lstlisting}
\end{itemize} \end{itemize}
\subsubsection*{Домашнее задание} \subsubsection{Домашнее задание}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями. \item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
\item \textbf{Тайминг} 5-10 минут. \item \textbf{Тайминг} 5-10 минут.
@ -512,7 +512,7 @@ for (int i = 0; i < employees.length; i++) {
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Рефлексия и завершение семинара} \subsubsection{Рефлексия и завершение семинара}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать \item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать
\item \textbf{Тайминг:} 5-10 минут \item \textbf{Тайминг:} 5-10 минут
@ -529,22 +529,21 @@ for (int i = 0; i < employees.length; i++) {
\newpage \newpage
\appendix \appendix
\subsection*{Приложения} \section*{Приложения}
\addcontentsline{toc}{subsection}{Приложения} \addcontentsline{toc}{section}{Приложения}
\setcounter{subsubsection}{0} \renewcommand{\thesubsection}{\Asbuk{subsection}}
\renewcommand{\thesubsubsection}{\Asbuk{subsubsection}}
\subsubsection{Домашнее задание 1} \subsection{Домашнее задание 1}
\label{appendix:sem3-hw1} \label{appendix:hw1}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Кот}]{src/s03-hw1-cat.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Кот}]{src/s03-hw1-cat.java}
\subsubsection{Домашнее задание 2} \subsection{Домашнее задание 2}
\label{appendix:sem3-hw2} \label{appendix:hw2}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Общий класс животного}]{src/s03-hw2-animal.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Общий класс животного}]{src/s03-hw2-animal.java}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Кот}]{src/s03-hw2-cat.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Кот}]{src/s03-hw2-cat.java}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Собака}]{src/s03-hw2-dog.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Собака}]{src/s03-hw2-dog.java}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Марафон}]{src/s03-hw2-marathon.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Марафон}]{src/s03-hw2-marathon.java}
\subsubsection{Практическое задание 1} \subsection{Практическое задание 1}
\label{appendix:sem3-ct1} \label{appendix:ct1}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Сотрудник}]{src/s03-ct1-employee.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Сотрудник}]{src/s03-ct1-employee.java}
\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}
@ -51,7 +51,7 @@
\end{spreadtab} \end{spreadtab}
\subsection{Подробности} \subsection{Подробности}
\subsubsection*{Организационный момент} \subsubsection{Организационный момент}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения. \item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения.
\item \textbf{Тайминг:} 3-5 минут. \item \textbf{Тайминг:} 3-5 минут.
@ -63,7 +63,7 @@
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Quiz} \subsubsection{Quiz}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь. \item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь.
\item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ). \item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ).
@ -101,7 +101,7 @@
\end{enumerate} \end{enumerate}
\end{itemize} \end{itemize}
\subsubsection*{Рассмотрение ДЗ} \subsubsection{Рассмотрение ДЗ}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара. \item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара.
\item \textbf{Тайминг:} 15-20 минут. \item \textbf{Тайминг:} 15-20 минут.
@ -143,14 +143,14 @@ private static final class RowMismatchException extends RuntimeException {
\item для проверки напишите программу, преобразующую квадратный массив целых чисел 5х5 в сумму чисел в этом массиве, при этом, программа должна выбросить исключение, если строк или столбцов в исходном массиве окажется не 5. \item для проверки напишите программу, преобразующую квадратный массив целых чисел 5х5 в сумму чисел в этом массиве, при этом, программа должна выбросить исключение, если строк или столбцов в исходном массиве окажется не 5.
\textbf{Вариант решения представлен в приложении \ref{appendix:sem4-hw3}} \textbf{Вариант решения представлен в приложении \ref{appendix:hw3}}
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\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}
@ -162,7 +162,7 @@ private static final class RowMismatchException extends RuntimeException {
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 1} \subsubsection{Задание 1}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Написание почти полноценной механики по краткому ТЗ. \item \textbf{Ценность этапа} Написание почти полноценной механики по краткому ТЗ.
\item \textbf{Тайминг} 25-30 минут. \item \textbf{Тайминг} 25-30 минут.
@ -180,7 +180,7 @@ private static final class RowMismatchException extends RuntimeException {
\item В основном классе программы необходимо по-разному обработать исключения. \item В основном классе программы необходимо по-разному обработать исключения.
\item Метод возвращает \code{true}, если значения верны или \code{false} в противном случае. \item Метод возвращает \code{true}, если значения верны или \code{false} в противном случае.
\end{enumerate} \end{enumerate}
\textbf{Вариант исполнения класса в приложении \ref{appendix:sem4-ct1}} \textbf{Вариант исполнения класса в приложении \ref{appendix:ct1}}
\textbf{Вариант маршрута решения задачи} \textbf{Вариант маршрута решения задачи}
@ -256,7 +256,7 @@ public static boolean checkCredentials(String login, String password, String con
\end{itemize} \end{itemize}
\subsubsection*{Задание 2} \subsubsection{Задание 2}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Написание наброска пет-проекта, повторение информации об ООП, работа с исключениями. \item \textbf{Ценность этапа} Написание наброска пет-проекта, повторение информации об ООП, работа с исключениями.
\item \textbf{Тайминг} 35-40 минут. \item \textbf{Тайминг} 35-40 минут.
@ -280,7 +280,7 @@ public static boolean checkCredentials(String login, String password, String con
\end{itemize} \end{itemize}
\item Вывести в консоль итоговое количество совершённых покупок после выполнения основного кода приложения. \item Вывести в консоль итоговое количество совершённых покупок после выполнения основного кода приложения.
\end{enumerate} \end{enumerate}
\textbf{Вариант исполнения класса в приложении \ref{appendix:sem4-ct1}} \textbf{Вариант исполнения класса в приложении \ref{appendix:ct1}}
\textbf{Вариант маршрута решения задачи} \textbf{Вариант маршрута решения задачи}
@ -366,7 +366,7 @@ public static Order buy(Customer who, Item what, int howMuch) {
\end{lstlisting} \end{lstlisting}
\end{itemize} \end{itemize}
\subsubsection*{Домашнее задание} \subsubsection{Домашнее задание}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями. \item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
\item \textbf{Тайминг} 5-10 минут. \item \textbf{Тайминг} 5-10 минут.
@ -430,7 +430,7 @@ private static void celebrate(Employee[] emp) {
\end{enumerate} \end{enumerate}
\end{itemize} \end{itemize}
\subsubsection*{Рефлексия и завершение семинара} \subsubsection{Рефлексия и завершение семинара}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать \item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать
\item \textbf{Тайминг:} 5-10 минут \item \textbf{Тайминг:} 5-10 минут
@ -447,21 +447,20 @@ private static void celebrate(Employee[] emp) {
\newpage \newpage
\appendix \appendix
\subsection*{Приложения} \section*{Приложения}
\addcontentsline{toc}{subsection}{Приложения} \addcontentsline{toc}{section}{Приложения}
\setcounter{subsubsection}{0} \renewcommand{\thesubsection}{\Asbuk{subsection}}
\renewcommand{\thesubsubsection}{\Asbuk{subsubsection}}
\subsubsection{Домашнее задание 3} \subsection{Домашнее задание 3}
\label{appendix:sem4-hw3} \label{appendix:hw3}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Основная программа}]{src/s04-hw3-exceptional.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Основная программа}]{src/s04-hw3-exceptional.java}
\subsubsection{Практическое задание 1} \subsection{Практическое задание 1}
\label{appendix:sem4-ct1} \label{appendix:ct1}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Логин}]{src/s04-ct1-sign.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Логин}]{src/s04-ct1-sign.java}
\subsubsection{Практическое задание 2} \subsection{Практическое задание 2}
\label{appendix:sem4-ct2} \label{appendix:ct2}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Магазин}]{src/s04-ct2-shop.java} \lstinputlisting[language=Java,style=JCodeStyle,caption={Магазин}]{src/s04-ct2-shop.java}
\end{document} \end{document}

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/1zW_qrNiH5xH0jRZApzWQWH3eC_qJuzRJAPPsnpNDSig}{Презентация} для преподавателя, ведущего семинар; \item \href{https://docs.google.com/presentation/d/}{Презентация} для преподавателя, ведущего семинар;
\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,21 +31,15 @@
\hline \hline
@ Quiz & 5 & @ 6-18 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (6 вопросов, по минуте на ответ) \\ @ Quiz & 5 & @ 6-18 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (6 вопросов, по минуте на ответ) \\
\hline \hline
@ Рассмотрение ДЗ лекции & 10 & @ 19-27 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\ @ Рассмотрение ДЗ лекции & 10 & @ 19-23 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\
\hline \hline
@ Вопросы и ответы & 10 & @ 28 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\ @ Вопросы и ответы & 10 & @ 24 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\
\hline \hline
@ Задание 1 & 10 & @ 29-33 & @ Сохранение состояния приложения между запусками \\ @ Задание 1 & 30 & @ 25-35 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\
\hline \hline
@ Задание 2 & 15 & @ 34-37 & @ Загрузка состояния приложения при запуске \\ @ Перерыв (если нужен) & 5 & @ 36 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\
\hline \hline
@ Перерыв (если нужен) & 5 & @ 38 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\ @ Задание 2 & 40 & @ 37-49 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\
\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
@ -56,7 +50,7 @@
\end{spreadtab} \end{spreadtab}
\subsection{Подробности} \subsection{Подробности}
\subsubsection*{Организационный момент} \subsubsection{Организационный момент}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения. \item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения.
\item \textbf{Тайминг:} 3-5 минут. \item \textbf{Тайминг:} 3-5 минут.
@ -68,7 +62,7 @@
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Quiz} \subsubsection{Quiz}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь. \item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь.
\item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ). \item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ).
@ -106,7 +100,7 @@
\end{enumerate} \end{enumerate}
\end{itemize} \end{itemize}
\subsubsection*{Рассмотрение ДЗ} \subsubsection{Рассмотрение ДЗ}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара. \item \textbf{Цель этапа:} Пояснить не очевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара.
\item \textbf{Тайминг:} 15-20 минут. \item \textbf{Тайминг:} 15-20 минут.
@ -286,9 +280,9 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\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}
@ -300,10 +294,15 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 1}
% чтение содержимого текущей папки (*указанной папки)
% batch prefix adder ('file1 file2 file3' 'prefix')
% программа заменяющая символ в файле, сохраняющая результат в новый файл (*заменяющая слово)
\subsubsection{Задание 1}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Сохранение состояния приложения между запусками \item \textbf{Ценность этапа} Сохранение состояния приложения между запусками
\item \textbf{Тайминг} 10-15 мин \item \textbf{Тайминг} 15-20 мин
\item \textbf{Действия преподавателя} \item \textbf{Действия преподавателя}
\begin{itemize} \begin{itemize}
\item Выдать задание студентам; \item Выдать задание студентам;
@ -344,12 +343,29 @@ for (int i = 0; i < ar0.length; i++) {
fos.write(0); fos.write(0);
} }
fos.flush(); fos.flush();
fos.close();
\end{lstlisting}
\item [$*_2$] Предположить, что числа в исходном массиве имеют диапазон $[0, 3]$, и представляют собой, например, состояния ячеек поля для игры в крестики-нолики, где 0 -- это пустое поле, 1 -- это поле с крестиком, 2 -- это поле с ноликом, 3 -- резервное значение. Такое предположение позволит хранить в одном числе типа \code{int} всё поле 3х3. Записать в файл 9 значений так, чтобы они заняли три байта.
\textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle]
int[] ar2 = {0,1,2,3,0,1,2,3,0};
FileOutputStream fos = new FileOutputStream("save1.out");
for (int b = 0; b < 3; b++) { // write to 3 bytes
byte wr = 0;
for (int v = 0; v < 3; v++) { // write by 3 values in each
wr += (byte) (ar2[3 * b + v] << (v * 2));
}
fos.write(wr);
}
fos.flush();
fos.close(); fos.close();
\end{lstlisting} \end{lstlisting}
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 2} \subsubsection{Задание 2}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Загрузка состояния приложения при запуске \item \textbf{Ценность этапа} Загрузка состояния приложения при запуске
\item \textbf{Тайминг} 15-20 мин \item \textbf{Тайминг} 15-20 мин
@ -379,7 +395,7 @@ fis.close();
System.out.println(Arrays.toString(ar00)); System.out.println(Arrays.toString(ar00));
\end{lstlisting} \end{lstlisting}
\item [$*_1$] Прочитать данные из файла с числами, предполагая, что разделитель -- это число 0. \item [$*_1$] Прочитать из файла с числами, предполагая, что разделитель -- это число 0.
\textbf{Вариант решения} \textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle] \begin{lstlisting}[language=Java,style=JCodeStyle]
@ -398,143 +414,31 @@ fis.close();
System.out.println(Arrays.toString(ar10)); System.out.println(Arrays.toString(ar10));
\end{lstlisting} \end{lstlisting}
\end{itemize}
\end{itemize}
\subsubsection*{Задание 3} \item [$*_2$] Прочитать из файла, полученного в результате выполнения задания $1*_2$.
\begin{itemize}
\item \textbf{Ценность этапа} Работа с текстом (автоматизированный поиск и замена текста в файле или группе файлов)
\item \textbf{Тайминг} 10-15 мин
\item \textbf{Действия преподавателя}
\begin{itemize}
\item Выдать задание студентам;
\item Подробно объяснить, что именно требуется от студентов, избегая упоминания конкретных языковых конструкций;
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдавать группе задания «со звёздочкой».
\end{itemize}
\item \textbf{Задание}:
\begin{itemize}
\item Написать программу заменяющую указанный символ в текстовом файле на пробел, сохраняющую получившийся текст в новый файл.
\textbf{Вариант решения} \textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle] \begin{lstlisting}[language=Java,style=JCodeStyle]
FileInputStream fis = new FileInputStream("Main.java"); int[] ar20 = new int[9];
int i;
char what = ',';
char to = '!';
FileOutputStream fos = new FileOutputStream("Main.java.new");
while ((i = fis.read()) != -1) { FileInputStream fis = new FileInputStream("save1.out");
if (i == what) int b;
fos.write(to); int i = 0;
else while ((b = fis.read()) != -1) {
fos.write(i); for (int v = 0; v < 3; ++v) { // 3 values of four possible
} ar20[i++] = b >> (v * 2) & 0x3;
fos.close();
\end{lstlisting}
\item [$*_1$] Модифицировать алгоритм поиска замены символа так, чтобы программа осуществляла замену слова (последовательного набора символов) в исходном файле и записывала результат в новый файл.
\textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle]
String search = "Hello";
String l = "Goodbye";
FileInputStream fis = new FileInputStream("Main.java");
FileOutputStream fos = new FileOutputStream("Main.java.new");
int ch;
StringBuilder sb = new StringBuilder();
while ((ch = fis.read()) != -1) {
sb.append((char) ch);
if (sb.length() == search.length()) {
if (sb.toString().equals(search)) {
fos.write(l.getBytes());
sb.delete(0, search.length());
} else {
fos.write(sb.charAt(0));
sb.deleteCharAt(0);
}
} }
} }
fos.write(sb.toString().getBytes()); fis.close();
\end{lstlisting}
System.out.println(Arrays.toString(ar20));
\end{lstlisting}
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
\subsubsection*{Задание 4} \subsubsection{Домашнее задание}
\begin{itemize}
\item \textbf{Ценность этапа} Работа с файловой системой
\item \textbf{Тайминг} 15-20 мин
\item \textbf{Действия преподавателя}
\begin{itemize}
\item Выдать задание студентам;
\item Подробно объяснить, что именно требуется от студентов, избегая упоминания конкретных языковых конструкций;
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдавать группе задания «со звёздочкой».
\end{itemize}
\item \textbf{Задание}:
\begin{itemize}
\item Написать программу, читающую и выводящую в содержимое текущей папки .
\textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle]
int count = 0;
File path = new File( new File(".").getCanonicalPath() );
File[] dir = path.listFiles();
for (int i = 0; i < dir.length; i++) {
if (dir[i].isDirectory()) continue;
System.out.println(dir[i]);
}
\end{lstlisting}
\item [$*_1$] Дописать программу таким образом, чтобы она рекурсивно выводила содержимое не только текущей папки, но и вложенных.
\textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle]
void printContents(String path) throws IOException {
int count = 0;
File fullPath = new File(new File(path).getCanonicalPath() );
File[] dir = fullPath.listFiles();
for (int i = 0; i < dir.length; i++) {
if (dir[i].isDirectory()) printContents(dir[i].toString());
System.out.println(dir[i]);
}
}
\end{lstlisting}
\begin{lstlisting}[language=Java,style=JCodeStyle]
void printContents(".");
\end{lstlisting}
\end{itemize}
\end{itemize}
\subsubsection*{Задание 5 (необязательное)}
\begin{itemize}
\item \textbf{Ценность этапа} Описание часто недостающих механик операционной системы по «массовой» работе с файлами.
\item \textbf{Тайминг} 20-25 мин
\item \textbf{Действия преподавателя}
\begin{itemize}
\item Выдать задание студентам;
\item Подробно объяснить, что именно требуется от студентов, избегая упоминания конкретных языковых конструкций;
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдавать группе задания «со звёздочкой».
\end{itemize}
\item \textbf{Задание}: Написать функцию, добавляющую префикс к каждому из набора файлов, названия которых переданы ей в качестве параметров через пробел.
\textbf{Вариант решения}
\begin{lstlisting}[language=Java,style=JCodeStyle]
String[] a = {"Main.java", "a.txt"};
for (String fileName : a) {
Path file = Path.of(fileName);
if (Files.exists(file)) {
Files.move(file, Paths.get("pre_" + file), REPLACE_EXISTING);
} else {
System.out.printf("No file with name '%s'", fileName);
}
}
\end{lstlisting}
\end{itemize}
\subsubsection*{Домашнее задание}
\begin{itemize} \begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями. \item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
\item \textbf{Тайминг} 5-10 минут. \item \textbf{Тайминг} 5-10 минут.
@ -550,54 +454,55 @@ for (String fileName : a) {
\item [5-25 мин] Выполнить все задания семинара, если они не были решены, без ограничений по времени; \item [5-25 мин] Выполнить все задания семинара, если они не были решены, без ограничений по времени;
\textbf{Все варианты решения приведены в тексте семинара выше} \textbf{Все варианты решения приведены в тексте семинара выше}
\item [15 мин] 1. Написать функцию, создающую резервную копию всех файлов в директории (без поддиректорий) во вновь созданную папку \code{./backup} \item [15 мин] 1. В класс покупателя добавить перечисление с гендерами, добавить в сотрудника свойство «пол» со значением созданного перечисления. Добавить геттеры, сеттеры.
\begin{lstlisting}[language=Java,style=JCodeStyle] \begin{lstlisting}[language=Java,style=JCodeStyle,caption={Свойства сотрудника}]
Files.createDirectory(Path.of("./backup")); enum Genders{MALE, FEMALE};
DirectoryStream<Path> dir = Files.newDirectoryStream(Path.of(".")); // ...
for (Path file : dir) { Genders gender;
if (Files.isDirectory(file)) continue;
Files.copy(file, Path.of("./backup/" + file.toString())); public Employee(String name, String midName, String surName, String phone, String position, int salary, int birth, Genders gender) {
// ...
this.gender = gender;
}
public Genders getGender() {
return gender;
}
public void setGender(Genders gender) {
this.gender = gender;
} }
\end{lstlisting} \end{lstlisting}
\item [20-25 мин] 2. Предположить, что числа в исходном массиве из 9 элементов имеют диапазон $[0, 3]$, и представляют собой, например, состояния ячеек поля для игры в крестики-нолики, где 0 -- это пустое поле, 1 -- это поле с крестиком, 2 -- это поле с ноликом, 3 -- резервное значение. Такое предположение позволит хранить в одном числе типа \code{int} всё поле 3х3. Записать в файл 9 значений так, чтобы они заняли три байта. \item [20-25 мин] 2. Добавить в основную программу перечисление с праздниками (нет праздника, Новый Год, 8 марта, 23 февраля), написать метод, принимающий массив сотрудников, поздравляющий всех сотрудников с Новым Годом, женщин с 8 марта, а мужчин с 23 февраля, если сегодня соответствующий день.
\begin{lstlisting}[language=Java,style=JCodeStyle,caption={Праздники}]
enum Parties{NONE, NEW_YEAR, MARCH_8, FEB_23}
private static final Parties today = Parties.NONE;
\begin{lstlisting}[language=Java,style=JCodeStyle] private static void celebrate(Employee[] emp) {
int[] ar2 = {0,1,2,3,0,1,2,3,0}; for (int i = 0; i < emp.length; i++) {
switch (today) {
FileOutputStream fos = new FileOutputStream("save1.out"); case NEW_YEAR:
for (int b = 0; b < 3; b++) { // write to 3 bytes System.out.println(emp[i].name + ", happy New Year!");
byte wr = 0; break;
for (int v = 0; v < 3; v++) { // write by 3 values in each case FEB_23:
wr += (byte) (ar2[3 * b + v] << (v * 2)); if (emp[i].gender == Employee.Genders.MALE)
System.out.println(emp[i].name + ", happy February 23rd!");
break;
case MARCH_8:
if (emp[i].gender == Employee.Genders.FEMALE)
System.out.println(emp[i].name + ", happy march 8th!");
break;
default:
System.out.println(emp[i].name + ", celebrate this morning!");
} }
fos.write(wr);
}
fos.flush();
fos.close();
\end{lstlisting}
\item [20-25 мин] 3. Прочитать числа из файла, полученного в результате выполнения задания 2.
\begin{lstlisting}[language=Java,style=JCodeStyle]
int[] ar20 = new int[9];
FileInputStream fis = new FileInputStream("save1.out");
int b;
int i = 0;
while ((b = fis.read()) != -1) {
for (int v = 0; v < 3; ++v) { // 3 values of four possible
ar20[i++] = b >> (v * 2) & 0x3;
} }
} }
fis.close();
System.out.println(Arrays.toString(ar20));
\end{lstlisting} \end{lstlisting}
\end{enumerate} \end{enumerate}
\end{itemize} \end{itemize}
\subsubsection*{Рефлексия и завершение семинара} \subsubsection{Рефлексия и завершение семинара}
\begin{itemize} \begin{itemize}
\item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать \item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать
\item \textbf{Тайминг:} 5-10 минут \item \textbf{Тайминг:} 5-10 минут
@ -613,4 +518,13 @@ System.out.println(Arrays.toString(ar20));
\end{itemize} \end{itemize}
\newpage \newpage
\appendix
\section*{Приложения}
\addcontentsline{toc}{section}{Приложения}
\renewcommand{\thesubsection}{\Asbuk{subsection}}
\subsection{Домашнее задание 3}
\label{appendix:hw3}
\lstinputlisting[language=Java,style=JCodeStyle,caption={Основная программа}]{src/s04-hw3-exceptional.java}
\end{document} \end{document}

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 374 KiB

After

Width:  |  Height:  |  Size: 374 KiB

View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 234 KiB

View File

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 255 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

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

File diff suppressed because it is too large Load Diff