restyle scenario 01

This commit is contained in:
Ivan I. Ovchinnikov 2022-09-12 11:21:21 +03:00
parent 0b5927e3de
commit d2919fcedd
5 changed files with 310 additions and 545 deletions

Binary file not shown.

View File

@ -1,4 +1,4 @@
%% Creator: Inkscape 1.2.1 (9c6d41e4, 2022-07-14), www.inkscape.org
%% Creator: Inkscape 1.1.2 (b8e25be833, 2022-02-05), www.inkscape.org
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
%% Accompanies image file 'jc-01-jvm-struct.pdf' (pdf, eps, ps)
%%
@ -38,7 +38,7 @@
\newcommand*\fsize{\dimexpr\f@size pt\relax}%
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
\ifx\svgwidth\undefined%
\setlength{\unitlength}{454.38705274bp}%
\setlength{\unitlength}{465.70294368bp}%
\ifx\svgscale\undefined%
\relax%
\else%
@ -50,23 +50,23 @@
\global\let\svgwidth\undefined%
\global\let\svgscale\undefined%
\makeatother%
\begin{picture}(1,0.5009936)%
\begin{picture}(1,0.4889361)%
\lineheight{1}%
\setlength\tabcolsep{0pt}%
\put(0.06916666,0.46132088){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java class file\end{tabular}}}}%
\put(0.39718652,0.46004457){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class loader\end{tabular}}}}%
\put(0.09642891,0.28703679){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}method area\end{tabular}}}}%
\put(0.33301305,0.289553){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}heap\end{tabular}}}}%
\put(0.48336439,0.28803519){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}stack\end{tabular}}}}%
\put(0.62945634,0.28949846){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java threads\end{tabular}}}}%
\put(0.45303332,0.22870609){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}program counter registers\end{tabular}}}}%
\put(0.11399044,0.22582811){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native internal threads\end{tabular}}}}%
\put(0.14578059,0.08937075){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}execution engine\end{tabular}}}}%
\put(0.04586328,0.03933318){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}JIT compiler\end{tabular}}}}%
\put(0.25246764,0.04017086){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}garbage collector\end{tabular}}}}%
\put(0.56858297,0.07679544){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\interface\end{tabular}}}}%
\put(0.81836891,0.07711185){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\library\end{tabular}}}}%
\put(0.33286659,0.34367195){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}runtime data area\end{tabular}}}}%
\put(0.06748601,0.45022737){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java class file\end{tabular}}}}%
\put(0.37724155,0.44898207){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}class loader\end{tabular}}}}%
\put(0.09408583,0.28017812){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}method area\end{tabular}}}}%
\put(0.31952125,0.28128322){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}heap\end{tabular}}}}%
\put(0.46891931,0.28216476){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}stack\end{tabular}}}}%
\put(0.61416149,0.28257997){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}java threads\end{tabular}}}}%
\put(0.44202528,0.22326478){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}program counter registers\end{tabular}}}}%
\put(0.09198281,0.22045672){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native internal threads\end{tabular}}}}%
\put(0.14223833,0.08731507){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}execution engine\end{tabular}}}}%
\put(0.04474887,0.03849335){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}JIT compiler\end{tabular}}}}%
\put(0.24633305,0.03931067){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}garbage collector\end{tabular}}}}%
\put(0.55476725,0.07504532){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\interface\end{tabular}}}}%
\put(0.79848376,0.07535405){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}native method\\library\end{tabular}}}}%
\put(0.32477843,0.33543713){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}runtime data area\end{tabular}}}}%
\put(0,0){\includegraphics[width=\unitlength,page=1]{jc-01-jvm-struct.pdf}}%
\end{picture}%
\endgroup%

View File

@ -7,7 +7,7 @@
viewBox="0 0 210 297"
version="1.1"
id="svg5"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:version="1.1.2 (b8e25be833, 2022-02-05)"
sodipodi:docname="jc-01-jvm-struct.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@ -26,15 +26,16 @@
showgrid="true"
showborder="false"
borderlayer="false"
inkscape:zoom="4.7716722"
inkscape:cx="596.5414"
inkscape:cy="592.66435"
inkscape:window-width="1534"
inkscape:window-height="922"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
inkscape:zoom="1.1929181"
inkscape:cx="138.31629"
inkscape:cy="520.15308"
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:pageshadow="2">
<inkscape:grid
type="xygrid"
id="grid12999"
@ -110,195 +111,195 @@
id="layer1">
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="60.956562"
y="96.191261"
id="text790"><tspan
sodipodi:role="line"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-opacity:1"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-opacity:1;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="60.956562"
y="96.191261"
id="tspan11908">java class file</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="68.165955"
y="124.11515"
id="text844"><tspan
sodipodi:role="line"
id="tspan842"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="68.165955"
y="124.11515" /></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="113.53738"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="111.84619"
y="96.395851"
id="text848"><tspan
sodipodi:role="line"
id="tspan846"
style="stroke-width:0.265"
x="113.53738"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265"
x="111.84619"
y="96.395851">class loader</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="65.326637"
y="124.12859"
id="text2304"><tspan
sodipodi:role="line"
id="tspan2302"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="65.326637"
y="124.12859">method area</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="103.25052"
y="123.72525"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="102.36334"
y="123.94704"
id="text3034"><tspan
sodipodi:role="line"
id="tspan3032"
style="stroke-width:0.265"
x="103.25052"
y="123.72525">heap</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265"
x="102.36334"
y="123.94704">heap</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="127.35149"
y="123.96855"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="126.9079"
y="123.80221"
id="text3038"><tspan
sodipodi:role="line"
id="tspan3036"
style="stroke-width:0.265"
x="127.35149"
y="123.96855">stack</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265"
x="126.9079"
y="123.80221">stack</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="150.76968"
y="123.73399"
id="text3768"><tspan
sodipodi:role="line"
id="tspan3766"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="150.76968"
y="123.73399">java threads</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="122.48949"
y="133.47887"
id="text4498"><tspan
sodipodi:role="line"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="122.48949"
y="133.47887"
id="tspan4500">program counter registers</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="68.141708"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
x="64.981133"
y="133.9402"
id="text5230"><tspan
sodipodi:role="line"
style="stroke-width:0.265"
x="68.141708"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';stroke-width:0.265"
x="64.981133"
y="133.9402"
id="tspan5232">native internal threads</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="73.237595"
y="155.814"
id="text5962"><tspan
sodipodi:role="line"
id="tspan5960"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="73.237595"
y="155.814">execution engine</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="57.221085"
y="163.8349"
id="text6329"><tspan
sodipodi:role="line"
id="tspan6327"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="57.221085"
y="163.8349">JIT compiler</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="90.339279"
y="163.70062"
id="text7422"><tspan
sodipodi:role="line"
id="tspan7420"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="90.339279"
y="163.70062">garbage collector</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="141.01183"
y="157.82979"
id="text8152"><tspan
sodipodi:role="line"
id="tspan8150"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="141.01183"
y="157.82979">native method</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="141.01183"
y="164.00342"
id="tspan8154">interface</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="181.05193"
y="157.77907"
id="text8884"><tspan
sodipodi:role="line"
id="tspan8882"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="181.05193"
y="157.77907">native method</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="181.05193"
y="163.9527"
id="tspan8886">library</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="103.22704"
y="115.05011"
id="text10342"><tspan
sodipodi:role="line"
id="tspan10340"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="103.22704"
y="115.05011">runtime data area</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1"
style="font-size:4.93888889px;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-opacity:1;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
x="134.56136"
y="87.641937"
id="text11072"><tspan
sodipodi:role="line"
id="tspan11070"
style="stroke-width:0.265"
style="stroke-width:0.265;-inkscape-font-specification:'IBM Plex Sans';font-family:'IBM Plex Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:4.93888889px"
x="134.56136"
y="87.641937" /></text>
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13424"
width="30.259069"
height="10.161842"
width="32.140018"
height="10.062141"
x="59.88644"
y="89.964317" />
<rect
@ -311,36 +312,36 @@
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13428"
width="120.1084"
height="29.916206"
width="123.06397"
height="30.023262"
x="59.962482"
y="110.0032" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13430"
width="79.995499"
height="19.930855"
width="82.024651"
height="19.980042"
x="50.001808"
y="150.04642" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13432"
width="30.025837"
height="20.014544"
width="34.02475"
height="20.033585"
x="140.00171"
y="149.99287" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13434"
width="30.017694"
height="19.955856"
width="34.009689"
height="20.005997"
x="180.01677"
y="150.02046" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13436"
width="25.055296"
height="5.0051007"
width="28.989944"
height="5.0232158"
x="65.036514"
y="120.00324" />
<rect
@ -360,8 +361,8 @@
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13442"
width="25.055296"
height="4.9455161"
width="29.0224"
height="5.0232158"
x="150.00406"
y="120.00324" />
<rect
@ -374,28 +375,29 @@
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13446"
width="54.986908"
height="5.0085402"
width="61.033035"
height="5.0995326"
x="119.99342"
y="129.92693" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13448"
width="29.990734"
height="5.0044012"
width="31.022038"
height="5.0043945"
x="55.004421"
y="160.01282" />
<rect
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1"
id="rect13450"
width="34.983311"
height="5.0244079"
width="40.018761"
height="5.0244141"
x="90.007698"
y="159.99748" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 90.236383,94.973843 18.766057,0.02043"
id="path13506" />
d="m 92.026458,95.026458 16.975982,-0.03218"
id="path13506"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#marker13729)"
d="m 120.03034,100.05297 v 8.94114"
@ -414,19 +416,23 @@
id="path13903" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#marker13777)"
d="m 130.02736,155.03475 h 8.98269"
id="path13947" />
d="m 132.02646,155.03475 6.98359,0"
id="path13947"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#marker13777)"
d="m 170.00592,154.92385 h 8.98269"
id="path13991" />
d="m 174.02646,154.92385 h 4.96215"
id="path13991"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#marker13777)"
d="m 140.00813,164.96008 h -8.92725"
id="path14079" />
d="m 140.00813,164.96008 -6.98167,0"
id="path14079"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;marker-end:url(#marker13777)"
d="m 180.04214,164.96008 h -9.03815"
id="path14123" />
d="m 180.04214,164.96008 -5.01568,0"
id="path14123"
sodipodi:nodetypes="cc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

View File

@ -1,106 +1,41 @@
\documentclass[russian]{beamer}
\usepackage{multicol}
\usepackage[russian]{babel}
\usepackage{fontspec}
\input{../settings/fancy-listings-preamble}
\usepackage{forest}
\makeatletter
\def\beamer@framenotesbegin{% at beginning of slide
\usebeamercolor[fg]{normal text}
\gdef\beamer@noteitems{}%
\gdef\beamer@notes{}%
}
\makeatother
\newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize}
% \setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}
% \setbeameroption{show notes on second screen=right}
\usetheme{Madrid}
\usecolortheme{seahorse}
\setsansfont{IBM Plex Sans}
\title{Платформа: история и окружение}
\author{Иван Игоревич Овчинников}
\institute[GB: Java]{GeekBrains. Java Core.}
\date{2022}
\documentclass[../j-spec.tex]{subfiles}
\begin{document}
\setbeamertemplate{enumerate items}[circle]
\setbeamertemplate{note page}[plain]
\setbeameroption{show notes}
\section{Платформа: история и окружение}
\begin{longtable}{|p{35mm}|p{135mm}|}
\hline
Экран & Слова \\ \hline
\endhead
\frame{\titlepage}
\note{Добро пожаловать на техническую специализацию Java, лучшую из всех технических специализаций Java, что вы сможете найти.}
Титул & Добро пожаловать на техническую специализацию Java, лучшую из всех технических специализаций Java, что вы сможете найти \\ \hline
\begin{frame}
\frametitle{Введение и знакомство (о себе)}
Иван Овчинников. НПО ИТ, РКС, GB.
\begin{block}{Используемые технологии}
Много и с удовольствием C, C++, Java, Verilog. C\# и Python даже не считаем.
\end{block}
Для GB более 20 потоков по разным направлениям, более двух тысяч студентов.
\end{frame}
\note{Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения.
}
Обо мне ИТ & Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. \\ \hline
\begin{frame}
\frametitle{О курсе}
и об уркое
\end{frame}
\note{Данный курс, первый из технической специализации, направлен на первое знакомство со внутренним устройством языка и фреймворком разработки приложений с его использованием. Курс демонстрирует механизмы работы знакомых студенту концепций на примере языка Java. В рамках курса будут рассмотрено устройство языка Java и сопутствующих технологических решений, платформы для создания и запуска приложений на JVM-языках (Groovy, Kotlin, Scala, и др). Будут рассмотрены некоторые базовые пакеты ввода-вывода, позволяющие манипулировать данными за пределами программы. В результате прохождения курса у вас, слушатели, должно появиться знание принципов работы платформы Java, понимание того, как язык выражает принципы программирования, его объектную природу. Вы научитесь писать базовые терминальные приложения и утилиты, решать задачи (в том числе алгоритмические, не требующие подключения сложных библиотек) с использованием языка Java и с учётом его особенностей.
}
\newpage
\note{На этом уроке мы поговорим о
\begin{itemize}
\item краткой истории и причинах возникновения язка
\item что нужно скачать, откуда и как это всё выбирать
\item из чего всё состоит
\item изучим простую структуру проекта и способы его запуска
\item коротко рассмотрим утилиту джавадок
\end{itemize}
Рассмотрим примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. В конце урока рассмотрим альтернативные способы сборки проектов, популярные и не очень.
}
Обо мне Java & С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения \\ \hline
\begin{frame}
\frametitle{Краткая история}
\includegraphics[width=12cm]{../pics/jc-01-tiobe.png}
\end{frame}
\note{Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL.
О курсе (Устройство фреймворк ооп ввод-вывод терминал) & Данный курс, первый из технической специализации, направлен на первое знакомство со внутренним устройством языка и фреймворком разработки приложений с его использованием. Курс демонстрирует механизмы работы знакомых студенту концепций на примере языка Java. В рамках курса будут рассмотрено устройство языка Java и сопутствующих технологических решений, платформы для создания и запуска приложений на JVM-языках (Groovy, Kotlin, Scala, и др). Будут рассмотрены некоторые базовые пакеты ввода-вывода, позволяющие манипулировать данными за пределами программы. В результате прохождения курса у вас, слушатели, должно появиться знание принципов работы платформы Java, понимание того, как язык выражает принципы программирования, его объектную природу. Вы научитесь писать базовые терминальные приложения и утилиты, решать задачи (в том числе алгоритмические, не требующие подключения сложных библиотек) с использованием языка Java и с учётом его особенностей \\ \hline
На уроке (История состав проект документирование) & На этом уроке мы поговорим о краткой истории и причинах возникновения язка; что нужно скачать, откуда и как это всё выбирать; из чего всё состоит; изучим простую структуру проекта и способы его запуска; коротко рассмотрим утилиту джавадок. Рассмотрим примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. В конце урока рассмотрим альтернативные способы сборки проектов, популярные и не очень. \\ \hline
История (логотип sun, Oracle; график tiobe) & Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL.
Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. Традиционно занимает высокие места в рейтингах популярности языков программирования (3-е место в рейтинге TIOBE (на август 2022)). На графике отлично видно, что с 2002 года язык уверенно держится в тройке популярных, значительную часть времени возглавляя его.
Но это всё - сухие факты, ничего не говорящие нам о том, чем руководствовались разработчики языка и что нам, программистам, с этим делать.
Но это всё - сухие факты, ничего не говорящие нам о том, чем руководствовались разработчики языка и что нам, программистам, с этим делать. \\ \hline
}
\newpage
\note{Существует, интересная версия происхождения названия языка, связанная с аллюзией на кофе машину как пример бытового устройства, для программирования которого изначально язык создавался. Кстати, в результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер, который опередил своё время более чем на 10 лет, но из-за большой стоимости не смог произвести переворот в мире технологии и был забыт. Устройство Star7 не пользовалось популярностью, в отличие от языка программирования Java и его окружения. С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же некоторое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц технология стала применяться редко и язык стал применяться для бэк-энда.
}
История (кофемашина, star7, Symbian, игры на старых телефонах, провели опрос) & Существует, интересная версия происхождения названия языка, связанная с аллюзией на кофе машину как пример бытового устройства, для программирования которого изначально язык создавался. Кстати, в результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер, который опередил своё время более чем на 10 лет, но из-за большой стоимости не смог произвести переворот в мире технологии и был забыт. Устройство Star7 не пользовалось популярностью, в отличие от языка программирования Java и его окружения. С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же некоторое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц технология стала применяться редко и язык стал применяться для бэк-энда \\ \hline
\begin{frame}
\frametitle{Почему Java?}
Написано однажды, работает везде.
\end{frame}
\note{Итак Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные.
Почему Java? (Лого с, с++, Паскаль, Eiffel, ada; написано однажды работает везде) & Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные.
Поскольку язык изначально проектировался для множества разнообразных исполнителей с разными архитектурами процессоров и систем, было принято решение отделить исполнителя от решаемой прикладной задачи, так появилась виртуальная машина Java, речь о которой пойдёт немного позже. Основной смысл в том, что у языка Java появился девиз: Написано однажды, работает везде.
}
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3)
Поскольку язык изначально проектировался для множества разнообразных исполнителей с разными архитектурами процессоров и систем, было принято решение отделить исполнителя от решаемой прикладной задачи, так появилась виртуальная машина Java, речь о которой пойдёт немного позже. Основной смысл в том, что у языка Java появился девиз: Написано однажды, работает везде. \\ \hline
учёный котик далее УК. Задание для самопроверки & Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3)
\begin{itemize}
\item существовавшие на тот момент Pascal и C++ были слишком сложными;
\item Java быстрее C++;
\item Однажды написанная на Java программа работает везде.
\end{itemize}
\end{enumerate}
\end{frame}
\end{itemize} \\ \hline
\begin{frame}
\frametitle{Базовый инструментарий}
\begin{enumerate}
\item Eclipse
\item NetBeans
@ -112,49 +47,32 @@
\item jGRASP
\item JCreator
\item DrJava
\end{enumerate}
\end{frame}
\note{Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт.
\end{enumerate} отвертка шуруповёрт котики с инструментами & Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт.
Я не планирую рекламировать ту или иную среду, скорее всего не буду даже много говорить о плюсах и минусах той или иной среды, просто покажу список и коротко расскажу о главных действующих лицах:
Я не планирую рекламировать ту или иную среду, скорее всего не буду даже много говорить о плюсах и минусах той или иной среды, просто покажу список и коротко расскажу о главных действующих лицах \\ \hline
NetBeans - если коротко, то эта среда с нами из уважения к истории, она была первой, созданной для разработки на языке Java. Долгое время разработка этой среды не велась, но в последние несколько лет разработчики как будто бы вспомнили о ней и активно взялись за дело, сейчас есть версии под все популярные ОС, поддерживается весь популярный современный функционал, есть прикольные самобытные моменты, вроде расширенных клавиатурных макросов для написания функций с передаваемыми в них массивами;
}
\newpage
\note{
Eclipse - проще, наверное, назвать язык или технологию, под которую нет плагина для этой весьма расширяемой и дополняемой среды программирования. Долгое время, вплоть до недавнего, а где-то и до сих пор, является корпоративным стандартом для написания Enterprise приложений и прочих сложных корпоративных приложений. Весьма гибкая среда и-за того, что разрабатывается Eclipse Foundation к ней можно подключить плагины, решающие почти любые задачи разработки. Из того что я видел своими глазами, Siemens использует Eclipse для разработки своих систем поддержки жизненного цикла изделий;
Инструмент нетбинс (старый добрый котик) & NetBeans - если коротко, то эта среда с нами из уважения к истории, она была первой, созданной для разработки на языке Java. Долгое время разработка этой среды не велась, но в последние несколько лет разработчики как будто бы вспомнили о ней и активно взялись за дело, сейчас есть версии под все популярные ОС, поддерживается весь популярный современный функционал, есть прикольные самобытные моменты, вроде расширенных клавиатурных макросов для написания функций с передаваемыми в них массивами \\ \hline
IntelliJ IDEA - стандарт де-факто примерно десять последних лет. Не уверен, можно ли назвать эту среду российской разработкой, но у компании, разрабатывающей эту среду, три русских учредителя. Да и сама эта компания началась именно с этой среды. В этой среде можно настроить почти любую деталь, что часто бывает очень удобно. Среда расширяется плагинами на почти все случаи жизни разработчика. Часто входит в экосистему JetBrains, развёрнутую на предприятии, поэтому тесно интегрируется в другие сферы деятельности компании. Существует как бесплатная, так и платная версия с расширенным функционалом, например, доступа к базам данных.
}
\newpage
\note{
Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio.
}
Инструмент эклипс (котик многостаночник, мультитул, музыкант на всех инструментах) & Eclipse - проще, наверное, назвать язык или технологию, под которую нет плагина для этой весьма расширяемой и дополняемой среды программирования. Долгое время, вплоть до недавнего, а где-то и до сих пор, является корпоративным стандартом для написания Enterprise приложений и прочих сложных корпоративных приложений. Весьма гибкая среда и-за того, что разрабатывается Eclipse Foundation к ней можно подключить плагины, решающие почти любые задачи разработки. Из того что я видел своими глазами, Siemens использует Eclipse для разработки своих систем поддержки жизненного цикла изделий; \\ \hline
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4)
Инструмент идея (современный стильный котик) & IntelliJ IDEA - стандарт де-факто примерно десять последних лет. Не уверен, можно ли назвать эту среду российской разработкой, но у компании, разрабатывающей эту среду, три русских учредителя. Да и сама эта компания началась именно с этой среды. В этой среде можно настроить почти любую деталь, что часто бывает очень удобно. Среда расширяется плагинами на почти все случаи жизни разработчика. Часто входит в экосистему JetBrains, развёрнутую на предприятии, поэтому тесно интегрируется в другие сферы деятельности компании. Существует как бесплатная, так и платная версия с расширенным функционалом, например, доступа к базам данных \\ \hline
Инструмент андроид студия (мобильник, андроид котик с телефоном) & Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio \\ \hline
УК Задание для самопроверки & Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4)
\begin{itemize}
\item NetBeans перестали поддерживать;
\item Eclipse слишком медленный и тяжеловесный;
\item IDEA оказалась самой дружелюбной к начинающему программисту;
\item Все варианты верны.
\end{itemize}
\end{enumerate}
\end{frame}
\end{itemize} \\ \hline
\begin{frame}
\frametitle{Что нужно скачать}
\begin{enumerate}
\item ждк
\item среду
\end{enumerate}
\end{frame}
\note{Для разработки на языке Java вам может понадобиться довольно много разного инструментария, тем более, что требования к инструментарию отличаются ещё и от команды к команде, вам может потребоваться средство для работы с БД, средства моделирования и описания систем, дополнительные средства документирования кода и решений. Но совершенно точно можно сказать, что без двух вещей обойтись не удастся: это иде, они же среды программирования и ждк, он же инструментарий разработчика на java. О средах программирования дополнительно только что поговорили, нужно выбрать какую-нибудь, и скачать. Скорее всего вы это сделали для прохождения более ранних курсов, сейчас сможете для себя выбрать инструмент более осознанно. В курсе, кроме этой лекции и следующего за ней семинара, будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её, что вы уже скорее всего и сделали. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK какой-нибудь хорошей новой версии, а сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак.}
Что нужно скачать (ждк, среда) котик думает & Для разработки на языке Java вам может понадобиться довольно много разного инструментария, тем более, что требования к инструментарию отличаются ещё и от команды к команде \\ \hline
Что нужно скачать (ждк, все 4 среды, dbeaver, anylogic, matlab, uml, teamcity, confluence, jira) котик в растерянности & вам может потребоваться средство для работы с БД, средства моделирования и описания систем, дополнительные средства документирования кода и решений. Но совершенно точно можно сказать, что без двух вещей обойтись не удастся: это иде, они же среды программирования и ждк, он же инструментарий разработчика на java.\\ \hline
Что нужно скачать (ждк, среда) довольный котик & О средах программирования дополнительно только что поговорили, нужно выбрать какую-нибудь, и скачать. Скорее всего вы это сделали для прохождения более ранних курсов, сейчас сможете для себя выбрать инструмент более осознанно. В курсе, кроме этой лекции и следующего за ней семинара, будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её, что вы уже скорее всего и сделали. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK какой-нибудь хорошей новой версии, а сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак \\ \hline
\begin{frame}
\frametitle{Что нужно скачать}
\begin{enumerate}
\item Oracle JDK
\item OpenJDK by Oracle
@ -168,29 +86,20 @@ Eclipse - проще, наверное, назвать язык или техн
\item Amazon Corretto
\end{itemize}
\end{enumerate}
\end{frame}
\note{Итак, вендоры и версии. JDK развивается, поэтому выходят новые версии, исправляющие предыдущие недочёты, добавляющие новую функциональность. Самая распространённая версия в современной российской действительности - восьмая, но есть очень серьёзный тренд на переход к 11 и 13й версиям, на более новые часто смотрят с опаской. Распространённых вендоров три - оракл, опен, либерика. Есть, конечно, компании, собирающие свой инструментарий из открытых источников самостоятельно, но их крайне мало. Про экзотических вендоров рассказывать смысла не много, важно помнить, что они есть и у них у всех разные лицензионные политики. Я в курсе буду использовать либерику, как делаю последние несколько лет, хотя довольно долгое время пользовался ораклом. Поскольку я работаю в около- государственной компании, не могу не упомянуть о ГОСТ джаве, которая часто всерьёз рассматривается в организациях, подобных моей, и об опенЖДК, который является основой для самостоятельных сборок инструментария.
& Итак, вендоры и версии. JDK развивается, поэтому выходят новые версии, исправляющие предыдущие недочёты, добавляющие новую функциональность. Самая распространённая версия в современной российской действительности - восьмая, но есть очень серьёзный тренд на переход к 11 и 13й версиям, на более новые часто смотрят с опаской. Распространённых вендоров три - оракл, опен, либерика. Есть, конечно, компании, собирающие свой инструментарий из открытых источников самостоятельно, но их крайне мало. Про экзотических вендоров рассказывать смысла не много, важно помнить, что они есть и у них у всех разные лицензионные политики. Я в курсе буду использовать либерику, как делаю последние несколько лет, хотя довольно долгое время пользовался ораклом. Поскольку я работаю в около- государственной компании, не могу не упомянуть о ГОСТ джаве, которая часто всерьёз рассматривается в организациях, подобных моей, и об опенЖДК, который является основой для самостоятельных сборок инструментария.
Наиболее популярной, конечно, является оракл ждк, но, если мне будет позволено высказать персональное мнение, это больше дань традиции, нежели какая-то жизненная необходимость. }
Наиболее популярной, конечно, является оракл ждк, но, если мне будет позволено высказать персональное мнение, это больше дань традиции, нежели какая-то жизненная необходимость\\ \hline
\begin{frame}
\frametitle{Кто делает для нас JDK}
\includegraphics[width=12cm]{../pics/jc-01-jdk-contrib.png}
\end{frame}
\note{Если внимательно посмотреть на компании, внесшие вклад в развитие открытой части инструментария, начиная с ждк11 и до актуального на сегодня ждк18, конечно, максимально вкладывается оракл, но и беллсофт, производитель либерики, там будет в первой десятке. Повторюсь, я на курсе буду использовать либерику ждк11, благо для неё есть и докер-образ, если нужно как-то автоматизировать сборки вашего приложения, например; вы можете использовать любую другую не старше 8. Все примеры я буду приводить с учётом именно 8й версии языка, чтобы рассмотреть подходящий подавляющему большинству людей инструментарий. Если у вас уже установлена 11я версия от другого вендора - ничего менять не нужно, если установлена более новая версия, есть вероятность, что некоторые примеры будут отмечаться как чрезвычайно устаревшие, возможно, эти предупреждения на этапе обучения следует игнорировать. Для выбора вендора внимательно ознакомьтесь с лицензией, а для выбора версии языка руководствуйтесь здравым смыслом: большинство компаний в России и мире работают на 8, 11 или 13й версиях. Зачем учиться на какой-нибудь 18-й версии, если потом на работе вы не увидите половины каких-нибудь новых фич и фактически, придётся переучиваться?
}
\newpage
\note{
Из-за обилия вендоров и версий, которые нужно поддерживать, создаётся необходимость в автоматизации переключения между версиями. На помощь приходят инструменты, наподобие SDKMan, написанные на языке bash, позволяющие осуществить этот самый рутинный и утомительный менеджмент. Очевидным недостатком SDKMan является то, что помимо самого СДКМан нужно установить требующиеся версии и варианты ЖДК специальными внутренними командами. Хотя, например, можно перевести приложение в режим офлайн и попробовать как-то поплясать с бубном вокруг настроек. Думаю, что если в команде используется этот инструмент, для него уже есть все необходимые скрипты настроек и автоматизации. Есть и другие варианты, об одном из них (Docker) мы поговорим позднее в этой лекции.}
Особенности \includegraphics[width=35mm]{../pics/jc-01-jdk-contrib.png} офис с котиками & Если внимательно посмотреть на компании, внесшие вклад в развитие открытой части инструментария, начиная с ждк11 и до актуального на сегодня ждк18, конечно, максимально вкладывается оракл, но и беллсофт, производитель либерики, там будет в первой десятке. Повторюсь, я на курсе буду использовать либерику ждк11, благо для неё есть и докер-образ, если нужно как-то автоматизировать сборки вашего приложения, например; вы можете использовать любую другую не старше 8. Все примеры я буду приводить с учётом именно 8й версии языка, чтобы рассмотреть подходящий подавляющему большинству людей инструментарий \\ \hline
\begin{frame}
\frametitle{Когда нужно по-быстрому}
\includegraphics[width=12cm]{../pics/jc-01-jupyter-logo.png}
\end{frame}
\note{Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. Да, многие думают, что Jupyter ноутбуки - это только для языка пайтон или для скриптовых языков, но это не так. Архитектура юпитер ноутбука позволяет ему работать с любым ядром, главное, чтобы ядро умело корректно интерпретировать написанное в ячейке с кодом. Ядро IJava делает именно это - интерпретирует Java-код, используя установленный на компьютере разработчика JDK.}
Ждк 1.8 (11 ок 13 ок; 11+ 1.8 депрекейтед) & Если у вас уже установлена 11я версия от другого вендора - ничего менять не нужно, если установлена более новая версия, есть вероятность, что некоторые примеры будут отмечаться как чрезвычайно устаревшие, возможно, эти предупреждения на этапе обучения следует игнорировать \\ \hline
Внимательно прочтите лицензию. 1.8 ок 11 ок 13 ок & Для выбора вендора внимательно ознакомьтесь с лицензией, а для выбора версии языка руководствуйтесь здравым смыслом: большинство компаний в России и мире работают на 8, 11 или 13й версиях. Зачем учиться на какой-нибудь 18-й версии, если потом на работе вы не увидите половины каких-нибудь новых фич и фактически, придётся переучиваться? \\ \hline
Сдкман докер лого & Из-за обилия вендоров и версий, которые нужно поддерживать, создаётся необходимость в автоматизации переключения между версиями. На помощь приходят инструменты, наподобие SDKMan, написанные на языке bash, позволяющие осуществить этот самый рутинный и утомительный менеджмент. Очевидным недостатком SDKMan является то, что помимо самого СДКМан нужно установить требующиеся версии и варианты ЖДК специальными внутренними командами. Хотя, например, можно перевести приложение в режим офлайн и попробовать как-то поплясать с бубном вокруг настроек. Думаю, что если в команде используется этот инструмент, для него уже есть все необходимые скрипты настроек и автоматизации. Есть и другие варианты, об одном из них (Docker) мы поговорим позднее в этой лекции \\ \hline
Скриптинг \includegraphics[width=35mm]{../pics/jc-01-jupyter-logo.png} Иногда нужно по-быстрому (jupyter notebook, IJava) бегущий или буксующий котик & Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. Да, многие думают, что Jupyter ноутбуки - это только для языка пайтон или для скриптовых языков, но это не так. Архитектура юпитер ноутбука позволяет ему работать с любым ядром, главное, чтобы ядро умело корректно интерпретировать написанное в ячейке с кодом. Ядро IJava делает именно это - интерпретирует Java-код, используя установленный на компьютере разработчика JDK \\ \hline
\begin{frame}
\frametitle{Переменные среды}
\begin{itemize}
\item \code{PATH}
\item \code{JAVA_HOME}
@ -198,58 +107,39 @@ Eclipse - проще, наверное, назвать язык или техн
\item \code{J2SDKDIR}
\item \code{J2REDIR}
\end{itemize}
\end{frame}
\note{Для корректной работы самого инструментария и сторонних приложений, использующих тот инструментарий, проследите, пожалуйста, что установлены следующие переменные среды ОС:
\begin{itemize}
\item [] в системную \code{PATH} добавить путь до исполняемых файлов JDK
\item [] \code{JAVA_HOME} путь до корня JDK
\item [] \code{JRE_HOME} путь до файлов JRE из состава установленной JDK
\item [] \code{J2SDKDIR} устаревшая переменная для JDK, используется некоторыми старыми приложениями
\item [] \code{J2REDIR} устаревшая переменная для JRE, используется некоторыми старыми приложениями
\end{itemize}
& Для корректной работы самого инструментария и сторонних приложений, использующих тот инструментарий, проследите, пожалуйста, что установлены следующие переменные среды ОС:
в системную \code{PATH} добавить путь до исполняемых файлов JDK; \code{JAVA_HOME} путь до корня JDK; \code{JRE_HOME} путь до файлов JRE из состава установленной JDK; \code{J2SDKDIR} устаревшая переменная для JDK, используется некоторыми старыми приложениями; \code{J2REDIR} устаревшая переменная для JRE, используется некоторыми старыми приложениями. Это позволит вам не особенно много думать о настройках видимости библиотек ОС при дальнейшей установке инструментария, например, сборщиков проектов. \\ \hline
Это позволит вам не особенно много думать о настройках видимости библиотек ОС при дальнейшей установке инструментария, например, сборщиков проектов.}
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
УК Задания для самопроверки & \begin{enumerate}
\item Чем отличается SDK от JDK? (J это частный случай, больше спец. библиотек)
\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java? (8, 1.8)
\item Какие ещё JVM языки существуют? (Scala, Kotlin, Groovy)
\end{enumerate}
\end{frame}
\\ \hline
\begin{frame}
\frametitle{JDK и его друзья}
TL;DR:
ЖДК и его друзья. TL;DR:
\begin{itemize}
\item JDK = JRE + инструменты разработчика;
\item JRE = JVM + библиотеки классов;
\item JVM = Native API + механизм исполнения + управление памятью.
\end{itemize}
\end{frame}
\note{Очень часто в интернете, при скачивании какого-то программного обеспечения, связанного с Java можно увидеть разные аббревиатуры: JRE, JVM, JDK и тому подобные, и чтобы в них не запутаться давайте коротко и быстро разберёмся что они значат, потому что я чувствую, как вам уже начинают надоедать все эти вступления.
& Очень часто в интернете, при скачивании какого-то программного обеспечения, связанного с Java можно увидеть разные аббревиатуры: JRE, JVM, JDK и тому подобные, и чтобы в них не запутаться давайте коротко и быстро разберёмся что они значат, потому что я чувствую, как вам уже начинают надоедать все эти вступления. \\ \hline
Пойдём от самого масштабного и общего к самому маленькому и частному. Самая масштабная и общая аббревиатура - это JDK Java Development Kit - инструментарий разработчика на языке Java. Это обычный SDK который содержит в себе также всё необходимое для разработки именно на языке Java здесь есть куча других аббревиатур, компилятор, средства развёртывания, создания документации, итд они позволяют удобно писать программы на языке Java и абстрагируют программиста от необходимости описывать все вспомогательные процессы непосредственно на языке программирования то есть, грубо говоря это некие классы которые инкапсулирует сложное преобразование текста программ в простой интерфейс разработчика.
}
\newpage
\note{
Всё, что разрабатывает разработчик, исполняется в специальной среде это среда является частью JDK и позволяет исполнять все программы написанные разработчиками на конечном в компьютере. Именно эта среда и устанавливается на компьютере пользователя чтобы пользователь мог запускать приложения, написанные на языке Java. Итак, самая необходимая вещь для любого пользователя это JRE. Это аббревиатура расшифровывается как Java Runtime Environment, то есть среда исполнения программ на языке Java. Она содержит в себе основной внутренний механизм который называется Java virtual machine и библиотеку из разных классов чтобы эта виртуальная машина хорошо работала умела показывать пользователю строки осуществлять ввод-вывод фреймворк коллекций и прочее, тут тоже есть куча интересных аббревиатур, которые мы так или иначе изучим, например, Java native interface, Java database connectivity и другие. Если копнуть ещё чуть глубже, можно и JRE разделить на JSE и JEE, но нас это деление пока не очень интересует, оно произойдёт естественным образом на более старших курсах. Пока что всё, что мы будем изучать, это JSE.
}
Ждк = Java сдк (ждк, жре+компилятор, музыкант с инструментами, кот с апгрейдами) & Пойдём от самого масштабного и общего к самому маленькому и частному. Самая масштабная и общая аббревиатура - это JDK Java Development Kit - инструментарий разработчика на языке Java. Это обычный SDK который содержит в себе также всё необходимое для разработки именно на языке Java здесь есть куча других аббревиатур, компилятор, средства развёртывания, создания документации, итд они позволяют удобно писать программы на языке Java и абстрагируют программиста от необходимости описывать все вспомогательные процессы непосредственно на языке программирования то есть, грубо говоря это некие классы которые инкапсулирует сложное преобразование текста программ в простой интерфейс разработчика \\ \hline
\begin{frame}
\frametitle{JVM и что в нём происходит}
рис 1.2 (стр 4) конспекта
\end{frame}
\note{Инструментарий разработчика мы будем так или иначе рассматривать весь оставшийся курс, части среды исполнения мы тоже будем всесторонне изучать на последующих уроках. Сейчас хотелось бы подробнее остановиться на виртуальной машине Java, поскольку понимание того, как она устроена, должно значительно облегчить для вас понимание процесса исполнения программы и, как следствие, процесс разработки этих самых программ. Виртуальная машина Java осуществляет загрузку классов программы в оперативную память, причём здесь имеется ввиду не оперативная память как аппаратная часть компьютера, а некая выделенная часть этой оперативной памяти, которой с нами поделилось операционная система. Также осуществляется управление памятью, а именно очистка и сборка мусора и непосредственное исполнение классов нашего приложения, путём компиляции методов из промежуточного байткода в непосредственные вызовы операционной системы или другого исполнителя, то есть грубо говоря преобразования классов Java в ассемблерный код конкретного компьютера. Этот процесс называется JIT компиляция.
}
\newpage
\note{
Существуют разные Реализация виртуальных машин (Список можно посмотреть, например, в википедии), даже экзотические, например мультиязыковой интерпретатор GraalVM. По большей части виртуальные машины отличаются как раз этой частью, с Just In Time компиляцией, то есть с преобразованием методов в непосредственные машинные вызовы в реальном времени. Чем быстрее происходит эта JIT компиляция, тем, соответственно, быстрее работает приложение на виртуальной машине. JVM самостоятельно осуществляет сборку так называемого мусора, что значительно облегчает работу программиста по отслеживанию утечек памяти, но, на мой взгляд, не способствует должной концентрации внимания программиста на этом вопросе. Важно помнить, что в Java утечки памяти всё равно существуют, особенно при программировании многопоточных приложений. }
Жре (просто кот) & Всё, что разрабатывает разработчик, исполняется в специальной среде это среда является частью JDK и позволяет исполнять все программы написанные разработчиками на конечном в компьютере. Именно эта среда и устанавливается на компьютере пользователя чтобы пользователь мог запускать приложения, написанные на языке Java. Итак, самая необходимая вещь для любого пользователя это JRE. Это аббревиатура расшифровывается как Java Runtime Environment, то есть среда исполнения программ на языке Java. \\ \hline
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
Жвм (сердце) & Она содержит в себе основной внутренний механизм который называется Java virtual machine и библиотеку из разных классов чтобы эта виртуальная машина хорошо работала умела показывать пользователю строки осуществлять ввод-вывод фреймворк коллекций и прочее \\ \hline
Жре (жсе, жни, ждбс, …; жее, +ежб, …) & тут тоже есть куча интересных аббревиатур, которые мы так или иначе изучим, например, Java native interface, Java database connectivity и другие. Если копнуть ещё чуть глубже, можно и JRE разделить на JSE и JEE, но нас это деление пока не очень интересует, оно произойдёт естественным образом на более старших курсах. Пока что всё, что мы будем изучать, это JSE \\ \hline
16 & Инструментарий разработчика мы будем так или иначе рассматривать весь оставшийся курс, части среды исполнения мы тоже будем всесторонне изучать на последующих уроках. Сейчас хотелось бы подробнее остановиться на виртуальной машине Java, поскольку понимание того, как она устроена, должно значительно облегчить для вас понимание процесса исполнения программы и, как следствие, процесс разработки этих самых программ. \\ \hline
Классы байт-код - жвм(загрузчик - память - жит) - вызовы ОС - проц - ввод-вывод - потребитель например кот & Виртуальная машина Java осуществляет загрузку классов программы в оперативную память, причём здесь имеется ввиду не оперативная память как аппаратная часть компьютера, а некая выделенная часть этой оперативной памяти, которой с нами поделилось операционная система. Также осуществляется управление памятью, а именно очистка и сборка мусора и непосредственное исполнение классов нашего приложения, путём компиляции методов из промежуточного байткода в непосредственные вызовы операционной системы или другого исполнителя, то есть грубо говоря преобразования классов Java в ассемблерный код конкретного компьютера. Этот процесс называется JIT компиляция \\ \hline
Жит и гц (Память и концентрация внимания) котик думает хмурится & Существуют разные Реализация виртуальных машин (Список можно посмотреть, например, в википедии), даже экзотические, например мультиязыковой интерпретатор GraalVM. По большей части виртуальные машины отличаются как раз этой частью, с Just In Time компиляцией, то есть с преобразованием методов в непосредственные машинные вызовы в реальном времени. Чем быстрее происходит эта JIT компиляция, тем, соответственно, быстрее работает приложение на виртуальной машине. JVM самостоятельно осуществляет сборку так называемого мусора, что значительно облегчает работу программиста по отслеживанию утечек памяти, но, на мой взгляд, не способствует должной концентрации внимания программиста на этом вопросе. Важно помнить, что в Java утечки памяти всё равно существуют, особенно при программировании многопоточных приложений \\ \hline
УК Задания для самопроверки & \begin{enumerate}
\item JVM и JRE - это одно и тоже? (нет)
\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания)
\item Утечки памяти (2)
@ -258,103 +148,70 @@ Eclipse - проще, наверное, назвать язык или техн
\item Возможны;
\item Существуют только в С++ и других языках с открытым менеджментом памяти.
\end{itemize}
\end{enumerate}
\end{frame}
\end{enumerate} \\ \hline
\begin{frame}
\frametitle{Структура проекта}
Структура проекта
\begin{itemize}
\item простейшие (один файл)
\item обычные (несколько пакетов)
\item шаблонные (формируются сборщиками)
\item скриптовые (jupyter notebook)
\end{itemize}
\end{frame}
\note{Ну, наконец-то проект. Проекты бывают разной сложности, сейчас поговорим о проектах без применения сборщиков, потому что сборщикам и соответствующим проектам у нас будет посвящено отдельное занятие. Все проекты по сложности структуры можно разделить на четыре основные категории: простейшие, обычные, шаблонные, скриптовые.}
\end{itemize} & Ну, наконец-то проект. Проекты бывают разной сложности, сейчас поговорим о проектах без применения сборщиков, потому что сборщикам и соответствующим проектам у нас будет посвящено отдельное занятие. Все проекты по сложности структуры можно разделить на четыре основные категории: простейшие, обычные, шаблонные, скриптовые \\ \hline
лайвкод
\begin{frame}
\frametitle{Простейший проект}
Думаю, тут надо вживую покодить, благо немного
\begin{multicols}{2}
public class Main
public static void main(String[] args)
System.out.println("Hello, world!");
System.out.println ("Hello, world!"); & Начнём с простейшего проекта, который будет состоять из одного файла исходников. Естественно, вы спросите, что за чушь, мы же уже сотни раз писали «привет мир» и запускали его удобной зелёной стрелочкой в ИДЕ. Есть ответ. Мы же выясняем, что там внутри, под капотом этих удобных стрелочек и привычных процессов. Да и ради простейшего проекта запускать тяжеловесную среду программирования как-то неестественно что ли \\ \hline
\columnbreak
лайвкод
ivan@gb src > javac Main.java
ivan@gb src > java Main
Hello, world!
\end{multicols}
\end{frame}
\note{Начнём с простейшего проекта, который будет состоять из одного файла исходников. Естественно, вы спросите, что за чушь, мы же уже сотни раз писали «привет мир» и запускали его удобной зелёной стрелочкой в ИДЕ. Есть ответ. Мы же выясняем, что там внутри, под капотом этих удобных стрелочек и привычных процессов. Да и ради простейшего проекта запускать тяжеловесную среду программирования как-то неестественно что ли.}
Hello, world! & Заменить зелёную стрелочку можно двумя строками \\ \hline
\begin{frame}
\frametitle{Jupyter Notebook}
также вживую открыть юпитер ноутбук, показать, что возможно запускать код в скриптовом формате
\end{frame}
\note{Пока далеко не ушли от простейших проектов, думаю, целесообразно будет проговорить о скриптовых возможностях Java. Поскольку язык является не только компилируемым, но и интерпретируемым благодаря работе JVM, его возмжоно использовать как скриптовый внутри юпитер ноутбука, подключив соответствующее ядро. Интересной особенностью юпитер ноутбука является разделение фронтенда и ядра, что даёт возможность заменять эти самые ядра (в терминах юпитера они называются кернелы). скачав и установив ядро IJava мы получаем шикарную возможность делать простые наброски логики, снабжая их комментариями в формате маркдаун. На самом деле можно делать и непростые наброски, но это выходит далеко за рамки нашего курса о языке. Если будет очень интересно, призываю вас самостоятельно почитать о возможностях ядра, благо на него очень хорошая документация с примерами. }
Лого Юпитер ноута & Пока далеко не ушли от простейших проектов, думаю, целесообразно будет проговорить о скриптовых возможностях Java. Поскольку язык является не только компилируемым, но и интерпретируемым благодаря работе JVM, его возмжоно использовать как скриптовый внутри юпитер ноутбука, подключив соответствующее ядро. Интересной особенностью юпитер ноутбука является разделение фронтенда и ядра, что даёт возможность заменять эти самые ядра (в терминах юпитера они называются кернелы). скачав и установив ядро IJava мы получаем шикарную возможность делать простые наброски логики, снабжая их комментариями в формате маркдаун. На самом деле можно делать и непростые наброски, но это выходит далеко за рамки нашего курса о языке. Если будет очень интересно, призываю вас самостоятельно почитать о возможностях ядра, благо на него очень хорошая документация с примерами \\ \hline
\begin{frame}
\frametitle{Проект на Java}
\begin{itemize}
\item пакеты,
\item классы,
\item метод main,
\item комментарии
\item ресурсы
\end{itemize}
\end{frame}
\note{Как я сказал в начале этого блока, шаблонные проекты, создаваемые сборщиками мы обсудим на следующей лекции, поэтому осталось только поговорить о том, из чего состоит обычный простой проект. Итак чаще всего, это пакеты, классы, метод main, комментарии, ресурсы. Обо всём по порядку. Давайте сразу договоримся, что я сначала буду давать формальное понятие, а потом буду говорить, как его можно представить в более простом виде.}
\end{itemize} & Как я сказал в начале этого блока, шаблонные проекты, создаваемые сборщиками мы обсудим на следующей лекции, поэтому осталось только поговорить о том, из чего состоит обычный простой проект. Итак чаще всего, это пакеты, классы, метод main, комментарии, ресурсы. Обо всём по порядку. Давайте сразу договоримся, что я сначала буду давать формальное понятие, а потом буду говорить, как его можно представить в более простом виде \\ \hline
\begin{frame}
\frametitle{Пакеты}
разделить на два слайда
сначала пакет с пакетами потом
стоящие стройными рядами коробки или контейнеры
\end{frame}
\note{Пакет - это пространство имён языка. Теоретически, как мы видели на примере простейшего проекта, класс может не находиться в пакете, но на практике такого положения дел не встретить. Например, в проекте из нескольких модулей классы без пакетов просто не будут найдены. Пакет - это некоторое место хранения и создания иерархии классов проекта. Проще всего представить пакет как папку на диске, тем более, что в файловой системе пакеты так и показываются. Но пакет - это чуть более сложная сущность. Для пакетов существуют модификаторы доступа, классы, находящиеся в одном пакете доступны друг другу даже если находятся в разных проектах (это как раз и есть отличие пакетов от папок на диске). Для нас пока достаточно, что пакеты объединяют классы по смыслу. У пакетов есть правила именования: обычно это обратное доменное имя (например, для гб.ру это будет ру.гб), название проекта, и далее уже внутренняя структура. Пакеты следует писать латинскими строчными буквами. Чтобы явно отнести класс к пакету недостаточно его просто туда положить, нужно ещё прописать в классе название пакета после специального оператора package.}
Коробка или лучше много коробок разного размера, кот в коробке & Пакет - это пространство имён языка. Теоретически, как мы видели на примере простейшего проекта, класс может не находиться в пакете, но на практике такого положения дел не встретить. Например, в проекте из нескольких модулей классы без пакетов просто не будут найдены. Пакет - это некоторое место хранения и создания иерархии классов проекта. \\ \hline
\begin{frame}
\frametitle{Классы}
разделить на два слайда
сначала фото пустого школьного класса, потом
Скриншот структуры папок на диске & Проще всего представить пакет как папку на диске, тем более, что в файловой системе пакеты так и показываются. Для пакетов существуют модификаторы доступа, классы, находящиеся в одном пакете доступны друг другу даже если находятся в разных проектах (это как раз и есть отличие пакетов от папок на диске). \\ \hline
\end{frame}
\note{Класс - это основная единица исходного кода программы. Без класса не может начаться никакое программирование на языке Java. Даже скомпилированные файлы исходного кода имеют расширение .class. Что такое классы в терминах ООП вы уже знаете, но в Java классы - это более широкое понятие. Сама программа - это тоже класс. У классов также есть модификаторы доступа. Важно про классы - это то, что в файл с расширением джава следует класть только один класс и делать его публичным. Формально, язык не запрещает иметь в файле другие, не публичные классы, но писать так свои программы - это не толкьо дурной тон, но и весьма сбивающая с толку практика. У классов также есть правила именования. Название класса - это имя существительное в именительном падеже, написанное с заглавной буквы. Если требуется назвать класс в несколько слов, применяют так называемый upper camel case, то есть пишут слова строчными буквами, делая заглавной первую букву каждого слова.}
Пакет с пакетами, кот в пакете & Но пакет - это чуть более сложная сущность. Для нас пока достаточно, что пакеты объединяют классы по смыслу. \\ \hline
\begin{frame}
\frametitle{метод мейн}
разделить на два слайда
псвм
показать точку входа как вход в пещеру
\end{frame}
\note{Метод мейн - это единственный в своём роде метод, который является точкой входа в программу. Метод является публичным, и должен находиться в публичном классе, то есть он доступен для исполнения любому желающему. А желает его исполнить JVM. Метод именно с такой сигнатурой (публичный, статический, ничего не возвращающий, принимающий массив строк) - это конвенция, договорённость, об именовании. JVM при старте программы среди всех пакетов и классов будет искать именно этот метод и будет передавать ему именно массив строк в качестве параметра. При создании этого метода важно полностью повторить его сигнатуру и обязательно написать его с название со строчной буквы.}
Имена пакетов (домен гб.ру пакет ру.гб; большие буквы плохо, разделять слова нижними подчёркиваниями хорошо; пример оператора пекеж) & У пакетов есть правила именования: обычно это обратное доменное имя (например, для гб.ру это будет ру.гб), название проекта, и далее уже внутренняя структура. Пакеты следует писать латинскими строчными буквами. Чтобы явно отнести класс к пакету недостаточно его просто туда положить, нужно ещё прописать в классе название пакета после специального оператора package \\ \hline
\begin{frame}
\frametitle{комментарии}
разделить на два слайда
можно как в редакции «комменты и лайки туда»
и слайд с типами комментариев
\end{frame}
\note{С комментариями всё просто - это часть кода, которую игнорирует компилятор при преобразовании исходного кода. Комментарии бывают:
\begin{itemize}
\item \code{// comment} - до конца строки. Самый простой и самый часто используемый комментарий. Эти комментарии обычно поясняют неочевидные программные решения или сложные алгоритмы.
\item \code{/* comment */} - внутристрочный или многострочный. Никогда не используйте его внутри строк, несмотря на то, что это возможно. Обычно эти комментарии используют, чтобы оставить какое-нибудь длинное сообщение будущим поколениям программистов, которые будут поддерживать этот код.
\item \code{/** comment */} - комментарий-документация. Многострочный. Из него утилитой Javadoc создаётся веб-страница с комментарием. Самый полезный из всех полезных комментариев. Сейчас будем учиться делать из таких комментариев целые веб-сайты с программной документацией.
\end{itemize}
}
\newpage
\note{
Есть ещё такое собирательное понятие, как ресурсы, но его, возможно не следует рассматривать прямо сейчас потому что оно не является обязательным для вообще любого проекта, в отличие от пакетов, классов и комментариев. Работу с ресурсами мы разберём когда будем беседовать о более сложных проектах.}
Пустой школьный класс & Класс - это основная единица исходного кода программы. Без класса не может начаться никакое программирование на языке Java. Даже скомпилированные файлы исходного кода имеют расширение .class. \\ \hline
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
Центральное звено, фундамент, атлант, колонна, котик держит на себе мир & Что такое классы в терминах ООП вы уже знаете, но в Java классы - это более широкое понятие. Сама программа - это тоже класс. У классов также есть модификаторы доступа. Важно про классы - это то, что в файл с расширением джава следует класть только один класс и делать его публичным. Формально, язык не запрещает иметь в файле другие, не публичные классы, но писать так свои программы - это не толкьо дурной тон, но и весьма сбивающая с толку практика. \\ \hline
Программа = класс;1 файл = 1 класс; класс = сущ, им.п с большой буквы & У классов также есть правила именования. Название класса - это имя существительное в именительном падеже, написанное с заглавной буквы. Если требуется назвать класс в несколько слов, применяют так называемый upper camel case, то есть пишут слова строчными буквами, делая заглавной первую букву каждого слова \\ \hline
Парадный вход с надписью псвм & Метод мейн - это единственный в своём роде метод, который является точкой входа в программу. Метод является публичным, и должен находиться в публичном классе, то есть он доступен для исполнения любому желающему. \\ \hline
Жвм ищет псвм надписи на котах & А желает его исполнить JVM. Метод именно с такой сигнатурой (публичный, статический, ничего не возвращающий, принимающий массив строк) - это конвенция, договорённость, об именовании. JVM при старте программы среди всех пакетов и классов будет искать именно этот метод и будет передавать ему именно массив строк в качестве параметра. \\ \hline
Псвм код & При создании этого метода важно полностью повторить его сигнатуру и обязательно написать его с название со строчной буквы \\ \hline
Комментарии в смысле интернета, с лайками & С комментариями всё просто - это часть кода, которую игнорирует компилятор при преобразовании исходного кода. \\ \hline
Однострочный, многострочный (внутристрочный никогда так не делайте), документация & Комментарии бывают: \code{// comment} - до конца строки. Самый простой и самый часто используемый комментарий. Эти комментарии обычно поясняют неочевидные программные решения или сложные алгоритмы. \code{/* comment */} - внутристрочный или многострочный. Никогда не используйте его внутри строк, несмотря на то, что это возможно. Обычно эти комментарии используют, чтобы оставить какое-нибудь длинное сообщение будущим поколениям программистов, которые будут поддерживать этот код. \code{/** comment */} - комментарий-документация. Многострочный. Из него утилитой Javadoc создаётся веб-страница с комментарием. Самый полезный из всех полезных комментариев. Сейчас будем учиться делать из таких комментариев целые веб-сайты с программной документацией.
\\ \hline
Ресурсы (нефть газ, драгоценные камни, золото) & Есть ещё такое собирательное понятие, как ресурсы, но его, возможно не следует рассматривать прямо сейчас потому что оно не является обязательным для вообще любого проекта, в отличие от пакетов, классов и комментариев. Работу с ресурсами мы разберём когда будем беседовать о более сложных проектах \\ \hline
УК Задание для самопроверки & \begin{enumerate}
\item Зачем складывать классы в пакеты? (структурирование, видимость*)
\item Может ли существовать класс вне пакета? (да*, нет)
\item Комментирование кода(2)
@ -363,11 +220,8 @@ Eclipse - проще, наверное, назвать язык или техн
\item Хорошая привычка;
\item Захламляет исходники.
\end{itemize}
\end{enumerate}
\end{frame}
\end{enumerate} \\ \hline
\begin{frame}
\frametitle{Структура простого проекта}
\begin{forest}
for tree={
font=\ttfamily, grow'=0, child anchor=west,
@ -399,31 +253,19 @@ Eclipse - проще, наверное, назвать язык или техн
]
[README.md]
]
\end{forest}
\end{frame}
\note{Для дальнейших упражнений на сегодняшнем уроке нам понадобится небольшой проект, буквально из двух классов в двух пакетах, без каких-то ограничений видимости и других усложнений. На основе этого проекта мы и поговорим об оставшихся на сегодня двух несложных темах - терминальная сборка и генерация документации. Дерево проекта представлено на слайде, где папка с выходными (скомпилированными) бинарными файлами пуста, а файл README.md создан для лучшей демонстрации корня проекта.}
\end{forest} & Для дальнейших упражнений на сегодняшнем уроке нам понадобится небольшой проект, буквально из двух классов в двух пакетах, без каких-то ограничений видимости и других усложнений. На основе этого проекта мы и поговорим об оставшихся на сегодня двух несложных темах - терминальная сборка и генерация документации. Дерево проекта представлено на слайде, где папка с выходными (скомпилированными) бинарными файлами пуста, а файл README.md создан для лучшей демонстрации корня проекта \\ \hline
\begin{frame}
\frametitle{Терминал}
показать папку с простейшим проектом из одного файла, скомпилировать, запустить.
\end{frame}
\note{Итак. У нас был простейший проект, написать его было элементарно, что там, простой хелловорлд, скомпилировать и запустить его также просто. Нам понадобится утилита javac из состава JDK которая скомпилирует из текста программы байт-код, и утилита java из состава JRE которая этот байт-код сможет интерпретировать. То есть очевидно, и мы просто проговорим это дополнительно, что простому пользователю для запуска программы не нужен весь тяжёлый ЖДК. Показываем работу следующими командами
ls /javac Main.java /ls /java Main
Также существует забавный факт, что скомпилированные джава классы всегда содержат одинаковые первые 4 байта, которые в 16тиричном представлении формируют надпись «кофе, крошка», cafe babe.
(открыть мейн.класс в хекс-редакторе, показать)}
Код привет мира & Итак. У нас был простейший проект, написать его было элементарно, что там, простой хелловорлд, скомпилировать и запустить его также просто \\ \hline
\begin{frame}
\frametitle{Терминал}
тут, скорее всего, без лайв кода не обойтись, нужно открыть терминал и показать папку проекта, структуру проекта и содержимое файлов
\end{frame}
\note{Для компиляции более сложных проектов, содержащих каике-то иерархические структуры из пакетов и классов, необходимо указать компилятору, откуда забирать файлы исходников (сорспас) и куда класть готовые классы (д может быть расшифрован как директория или как дестинейшн - назначение), а интерпретатору, откуда забирать файлы скомпилированных классов (класпас). Как хорошо видно среди только что написанных букв, для этого достаточно через пробел написать соответствующие ключи компиляции и запуска. Конечно, писать каждый раз эти ключи довольно утомительно и для автоматизации этого процесса придумали сборщики проектов, но всегда круто знать и уметь делать вещи в отсутствие сложного инструментария. Показываем работу следующими командами
/javac -sourcepath ./src -d out src/ru/gb/jcore/sample/Main.java
/java -classpath ./out ru.gb.jcore.sample.Main
}
Код команд компиляции & Нам понадобится утилита javac из состава JDK которая скомпилирует из текста программы байт-код, и утилита java из состава JRE которая этот байт-код сможет интерпретировать. То есть очевидно, и мы просто проговорим это дополнительно, что простому пользователю для запуска программы не нужен весь тяжёлый ЖДК. Показываем работу следующими командами ls /javac Main.java /ls /java Main\\ \hline
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
Скрин кофе крошка & Также существует забавный факт, что скомпилированные джава классы всегда содержат одинаковые первые 4 байта, которые в 16тиричном представлении формируют надпись «кофе, крошка», cafe babe \\ \hline
Код двух классов & Для компиляции более сложных проектов, содержащих каике-то иерархические структуры из пакетов и классов, необходимо указать компилятору, откуда забирать файлы исходников (сорспас) и куда класть готовые классы \\ \hline
Код команд компиляции & сорспас это исходники, д может быть расшифрован как директория или как дестинейшн - назначение, а интерпретатору, откуда забирать файлы скомпилированных классов (класпас). Как хорошо видно среди только что написанных букв, для этого достаточно через пробел написать соответствующие ключи компиляции и запуска. Конечно, писать каждый раз эти ключи довольно утомительно и для автоматизации этого процесса придумали сборщики проектов, но всегда круто знать и уметь делать вещи в отсутствие сложного инструментария. Показываем работу следующими командами /javac -sourcepath ./src -d out src/ru/gb/jcore/sample/Main.java /java -classpath ./out ru.gb.jcore.sample.Main\\ \hline
УК Задание для самопроверки & \begin{enumerate}
\item Что такое javac? (компилятор)
\item Кофе, крошка? (да)
\item Где находится класс в папке назначения работы компилятора? (1)
@ -432,18 +274,14 @@ Eclipse - проще, наверное, назвать язык или техн
\item В корне плоским списком;
\item Зависит от ключей компиляции.
\end{itemize}
\end{enumerate}
\end{frame}
\end{enumerate} \\ \hline
\begin{frame}
\frametitle{Javadoc}
Пример автоматически сгенерированной документации
\includegraphics[width=12cm]{../pics/jc-01-javadoc.png}
\end{frame}
\note{И к последней на сегодня теме, которая мочему-то вызывает у многих даже активно практикующих программистов отторжение. К самому полезному для передачи опыта между программистами и командами программистов. К документации на свой код. Конечно, особенно ярые противники описывать свою работу сейчас возмутятся, мол, я ж программист, пусть программную документацию пишут технические писатели. Но если подумать, то техпис фактически всё равно придёт к вам, программисту, за разъяснениями, что именно делает тот или иной фрагмент кода. А комментарии к коду всё равно писать, да и техпису, скорее всего придётся отвечать в текстовом виде, так почему бы не облегчить себе жизнь сразу, документируя свой код по мере написания, например, между спринтами. }
Пример автоматически сгенерированной документации & И к последней на сегодня теме, которая мочему-то вызывает у многих даже активно практикующих программистов отторжение. К самому полезному для передачи опыта между программистами и командами программистов. \\ \hline
Много документов котик в очках & К документации на свой код. Конечно, особенно ярые противники описывать свою работу сейчас возмутятся, мол, я ж программист, пусть программную документацию пишут технические писатели. \\ \hline
Программист кот -> программа -> документация -> красота; программист кот -> программа -> техпис кот в костюме -> программа -> программист -> почта/чат: скриншоты/объяснения не-программисту технических тонкостей -> техпис -> красота & Но если внезапно подумать головой, то техпис фактически всё равно придёт к вам, программисту, за разъяснениями, что именно делает тот или иной фрагмент кода. А комментарии к коду всё равно писать, да и техпису, скорее всего придётся отвечать в текстовом виде, так почему бы не облегчить себе жизнь сразу, документируя свой код по мере написания, например, между спринтами \\ \hline
\begin{frame}
\frametitle{утилита javadoc}
основные ключи и аргументы
\begin{itemize}
\item \code{-d docs}
@ -451,28 +289,17 @@ Eclipse - проще, наверное, назвать язык или техн
\item \code{-cp out}
\item \code{-subpackages}
\item \code{ru}
\end{itemize}
\end{frame}
\note{Чтобы просто создать документацию надо вызвать утилиту javadoc с небольшим количеством ключей, давайте их разберём. Уже знакомый нам ключ -d означающий папку (или директорию, кому как больше нравится) в которую следует положить готовую документацию. Помним, ключ легко запомнить, если расшифровать его как дестинейшн, назначение. -sourcepath означает папку, где лежат исходники проекта, как мы помним, в исходниках мы пишем те самые комментарии, которые потом можно преобразовать в джавадок. -cp говорит о том, где лежат готовые скомпилированные классы, эта информация нужна, чтобы понять, как программа в итоге скомпилировалась, что в ней задействовано, что как связано и прочее. -subpackages говорит о том, что надо взять не только указанный далее пакет, но и все его подпакеты рекурсивно. Ну и, собственно, пакет, для которого нужно создать документацию, ru. Показываем работу следующими командами:
/javadoc -d docs -sourcepath src -cp out -subpackages ru
\end{itemize} & Чтобы просто создать документацию надо вызвать утилиту javadoc с небольшим количеством ключей, давайте их разберём. Уже знакомый нам ключ -d означающий папку (или директорию, кому как больше нравится) в которую следует положить готовую документацию. Помним, ключ легко запомнить, если расшифровать его как дестинейшн, назначение. -sourcepath означает папку, где лежат исходники проекта, как мы помним, в исходниках мы пишем те самые комментарии, которые потом можно преобразовать в джавадок. -cp говорит о том, где лежат готовые скомпилированные классы, эта информация нужна, чтобы понять, как программа в итоге скомпилировалась, что в ней задействовано, что как связано и прочее. -subpackages говорит о том, что надо взять не только указанный далее пакет, но и все его подпакеты рекурсивно. Ну и, собственно, пакет, для которого нужно создать документацию, ru. \\ \hline
Если нужно сгенерировать документацию к конкретному пакету, например, если вы хотите разложить их по разным папкам, то надо указатеь его полный адрес, и, вероятно, убрать ключ subpackages}
javadoc -d docs -sourcepath src -cp out -subpackages ru & Если нужно сгенерировать документацию к конкретному пакету, например, если вы хотите разложить их по разным папкам, то надо указатеь его полный адрес, и, вероятно, убрать ключ subpackages \\ \hline
\begin{frame}
\frametitle{куда же без особенностей работы с Windows?}
\begin{itemize}
\item \code{-locale ru_RU}
\item \code{-encoding utf-8}
\item \code{-docencoding cp1251}
\end{itemize}
\end{frame}
\note{Чтобы учесть то, что происходитс ОС Windows надо чуть больше, поскольку так исторически сложилось, что у Windows есть проблемки с локалью. Поскольку все программы на Java пишутя в кодировке UTF-8, а основная кодировка всех приложений, работающих под ОС виндоус это ср1251, то при создании документации стандартными средствами итоговые веб-страницы создаются на клингонском. Чтобы перевести их на земной кириллический, нужно добавить три ключа - указать какая локаль установлена -locale, в какой кодировке исходный текст -encoding utf-8, в какой кодировке должен быть итоговый документ -docencoding cp1251. Показываем работу следующими командами:
/javadoc -locale ru\_RU -encoding utf-8 -docencoding cp1251 -d docs -sourcepath src -cp out -subpackages ru
Поскольку я сейчас не с виндоусом, то такие настройки наоборот, сломают отображение.}
\end{itemize} & Чтобы учесть то, что происходитс ОС Windows надо чуть больше, поскольку так исторически сложилось, что у Windows есть проблемки с локалью. Поскольку все программы на Java пишутя в кодировке UTF-8, а основная кодировка всех приложений, работающих под ОС виндоус это ср1251, то при создании документации стандартными средствами итоговые веб-страницы создаются на клингонском. Чтобы перевести их на земной кириллический, нужно добавить три ключа - указать какая локаль установлена -locale, в какой кодировке исходный текст -encoding utf-8, в какой кодировке должен быть итоговый документ -docencoding cp1251. Показываем работу следующими командами: /javadoc -locale ru\_RU -encoding utf-8 -docencoding cp1251 -d docs -sourcepath src -cp out -subpackages ru Поскольку я сейчас не с виндоусом, то такие настройки наоборот, сломают отображение. \\ \hline
\begin{frame}
\frametitle{Задания для самопроверки}
\begin{enumerate}
УК Задание для самопроверки & \begin{enumerate}
\item Javadoc находится в JDK или JRE? (ждк)
\item Что делает утилита Javadoc? (3)
\begin{itemize}
@ -480,131 +307,63 @@ Eclipse - проще, наверное, назвать язык или техн
\item Создаёт программную документацию;
\item Создаёт веб-страницу с документацией из комментариев.
\end{itemize}
\end{enumerate}
\end{frame}
\end{enumerate} \\ \hline
\begin{frame}
\frametitle{Автоматизация сборки в CLI}
makefile
\end{frame}
\note{Компилировать проект руками — занятие весьма утомительное, особенно когда исходных файлов становится больше одного, и для каждого из них надо каждый раз набивать команды компиляции, а ещё не забыть о том, какой файл в проекте главный, какие включены библиотеки и многое другое. Руки так и тянутся куда-то это записать, чтобы не забыть, но говорить о специальных менеджерах проектов ещё рано, поэтому научимся автоматизировать терминальную сборку. Будем учиться создавать и использовать Мейкфайлы.
Уставший котик -> автоматизация -> довольный котик (надпись внизу мейкфайл) & Компилировать проект руками — занятие весьма утомительное, особенно когда исходных файлов становится больше одного, и для каждого из них надо каждый раз набивать команды компиляции, а ещё не забыть о том, какой файл в проекте главный, какие включены библиотеки и многое другое. Руки так и тянутся куда-то это записать, чтобы не забыть, но говорить о специальных менеджерах проектов ещё рано, поэтому научимся автоматизировать терминальную сборку. Будем учиться создавать и использовать Мейкфайлы. \\ \hline
Код + мейкфайл -> мейк -> компилятор -> программа & Makefile — это набор инструкций для программы make (классически, это GNU Automake), которая помогает собирать программный проект буквально в одну команду. Хотя эта технология и отмирает, но все равно используется как некоторыми отдельными разработчиками, так и в проектах, особенно часто это встречается, когда в Java переквалифицируются бывшие С++ программисты. Если запустить make то программа попытается найти файл с именем по-умолчанию Makefile в текущем каталоге и выполнить инструкции из него. Эти самые мейкфайлы и сохранят для нас все нужные настройки проекта, компиляции, структуры и прочего \\ \hline
Makefile — это набор инструкций для программы make (классически, это GNU Automake), которая помогает собирать программный проект буквально в одну команду. Хотя эта технология и отмирает, но все равно используется как некоторыми отдельными разработчиками, так и в проектах, особенно часто это встречается, когда в Java переквалифицируются бывшие С++ программисты. Если запустить make то программа попытается найти файл с именем по-умолчанию Makefile в текущем каталоге и выполнить инструкции из него. Эти самые мейкфайлы и сохранят для нас все нужные настройки проекта, компиляции, структуры и прочего.
}
\newpage
\note{
Не лишним будет напомнить, что мейкфайлы, не привносят ничего принципиально нового в процесс компиляции, а только лишь автоматизируют его, поэтому важно помнить, что все действия, которые мы совершаем при ручной компиляции просто записаны в мейкфайл, и обратно, то что записано в мейкфайле может быть выполнено вручную в терминале.
Ключи компиляции, папки, пути => мейкфайл & Не лишним будет напомнить, что мейкфайлы, не привносят ничего принципиально нового в процесс компиляции, а только лишь автоматизируют его, поэтому важно помнить, что все действия, которые мы совершаем при ручной компиляции просто записаны в мейкфайл, и обратно, то что записано в мейкфайле может быть выполнено вручную в терминале \\ \hline
В простейшем, то есть нашем, случае, в мейкфайле достаточно описать так называемую цель, таргет, и что нужно сделать для достижения этой цели. Цель, собираемая по-умолчанию называется all, так, для простейшей компиляции нам нужно написать
all:
javac -sourcepath .src/ -d out src/ru/gb/jcore/sample/Main.java
}
\begin{frame}
\frametitle{Автоматизация сборки в CLI}
SRCDIR := src
OUTDIR := out
all: javac -sourcepath .src/ -d out src/ru/gb/jcore/sample/Main.java & В простейшем, то есть нашем, случае, в мейкфайле достаточно описать так называемую цель, таргет, и что нужно сделать для достижения этой цели. Цель, собираемая по-умолчанию называется all, так, для простейшей компиляции нам нужно написать то что вы видите на слайде. По сути, это всё.\\ \hline
JC := javac
JCFLAGS := -sourcepath .(SRCDIR)/ -d (OUTDIR)
MAINSOURCE := ru/gb/dj/Main
MAINCLASS := ru.gb.dj.Main
Инициализация мейк переменной, использование мейк переменной
SRCDIR := src OUTDIR := out
all:
(JC) (JCFLAGS) {SRCDIR}/{MAINSOURCE}.java
JC := javac JCFLAGS := -sourcepath .(SRCDIR)/ -d (OUTDIR)
MAINSOURCE := ru/gb/dj/Main MAINCLASS := ru.gb.dj.Main
clean:
rm -R (OUTDIR)
all: (JC) (JCFLAGS) {SRCDIR}/{MAINSOURCE}.java
run:
cd out \&\& java {MAINCLASS}
clean: rm -R (OUTDIR)
\end{frame}
\note{По сути, это всё. Но мы же хотим, чтобы вся было гибо и не нужно было запоминать что как называется, чтобы это потом можно было поправить где-то в одном месте. Для этого в мейкфайлах придумали переменные, и они работают как самые обычные переменные, их значение подставляется в то место, где переменная вызывается. Добавив пару таргетов и немного переменных мы получим мейкфайл как на слайде, он позволит нам не только компилировать проект, но также очищать выходные файлы в случае неудачи и запускать его. Также не особенно переживая о ключах, командах и прочем.
run: cd out \&\& java {MAINCLASS} & Но мы же хотим, чтобы вся было гибо и не нужно было запоминать что как называется, чтобы это потом можно было поправить где-то в одном месте. Для этого в мейкфайлах придумали переменные, и они работают как самые обычные переменные, их значение подставляется в то место, где переменная вызывается. Добавив пару таргетов и немного переменных мы получим мейкфайл как на слайде, он позволит нам не только компилировать проект, но также очищать выходные файлы в случае неудачи и запускать его. Также не особенно переживая о ключах, командах и прочем. \\ \hline
Для того, чтобы утилита мейк сделала своё дело нужно в терминале просто её вызвать без аргументов. Чтобы воспользоваться другими написанными таргетами (автоматизациями, задачами) нужно после имени утилиты написать через пробел название таргета, например, часто пишут задачу clean, рекурсивно очищающую папку с готовыми классами, соответственно, вызов make clean как ни странно, рекурсивно удалит папку с готовыми классами.}
Вызовы мейк для разных таргетов & Для того, чтобы утилита мейк сделала своё дело нужно в терминале просто её вызвать без аргументов. Чтобы воспользоваться другими написанными таргетами (автоматизациями, задачами) нужно после имени утилиты написать через пробел название таргета, например, часто пишут задачу clean, рекурсивно очищающую папку с готовыми классами, соответственно, вызов make clean как ни странно, рекурсивно удалит папку с готовыми классами \\ \hline
\begin{frame}
\frametitle{Автоматизация сборки в CLI, контейнеризация}
docker
\end{frame}
\note{Docker — программное обеспечение для автоматизации развёртывания и управления приложениями, контейнеризатор приложений. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут почти на на любой системе, и уж точно на системах большой тройки (линукс виндоус макос).
Уставший котик -> автоматизация -> довольный котик (иконка внизу докер) & Docker — программное обеспечение для автоматизации развёртывания и управления приложениями, контейнеризатор приложений. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут почти на на любой системе, и уж точно на системах большой тройки (линукс виндоус макос). Целью этого курса не является рассмотрение всех возможностей докер, поэтому ограничимся только теми, которые нам понадобятся, чтобы увидеть заветное, запущенное джавой, «привет мир» в терминале. Снова не лишним будет напомнить, что мы можем выполнить все те же самые действия в простом терминале. Но докер даёт нам немного преимуществ. Например, не нужно устанавливать JDK и думать о переключении между версиями, достаточно взять контейнер с нужной версией и запустить наше приложение в нём. Помните я буквально полчаса назад упоминал о том, что есть более абстрактный инструмент менеджмента версий языка и инструментария? вот, это он. \\ \hline
Целью этого курса не является рассмотрение всех возможностей докер, поэтому ограничимся только теми, которые нам понадобятся, чтобы увидеть заветное, запущенное джавой, «привет мир» в терминале. Снова не лишним будет напомнить, что мы можем выполнить все те же самые действия в простом терминале. Но докер даёт нам немного преимуществ. Например, не нужно устанавливать JDK и думать о переключении между версиями, достаточно взять контейнер с нужной версией и запустить наше приложение в нём. Помните я буквально полчаса назад упоминал о том, что есть более абстрактный инструмент менеджмента версий языка и инструментария? вот, это он.
}
Компилятор, переменные среды, ключи компиляции, папки, пути => докерфайл & С точки зрения разработки, контейнерные приложения в докере это, по сути, набор инструкций, которые вы пишете в специальном файле. Всё остальное докер берёт на себя. Он эти инструкции выполняет, виртуализует, запускает и делает все остальные свои важные вещи, а мы в результате видим заветный сервис или приложение, поднятые буквально парой команд в терминале. \\ \hline
\begin{frame}
\frametitle{Автоматизация сборки в CLI, контейнеризация}
\# syntax=docker/dockerfile:1
Докерфайл+код -> образ -> докер -> контейнер с программой & Упомянутый специальный файл называется докерфайл и в нашем случае он будет мало отличаться от того, что мы писали ранее в терминале или написали в мейкфайле. Первой строкой докерфайла мы обязательно должны указать, какой виртуальный образ будет для нас основой. \\ \hline
FROM bellsoft/liberica-openjdk-alpine:11.0.16.1-1
\# LABELS go here
\# from where (related to Dockerfile) to where
COPY ./src ./src
\# remember that you are root and in / directory
RUN mkdir ./out
\# be sure to use relative paths
RUN javac -sourcepath ./src -d out ./src/ru/gb/dj/Main.java
\# what will we do on a container start
CMD java -classpath ./out ru.gb.dj.Main
\end{frame}
\note{С точки зрения разработки, контейнерные приложения в докере это, по сути, набор инструкций, которые вы пишете в специальном файле. Всё остальное докер берёт на себя. Он эти инструкции выполняет, виртуализует, запускает и делает все остальные свои важные вещи, а мы в результате видим заветный сервис или приложение, поднятые буквально парой команд в терминале.
CMD java -classpath ./out ru.gb.dj.Main & Тут можно выбрать пустой образ, образ ОС, например, убунту или центос, а можно выбрать сразу ЖДК, как поступим мы. Дальше скажем докеру, что надо будет при создании образа скопировать все файлы из нашей папки СРЦ внутрь образа, в папку СРЦ потом также при создании образа надо будет создать внутри папку аут простой терминальной командой и запустить компиляцию. мы же изначально используем образ ждк, а значит там внутри есть компилятор. главное не запутаться в путях и не забывать, что команда будет выполняться в образе, а не на нашем компьютере. А последняя команда говорит, что именно нужно сделать, когда контейнер создаётся из образа и заускается. Как очевидно, докер-образ и как следствие докер-контейнеры возможно настроить таким образом, чтобы скомпилированные файлы складывались обратно на компьютер пользователя через общие папки, если это нужно, или, например, компилировать в разные папки классы разными версиями компилятора, и запускать их также разными версиями, имея весь этот зоопарк технологий в контейнерах, не засоряя свой компьютер. Можно даже, например, не брать в качестве исходного образа ждк, а взять ОС, вручную установить на ней ждк и, например, мейк, и автоматизировать всё мейком внутри докера. Это странно, но, как минимум не запрещено. \\ \hline
Упомянутый специальный файл называется докерфайл и в нашем случае он будет мало отличаться от того, что мы писали ранее в терминале или написали в мейкфайле. Первой строкой докерфайла мы обязательно должны указать, какой виртуальный образ будет для нас основой. Тут можно выбрать пустой образ, образ ОС, например, убунту или центос, а можно выбрать сразу ЖДК, как поступим мы.
FROM bellsoft/liberica-openjdk-alpine:11.0.16.1-1
Дальше скажем докеру, что надо будет при создании образа скопировать все файлы из нашей папки СРЦ внутрь образа, в папку СРЦ
COPY ./src ./src
}
\newpage
\note{
потом также при создании образа надо будет создать внутри папку аут простой терминальной командой
RUN mkdir ./out
и запустить компиляцию. мы же изначально используем образ ждк, а значит там внутри есть компилятор. главное не запутаться в путях и не забывать, что команда будет выполняться в образе, а не на нашем компьютере.
RUN javac -sourcepath ./src -d out ./src/ru/gb/dj/Main.java
А последняя команда говорит, что именно нужно сделать, когда контейнер создаётся из образа и заускается.
CMD java -classpath ./out ru.gb.dj.Main
Как очевидно, докер-образ и как следствие докер-контейнеры возможно настроить таким образом, чтобы скомпилированные файлы складывались обратно на компьютер пользователя через общие папки, если это нужно, или, например, компилировать в разные папки классы разными версиями компилятора, и запускать их также разными версиями, имея весь этот зоопарк технологий в контейнерах, не засоряя свой компьютер.
Можно даже, например, не брать в качестве исходного образа ждк, а взять ОС, вручную установить на ней ждк и, например, мейк, и автоматизировать всё мейком внутри докера. Это странно, но, как минимум не запрещено.}
\begin{frame}
\frametitle{Автоматизация сборки в CLI, контейнеризация}
docker run
\end{frame}
\note{Докерфайл это конечно хорошо, но надо бы его ещё как-то применить, а значит, надо собрать из него образ и запускать потом контейнеры на основе этого образа. Собрать образ не сложно, нужно дать докеру соответствующую команду
docker build . -t hellojava:latest
где точка, понятно, текущая папка, содержащая докерфайл, а -т это записываемый в образ тег. по этому тегу потом удобнее искать образы. с тегами можно публиковать образы на докерхаб. Готовые образы можно запускать так, чтобы после выполнения контейнер уничтожался, это как раз то, что нам нужно, поскольку в процессе отработки функциональности приложений и создаваемого образа часто приходится создавать контейнеры после изменения каждой строки, а это очень много контейнеров, поэтому добавим флаг --рм и получим строку
docker run --rm hellojava:latest
запустив которую получим в терминале долгожданный хеловорлд
}
\begin{frame}
\frametitle{итоги}
что изучили и домашка
\end{frame}
\note{На этом уроке мы рассмотрели историю и причины создания языка, его окружение и структуру проекта, узнали, что скрывают в себе такие аббревиатуры как JDK JRE JVM SDK JIT CLI. Рассмотрели базовое применение утилит java, javac и javadoc. Даже немного посмотрели в сторону автоматизации рутинных задач.
}
\newpage
\note{
В качестве домашнего задания попробуйте
docker run --rm hellojava:latest & Докерфайл это конечно хорошо, но надо бы его ещё как-то применить, а значит, надо собрать из него образ и запускать потом контейнеры на основе этого образа. Собрать образ не сложно, нужно дать докеру соответствующую команду, где точка, понятно, текущая папка, содержащая докерфайл, а -т это записываемый в образ тег. по этому тегу потом удобнее искать образы. с тегами можно публиковать образы на докерхаб. Готовые образы можно запускать так, чтобы после выполнения контейнер уничтожался, это как раз то, что нам нужно, поскольку в процессе отработки функциональности приложений и создаваемого образа часто приходится создавать контейнеры после изменения каждой строки, а это очень много контейнеров, поэтому добавим флаг --рм и получим строку, запустив которую получим в терминале долгожданный хеловорлд \\ \hline
на этом уроке & На этом уроке мы рассмотрели историю и причины создания языка, его окружение и структуру проекта, узнали, что скрывают в себе такие аббревиатуры как JDK JRE JVM SDK JIT CLI. Рассмотрели базовое применение утилит java, javac и javadoc. Даже немного посмотрели в сторону автоматизации рутинных задач \\ \hline
домка & В качестве домашнего задания попробуйте
\begin{itemize}
\item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю.
\item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам.
\item Создать Makefile с задачами сборки, очистки и создания документации на весь проект.
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их.
\end{itemize}
На следующей лекции мы поговорим о том как осуществлять управление более сложными проектами: Jar-файлы; сборщики Gradle/Maven; чтоб такое репозитории и как ими пользоваться. \\ \hline
На следующей лекции мы поговорим о том как осуществлять управление более сложными проектами: Jar-файлы; сборщики Gradle/Maven; чтоб такое репозитории и как ими пользоваться.
}
и помните, что единственная корочка ради которой действительно стоит учиться, это корочка головного мозга & \\ \hline
\end{longtable}
\end{document}