Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

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

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

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

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


Дополнительная практика по теме:


Группы для общения:


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

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

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

Для полного доступа к курсу, нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

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

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

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

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

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

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».