Объектно-ориентированное программирование на Java. Платформа Java SE

Тимур Машнин

Эта книга предназначена для тех, кто хочет научиться программировать на языке Java.С этой книгой вы обучитесь объектно-ориентированному программированию на платформе Java SE и научитесь применять принципы ООП на практике.Эта книга охватывает важные аспекты программирования на языке Java, начиная с основ и заканчивая объектно-ориентированным подходом и командной разработкой кода.

Оглавление

Область видимости

Классы имеют двойную цель.

Они могут использоваться для определения новых типов данных, которые связаны с решением задачи.

И также они служат для структурирования кода.

У нас есть инкапсулированные переменные и методы в классах.

Однако любая другая часть программы может изменять переменные и вызывать методы.

И иногда важно скрыть доступ к некоторым переменным или методам, чтобы контролировать возникновение возможных проблем.

Представьте себе, что в нашей модели автомобиля у нас есть поле gas, которое служит индикатором оставшегося топлива в машине.

Представьте, что эта переменная должна содержать значение от 0 до 100, 0 означает пустой бак, а 100 — полный.

Теперь, когда автомобиль тратит при движении n единиц топлива, эти n единиц вычитаются из переменной gas.

Мы также можем заполнить бак на АЗС, и в этом случае переменная gas увеличивается.

Таким образом, топливо уменьшается с помощью метода перемещения и увеличивается с помощью метода заполнения.

Однако у нас может быть проблема, поскольку любая часть программы имеет доступ к этой переменной gas.

Кто-то может даже изменить переменную на отрицательное число, что не имеет смысла.

Таким образом, два метода, которые должны изменять и должны иметь доступ к этой переменной, не являются единственным контролем этой переменной, и мы должны каким-то образом ограничить этот доступ.

Давайте посмотрим на эти два модификатора доступа, public и private.

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

Здесь мы пишем private до объявления переменной gas.

Это означает, что мы можем получить доступ к ней только в классе, а не вне класса.

Два метода, move и fill, определяются как public, и поэтому могут быть вызваны вне класса.

Это типичная ситуация, чтобы иметь приватные переменные и публичные методы.

У нас также могут быть приватные методы, которые определены, например, как вспомогательные методы для других публичных методов.

Здесь мы видим метод check, который вызывается из move и fill, но нам не нужно вызывать этот метод вне класса.

Наконец, мы также ставим ключевое слово public перед классом.

Его смысл станет понятным позже.

Таким образом, извне класса, как правило, мы имеем доступ только к методам, а не к переменным.

Доступ к переменным имеют только методы.

Здесь мы разделили понятия инкапсуляции и сокрытие информации.

Хотя для некоторых эти две концепции идут вместе, то есть инкапсуляция всегда подразумевает сокрытие информации.

Как правило, мы хотим иметь приватные переменные экземпляра и публичные методы, которые получают доступ к этим переменным.

Но мы должны запрограммировать это явно с помощью ключевых слов «private» и «public».

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

А затем определять публичные методы для установки значений переменных и получения значений переменных.

Как правило, название этих двух типов методов соответствует одному и тому же шаблону:

Как правило, имена этих методов начинаются со слова «set» и начинаются со слова «get».

Поэтому эти методы иногда называют сеттеры и геттеры.

Заметим, что в методе setGas мы имеем параметр g, который присваивается полю gas.

Иногда, мы хотим назвать параметр setGas тем же именем, что и переменную экземпляра.

И с этим не возникает никаких проблем.

Однако, если мы хотим отличить визуально параметр от поля, мы можем использовать ключевое слово this и точку перед именем.

Это означает, что это имя относится к полю класса.

В некоторых случаях нам нужно иметь поля класса, которые имеют общее значение для всех объектов в классе.

Эти переменные называются переменными класса, а не переменными экземпляра класса, и они объявляются с помощью ключевого слова «static».

Эти переменные не создаются для каждого созданного объекта класса.

Они создаются только один раз для всех объектов класса.

И если мы изменим это значение, оно будет изменено для всех объектов.

Если мы не хотим, чтобы эта переменная менялась,

Мы можем сделать ее константой, добавив ключевое слово «final».

Мы можем также сделать это и для переменных экземпляра.

По соглашению, имена таких переменных пишутся в верхнем регистре, заглавными буквами.

Как показано здесь.

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

Таким образом, теперь у нас есть разные виды переменных.

С одной стороны, у нас есть локальные переменные.

Затем у нас есть переменные экземпляра, которые создаются для каждого объекта или экземпляра класса.

Каждый объект может иметь свое значение, хранящееся в этой переменной.

Мы можем использовать ключевое слово «this» для обозначения этих переменных.

И у нас есть переменные класса, которые создаются только один раз для всех объектов одного класса.

Они объявляются с ключевым словом «static».

Статические переменные инициализируются только один раз, при запуске выполнения кода, при загрузке класса.

Эти переменные будут инициализированы первыми, прежде чем будут инициализированы любые переменные экземпляра.

И если вы хотите сделать переменную экземпляра или переменную класса неизменной, вы добавляете ключевое слово «final».

Смотрите также

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я