Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 2. Урок 1. Введение в ООП. Введение в Java

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

alt text Внимание. В слайде была ошибка. Имя класса может начинаться со знака доллара ($).


Основные концепции ООП

  • все в этом мире представляется как отдельный объект
  • каждый объект может иметь свое состояние (иметь поля)
  • каждый объект может выполнять некоторые действия
  • программа - взаимодействие этих объектов

До появления ООП

  • дизайн программ - "сверху вниз"
    • высокая сложность кода
    • сложность растет обратно пропорционально до завершения проекта
    • а это живой код или "макароны"? - сложно поддерживать
    • новые фитчи разрабатывать невозможно

Появление ООП

  • разработка идет "снизу вверх"
    • описываются объекты и действия с ними
    • такой код:
      • легко тестировать
      • стабильный
      • легко поддерживать
      • легко читаемый
    • правильный дизайн до разработки!

В мире 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

  1. Потренируйтесь самостоятельно компилировать класс 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 не пишем!

  2. Перенесите 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. Но в коде, не забывайте, сначала пишем тип, а потом имя.

Экспериментируйте с кодом смелее!

Полезные ссылки:


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»