Оценить:
 Рейтинг: 3.5

Java за неделю. Вводный курс

Год написания книги
2018
<< 1 ... 13 14 15 16 17 18 19 20 21 ... 25 >>
На страницу:
17 из 25
Настройки чтения
Размер шрифта
Высота строк
Поля

String str2 = str1.toUpperCase (); // str2 = «HELLO, JAVA»;

trim () – удаляет пробелы и служебные символы в начале и конце строки.

Глава 6. Классы и объекты

Если вы уже знакомы с основами объектно-ориентированного программирования (ООП), то можете пропустить эту главу или выборочно прочитать некоторые разделы, чтобы освежить знания в памяти. В любом случае, без понимания концепции ООП вы не сможете программировать на языке Java.

Забегая вперед, отметим, что объектно—ориентированный подход – не панацея от всех проблем и не инструмент на все случаи жизни. Не случайно в языке Java, начиная с версии Java 8, добавлены лямбда—выражения, при помощи которых намного удобнее реализуется отложенное выполнение кода и программирование обработки событий. Об этом будет рассказано в главе 11.

Ответу на вопрос «Зачем нужно ООП и как оно работает?» посвящено много статей и книг. Решив заняться программированием всерьез, вы не сможете обойтись без глубокого изучения массива информации. Но это будет позже. Сейчас мы разберем основные понятия ООП и обрисуем общую картину. Этого будет вполне достаточно на первое время, особенно для программирования на уровне хобби.

6.1 Основная идея ООП

Любая прикладная программа реализует последовательность действий для решения некой задачи. Иными словами, программа – это инструмент, который мы создаем своими руками. Поскольку большинство задач можно решить различными способами, то и внутреннее устройство инструмента может быть разным. С этой точки зрения ООП – один из подходов к конструкции инструмента.

С другой стороны, ООП – это специальный образ мышления, особая философия. Необходимость научиться мыслить новыми понятиями вызывает затруднения у начинающих программистов. В данном случае бесполезно заучивать определения – необходимо понять суть.

Парадигма ООП заключается в том, что решаемую задачу можно разделить на обособленные объекты, над которыми мы совершаем определенные действия. Здесь нас подстерегает первая проблема: уровень абстракции. Если неправильно определить уровень «дробления» задачи или некорректно распределить задачу по объектам, то все достоинства ООП мгновенно превратятся в недостатки. Поэтому объектное программирование начинается с понимания целей и структуры проекта. Хороший программист это, прежде всего, менеджер проекта (как минимум, своей части проекта) и лишь затем составитель кода программы. Сказанное относится даже к простейшим программам. Либо вы мыслите понятиями ООП всегда и полностью, независимо от масштаба проекта, либо вы плохой программист.

Обычно в этом месте начинающие программисты восклицают: «Ну почему так сложно?!» Если вы хотите уметь работать с эффективными и универсальными инструментами, без сложностей не обойтись. Но могу вас успокоить – в повседневной жизни мы постоянно используем проекты и абстракцию разных уровней. Это естественный образ мышления человека! Для облегчения понимания рассмотрим простой пример.

Допустим, перед вами стоит задача регулярно косить траву на лужайке перед домом. Что требуется для решения этой задачи? Прежде всего, нужна газонокосилка. Перед покупкой газонокосилки вы решаете, какой она будет – бензиновой или электрической, ручной или на колесиках. Это абстракция на уровне типа газонокосилки. Нет никакой необходимости спускаться в абстракции ниже, до уровня карбюратора или гаек в составе газонокосилки. В данном случае вы интуитивно верно выбираете уровень абстракции, руководствуясь элементарным здравым смыслом. Помните, что готовые решения и правила достаточно условны, а окончательный выбор уровня абстракции и инструментов остается за вами.

У завода-изготовителя газонокосилок есть подробные чертежи, описание технологии производства, свойств изделия и приемов работы с ним. В программировании такой описательный набор называется класс. Но самое подробное описание изделия – это еще не изделие. Заказчик обращается на завод с запросом на изготовление экземпляра газонокосилки. В программировании это называется экземпляр класса или объект класса. В целом, термины «объект» и «экземпляр» взаимозаменяемы, но есть тонкие смысловые нюансы. Термин «объект» чаще используется, когда делается смысловой акцент на функциональной сущности объекта реального мира, а термин «экземпляр» чаще применяется, когда идет речь о структурной единице программного кода.

В объектном программировании класс описывает свойства и методы, которые будут присутствовать у объекта, построенного на основе описания класса (экземпляра класса).

Разбирая пример с газонокосилкой, мы подразумевали, что разработчиком класса «газонокосилка» является кто-то другой. В программировании это обычная ситуация. Мы постоянно используем классы и библиотеки сторонних разработчиков. Даже простейшая программа из нескольких строк на языке Java на самом деле обращается к системным классам языкового пакета. Но программистам постоянно приходится разрабатывать собственные классы для решения прикладных задач. В этом нет ничего сложного, но начинающие программисты часто попадают в ловушку чрезмерно глубокой абстракции. Они разрабатывают классы и создают объекты слишком низкого уровня, что порождает путаницу, несовместимость, скрытые ошибки и прочие проблемы, из-за которых у объектного подхода к программированию есть свои противники.

Итак, мы установили, что класс – это описательный шаблон, на основе которого в процессе выполнения программы создается объект класса. В состав объекта класса входят поля и методы, описанные в классе.

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

Методы – это именованные блоки команд, выполняемые при вызове метода и предназначенные для обработки полей объекта и внешних переменных.

Поля и методы, описанные в классе, называют членами класса. Запомните это определение.

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

Также у косилки есть методы «завести», «косить», «заглушить». Газонокосилка должна реагировать на нажатие регулятора оборотов, поэтому в метод «косить» мы должны передать аргумент, показывающий силу нажатия на регулятор: косить (силаНажатия). Метод получит аргумент и при помощи внутренних команд преобразует его в заданное число оборотов. Если мы используем готовый класс, то обычно не вникаем в реализацию методов. Нам достаточно знать описание функциональности метода и требования к аргументам.

При желании вы можете придумать множество других примеров, наглядно демонстрирующих главное достоинство ООП – максимальную схожесть с интуитивным механизмом мышления в реальной жизни. Мы, сами того не сознавая, разбиваем окружающий мир на объекты и постоянно используем методы и свойства.

Теперь закончим лирическое отступление и обсудим реализацию классов и объектов в языке Java.

6.2 Описание класса и создание объектов

Описание класса начинается с ключевого слова class, после которого следует имя класса и размещается в блоке из фигурных скобок:

class имя {

// Описание класса

}

Рассмотрим пример описания класса, который состоит только из полей и не содержит методы.

Листинг 6.1 Пример класса, содержащего только поля

// Описание пользовательского класса

class MyFields {

// Поля класса

int data;

char letter;

}

// Описание класса с главным методом программы

// Шаблон описания автоматически создается средой NetBeans

class Listing6_1 {

// Главный метод

public static void main {

// Создаем объект класса MyFields

MyFields demo = new MyFields ();

// Присваиваем значения полям

demo. data = 1234;

demo. letter = «B»;

// Выводим значения полей на печать

System.out.println («Число: "+demo. data);

System.out.println («Буква: "+demo. letter);

}
<< 1 ... 13 14 15 16 17 18 19 20 21 ... 25 >>
На страницу:
17 из 25