diff --git a/build/jc3-03.pdf b/build/jc3-03.pdf
index 9540506..7c1a103 100644
Binary files a/build/jc3-03.pdf and b/build/jc3-03.pdf differ
diff --git a/build/jtc2-02a.pdf b/build/jtc2-02a.pdf
index 40378c4..d835a4e 100644
Binary files a/build/jtc2-02a.pdf and b/build/jtc2-02a.pdf differ
diff --git a/jc3-03.tex b/jc3-03.tex
index a78712a..e8403bd 100644
--- a/jc3-03.tex
+++ b/jc3-03.tex
@@ -1,6 +1,7 @@
\documentclass[j-spec.tex]{subfiles}
\begin{document}
+\setcounter{section}{2}
\pagestyle{plain}
\sloppy
\tableofcontents
@@ -13,7 +14,7 @@
\begin{itemize}
\item \nom{Класс}{определяет форму и сущность объекта и является логической конструкцией, на основе которой построен весь язык Java. Определяет новый тип данных};
\item \nom{Объект}{конкретный экземпляр класса, созданный в программе};
-\item \nom{Статика}{(статический контекст) - };
+\item \nom{Статика}{(статический контекст) static - (от греч. неподвижный) — раздел механики, в котором изучаются условия равновесия механических систем под действием приложенных к ним сил и возникших моментов. В языке программирования Java - принадлежность поля и его значения не объекту, а классу, и, как следствие, доступность такого поля и его значения в единственном экземпляре всем объектам класса.};
\item \nom{Стек}{- };
\item \nom{Куча}{- };
\item \nom{Сборщик мусора}{- };
@@ -93,10 +94,10 @@ public class Cat {
Для новичка важно не запутаться, класс кота мы описали в отдельном файле, а создавать объекты и совершать манипуляции следует в основном классе программы, не может же кот назначить имя сам себе.
\end{frm}
-Мы рассказали программе, что такое коты, теперь если мы хотим создать в нашем приложении конкретного кота, следует воспользоваться оператором \code{new Cat();} в основном классе программы. Более подробно разберём, что происходит в этой строке, чуть позже, пока же нам достаточно знать, что мы создали объект типа \code{Cat} (экземпляр класса \code{Cat}), и запомнить эту конструкцию. Для того чтобы с ним (экземпляром) работать, можем положить его в переменную, которой дать идентификатор \code{cat1}.
+Мы рассказали программе, что такое коты, теперь если мы хотим создать в нашем приложении конкретного кота, следует воспользоваться оператором \code{new Cat();} в основном классе программы. Более подробно разберём, что происходит в этой строке, чуть позже, пока же нам достаточно знать, что мы создали объект типа \code{Cat} (экземпляр класса \code{Cat}), и запомнить эту конструкцию. Для того чтобы с ним (экземпляром) работать, можем положить его в переменную, которой дать идентификатор \code{cat1}. При создании объекта полям присваиваются значения по умолчанию (нули для числовых переменных и \code{false} для булевых).
\begin{lstlisting}[language=Java,style=JCodeStyle]
- Сat cat0;
+ Cat cat0; // cat0 = null;
cat0 = new Cat();
Cat cat1 = new Cat();
\end{lstlisting}
@@ -112,11 +113,11 @@ public class Cat {
\begin{lstlisting}[language=Java,style=JCodeStyle]
package ru.gb.jcore;
-public class Main{
+public class Main {
public static void main(String[] args) {
Cat cat1 = new Cat();
Cat cat2 = new Cat();
-
+
cat1.name = "Barsik";
cat1.color = "White";
cat1.age = 4;
@@ -124,13 +125,13 @@ public class Main{
cat2.name = "Murzik";
cat2.color = "Black";
cat2.age = 6;
-
+
System.out.println("Cat1 named: " + cat1.name +
- " is " + cat1.color +
- " has age: " + cat1.age);
+ " is " + cat1.color +
+ " has age: " + cat1.age);
System.out.println("Cat2 named: " + cat2.name +
- " is " + cat2.color +
- " has age: " + cat2.age);
+ " is " + cat2.color +
+ " has age: " + cat2.age);
}
}
\end{lstlisting}
@@ -145,9 +146,9 @@ Cat2 named: Murzik is Black has age: 6
\begin{figure}[H]
\centering
- \def\svgscale{0.42}
- \fontsize{6}{1}\selectfont
- \input{pics/jc-03-class-obj-fields.svg}
+ \def\svgscale{1.01}
+ \fontsize{12}{1}\selectfont
+ \includesvg{pics/jc-03-class-obj-fields.svg}
\caption{Логическая структура отношения класс-объект}
\label{pic:class-obj-fields}
\end{figure}
@@ -164,7 +165,7 @@ Cat2 named: Murzik is Black has age: 6
Для непосредственного создания объекта применяется оператор \code{new}, который динамически резервирует память под объект и возвращает ссылку на него, в общих чертах эта ссылка представляет собой адрес объекта в памяти, зарезервированной оператором \code{new}.
\begin{lstlisting}[language=Java,style=JCodeStyle]
- Сat cat1; // cat1 = null;
+ Cat cat1; // cat1 = null;
cat1 = new Cat();
Cat cat2 = new Cat();
\end{lstlisting}
@@ -194,21 +195,28 @@ Cat2 named: Murzik is Black has age: 6
cat2.age = 6;
System.out.println("Cat1 named: " + cat1.name +
- " is " + cat1.color +
- " has age: " + cat1.age);
+ " is " + cat1.color +
+ " has age: " + cat1.age);
System.out.println("Cat2 named: " + cat2.name +
- " is " + cat2.color +
- " has age: " + cat2.age);
+ " is " + cat2.color +
+ " has age: " + cat2.age);
\end{lstlisting}
На первый взгляд может показаться, что переменной \code{cat2} присваивается ссылка на копию объекта \code{cat1}, т.е. переменные \code{cat1} и \code{cat2} будут ссылаться на разные объекты в памяти. Но это не так. На самом деле \code{cat1} и \code{cat2} будут ссылаться на один и тот же объект. Присваивание переменной \code{cat1} значения переменной \code{cat2} не привело к выделению области памяти или копированию объекта, лишь к тому, что переменная \code{cat2} содержит ссылку на тот же объект, что и переменная \code{cat1}. Это явление дополнительно подчёркивает ссылочную природу данных в языке Java.
Таким образом, любые изменения, внесённые в объект по ссылке \code{cat2}, окажут влияние на объект, на который ссылается переменная \code{cat1}, поскольку \textit{это один и тот же объект в памяти}. Поэтому результатом выполнения кода, где мы как будто бы указали возраст второго кота, равный шести годам, станут строки, показывающие, что по обеим ссылкам оказался кот возраста шесть лет с именем Мурзика.
+\begin{verbatim}
+Cat1 named: Murzik is Black has age: 6
+Cat2 named: Murzik is Black has age: 6
+\end{verbatim}
+
\begin{frm}\info
- Множественные ссылки на один и тот же объект в памяти довольно легко себе представить как ярлыки для запуска одной и той же программы на рабочем столе и в меню быстрого запуска. Или если на один и тот же шкафчик в раздевалке наклеить два номера - сам шкафчик можно будет найти по двум ссылкам на него.
+Множественные ссылки на один и тот же объект в памяти довольно легко себе представить как ярлыки для запуска одной и той же программы на рабочем столе и в меню быстрого запуска. Или если на один и тот же шкафчик в раздевалке наклеить два номера - сам шкафчик можно будет найти по двум ссылкам на него.
\end{frm}
+Важно всегда перепроверять, какие объекты созданы, а какие имеют множественные ссылки.
+
\subsubsection{Методы}
Ранее было сказано о том, что в языке Java любая программа состоит из классов и функций, которые могут описываться только внутри них. Именно поэтому все функции в языке Java являются методами. А метод - это функция, являющаяся частью некоторого класса, которая может выполнять операции над данными этого класса.
@@ -220,36 +228,14 @@ Cat2 named: Murzik is Black has age: 6
\begin{figure}[H]
\centering
- \def\svgscale{0.42}
- \fontsize{6}{1}\selectfont
- \input{pics/jc-03-class-obj-nostatic.svg}
+ \def\svgscale{1.01}
+ \fontsize{12}{1}\selectfont
+ \includesvg{pics/jc-03-class-obj-nostatic.svg}
\caption{Логическая структура отношения класс-объект}
\label{pic:class-obj-nostatic}
\end{figure}
-Лайвкод 03-метод & Вернёмся к примеру с котиками. Все мы знаем, что котики умеют урчать, мяукать и смешно прыгать. В целях демонстрации мы в описании этих действий просто будем делать разные выводы в консоль, хотя мы и можем научить нашего котика выбирать минимальное значение из массива, но это было бы неожиданно. Итак опишем метод например подать голос и прыгать. \\ \hline
-
-Лайвкод 03-метод-вызов & Обращение к методам выглядит очень похожим на стандартный способом, через точку, как к полям. Теперь когда мы хотим позвать нашего котика, он нам скажет, мяу, я имя котика, а если мы решили что котику надо прыгать, он решит, прилично-ли это - прыгать в его возрасте. Как видно, барсик замечательно прыгает, а мурзик от прыжков воздержался, хотя попрыгать мы попросили их обоих \\ \hline
-
-\subsubsection{Задание для самопроверки}
-\begin{enumerate}
- \item Что такое класс?
- \item Что такое поле класса?
- \item На какие три этапа делится создание объекта?
-\end{enumerate}
-
-\subsection{Стек и куча}
-\subsection{Сборка мусора}
-\subsection{Конструкторы}
-\subsection{Инкапсуляция}
-\subsection{Наследование}
-\subsection{Полиморфизм}
-
-
-\begin{verbatim}
-Cat1 named: Murzik is Black has age: 6
-Cat2 named: Murzik is Black has age: 6
-\end{verbatim}
+Вернёмся к примеру с котиками. Широко известно, что котики умеют урчать, мяукать и смешно прыгать. В целях демонстрации в описании этих действий просто будем делать разные выводы в консоль, хотя возможно и научить котика в программе выбирать минимальное значение из массива, но это было бы, как минимум, неожиданно. Итак опишем метод например подать голос и прыгать.
\begin{lstlisting}[language=Java,style=JCodeStyle]
public class Cat {
@@ -267,6 +253,109 @@ public class Cat {
}
\end{lstlisting}
+Обращение к методам выглядит очень похожим на стандартный способом, через точку, как к полям. Теперь когда появляется необходимость позвать котика, он скажет: «мяу, я имя котика», а если в программе пришло время котику прыгнуть, он решит, прилично ли это -- прыгать в его возрасте.
+
+\begin{lstlisting}[language=Java,style=JCodeStyle]
+package ru.gb.jcore;
+
+public class Main {
+ public static void main(String[] args) {
+ Cat cat1 = new Cat();
+ Cat cat2 = new Cat();
+
+ cat1.name = "Barsik";
+ cat1.color = "White";
+ cat1.age = 4;
+
+ cat2.name = "Murzik";
+ cat2.color = "Black";
+ cat2.age = 6;
+
+ cat1.voice();
+ cat2.voice();
+ cat1.jump();
+ cat2.jump();
+ }
+}
+\end{lstlisting}
+
+\begin{verbatim}
+Barsik meows
+Murzik meows
+Barsik jumps
+\end{verbatim}
+
+Как видно, Барсик замечательно прыгает, а Мурзик от прыжков воздержался, хотя попрыгать программа попросила их обоих.
+
+\subsubsection{Ключевое слово \code{static}}
+В завершение базовой информации о классах и объектах, остановимся на специальном модификаторе \code{static}, делающем переменную или метод «независимыми» от объекта.
+
+\begin{frm}\info
+\textbf{\code{static}} — модификатор, применяемый к полю, блоку, методу или внутреннему классу, он указывает на привязку субъекта к текущему классу.
+\end{frm}
+
+Для использования таких полей и методов, соответственно, объект создавать не нужно. В Java большинство членов служебных классов являются статическими. Возможно использовать это ключевое слово в четырех контекстах:
+\begin{itemize}
+\item статические методы;
+\item статические переменные;
+\item статические вложенные классы;
+\item статические блоки.
+\end{itemize}
+В этом разделе рассмотрим подробнее только первые два пункта, третий опишем чуть позже, а четвёртый потребует от нас знаний, выходящих не только за этот урок, но и за десяток следующих.
+
+\textbf{Статические методы} также называются методами класса, потому что статический метод принадлежит классу, а не его объекту. Нестатические называются методами объекта. Статические методы можно вызывать напрямую через имя класса, не обращаясь к объекту и вообще объект не создавая. Что это и зачем нужно? Например, умение кота мяукать можно вывести в статическое поле, потому что, например, весной можно открыть окно, не увидеть ни одного экземпляра котов, но зато услышать их, и точно знать, что мяукают не дома и не машины, а именно коты.
+
+\begin{figure}[H]
+ \centering
+ \def\svgscale{1.01}
+ \fontsize{12}{1}\selectfont
+ \includesvg{pics/jc-03-class-obj-full.svg}
+ \caption{Логическая структура отношения класс-объект}
+ \label{pic:class-obj-full}
+\end{figure}
+
+Аналогично статическим методам, \textbf{статические поля} принадлежат классу и совершенно ничего «не знают» об объектах.
+
+\begin{frm}\excl
+Важной отличительной чертой статических полей является то, что их значения также хранятся в классе, в отличие от обычных полей, чьи значения хранятся в объектах.
+\end{frm}
+
+Рисунок \hrf{pic:class-obj-full} именно в этом виде автор настоятельно рекомендует если не заучить, то хотя бы хорошо запомнить, он ещё пригодится в дальнейшем обучении и работе. Из этого же изображения можно сделать несколько выводов.
+
+лайвкод 03-статическое-поле-код Помимо того, что статические поля - это полезный инструмент создания общих свойств это ещ§ и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не 6 и не 8. Не создавая никакого барсика будет понятно, что у кота - 4 лапы. Это полезное поведение.
+
+лайвкод 03-статическое-поле-ошибка Посмотрим на опасность. Мы видим, что у каждого кота есть имя, и помним, что коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. Но что если мы по невнимательности добавим свойство статичности к имени кота?
+
+03-статическое-поле-признак Создав тех же самых котов, которых мы создавали весь урок, мы получим двух мурзиков и ни одного барсика. Почему это произошло? По факту переменная у нас одна на всех, и значение тоже одно, а значит каждый раз мы меняем именно его, а все остальные коты ничего не подозревая смотрят на значение общей переменной и бодро его возвращают. Поэтому, чтобы не запутаться, к статическим переменным, как правило, обращаются не по ссылке на объект — cat1.name, а по имени класса — Cat.name.
+
+03-статические-поля К слову, статические переменные — редкость в Java. Вместо них применяют статические константы. Они определяются ключевыми словами static final и по соглашению о внешнем виде кода пишутся в верхнем регистре.
+
+\subsubsection{Задание для самопроверки}
+\begin{enumerate}
+ \item Что такое класс?
+ \item Что такое поле класса?
+ \item На какие три этапа делится создание объекта?
+ \item Какое свойство добавляет ключевое слово static полю или методу?
+ \begin{enumerate}
+ \item неизменяемость;
+ \item принадлежность классу;
+ \item принадлежность приложению.
+ \end{enumerate}
+ \item Может ли статический метод получить доступ к полям объекта?
+ \begin{enumerate}
+ \item не может;
+ \item может только к константным;
+ \item может только к неинициализированным.
+ \end{enumerate}
+\end{enumerate}
+
+\subsection{Стек и куча}
+\subsection{Сборка мусора}
+\subsection{Конструкторы}
+\subsection{Инкапсуляция}
+\subsection{Наследование}
+\subsection{Полиморфизм}
+
- Также, хотелось бы отметить, что мы можем использовать -Xms и -Xmx опции JVM, чтобы определить начальный и максимальный размер памяти в куче. Для стека определить размер памяти можно с помощью опции -Xss;
\begin{lstlisting}[language=Java,style=JCodeStyle]
@@ -274,7 +363,7 @@ public class Cat {
private String name;
private String color;
private int age;
-
+
public Cat() {
System.out.println("constructor is constructing...");
name = "Barsik";
@@ -289,7 +378,7 @@ public class Cat {
private String name;
private String color;
private int age;
-
+
Cat(String n, String c, int a) {
System.out.println("constructor is constructing...");
name = n;
@@ -309,7 +398,7 @@ public class Cat {
private String name;
private String color;
private int age;
-
+
public Cat(String name, String color, int age) {
this.name = name;
this.color = color;
diff --git a/jtc2-02a.tex b/jtc2-02a.tex
index 3abcbb9..0caeb97 100644
--- a/jtc2-02a.tex
+++ b/jtc2-02a.tex
@@ -1,6 +1,7 @@
\documentclass[j-spec.tex]{subfiles}
\begin{document}
+\setcounter{section}{1}
\pagestyle{plain}
\sloppy
\tableofcontents
diff --git a/pics/jc-03-class-obj-fields.svg b/pics/jc-03-class-obj-fields.svg
index b688795..92091d3 100644
--- a/pics/jc-03-class-obj-fields.svg
+++ b/pics/jc-03-class-obj-fields.svg
@@ -7,7 +7,7 @@
viewBox="0 0 210 297"
version="1.1"
id="svg5"
- inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
sodipodi:docname="jc-03-class-obj-fields.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@@ -17,8 +17,8 @@
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
- borderopacity="1.0"
- inkscape:showpageshadow="2"
+ borderopacity="0.25"
+ inkscape:showpageshadow="false"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#ffffff"
@@ -26,14 +26,15 @@
showgrid="true"
showborder="false"
inkscape:zoom="4"
- inkscape:cx="174.5"
- inkscape:cy="366.875"
- inkscape:window-width="2560"
- inkscape:window-height="1387"
- inkscape:window-x="-8"
- inkscape:window-y="22"
- inkscape:window-maximized="1"
- inkscape:current-layer="layer1">
+ inkscape:cx="169.5"
+ inkscape:cy="336.875"
+ inkscape:window-width="1534"
+ inkscape:window-height="837"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1"
+ borderlayer="false">
@@ -85,24 +86,24 @@
id="layer1">
class
fields
+ inkscape:cy="367"
+ inkscape:window-width="1534"
+ inkscape:window-height="456"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1"
+ borderlayer="false">
diff --git a/pics/jc-03-class-obj-nostatic.svg b/pics/jc-03-class-obj-nostatic.svg
index 7e63490..e9cf4b0 100644
--- a/pics/jc-03-class-obj-nostatic.svg
+++ b/pics/jc-03-class-obj-nostatic.svg
@@ -7,7 +7,7 @@
viewBox="0 0 210 297"
version="1.1"
id="svg5"
- inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
sodipodi:docname="jc-03-class-obj-nostatic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@@ -18,7 +18,7 @@
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
- inkscape:showpageshadow="2"
+ inkscape:showpageshadow="false"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#ffffff"
@@ -27,13 +27,14 @@
showborder="false"
inkscape:zoom="4"
inkscape:cx="174.5"
- inkscape:cy="366.875"
- inkscape:window-width="2560"
- inkscape:window-height="1387"
- inkscape:window-x="-8"
- inkscape:window-y="22"
- inkscape:window-maximized="1"
- inkscape:current-layer="layer1">
+ inkscape:cy="367"
+ inkscape:window-width="1534"
+ inkscape:window-height="456"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1"
+ borderlayer="false">
diff --git a/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf b/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf
new file mode 100644
index 0000000..d7ae25c
Binary files /dev/null and b/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf differ
diff --git a/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf_tex b/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf_tex
new file mode 100644
index 0000000..1b45307
--- /dev/null
+++ b/svg-inkscape/jc-03-class-obj-fields_svg-tex.pdf_tex
@@ -0,0 +1,65 @@
+%% Creator: Inkscape 1.2.1 (9c6d41e4, 2022-07-14), www.inkscape.org
+%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
+%% Accompanies image file 'jc-03-class-obj-fields_svg-tex.pdf' (pdf, eps, ps)
+%%
+%% To include the image in your LaTeX document, write
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics{.pdf}
+%% To scale the image, write
+%% \def\svgwidth{}
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics[width=]{.pdf}
+%%
+%% Images with a different path to the parent latex file can
+%% be accessed with the `import' package (which may need to be
+%% installed) using
+%% \usepackage{import}
+%% in the preamble, and then including the image with
+%% \import{}{.pdf_tex}
+%% Alternatively, one can specify
+%% \graphicspath{{/}}
+%%
+%% For more information, please see info/svg-inkscape on CTAN:
+%% http://tug.ctan.org/tex-archive/info/svg-inkscape
+%%
+\begingroup%
+ \makeatletter%
+ \providecommand\color[2][]{%
+ \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
+ \renewcommand\color[2][]{}%
+ }%
+ \providecommand\transparent[1]{%
+ \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
+ \renewcommand\transparent[1]{}%
+ }%
+ \providecommand\rotatebox[2]{#2}%
+ \newcommand*\fsize{\dimexpr\f@size pt\relax}%
+ \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
+ \ifx\svgwidth\undefined%
+ \setlength{\unitlength}{237.00155419bp}%
+ \ifx\svgscale\undefined%
+ \relax%
+ \else%
+ \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
+ \fi%
+ \else%
+ \setlength{\unitlength}{\svgwidth}%
+ \fi%
+ \global\let\svgwidth\undefined%
+ \global\let\svgscale\undefined%
+ \makeatother%
+ \begin{picture}(1,0.44620459)%
+ \lineheight{1}%
+ \setlength\tabcolsep{0pt}%
+ \put(0.17332677,0.38199245){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class\end{tabular}}}}%
+ \put(0.01740745,0.28639306){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}fields\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=1]{jc-03-class-obj-fields_svg-tex.pdf}}%
+ \put(0.72942805,0.34968375){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object1\end{tabular}}}}%
+ \put(0.66613736,0.28639297){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0.72942805,0.12816619){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object2\end{tabular}}}}%
+ \put(0.66613736,0.0648754){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=2]{jc-03-class-obj-fields_svg-tex.pdf}}%
+ \end{picture}%
+\endgroup%
diff --git a/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf b/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf
new file mode 100644
index 0000000..f3c8344
Binary files /dev/null and b/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf differ
diff --git a/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf_tex b/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf_tex
new file mode 100644
index 0000000..c06a208
--- /dev/null
+++ b/svg-inkscape/jc-03-class-obj-full_svg-tex.pdf_tex
@@ -0,0 +1,69 @@
+%% Creator: Inkscape 1.2.1 (9c6d41e4, 2022-07-14), www.inkscape.org
+%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
+%% Accompanies image file 'jc-03-class-obj-full_svg-tex.pdf' (pdf, eps, ps)
+%%
+%% To include the image in your LaTeX document, write
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics{.pdf}
+%% To scale the image, write
+%% \def\svgwidth{}
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics[width=]{.pdf}
+%%
+%% Images with a different path to the parent latex file can
+%% be accessed with the `import' package (which may need to be
+%% installed) using
+%% \usepackage{import}
+%% in the preamble, and then including the image with
+%% \import{}{.pdf_tex}
+%% Alternatively, one can specify
+%% \graphicspath{{/}}
+%%
+%% For more information, please see info/svg-inkscape on CTAN:
+%% http://tug.ctan.org/tex-archive/info/svg-inkscape
+%%
+\begingroup%
+ \makeatletter%
+ \providecommand\color[2][]{%
+ \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
+ \renewcommand\color[2][]{}%
+ }%
+ \providecommand\transparent[1]{%
+ \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
+ \renewcommand\transparent[1]{}%
+ }%
+ \providecommand\rotatebox[2]{#2}%
+ \newcommand*\fsize{\dimexpr\f@size pt\relax}%
+ \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
+ \ifx\svgwidth\undefined%
+ \setlength{\unitlength}{237.00155419bp}%
+ \ifx\svgscale\undefined%
+ \relax%
+ \else%
+ \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
+ \fi%
+ \else%
+ \setlength{\unitlength}{\svgwidth}%
+ \fi%
+ \global\let\svgwidth\undefined%
+ \global\let\svgscale\undefined%
+ \makeatother%
+ \begin{picture}(1,0.44620459)%
+ \lineheight{1}%
+ \setlength\tabcolsep{0pt}%
+ \put(0.17332677,0.38199245){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class\end{tabular}}}}%
+ \put(0.01740745,0.28639306){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}fields\end{tabular}}}}%
+ \put(0.01740745,0.22310236){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}methods\end{tabular}}}}%
+ \put(0.01740745,0.15981167){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}static fields\end{tabular}}}}%
+ \put(0.01740745,0.09652089){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}static methods\end{tabular}}}}%
+ \put(0.01740745,0.03323019){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}static field values\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=1]{jc-03-class-obj-full_svg-tex.pdf}}%
+ \put(0.72942805,0.34968375){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object1\end{tabular}}}}%
+ \put(0.66613736,0.28639297){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0.72942805,0.12816619){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object2\end{tabular}}}}%
+ \put(0.66613736,0.0648754){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=2]{jc-03-class-obj-full_svg-tex.pdf}}%
+ \end{picture}%
+\endgroup%
diff --git a/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf b/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf
new file mode 100644
index 0000000..45d884b
Binary files /dev/null and b/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf differ
diff --git a/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf_tex b/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf_tex
new file mode 100644
index 0000000..800eb95
--- /dev/null
+++ b/svg-inkscape/jc-03-class-obj-nostatic_svg-tex.pdf_tex
@@ -0,0 +1,66 @@
+%% Creator: Inkscape 1.2.1 (9c6d41e4, 2022-07-14), www.inkscape.org
+%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
+%% Accompanies image file 'jc-03-class-obj-nostatic_svg-tex.pdf' (pdf, eps, ps)
+%%
+%% To include the image in your LaTeX document, write
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics{.pdf}
+%% To scale the image, write
+%% \def\svgwidth{}
+%% \input{.pdf_tex}
+%% instead of
+%% \includegraphics[width=]{.pdf}
+%%
+%% Images with a different path to the parent latex file can
+%% be accessed with the `import' package (which may need to be
+%% installed) using
+%% \usepackage{import}
+%% in the preamble, and then including the image with
+%% \import{}{.pdf_tex}
+%% Alternatively, one can specify
+%% \graphicspath{{/}}
+%%
+%% For more information, please see info/svg-inkscape on CTAN:
+%% http://tug.ctan.org/tex-archive/info/svg-inkscape
+%%
+\begingroup%
+ \makeatletter%
+ \providecommand\color[2][]{%
+ \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
+ \renewcommand\color[2][]{}%
+ }%
+ \providecommand\transparent[1]{%
+ \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
+ \renewcommand\transparent[1]{}%
+ }%
+ \providecommand\rotatebox[2]{#2}%
+ \newcommand*\fsize{\dimexpr\f@size pt\relax}%
+ \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
+ \ifx\svgwidth\undefined%
+ \setlength{\unitlength}{237.00155419bp}%
+ \ifx\svgscale\undefined%
+ \relax%
+ \else%
+ \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
+ \fi%
+ \else%
+ \setlength{\unitlength}{\svgwidth}%
+ \fi%
+ \global\let\svgwidth\undefined%
+ \global\let\svgscale\undefined%
+ \makeatother%
+ \begin{picture}(1,0.44620459)%
+ \lineheight{1}%
+ \setlength\tabcolsep{0pt}%
+ \put(0.17332677,0.38199245){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class\end{tabular}}}}%
+ \put(0.01740745,0.28639306){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}fields\end{tabular}}}}%
+ \put(0.01740745,0.22310236){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}methods\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=1]{jc-03-class-obj-nostatic_svg-tex.pdf}}%
+ \put(0.72942805,0.34968375){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object1\end{tabular}}}}%
+ \put(0.66613736,0.28639297){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0.72942805,0.12816619){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}object2\end{tabular}}}}%
+ \put(0.66613736,0.0648754){\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}field values\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=2]{jc-03-class-obj-nostatic_svg-tex.pdf}}%
+ \end{picture}%
+\endgroup%