made jtc2 as presentation, minor content additions
This commit is contained in:
parent
bd35114bf7
commit
06be52bbf2
Binary file not shown.
|
@ -0,0 +1,99 @@
|
||||||
|
\documentclass[j-spec.tex]{subfiles}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\section{Специализация: данные и функции}
|
||||||
|
\subsection{В предыдущем разделе}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Краткая история (причины возникновения);
|
||||||
|
\item инструментарий, выбор версии;
|
||||||
|
\item CLI;
|
||||||
|
\item структура проекта;
|
||||||
|
\item документирование;
|
||||||
|
\item некоторые интересные способы сборки проектов.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{В этом разделе}
|
||||||
|
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
|
||||||
|
|
||||||
|
\subsection{Данные}
|
||||||
|
\subsubsection{Типы, преобразование типов}
|
||||||
|
%константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными)
|
||||||
|
|
||||||
|
Хранение данных в Java осуществляется привычным для программиста образом: в переменных и константах. Языки программирования бывают типизированными и нетипизированными (бестиповыми).
|
||||||
|
|
||||||
|
Отсутствие типизации в основном присуще старым и низкоуровневым языкам программирования, например, Forth, некоторые ассемблеры. Все данные в таких языках считаются цепочками бит произвольной длины и, как следует из названия, не делятся на типы. Работа с ними часто труднее, и при чтении кода не всегда ясно, о каком типе переменной идет речь. При этом часто безтиповые языки работают быстрее типизированных, но описывать с их помощью большие проекты со сложными взаимосвязями довольно утомительно.
|
||||||
|
\begin{frm}
|
||||||
|
\info Java является языком со \textbf{строгой} (также можно встретить термин «\textbf{сильной}») \textbf{явной} \textbf{статической} типизацией.
|
||||||
|
\end{frm}
|
||||||
|
Что это значит?
|
||||||
|
\begin{itemize}
|
||||||
|
\item Статическая - у каждой переменной должен быть тип и мы этот тип поменять не можем. Этому свойству противопоставляется динамическая типизация;
|
||||||
|
\item Явная - при создании переменной мы должны ей обязательно присвоить какой-то тип, явно написав это в коде. Бывают языки с неявной типизацией, например, Python;
|
||||||
|
\item Строгая(сильная) - невозможно смешивать разнотипные данные. С другой стороны, существует JavaScript, в котором запись \code{2 + true} выдаст результат \code{3}.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Все данные в Java делятся на две основные категории: примитивные и ссылочные.
|
||||||
|
|
||||||
|
Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными);
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\begin{tabular}{|p{17mm}|p{80mm}|p{55mm}|}
|
||||||
|
\hline
|
||||||
|
Тип & Пояснение & Диапазон \\
|
||||||
|
\hline
|
||||||
|
byte & Самый маленький из адресуемых типов, 8 бит, знаковый & [\textminus128, +127] \\
|
||||||
|
\hline
|
||||||
|
short & Тип короткого целого числа, 16 бит, знаковый & [\textminus32 768, +32 767]\\
|
||||||
|
\hline
|
||||||
|
char & Целочисленный тип для хранения символов в кодировке UTF-8, 16 бит, беззнаковый & [0, +65 535]\\
|
||||||
|
\hline
|
||||||
|
int & Основной тип целого числа, 32 бита, знаковый & [\textminus2 147 483 648, +2 147 483 647] \\
|
||||||
|
\hline
|
||||||
|
long & Тип длинного целого числа, 64 бита, знаковый & [\textminus9 223 372 036 854 775 808, +9 223 372 036 854 775 807] \\
|
||||||
|
\hline
|
||||||
|
float & Тип вещественного числа с плавающей запятой (одинарной точности, 32 бита) & \\
|
||||||
|
\hline
|
||||||
|
double & Тип вещественного числа с плавающей запятой (двойной точности, 64 бита) & \\
|
||||||
|
\hline
|
||||||
|
boolean & Логический тип данных & true, false \\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
\caption{Основные типы данных в языке Java}
|
||||||
|
\label{tab:types}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы;
|
||||||
|
|
||||||
|
Функции: параметры, возвращаемые значения, перегрузка функций;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection{Антипаттерн "магические числа"}
|
||||||
|
В прошлом примере мы использовали антипаттерн - плохой стиль для написания кода. Число 18 используется в коде коде без пояснений. Такой антипаттерн называется "магическое число". Рекомендуется помещать числа в константы, которые храняться в начале файла.
|
||||||
|
ADULT = 18
|
||||||
|
age = float(input('Ваш возраст: '))
|
||||||
|
how\_old = age - ADULT
|
||||||
|
print(how\_old, "лет назад ты стал совершеннолетним")
|
||||||
|
|
||||||
|
Плюсом такого подхода является возможность легко корректировать большие проекты. Представьте, что в вашем коде несколько тысяч строк, а число 18 использовалось несколько десятков раз.
|
||||||
|
● При развертывании проекта в стране, где совершеннолетием считается 21 год вы будете перечитывать весь код в поисках магических "18" и править их на "21". В случае с константой изменить число нужно в одном месте.
|
||||||
|
● Дополнительный сложности могут возникнуть, если в коде будет 18 как возраст совершеннолетия и 18 как коэффициент для рассчёт чего-либо. Теперь править кода ещё сложнее, ведь возраст изменился, а коэффициент -нет. В случае с сохранением значений в константы мы снова меняем число в одном месте.
|
||||||
|
|
||||||
|
\subsection{Базовый функционал языка}
|
||||||
|
\subsubsection{Математические операторы}
|
||||||
|
\subsubsection{Условия}
|
||||||
|
\subsubsection{Циклы}
|
||||||
|
\subsubsection{Бинарные арифметические операторы};
|
||||||
|
|
||||||
|
\subsection{Функции}
|
||||||
|
параметры, возвращаемые значения, перегрузка функций
|
||||||
|
|
||||||
|
\subsection*{Задания к семинару}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода);
|
||||||
|
\item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд;
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
\end{document}
|
Binary file not shown.
|
@ -57,61 +57,56 @@
|
||||||
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
|
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
|
||||||
}
|
}
|
||||||
|
|
||||||
\subsection{Данные}
|
\begin{frame}
|
||||||
\subsubsection{Типы, преобразование типов}
|
\frametitle{Типы, преобразование типов}
|
||||||
%константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными)
|
\end{frame}
|
||||||
|
\note{
|
||||||
|
Хранение данных в Java осуществляется привычным для программиста образом: в переменных и константах, желательно именованных, но об этом позже, для начала поговорим о том, какие вообще бывают языки относительно типов и собственно типы.
|
||||||
|
|
||||||
Хранение данных в Java осуществляется привычным для программиста образом: в переменных и константах. Языки программирования бывают типизированными и нетипизированными (бестиповыми).
|
Итак, языки программирования бывают типизированными и нетипизированными (бестиповыми). Про нетипизированные языки мы много говорить не будем, они не представляют интереса не только для джава программистов, но и в целом, в современном программировании.
|
||||||
|
}
|
||||||
|
|
||||||
Отсутствие типизации в основном присуще старым и низкоуровневым языкам программирования, например, Forth, некоторые ассемблеры. Все данные в таких языках считаются цепочками бит произвольной длины и, как следует из названия, не делятся на типы. Работа с ними часто труднее, и при чтении кода не всегда ясно, о каком типе переменной идет речь. При этом часто безтиповые языки работают быстрее типизированных, но описывать с их помощью большие проекты со сложными взаимосвязями довольно утомительно.
|
\begin{frame}
|
||||||
\begin{frm}
|
\frametitle{Типы, преобразование типов}
|
||||||
\info Java является языком со \textbf{строгой} (также можно встретить термин «\textbf{сильной}») \textbf{явной} \textbf{статической} типизацией.
|
рисунок перфокарты
|
||||||
\end{frm}
|
\end{frame}
|
||||||
|
\note{
|
||||||
|
Отсутствие типизации в основном присуще чрезвычайно старым и низкоуровневым языкам программирования, например, Forth и некоторым ассемблерам. Все данные в таких языках считаются цепочками бит произвольной длины и, как следует из названия, не делятся на типы. Работа с ними часто труднее, и при чтении кода не всегда ясно, о каком типе переменной идет речь. При этом часто безтиповые языки работают быстрее типизированных, но описывать с их помощью большие проекты со сложными взаимосвязями довольно утомительно.
|
||||||
|
}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\frametitle{Типы, преобразование типов}
|
||||||
|
Java является языком со \textbf{строгой} (также можно встретить термин «\textbf{сильной}») \textbf{явной} \textbf{статической} типизацией.
|
||||||
|
\end{frame}
|
||||||
|
\note{
|
||||||
Что это значит?
|
Что это значит?
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Статическая - у каждой переменной должен быть тип и мы этот тип поменять не можем. Этому свойству противопоставляется динамическая типизация;
|
\item Статическая типизация означает, что у каждой переменной должен быть тип и мы этот тип поменять не можем. Этому свойству противопоставляется динамическая типизация, где мы можем назначить переменной сначала один тип, потом заменить на другой;
|
||||||
\item Явная - при создании переменной мы должны ей обязательно присвоить какой-то тип, явно написав это в коде. Бывают языки с неявной типизацией, например, Python;
|
\item Термин явная типизация говорит нам о том, что при создании переменной мы должны ей обязательно присвоить какой-то тип, явно написав это в коде. Бывают языки с неявной типизацией, например, Python, там можно как указать тип, так его и не указывать, язык сам попробуед по контексту догадаться, что вы имели ввиду;
|
||||||
\item Строгая(сильная) - невозможно смешивать разнотипные данные. С другой стороны, существует JavaScript, в котором запись \code{2 + true} выдаст результат \code{3}.
|
\item Строгая (или иначе сильная) типизация означает, что невозможно смешивать разнотипные данные. Тут есть некоторая оговорка, о которой мы поговорим позже, но с формальной точки зрения язык джава - это язык со строгой типизацией. С другой стороны, существует JavaScript, в котором запись 2 + true выдаст результат 3.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
}
|
||||||
|
|
||||||
Все данные в Java делятся на две основные категории: примитивные и ссылочные.
|
\begin{frame}
|
||||||
|
\frametitle{Типы, преобразование типов}
|
||||||
|
таблица из методички «Основные типы данных в языке Java»
|
||||||
|
\end{frame}
|
||||||
|
\note{
|
||||||
|
Все данные в Java делятся на две основные категории: примитивные и ссылочные. Примитивных всего восемь и это, наверное, первое, что спрашивают на джуниорском собеседовании, это байт, шорт, инт, лонг, флоут, дабл, чар и булин. как вы можете заметить в этой таблице, каждый из типов имеет диапазон значений, а значит основное их отличие в объёме занимаемой памяти.
|
||||||
|
}
|
||||||
|
|
||||||
Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными);
|
Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными);
|
||||||
|
|
||||||
\begin{figure}[H]
|
|
||||||
\centering
|
|
||||||
\begin{tabular}{|p{17mm}|p{80mm}|p{55mm}|}
|
|
||||||
\hline
|
|
||||||
Тип & Пояснение & Диапазон \\
|
|
||||||
\hline
|
|
||||||
byte & Самый маленький из адресуемых типов, 8 бит, знаковый & [\textminus128, +127] \\
|
|
||||||
\hline
|
|
||||||
short & Тип короткого целого числа, 16 бит, знаковый & [\textminus32 768, +32 767]\\
|
|
||||||
\hline
|
|
||||||
char & Целочисленный тип для хранения символов в кодировке UTF-8, 16 бит, беззнаковый & [0, +65 535]\\
|
|
||||||
\hline
|
|
||||||
int & Основной тип целого числа, 32 бита, знаковый & [\textminus2 147 483 648, +2 147 483 647] \\
|
|
||||||
\hline
|
|
||||||
long & Тип длинного целого числа, 64 бита, знаковый & [\textminus9 223 372 036 854 775 808, +9 223 372 036 854 775 807] \\
|
|
||||||
\hline
|
|
||||||
float & Тип вещественного числа с плавающей запятой (одинарной точности, 32 бита) & \\
|
|
||||||
\hline
|
|
||||||
double & Тип вещественного числа с плавающей запятой (двойной точности, 64 бита) & \\
|
|
||||||
\hline
|
|
||||||
boolean & Логический тип данных & true, false \\
|
|
||||||
\hline
|
|
||||||
\end{tabular}
|
|
||||||
\caption{Основные типы данных в языке С}
|
|
||||||
\label{tab:types}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы;
|
Базовые функции языка: математические операторы, условия, циклы, бинарные операторы;
|
||||||
|
|
||||||
Функции: параметры, возвращаемые значения, перегрузка функций;
|
Функции: параметры, возвращаемые значения, перегрузка функций;
|
||||||
|
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
\subsubsection{Антипаттерн "магические числа"}
|
\frametitle{Антипаттерн «магические числа»}
|
||||||
|
кусок Петренко, спасибо ему за идею
|
||||||
|
\end{frame}
|
||||||
|
\note{
|
||||||
В прошлом примере мы использовали антипаттерн - плохой стиль для написания кода. Число 18 используется в коде коде без пояснений. Такой антипаттерн называется "магическое число". Рекомендуется помещать числа в константы, которые храняться в начале файла.
|
В прошлом примере мы использовали антипаттерн - плохой стиль для написания кода. Число 18 используется в коде коде без пояснений. Такой антипаттерн называется "магическое число". Рекомендуется помещать числа в константы, которые храняться в начале файла.
|
||||||
ADULT = 18
|
ADULT = 18
|
||||||
age = float(input('Ваш возраст: '))
|
age = float(input('Ваш возраст: '))
|
||||||
|
@ -119,23 +114,20 @@ how\_old = age - ADULT
|
||||||
print(how\_old, "лет назад ты стал совершеннолетним")
|
print(how\_old, "лет назад ты стал совершеннолетним")
|
||||||
|
|
||||||
Плюсом такого подхода является возможность легко корректировать большие проекты. Представьте, что в вашем коде несколько тысяч строк, а число 18 использовалось несколько десятков раз.
|
Плюсом такого подхода является возможность легко корректировать большие проекты. Представьте, что в вашем коде несколько тысяч строк, а число 18 использовалось несколько десятков раз.
|
||||||
● При развертывании проекта в стране, где совершеннолетием считается 21 год вы будете перечитывать весь код в поисках магических "18" и править их на "21". В случае с константой изменить число нужно в одном месте.
|
При развертывании проекта в стране, где совершеннолетием считается 21 год вы будете перечитывать весь код в поисках магических "18" и править их на "21". В случае с константой изменить число нужно в одном месте.
|
||||||
● Дополнительный сложности могут возникнуть, если в коде будет 18 как возраст совершеннолетия и 18 как коэффициент для рассчёт чего-либо. Теперь править кода ещё сложнее, ведь возраст изменился, а коэффициент -нет. В случае с сохранением значений в константы мы снова меняем число в одном месте.
|
Дополнительный сложности могут возникнуть, если в коде будет 18 как возраст совершеннолетия и 18 как коэффициент для рассчёт чего-либо. Теперь править кода ещё сложнее, ведь возраст изменился, а коэффициент -нет. В случае с сохранением значений в константы мы снова меняем число в одном месте.
|
||||||
|
}
|
||||||
|
|
||||||
\subsection{Базовый функционал языка}
|
%константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными)
|
||||||
\subsubsection{Математические операторы}
|
|
||||||
\subsubsection{Условия}
|
|
||||||
\subsubsection{Циклы}
|
|
||||||
\subsubsection{Бинарные арифметические операторы};
|
|
||||||
|
|
||||||
\subsection{Функции}
|
% \subsection{Базовый функционал языка}
|
||||||
параметры, возвращаемые значения, перегрузка функций
|
% \subsubsection{Математические операторы}
|
||||||
|
% \subsubsection{Условия}
|
||||||
|
% \subsubsection{Циклы}
|
||||||
|
% \subsubsection{Бинарные арифметические операторы};
|
||||||
|
|
||||||
\subsection*{Задания к семинару}
|
% \subsection{Функции}
|
||||||
\begin{itemize}
|
% параметры, возвращаемые значения, перегрузка функций
|
||||||
\item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода);
|
|
||||||
\item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд;
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
Loading…
Reference in New Issue