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

—

от автора

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

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

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

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

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

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

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

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

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

<?php  interface SocietyInterface {     // умение общаться     public function communicate($message);      // умение писать     public function write($content);      // умение читать     public function read($text);      // умение учиться     public function learn($topic);      // умение представляться     public function introduce($name);      // и другие... }

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

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

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

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

<?php  // Интерфейс FamilyMember interface FamilyMember {     public function introduce(); }  // Класс Parent class Parent implements FamilyMember {     protected $name;      public function __construct($name)     {         $this->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. Таким образом, мы видим, как с помощью интерфейса можно достичь полиморфизма, позволяя различным классам реализовывать один и тот же метод с разной логикой.

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

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

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

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

<?php  abstract class AbstractHuman {     // имя     protected $name;      // возраст     protected $age;      // дата рождения     protected $birthday;      // пол     protected $gender;      // цвет глаз     protected $eye_color;      // цвет волос     protected $hair_color;      // конструктор     public function __construct(         $name,          $age,          $birthday,          $gender,          $eye_color,          $hair_color     ) {         $this->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);      // и другие методы, которыми владеет каждый человек }

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

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

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

<?php  class Parents extends AbstractHuman implements SocietyInterface {     // профессия     private $profession;      // фамилия     protected $surname;      // семейные ценности     protected $familyValues;      // религия     protected $religion;      // национальность     protected $nationality;      public function __construct(         $name,         $age,         $birthday,         $gender,         $eye_color,         $hair_color,         $profession,         $surname,         $familyValues,         $religion,         $nationality     ) {         parent::__construct($name, $age, $birthday, $gender, $eye_color, $hair_color);         $this->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 будет свой набор атрибутов, разные имена и возраст, пол, дата рождения, цвет глаз и волос. И даже реализация методов (писать, читать и обучаться) может быть абсолютно разной. У кого-то красивый и разборчивый почерк, а у кого-то не очень, кто-то читает бегло, а кто-то медленно, кто-то схватывает информацию сразу же, а кому-то необходимо подольше посидеть над задачей.

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

<?php  class Children extends Parents {     private $favoriteToy;      public function __construct(         $name,         $age,         $birthday,         $gender,         $eye_color,         $hair_color,         $profession,         $surname,         $family_values,         $religion,         $nationality,         $favoriteToy) {         parent::__construct(             $name,             $age,             $birthday,             $gender,             $eye_color,             $hair_color,             $profession,             $surname,             $family_values,             $religion,             $nationality);         $this->favoriteToy = $favoriteToy;     }      public function play() {         echo "$this->name играет с игрушкой: {$this->favoriteToy}\n";     } }

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

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

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

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

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

Заключение

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

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


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


ссылка на оригинал статьи https://habr.com/ru/articles/876970/