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>Если в имени класса больше одного слова, то каждое из них пишется с большой буквы -> CamelStyle.<em>(стиль кода)</em></p>
35
<li><p>Если в имени класса больше одного слова, то каждое из них пишется с большой буквы -> 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>