- Основные концепции ООП
- До появления ООП
- Появление ООП
- Важные этапы в разработке
- Что же такое класс
- Практика offline
- Дополнительная информация
Внимание. В слайде была ошибка. Имя класса может начинаться со знака доллара ($).
Основные концепции ООП
- все в этом мире представляется как отдельный объект
- каждый объект может иметь свое состояние (иметь поля)
- каждый объект может выполнять некоторые действия
- программа - взаимодействие этих объектов
До появления ООП
- дизайн программ - "сверху вниз"
- высокая сложность кода
- сложность растет обратно пропорционально до завершения проекта
- а это живой код или "макароны"? - сложно поддерживать
- новые фитчи разрабатывать невозможно
Появление ООП
- разработка идет "снизу вверх"
- описываются объекты и действия с ними
- такой код:
- легко тестировать
- стабильный
- легко поддерживать
- легко читаемый
- правильный дизайн до разработки!
В мире java
все является объектом.
Важные этапы в разработке
- нужно понять задачу (то есть разработать высокоуровневую архитектуру того, что собираетесь делать)
- для этого лучше всего использовать UML (спец язык, на котором при помощи диаграмм описывается архитектура)
- пройти design review (показать кому-либо, кто в курсе что необходимо)
- если есть готовая диаграмма, можно приступать к кодированию
- пройти code review (показать тому, кто разбирается)
Что же такое класс
Класс это шаблон, по которому будут создаваться объекты. И этим шаблоном является не сам текстовый файл ИмяКласса.java
, а логическая синтаксическая структура объектов и команд взаимодействия их между собой. Просто эта структура физически записана в текстовом файле. И структура эта имеет четкие правила организации и написания (синтаксис и стиль кода):
Класс обозначается ключевым словом
class
. И имя файла, в котором написан этот класс, должно совпадать с именем класса, без учета расширения.java
. Например, для класса по имениMyClass
файл будет называться вот так:MyClass.java
. (синтаксис)Имя класса всегда пишется с большой буквы! (синтаксис)
Если в имени класса больше одного слова, то каждое из них пишется с большой буквы —> CamelStyle. (стиль кода)
Поля и методы не могут существовать за пределами тела класса. (синтаксис)
Каждый класс имеет свое тело. Условные операторы
if
, различные циклы, методы и все, что выделяется в отдельный блок кода — тоже может иметь свое тело. И тела эти всегда заключены в фигурные скобки{}
:
class Foo {
// некий код
}
(синтаксис)
- Эти блоки кода могут быть вложены друг в друга несколько раз. Например:
class CamelStyle {
public void doSomething() {
for (int i = 0; i < 10; i++) {
if (i < 5) {
System.out.println("Первая половина");
} else {
System.out.println("Вторая половина");
}
}
}
}
В этом примере в теле класса находится метод, в теле метода — цикл, а в теле цикла — два условных оператора со своими телами.
Соблюдение границ тел классов и других сущностей — важный элемент синтаксиса.
Количество открытых и закрытых скобок в классе должно быть попарно одинаковым. Иначе компилятор не поймет, где чье тело. (синтаксис)
Каждая вложенная сущность пишется с отступом в четыре пробела от первого символа сущности в которую она вложена. Соблюдение этих отступов делает код более понятным и логически структурированным, а не набором магических заклинаний. Несоблюдение этого правила не приведет к ошибке компиляции. Но если вы хотите чтобы ваш код понимали другие программисты, да и вы сами, то его нужно соблюдать. Рекомендую к ежедневному перечитыванию java-codestyle. (стиль кода)
Разберем структуру класса на примере в коде:
1 class CamelStyle {
2
3 ••••String stringMessage = "некая полезная строка, как поле класса";
4 ••••Object forExample = new Object();
5
6 ••••public void doSomething() {
7 ••••••••System.out.println(stringMessage);
8 ••••••••System.out.println(forExample);
9 ••••}
10
11}
(Циферки и точки тут для удобства объяснения. Их копировать не нужно!)
- Ключевое слово
class
в строке1
обозначает начало класса. CamelStyle
это имя класса.{
это открывающая фигурная скобка. Отступает на один пробел от имени класса. За ней начинается тело класса. Эта скобка не может существовать без своей закрывающей компаньонки}
! Абсолютно вся суть класса содержится между этими скобками. Пустой класс выглядел бы вот так:class CamelStyle {}
(это компилируется).- строка
2
— это отступ от объявления класса. Его отсутствие не приведет к ошибке компиляции. Но он необходим для удобства чтения кода. }
закрывающая скобка должна быть всегда на уровне первого слова в объявлении класса, метода и т.д. Например, в данном примере, закрывающая скобка класса находится в строке11
, а закрывающая скобка метода в строке9
. Обратите внимание на их расположение относительно открывающих скобок.String stringMessage = "некая полезная строка, как поле класса";
строка3
иObject forExample = new Object();
строка4
— это поля класса. Начало их записи с отступом в четыре пробела от уровня класса.- В пятой строке пусто для визуального отделения метода от поля.
public void doSomething() {
... строка6
— это начало метода. Обратите внимание, что у него свои фигурные скобки, свое тело. Но метод весь находится внутри тела класса. О методах продолжим в дальнейших уроках. Эта строка так же начинается на четыре пробела дальше от уровня класса.System.out.println(stringMessage);
строка7
иSystem.out.println(forExample);
строка8
— это команды для вывода на экран. Они вложены в методdoSomething
и имеют отступ в четыре пробела от уровня метода.- И в десятой строке отступ перед закрывающей класс скобкой.
Практика offline
Потренируйтесь самостоятельно компилировать класс
CamelStyle
. Командойjavac CamelStyle.java
. Возьмите, по очереди, оба варианта этого класса из текста выше.Попробуйте поудалять или попереставлять скобки. Посмотрите на ошибки компилятора. И обязательно почитайте их! Так вы быстро привыкнете понимать вывод компилятора об ошибках, т.к. вы знаете где вы их сделали.
А если вам хочется этот класс не только скомпилировать, но и запустить на исполнение — то для этого нужен
main
-метод, с которого начинается любая программа.Я его оформил в отдельном классе:
class MainTest { public static void main(String[] args) { CamelStyle camelStyle = new CamelStyle(); camelStyle.doSomething(); } }
Оба класса должны лежать в одной папке. Компилируются командой
javac MainTest.java CamelStyle.java
или простоjavac MainTest.java
— компилятор автоматом скомпилирует нужный , используемый вMainTest.java
, классCamelStyle.java
.Запускать на исполнение нужно только тот класс, который содержит в себе
main
-метод. В данном случае это будет так:java MainTest
. Напоминаю: расширение файла для командыjava
не пишем!Перенесите
main
-метод вCamelStyle.java
. Скомпилируйте и запустите на исполнение программу уже без участияMainTest.java
.
Дополнительная информация
Начиная с java11, однофайловые программы можно не компилировать, а сразу запускать на исполнение. Например класс:
class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Можно сразу скормить java. Команда будет выглядеть так: java Main.java
. В данном случае нужно обязательно указать расширение файла .java
. Иначе java будет автоматически искать класс с расширением .class
.
Как читать UML-диаграммы
UML-диаграммы это обычные диаграммы с фигурками и значками.
Начнем с индикаторов, обозначающих модификаторы доступа:
+ public
- private
# protected
default (нет никакого модификатора доступа)
Имена полей и их типы в диаграммах пишутся через двоеточие, например: countr: int
, name: String
. Но в коде, не забывайте, сначала пишем тип, а потом имя.
Экспериментируйте с кодом смелее!
Полезные ссылки:
- Правила написания кода на Java. Перечитывайте утром и вечером. :))
- What is an Object?
- What is a Class?
- sublime
UML-диаграммы можно создавать различными приложениями, как платными так и бесплатными:
- Astah UML Очень нарядный и платный продукт.
- genMyModel - позволяет создавать с нуля UML-диаграмму, генерировать код из диаграммы. Залогиниться там можно через GitHub
- PlantUML — популярный плагин intellij IDEA для создания диаграмм различной сложности. Пример создания uml-диаграмм архитектуры проекта с помощью PlantUML. Есть и другие плагины для IDEA. Но этот имеет обширную функциональность и гайд по использованию. Этот плагин читает UML-диаграммы прямо из файла с кодом класса.
- Для Unix-систем может подойти Umbrello как отдельное приложение по работе с диаграммами. Свободное ПО.
- Можно подыскать себе свой любимый UML-редактор.