Привет, 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";
}
}
По мере взросления у человека могут меняться как атрибуты, так и поведение. Но есть неизменные вещи, на которые не может повлиять ни сам человек, ни социум: национальность, дата рождения. Также есть и изменяемые, приватные характеристики, которые невозможно определить, просто взглянув на человека со стороны, но которые человек может изменить сам. Либо на них может повлиять общество, например религия, социальная группа, к которой принадлежит человек, семейные ценности. В программировании такое явление называется инкапсуляцией. Это сокрытие данных от внешнего мира в некой оболочке, которой в этом случае выступает класс.
В психологии тоже есть такое понятие. Человек сосредотачивается на своих внутренних переживаниях и фантазиях в ущерб реальной жизни и взаимодействию с социумом. В основном такое поведение встречается у детей и подростков, особенно у тех, кому не хватает внимания родителей. К этому состоянию подталкивают какие-то сильные стрессы или переживания, например потеря близкого. Психика человека просто не готова к сильным потрясениям, и срабатывает защитный механизм, происходит эмоциональное и психическое отстраивание от внешнего мира.
Непроработанная психологическая инкапсуляция может привести к потере социальных навыков, ухудшению самооценки, отношений с родственниками и другими людьми. Также это создаёт препятствие для личностного роста и развития и в итоге приводит к стагнации, депрессии и неудовлетворённости жизнью. Но всё это можно проработать и исправить.
В наших примерах из кода изменить приватные атрибуты или получить их значения можно с помощью методов, которые называются сеттеры и геттеры. Для получения или обновления информации о том или ином приватном свойстве можно дополнительно добавив валидацию данных. В программировании это может быть валидация на тип данных или проверка на диапазон и ограничения, а также проверка на уникальность и так далее. У человека валидатором в общении с людьми могут выступать семейные ценности, образование, профессия, взгляды и убеждения.
Мир вокруг нас постоянно меняется, как и требования к человеку. Нам приходится постоянно приспосабливаться к новым реалиям жизни. Иногда в процессе адаптации мы приобретаем какие-то чужие особенности поведения — а в программу копируют чужой код, или, как говорят в программировании, вставляют «костыли». Всё это может привести к поломкам в программе или внутри человека. В программировании такие поломки называются багом, а в психологии человека — психологической травмой, проблемой. В обоих примерах для выявления причины поломки или некорректного поведения нужен анализ, отладка. Тот самый баг необходимо воспроизвести в контролируемой среде, проанализировать и локализовать проблему для последующего исправления. Для человека такой средой может стать кабинет психолога, который, как дебаггер (отладчик), поможет всё проанализировать, выявить причину душевной поломки и её исправить.
Заключение
Из примеров, которые мы рассмотрели, видно, что в психологии человека и объектно-ориентированном программировании много общего: от названия каких-либо принципов до ожидаемого поведения. Иными словами, ООП в психологии — это некий аналог процессов программирования, которые происходят в человеке и с человеком. Такой подход даёт возможность иначе взглянуть на индивидуальные особенности и поведение человека. Понимание того, что человек — это объект с уникальными характеристиками, эмоциями и собственным опытом, помогает глубже проанализировать его внутреннее состояние и внешнее поведение, учитывая также влияние социальных и культурных норм.
Применение ООП в психологии позволяет более точно моделировать психологические процессы и создавать персонализированные методы терапии, что помогает расширить горизонты изучения психологии и повысить эффективность психотерапии.
Пишите в комментариях свои мысли по поводу ООП, а если есть вопросы — задавайте. Буду рада обсудить.😉