Добро пожаловать в серию статей про объектно-ориентированное программирование (ООП). В этой статье мы представим концепцию ООП, которая будет так или иначе присутствовать во всех статьях данной серии. Многие преимущества ООП вы увидите практически сразу, но и в дальнейшем тоже будут приятные сюрпризы.
Объектно-ориентированное программирование сложно точно определить, но, как вы могли уже догадаться, оно связано с созданием объектов и с их взаимодействием друг с другом. У объектов есть характеристики и особенности (известные как атрибуты), и они могут делать различные вещи при помощи своих методов. Главное преимущество ООП состоит в возможности взаимодействия объектов друг с другом, а также в возможности их гибко изменять с течением времени. Это обстоятельство делает ООП очень удобным для разработчиков. Все приложения легко читаемы, масштабируемы и могут быть легко протестированы.
Мы счиатем, что понять ООП проще всего на практике, поэтому приступим к делу. Мы будем использовать библиотеку 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.

