fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Обучение объектно-ориентированному программированию

Обучение объектно-ориентированному программированию

Давайте на мгновение отступим назад и посмотрим, как работают часы. У часов есть три стрелки: часовая, минутная и секундная. Секундная стрелка растет раз в секунду, минутная – каждые шестьдесят секунд, а часовая – каждые шестьдесят минут. Когда значение секундной стрелки равно 60, ее значение устанавливается на ноль, а значение минутной стрелки увеличивается на единицу. Когда значение минутной стрелки равно 60, ее значение устанавливается на ноль, а значение часовой стрелки увеличивается на единицу. Когда значение часовой стрелки равно 24, ее значение устанавливается на ноль.

Время всегда выводится в форме часы: минуты: секунды, где две цифры используются для обозначения часа (например, 01 или 12), а также минут и секунд.

Часы были реализованы ниже с использованием целочисленных переменных (печать могла бы быть в отдельном методе, но здесь этого не сделано).

Как видно из приведенного примера, то, как работают часы, состоящие из трех переменных int, не совсем понятно тому, кто читает код. Глядя на код, трудно “увидеть”, что происходит. Один известный программист однажды заметил: “Любой дурак может написать код, понятный компьютеру, а хорошие программисты пишут код, понятный людям”.

Наша цель – сделать программу более понятной.

Поскольку часовая стрелка сама по себе является понятным понятием, хорошим способом улучшить понятность программы будет превращение ее в класс. Давайте создадим класс ClockHand, который описывает часовую стрелку, содержит информацию о ее значении, верхнем пределе (т.е. точке, в которой значение стрелки возвращается к нулю), предоставляет методы для продвижения стрелки, просмотра ее значения, а также печати значения в строковом виде.

После того как мы создали класс ClockHand, наши часы стали более понятными. Теперь можно просто вывести на печать часы, то есть стрелку часов, а движение стрелки спрятано в классе ClockHand. Поскольку стрелка автоматически возвращается в начало с помощью переменной upper-limit, определенной классом ClockHand, принцип работы стрелок несколько отличается от реализации, в которой использовались целые числа. В этом случае проверялось, не превысило ли значение целого числа, представляющего часовую стрелку, верхний предел, после чего его значение устанавливалось в ноль, а значение целого числа, представляющего следующую часовую стрелку, увеличивалось. Используя объекты часовой стрелки, минутная стрелка продвигается вперед, когда значение секундной стрелки равно нулю, а часовая стрелка продвигается вперед, когда значение минутной стрелки равно нулю.

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

Выделение понятия в отдельный класс – хорошая идея по многим причинам. Во-первых, некоторые детали (например, вращение стрелки) могут быть скрыты внутри класса (т.е. абстрагированы). Вместо того чтобы набирать if-выражение и операцию присваивания, тому, кто использует часовую стрелку, достаточно вызвать четко названный метод advance() . Полученная часовая стрелка может быть использована в качестве строительного блока и для других программ – класс можно назвать, например, CounterLimitedFromTop. То есть класс, созданный на основе отдельной концепции, может служить нескольким целям. Еще одно огромное преимущество заключается в том, что поскольку детали реализации часовой стрелки не видны пользователю, их можно изменить при желании.

Мы поняли, что часы содержат три стрелки, то есть состоят из трех концептов. Часы сами по себе являются концептом. Поэтому мы можем создать класс и для него. Далее мы создаем класс под названием “Часы”, который прячет стрелки внутри себя.

То, как функционирует программа, становится все более понятным. Если сравнить нашу программу с исходной, состоящей из целых чисел, то можно заметить, что читабельность программы выше.

Часы, которые мы реализовали выше, – это объект, функциональность которого основана на “более простых” объектах, то есть на его стрелках. Именно в этом заключается великая идея объектно-ориентированного программирования: программа строится из небольших и отдельных объектов, которые работают вместе.

Далее рассмотрим терминологию темы.

Объект

Объект – это независимая сущность, которая содержит как данные (переменные экземпляра), так и поведение (методы). Объекты могут иметь самые разные формы: одни могут описывать концепции проблемной области, другие используются для координации взаимодействия, происходящего между объектами. Объекты взаимодействуют друг с другом через вызовы методов – эти вызовы методов используются как для запроса информации у объектов, так и для передачи им инструкций.

Как правило, каждый объект имеет четко определенные границы и поведение и знает только о тех объектах, которые ему необходимы для выполнения своей задачи. Другими словами, объект скрывает свои внутренние операции, предоставляя доступ к своей функциональности через четко определенные методы. Более того, объект независим от любого другого объекта, который не нужен ему для выполнения его задачи.

В предыдущем разделе мы имели дело с объектами, представляющими людей, структура которых была определена в классе “Person”. Не лишним будет напомнить, что делает класс: класс содержит схему, необходимую для создания объектов, а также определяет переменные и методы объектов. Объект создается на основе конструктора класса.

Наши объекты person имели свойства name, age, weight и height, а также несколько методов. Если бы мы еще немного поразмыслили над структурой объекта person, то наверняка смогли бы придумать больше переменных, связанных с человеком, таких как личный идентификационный номер, номер телефона, адрес и цвет глаз.

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

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

На языке программирования Java объект Person, который отслеживает имя, возраст, вес и рост, а также предоставляет возможность вычисления индекса массы тела и максимальной частоты сердечных сокращений, выглядит следующим образом. Ниже рост и вес выражены в удвоенном виде – единицей длины является один метр.

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

Как вас зовут? Наполеон Буонапарте Каков ваш возраст 51 Каков ваш вес? 80 Какой у вас рост? 1.70 Наполеон Буонапарте, ИМТ: 27.68166089965398, максимальная частота сердечных сокращений: 170.03900000000002

Класс

Класс определяет типы объектов, которые могут быть созданы на его основе. Он содержит переменные экземпляра, описывающие данные объекта, конструктор или конструкторы, используемые для его создания, и методы, определяющие его поведение. Ниже подробно описан класс прямоугольника, который определяет функциональность прямоугольника.

Некоторые из методов, определенных выше, не возвращают значения (методы, имеющие в своем определении ключевое слово void), в то время как другие возвращают (методы, указывающие тип возвращаемой переменной). В приведенном выше классе также определен метод toString, который возвращает строку, используемую для печати объекта.

Объекты создаются из класса через конструкторы с помощью команды new. Ниже мы создадим два прямоугольника и напечатаем информацию, связанную с ними.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *