Добро пожаловать в серию статей про объектно-ориентированное программирование (ООП). В этой статье мы представим концепцию ООП, которая будет так или иначе присутствовать во всех статьях данной серии. Многие преимущества ООП вы увидите практически сразу, но и в дальнейшем тоже будут приятные сюрпризы.
Объектно-ориентированное программирование сложно точно определить, но, как вы могли уже догадаться, оно связано с созданием объектов и с их взаимодействием друг с другом. У объектов есть характеристики и особенности (известные как атрибуты), и они могут делать различные вещи при помощи своих методов. Главное преимущество ООП состоит в возможности взаимодействия объектов друг с другом, а также в возможности их гибко изменять с течением времени. Это обстоятельство делает ООП очень удобным для разработчиков. Все приложения легко читаемы, масштабируемы и могут быть легко протестированы.
Мы счиатем, что понять ООП проще всего на практике, поэтому приступим к делу. Мы будем использовать библиотеку PyGame. Как правило, для ее установки вам достаточно выполнить команду pip install pygame
, и все будет в порядке. Однако в Mac OS более веселая жизнь, и вам надо действовать по следующей инструкции или нагуглить что-нибудь еще.
Мы выбрали Pygame, потому что она дает нам простую возможность визуализировать все то, что мы создаем и делаем. Таким образом мы увидим наши объекты в действии. Мы собираемся построить Мир Клякс, то есть такой мир, где персонажи это кляксы. У разных клякс разные свойства, и все они должны взаимодействовать друг с другом в окружающей среде Мира Клякс. Итак, приступим!
Для создания объекта нам нужен класс, поэтому мы начнем с класса Blob
. У объектов Python есть набор «специальных методов», часто называемых магическими. Наиболее распространенным является метод __init__
, но мы рассмотрим и другие.
В методе __init__
мы указываем все то, что должно произойти с объектом при его инициализации. Каждый раз, когда кто-то задает переменную как объект класса Blob
, запускается метод __init__
.
Давайте заполним этот метод некоторой базовой информацией. Например, зададим начальное местоположение для большого двоичного объекта, который размером и цветом напоминает кляксу:
class Blob: def __init__(self, color): self.x = random.randrange(0, WIDTH) self.y = random.randrange(0, HEIGHT) self.size = random.randrange(4,8) self.color = color
Метод __init__
имеет два аргумента: self
и color
.
Аргумент self
можно назвать как угодно, но общепринятое соглашение предусматривает название self
. Этот аргумент мы будем использовать, чтобы создавать атрибуты класса и получать к ним доступ. Делать мы это будем как внутри класса, так и вне его (тогда место self
займет имя переменной данного объекта).
Аргумент color
— это пока единственная наша переменная.
Теперь мы можем добавить и другие, обычные методы. Возможно, мы хотим, чтобы наши кляксы могли двигаться?
def move(self): self.move_x = random.randrange(-1,2) self.move_y = random.randrange(-1,2) self.x += self.move_x self.y += self.move_y
Идея заключается в том, что наш объект будет взаимодействовать в ограниченной среде с фиксированной шириной и высотой. Поэтому мы продолжим и добавим некоторую обработку на тот случай, если эта клякса выйдет за границы:
def move(self): self.move_x = random.randrange(-1,2) self.move_y = random.randrange(-1,2) self.x += self.move_x self.y += self.move_y if self.x < 0: self.x = 0 elif self.x > WIDTH: self.x = WIDTH if self.y < 0: self.y = 0 elif self.y > HEIGHT: self.y = HEIGHT
В следующей статье мы будем использовать PyGame для создания среды для нашего объекта.
Следующая статья — Введение в объектно ориентированное программирование: создание среды для нашего объекта с Pygame.