HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Внимание. В слайде была ошибка.</strong>Имя класса может начинаться со знака доллара ($).</p>
1 <p><strong>Внимание. В слайде была ошибка.</strong>Имя класса может начинаться со знака доллара ($).</p>
2 <h2>Основные концепции ООП</h2>
2 <h2>Основные концепции ООП</h2>
3 <ul><li>все в этом мире представляется как отдельный объект</li>
3 <ul><li>все в этом мире представляется как отдельный объект</li>
4 <li>каждый объект может иметь свое состояние (иметь поля)</li>
4 <li>каждый объект может иметь свое состояние (иметь поля)</li>
5 <li>каждый объект может выполнять некоторые действия</li>
5 <li>каждый объект может выполнять некоторые действия</li>
6 <li>программа - взаимодействие этих объектов</li>
6 <li>программа - взаимодействие этих объектов</li>
7 </ul><h2>До появления ООП</h2>
7 </ul><h2>До появления ООП</h2>
8 <ul><li>дизайн программ - "сверху вниз"<ul><li>высокая сложность кода</li>
8 <ul><li>дизайн программ - "сверху вниз"<ul><li>высокая сложность кода</li>
9 <li>сложность растет обратно пропорционально до завершения проекта</li>
9 <li>сложность растет обратно пропорционально до завершения проекта</li>
10 <li>а это живой код или "макароны"? - сложно поддерживать</li>
10 <li>а это живой код или "макароны"? - сложно поддерживать</li>
11 <li>новые фитчи разрабатывать невозможно</li>
11 <li>новые фитчи разрабатывать невозможно</li>
12 </ul></li>
12 </ul></li>
13 </ul><h2>Появление ООП</h2>
13 </ul><h2>Появление ООП</h2>
14 <ul><li>разработка идет "снизу вверх"<ul><li>описываются объекты и действия с ними</li>
14 <ul><li>разработка идет "снизу вверх"<ul><li>описываются объекты и действия с ними</li>
15 <li>такой код:<ul><li>легко тестировать</li>
15 <li>такой код:<ul><li>легко тестировать</li>
16 <li>стабильный</li>
16 <li>стабильный</li>
17 <li>легко поддерживать</li>
17 <li>легко поддерживать</li>
18 <li>легко читаемый</li>
18 <li>легко читаемый</li>
19 </ul></li>
19 </ul></li>
20 <li>правильный дизайн до разработки!</li>
20 <li>правильный дизайн до разработки!</li>
21 </ul></li>
21 </ul></li>
22 </ul><p><em><strong>В мире java все является объектом.</strong></em></p>
22 </ul><p><em><strong>В мире java все является объектом.</strong></em></p>
23 <h2>Важные этапы в разработке</h2>
23 <h2>Важные этапы в разработке</h2>
24 <ul><li>нужно понять задачу (то есть разработать высокоуровневую архитектуру того, что собираетесь делать)</li>
24 <ul><li>нужно понять задачу (то есть разработать высокоуровневую архитектуру того, что собираетесь делать)</li>
25 <li>для этого лучше всего использовать UML (спец язык, на котором при помощи диаграмм описывается архитектура)</li>
25 <li>для этого лучше всего использовать UML (спец язык, на котором при помощи диаграмм описывается архитектура)</li>
26 <li>пройти design review (показать кому-либо, кто в курсе что необходимо)</li>
26 <li>пройти design review (показать кому-либо, кто в курсе что необходимо)</li>
27 <li>если есть готовая диаграмма, можно приступать к кодированию</li>
27 <li>если есть готовая диаграмма, можно приступать к кодированию</li>
28 <li>пройти code review (показать тому, кто разбирается)</li>
28 <li>пройти code review (показать тому, кто разбирается)</li>
29 </ul><h2>Что же такое класс</h2>
29 </ul><h2>Что же такое класс</h2>
30 <p>Класс это шаблон, по которому будут создаваться объекты. И этим шаблоном является не сам текстовый файл ИмяКласса.java, а логическая синтаксическая структура объектов и команд взаимодействия их между собой. Просто эта структура физически записана в текстовом файле. И структура эта имеет четкие правила организации и написания (синтаксис и стиль кода):</p>
30 <p>Класс это шаблон, по которому будут создаваться объекты. И этим шаблоном является не сам текстовый файл ИмяКласса.java, а логическая синтаксическая структура объектов и команд взаимодействия их между собой. Просто эта структура физически записана в текстовом файле. И структура эта имеет четкие правила организации и написания (синтаксис и стиль кода):</p>
31 <ul><li><p>Класс обозначается ключевым словом class. И имя файла, в котором написан этот класс, должно совпадать с именем класса, без учета расширения .java. Например, для класса по имени MyClass файл будет называться вот так: MyClass.java.<em>(синтаксис)</em></p>
31 <ul><li><p>Класс обозначается ключевым словом class. И имя файла, в котором написан этот класс, должно совпадать с именем класса, без учета расширения .java. Например, для класса по имени MyClass файл будет называться вот так: MyClass.java.<em>(синтаксис)</em></p>
32 </li>
32 </li>
33 <li><p>Имя класса<strong>всегда</strong>пишется с большой буквы!<em>(синтаксис)</em></p>
33 <li><p>Имя класса<strong>всегда</strong>пишется с большой буквы!<em>(синтаксис)</em></p>
34 </li>
34 </li>
35 <li><p>Если в имени класса больше одного слова, то каждое из них пишется с большой буквы -&gt; CamelStyle.<em>(стиль кода)</em></p>
35 <li><p>Если в имени класса больше одного слова, то каждое из них пишется с большой буквы -&gt; CamelStyle.<em>(стиль кода)</em></p>
36 </li>
36 </li>
37 <li><p>Поля и методы не могут существовать за пределами тела класса.<em>(синтаксис)</em></p>
37 <li><p>Поля и методы не могут существовать за пределами тела класса.<em>(синтаксис)</em></p>
38 </li>
38 </li>
39 <li><p>Каждый класс имеет свое тело. Условные операторы if, различные циклы, методы и все, что выделяется в отдельный блок кода - тоже может иметь свое тело. И тела эти<strong>всегда</strong>заключены в фигурные скобки {}:</p>
39 <li><p>Каждый класс имеет свое тело. Условные операторы if, различные циклы, методы и все, что выделяется в отдельный блок кода - тоже может иметь свое тело. И тела эти<strong>всегда</strong>заключены в фигурные скобки {}:</p>
40 </li>
40 </li>
41 </ul><p><em>(синтаксис)</em></p>
41 </ul><p><em>(синтаксис)</em></p>
42 <ul><li>Эти блоки кода могут быть вложены друг в друга несколько раз. Например:</li>
42 <ul><li>Эти блоки кода могут быть вложены друг в друга несколько раз. Например:</li>
43 </ul><blockquote><p>В этом примере в теле класса находится метод, в теле метода - цикл, а в теле цикла - два условных оператора со своими телами.</p>
43 </ul><blockquote><p>В этом примере в теле класса находится метод, в теле метода - цикл, а в теле цикла - два условных оператора со своими телами.</p>
44 </blockquote><p><em>Соблюдение границ тел классов и других сущностей - важный элемент<strong>синтаксиса</strong>.</em></p>
44 </blockquote><p><em>Соблюдение границ тел классов и других сущностей - важный элемент<strong>синтаксиса</strong>.</em></p>
45 <ul><li><p>Количество открытых и закрытых скобок в классе должно быть попарно одинаковым. Иначе компилятор не поймет, где чье тело.<em>(синтаксис)</em></p>
45 <ul><li><p>Количество открытых и закрытых скобок в классе должно быть попарно одинаковым. Иначе компилятор не поймет, где чье тело.<em>(синтаксис)</em></p>
46 </li>
46 </li>
47 <li><p>Каждая вложенная сущность пишется с отступом в четыре пробела от первого символа сущности в которую она вложена. Соблюдение этих отступов делает код более понятным и логически структурированным, а не набором магических заклинаний. Несоблюдение этого правила не приведет к ошибке компиляции. Но если вы хотите чтобы ваш код понимали другие программисты, да и вы сами, то его нужно соблюдать. Рекомендую к ежедневному перечитыванию<a>java-codestyle</a>.<em>(стиль кода)</em></p>
47 <li><p>Каждая вложенная сущность пишется с отступом в четыре пробела от первого символа сущности в которую она вложена. Соблюдение этих отступов делает код более понятным и логически структурированным, а не набором магических заклинаний. Несоблюдение этого правила не приведет к ошибке компиляции. Но если вы хотите чтобы ваш код понимали другие программисты, да и вы сами, то его нужно соблюдать. Рекомендую к ежедневному перечитыванию<a>java-codestyle</a>.<em>(стиль кода)</em></p>
48 </li>
48 </li>
49 </ul><p><strong>Разберем структуру класса на примере в коде:</strong></p>
49 </ul><p><strong>Разберем структуру класса на примере в коде:</strong></p>
50 <p><em>(Циферки и точки тут для удобства объяснения. Их копировать не нужно!)</em></p>
50 <p><em>(Циферки и точки тут для удобства объяснения. Их копировать не нужно!)</em></p>
51 <ul><li>Ключевое слово class в строке 1 обозначает начало класса.</li>
51 <ul><li>Ключевое слово class в строке 1 обозначает начало класса.</li>
52 <li>CamelStyle это имя класса.</li>
52 <li>CamelStyle это имя класса.</li>
53 <li>{ это открывающая фигурная скобка. Отступает на один пробел от имени класса. За ней начинается тело класса. Эта скобка не может существовать без своей закрывающей компаньонки }! Абсолютно<strong>вся суть</strong>класса содержится между этими скобками. Пустой класс выглядел бы вот так: class CamelStyle {} (это компилируется).</li>
53 <li>{ это открывающая фигурная скобка. Отступает на один пробел от имени класса. За ней начинается тело класса. Эта скобка не может существовать без своей закрывающей компаньонки }! Абсолютно<strong>вся суть</strong>класса содержится между этими скобками. Пустой класс выглядел бы вот так: class CamelStyle {} (это компилируется).</li>
54 <li>строка 2 - это отступ от объявления класса. Его отсутствие не приведет к ошибке компиляции. Но он необходим для удобства чтения кода.</li>
54 <li>строка 2 - это отступ от объявления класса. Его отсутствие не приведет к ошибке компиляции. Но он необходим для удобства чтения кода.</li>
55 <li>} закрывающая скобка должна быть всегда на уровне первого слова в объявлении класса, метода и т.д. Например, в данном примере, закрывающая скобка класса находится в строке 11, а закрывающая скобка метода в строке 9. Обратите внимание на их расположение относительно открывающих скобок.</li>
55 <li>} закрывающая скобка должна быть всегда на уровне первого слова в объявлении класса, метода и т.д. Например, в данном примере, закрывающая скобка класса находится в строке 11, а закрывающая скобка метода в строке 9. Обратите внимание на их расположение относительно открывающих скобок.</li>
56 <li>String stringMessage = "некая полезная строка, как поле класса"; строка 3 и Object forExample = new Object(); строка 4 - это поля класса. Начало их записи с отступом в четыре пробела от уровня класса.</li>
56 <li>String stringMessage = "некая полезная строка, как поле класса"; строка 3 и Object forExample = new Object(); строка 4 - это поля класса. Начало их записи с отступом в четыре пробела от уровня класса.</li>
57 <li>В пятой строке пусто для визуального отделения метода от поля.</li>
57 <li>В пятой строке пусто для визуального отделения метода от поля.</li>
58 <li>public void doSomething() {... строка 6 - это начало метода. Обратите внимание, что у него свои фигурные скобки, свое тело. Но метод весь находится внутри тела класса. О методах продолжим в дальнейших уроках. Эта строка так же начинается на четыре пробела дальше от уровня класса.</li>
58 <li>public void doSomething() {... строка 6 - это начало метода. Обратите внимание, что у него свои фигурные скобки, свое тело. Но метод весь находится внутри тела класса. О методах продолжим в дальнейших уроках. Эта строка так же начинается на четыре пробела дальше от уровня класса.</li>
59 - <li>System.out.println(stringMessage); строка 7 и System.out.println(forExample); строка 8 - это команды для вывода на экран. Они вложены в метод doSomething и имеют отступ в четыре пробела от уровня метода.</li>
59 + <li>System.out.println(stringMessage); строка 7 и System.out.println(forExample); строка 8 - это команды для вывода на экран. Они вложены в метод doSomething и имеют отступ в четыре пробела от уровня метоа.</li>
60 <li>И в десятой строке отступ перед закрывающей класс скобкой.</li>
60 <li>И в десятой строке отступ перед закрывающей класс скобкой.</li>
61 </ul><h2>Практика offline</h2>
61 </ul><h2>Практика offline</h2>
62 <ol><li><p>Потренируйтесь самостоятельно компилировать класс CamelStyle. Командой javac CamelStyle.java. Возьмите, по очереди, оба варианта этого класса из текста выше.</p>
62 <ol><li><p>Потренируйтесь самостоятельно компилировать класс CamelStyle. Командой javac CamelStyle.java. Возьмите, по очереди, оба варианта этого класса из текста выше.</p>
63 <p>Попробуйте поудалять или попереставлять скобки. Посмотрите на ошибки компилятора. И обязательно почитайте их! Так вы быстро привыкнете понимать вывод компилятора об ошибках, т.к. вы знаете где вы их сделали.</p>
63 <p>Попробуйте поудалять или попереставлять скобки. Посмотрите на ошибки компилятора. И обязательно почитайте их! Так вы быстро привыкнете понимать вывод компилятора об ошибках, т.к. вы знаете где вы их сделали.</p>
64 <p>А если вам хочется этот класс не только скомпилировать, но и запустить на исполнение - то для этого нужен main-метод, с которого начинается любая программа.</p>
64 <p>А если вам хочется этот класс не только скомпилировать, но и запустить на исполнение - то для этого нужен main-метод, с которого начинается любая программа.</p>
65 <p>Я его оформил в отдельном классе:</p>
65 <p>Я его оформил в отдельном классе:</p>
66 <p>Оба класса должны лежать в одной папке. Компилируются командой javac MainTest.java CamelStyle.java или просто javac MainTest.java - компилятор автоматом скомпилирует нужный , используемый в MainTest.java, класс CamelStyle.java.</p>
66 <p>Оба класса должны лежать в одной папке. Компилируются командой javac MainTest.java CamelStyle.java или просто javac MainTest.java - компилятор автоматом скомпилирует нужный , используемый в MainTest.java, класс CamelStyle.java.</p>
67 <p>Запускать на исполнение нужно только тот класс, который содержит в себе main-метод. В данном случае это будет так: java MainTest. Напоминаю: расширение файла для команды java не пишем!</p>
67 <p>Запускать на исполнение нужно только тот класс, который содержит в себе main-метод. В данном случае это будет так: java MainTest. Напоминаю: расширение файла для команды java не пишем!</p>
68 </li>
68 </li>
69 <li><p>Перенесите main-метод в CamelStyle.java. Скомпилируйте и запустите на исполнение программу уже без участия MainTest.java.</p>
69 <li><p>Перенесите main-метод в CamelStyle.java. Скомпилируйте и запустите на исполнение программу уже без участия MainTest.java.</p>
70 </li>
70 </li>
71 </ol><h2>Дополнительная информация</h2>
71 </ol><h2>Дополнительная информация</h2>
72 <p>Начиная с java11, однофайловые программы можно не компилировать, а сразу запускать на исполнение. Например класс:</p>
72 <p>Начиная с java11, однофайловые программы можно не компилировать, а сразу запускать на исполнение. Например класс:</p>
73 <p>Можно сразу скормить java. Команда будет выглядеть так: java Main.java. В данном случае нужно обязательно указать расширение файла .java. Иначе java будет автоматически искать класс с расширением .class.</p>
73 <p>Можно сразу скормить java. Команда будет выглядеть так: java Main.java. В данном случае нужно обязательно указать расширение файла .java. Иначе java будет автоматически искать класс с расширением .class.</p>
74 <h3>Как читать UML-диаграммы</h3>
74 <h3>Как читать UML-диаграммы</h3>
75 <p>UML-диаграммы это обычные диаграммы с фигурками и значками.</p>
75 <p>UML-диаграммы это обычные диаграммы с фигурками и значками.</p>
76 <p>Начнем с индикаторов, обозначающих модификаторы доступа:</p>
76 <p>Начнем с индикаторов, обозначающих модификаторы доступа:</p>
77 <p>+ public - private # protected default (нет никакого модификатора доступа)</p>
77 <p>+ public - private # protected default (нет никакого модификатора доступа)</p>
78 <p>Имена полей и их типы в диаграммах пишутся через двоеточие, например: countr: int, name: String. Но в коде, не забывайте, сначала пишем тип, а потом имя.</p>
78 <p>Имена полей и их типы в диаграммах пишутся через двоеточие, например: countr: int, name: String. Но в коде, не забывайте, сначала пишем тип, а потом имя.</p>
79 <p>Экспериментируйте с кодом смелее!</p>
79 <p>Экспериментируйте с кодом смелее!</p>
80 <p><strong>Полезные ссылки:</strong></p>
80 <p><strong>Полезные ссылки:</strong></p>
81 <ul><li><p><a>Правила написания кода на Java</a>. Перечитывайте утром и вечером. :))</p>
81 <ul><li><p><a>Правила написания кода на Java</a>. Перечитывайте утром и вечером. :))</p>
82 </li>
82 </li>
83 <li><p><a>What is an Object?</a></p>
83 <li><p><a>What is an Object?</a></p>
84 </li>
84 </li>
85 <li><p><a>What is a Class?</a></p>
85 <li><p><a>What is a Class?</a></p>
86 </li>
86 </li>
87 <li><p><a>sublime</a></p>
87 <li><p><a>sublime</a></p>
88 </li>
88 </li>
89 <li><p>UML-диаграммы можно создавать различными приложениями, как платными так и бесплатными:</p>
89 <li><p>UML-диаграммы можно создавать различными приложениями, как платными так и бесплатными:</p>
90 <ul><li><a>Astah UML</a>Очень нарядный и платный продукт.</li>
90 <ul><li><a>Astah UML</a>Очень нарядный и платный продукт.</li>
91 <li><a>genMyModel</a>- позволяет создавать с нуля UML-диаграмму, генерировать код из диаграммы. Залогиниться там можно через<a>GitHub</a></li>
91 <li><a>genMyModel</a>- позволяет создавать с нуля UML-диаграмму, генерировать код из диаграммы. Залогиниться там можно через<a>GitHub</a></li>
92 <li>PlantUML - популярный плагин intellij IDEA для создания диаграмм различной сложности.<a>Пример создания uml-диаграмм архитектуры проекта с помощью PlantUML</a>. Есть и другие плагины для IDEA. Но этот имеет обширную функциональность и<a>гайд по использованию</a>. Этот плагин читает UML-диаграммы прямо из файла с кодом класса.</li>
92 <li>PlantUML - популярный плагин intellij IDEA для создания диаграмм различной сложности.<a>Пример создания uml-диаграмм архитектуры проекта с помощью PlantUML</a>. Есть и другие плагины для IDEA. Но этот имеет обширную функциональность и<a>гайд по использованию</a>. Этот плагин читает UML-диаграммы прямо из файла с кодом класса.</li>
93 <li>Для Unix-систем может подойти<a>Umbrello</a>как отдельное приложение по работе с диаграммами. Свободное ПО.</li>
93 <li>Для Unix-систем может подойти<a>Umbrello</a>как отдельное приложение по работе с диаграммами. Свободное ПО.</li>
94 <li>Можно подыскать себе свой любимый<a>UML-редактор</a>.</li>
94 <li>Можно подыскать себе свой любимый<a>UML-редактор</a>.</li>
95 </ul></li>
95 </ul></li>
96 </ul>
96 </ul>