Сопоставила объектно- ориентированное программирование с человеческой психологией и продемонстрировала это в коде

Привет, SE7EN, меня зовут Александра, я программист в отделе разработки серверных решений ЮMoney. В этой статье описываю, как принципы объектно-ориентированного программирования можно использовать в психологии человека. Моя цель — показать, что за техническими терминами часто скрываются идеи, которые могут обогатить наше восприятие не только программирования, но и природы человека.

Сопоставила объектно- ориентированное программирование с человеческой психологией и продемонстрировала это в коде

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

Что же такое ООП и при чём здесь психология

С точки зрения программирования, ООП — это подход, подразумевающий, что программа имеет набор объектов, которые взаимодействуют друг с другом.

А теперь представим человека — для нас он тоже некий объект. И у каждого человека есть как минимум два компонента: атрибуты и поведение. К атрибутам можно отнести пол, вес, возраст, цвет глаз и волос и так далее. К поведению мы относим базовые навыки: дышать, говорить, ходить.

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

В социуме есть базовые принципы взаимодействия между людьми или группами

Умение выстраивать отношения с людьми называется социальными навыками. С их помощью человек может грамотно общаться, учиться чему-то новому, просить помощи и многое другое. Для разных социальных групп или ролей эти навыки могут быть разными, но можно выделить самые важные, которые необходимы каждому: говорить и слушать собеседника, читать и писать, обучаться. Всё это можно считать неким соглашением, за счёт которого общество может ожидать от любого человека плюс-минус одинакового поведения.

В программировании такое соглашение называется интерфейсом, который определяет, каким поведением будет обладать объект, и гарантирует, что определённый класс может совершать определённые действия. В коде это будет выглядеть так:

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

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

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

Рассмотрим на примере кода: создадим интерфейс с методами, и у каждого класса, который будет реализовывать интерфейс, будет своя собственная реализация этих методов:

name = $name;
    }

    public function introduce()
    {
        return "Я родитель по имени " . $this->name;
    }
}

// Класс Child
class Child implements FamilyMember
{
    protected $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function introduce()
    {
        return "Я ребенок по имени " . $this->name;
    }
}

// Функция для представления члена семьи
function introduceFamilyMember(FamilyMember $member)
{
    echo $member->introduce() . "\n";
}

// Создаем объекты
$parent = new Parent("Сергей");
$child = new Child("Анна");

// Используем полиморфизм
introduceFamilyMember($parent); // Вывод: Я родитель по имени Сергей.
introduceFamilyMember($child);  // Вывод: Я ребенок по имени Анна.

Классы Parent и Child реализуют интерфейс FamilyMember и предоставляют свою версию метода introduce. Метод introduceFamilyMember принимает объекты, которые реализуют интерфейс FamilyMember. Это позволяет использовать объекты и класса Parent, и класса Child. Таким образом, мы видим, как с помощью интерфейса можно достичь полиморфизма, позволяя различным классам реализовывать один и тот же метод с разной логикой.

Абстракция — ещё один принцип ООП, фокусирующийся на конкретных свойствах и методах системы, которые важны для выполнения какой-либо задачи, а менее существенное отбрасывается.

У каждого из нас есть родители, которые обучают нас основам поведения. Благодаря им мы учимся ходить и говорить, у них же перенимаем какие-то ценности. Всё это можно поделить на атрибуты и поведение, присущие любому человеку с самого детства. Это некая абстракция, каким должен быть человек. То есть получается, что есть некий каркас человека, состоящий из минимального набора атрибутов и поведения.

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

Представим каркас человека в виде кода абстрактного класса:

name = $name;
        $this->age = $age;
        $this->birthday = $birthday;
        $this->gender = $gender;
        $this->eye_color = $eye_color;
        $this->hair_color = $hair_color;
    }

    // говорить
    abstract public function speak($message);

    // слушать
    abstract public function listen($message);

    // есть
    abstract public function eat($food);

    // ходить
    abstract public function walk($destination);

    // думать
    abstract public function think($thought);

    // и другие методы, которыми владеет каждый человек
}

Наши родители тоже обладают минимальным набором атрибутов и поведения. Пока растём, мы пользуемся тем, что они в нас заложили, и пользуемся этим так, как нам объяснили. По сути, мы перенимаем от них и атрибуты (которые могут полностью совпасть, а могут быть уникальными), и некоторые социальные навыки (в том виде, в котором ими владеют наши родители). Но перенимаем не полностью — мы всего лишь берём основы и развиваем их на свой лад.

И вот мы подошли к ещё одному из принципов ООП наследованию. Тот самый механизм системы, который позволяет классам наследовать атрибуты и поведение других классов для дальнейшего использования, для расширения или модификации. Класс, от которого производится наследование, называют базовым (или родительским), а новый класс — потомком (или наследником). Всё как у людей.

Давайте посмотрим, как может выглядеть родительский класс в коде:

profession = $profession;
        $this->surname = $surname;
        $this->familyValues = $familyValues;
        $this->religion = $religion;
        $this->nationality = $nationality;
    }

    public function speak($message) {
        echo "$this->name говорит: $message\n";
    }

    public function listen($message) {
        echo "$this->name слушает: $message\n";
    }

    public function eat($food) {
        echo "$this->name ест: $food\n";
    }

    public function walk($destination) {
        echo "$this->name идет в: $destination\n";
    }

    public function think($thought) {
        echo "$this->name думает: $thought\n";
    }

    // Реализация методов интерфейса SocietyInterface
    public function communicate($message) {
        echo "$this->name общается: $message\n";
    }

    public function write($text) {
        echo "$this->name пишет: $text\n";
    }

    public function read($text) {
        echo "$this->name читает: $text\n";
    }

    public function learn($topic) {
        echo "$this->name изучает: $topic\n";
    }

    public function introduce($name) {
        return "Меня зовут {$this->name}, я {$this->profession}, фамилия: {$this->surname}.";
    }
}

На примере видно, что класс Parents это потомок абстрактного класса AbstractHuman, в котором как раз содержится минимальный набор атрибутов и поведения человека. То есть у каждого объекта класса Parents будет свой набор атрибутов, разные имена и возраст, пол, дата рождения, цвет глаз и волос. И даже реализация методов (писать, читать и обучаться) может быть абсолютно разной. У кого-то красивый и разборчивый почерк, а у кого-то не очень, кто-то читает бегло, а кто-то медленно, кто-то схватывает информацию сразу же, а кому-то необходимо подольше посидеть над задачей.

А теперь посмотрим, как будет выглядеть класс ребёнка в коде:

favoriteToy = $favoriteToy;
    }

    public function play() {
        echo "$this->name играет с игрушкой: {$this->favoriteToy}\n";
    }
}

По мере взросления у человека могут меняться как атрибуты, так и поведение. Но есть неизменные вещи, на которые не может повлиять ни сам человек, ни социум:  национальность, дата рождения. Также есть и изменяемые, приватные характеристики, которые невозможно определить, просто взглянув на человека со стороны, но которые человек может изменить сам. Либо на них может повлиять общество, например религия, социальная группа, к которой принадлежит человек, семейные ценности. В программировании такое явление называется инкапсуляцией. Это сокрытие данных от внешнего мира в некой оболочке, которой в этом случае выступает класс.

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

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

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

Мир вокруг нас постоянно меняется, как и требования к человеку. Нам приходится постоянно приспосабливаться к новым реалиям жизни. Иногда в процессе адаптации мы приобретаем какие-то чужие особенности поведения — а в программу копируют чужой код, или, как говорят в программировании, вставляют «костыли». Всё это может привести к поломкам в программе или внутри человека. В программировании такие поломки называются багом, а в психологии человека — психологической травмой, проблемой. В обоих примерах для выявления причины поломки или некорректного поведения нужен анализ, отладка. Тот самый баг необходимо воспроизвести в контролируемой среде, проанализировать и локализовать проблему для последующего исправления. Для человека такой средой может стать кабинет психолога, который, как дебаггер (отладчик), поможет всё проанализировать, выявить причину душевной поломки и её исправить.

Заключение

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

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


Пишите в комментариях свои мысли по поводу ООП, а если есть вопросы — задавайте. Буду рада обсудить.😉  

 

Источник

Читайте также