3. ООП в PHP5. Классы и объекты

👁 79 просмотров

Из продыдущего урока мы уже знаем что такое ООП и рассмотрели, теоретически, что такое класс и объект.

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

Объявление класса

Класс объявляется с помощью ключевого слова class, за которым следует имя класса и тело из фигурных скобок с реализацией его членов(свойств и методов). Имя класса может содержать буквы латинского алфавита и подчеркивание в сочетании с цифрами, но не начинаться с цифры, а также имя класса не должно повторять зарезервированное под PHP инструкцию языка на примере class, int, Array, private… . Рассмотрим пример реализации класса:


  class StudentA
  {
    public $name;
    private $age;
    protected $gender;

    public function sayName()
     {
         echo "Joobs!;
     }
  }

Выше в примере мы создали класс с именем StudentA, внутри которого создали свойства с различным доступом (protected, private, public) и реализовали метод sayName(), который, глядя на имя, можно понять что делает. В данном случае мы реализовали внутри класса некий чертеж , как именно должен собраться объект и, на основе открытых членов(свойств и методов) мы можем манипулировать этим объектом.

Создание объекта

Обект — по сути дела обычная переменная, которая хранит лишь ссылку на внутреннюю реализацию класса

2.ООП в PHP 5. Основы

👁 106 просмотров

Начнем с того, что такое класс и какую роль он играет в ООП. Данная часть поста может быть ориентирована на любой язык, в котором поддерживается ООП, так как ООП — по сути дела единая модель проектирования приложений и неважно на каком языке — будь-то Java, С#, C++, PHP… суть ООП во всех языках одна и та же — предоставить некий принцип, на основе синтаксиса языка, по которой можно было бы легко и быстро проектировать любой проект, за вами остается только изучить инструмент, в нашем случае PHP, познать все тонкости реализации ООП в этом языке, и используя их решать нашу задачу.

 Элементы ООП. Классы и объекты

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

Принцип ООП
Принцип ООП

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

Дадим краткие описания всем 3-м этим понятиям:

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

2. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя;

3. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта;

Из выше сказанного, на данном этапе у нас есть следующие основные понятия ООП: класс, объект, наследование, инкапсуляция и полиморфизм. Давайте добавим ще 2 понятия — свойство и метод. Нам осталось соединить все эти понятия в единое осмысленную последовательность и их роль для построения ООП.

Наследование

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

Инкапсуляция

 

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

public,protected, private или еще — модификаторы доступа

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

public — свойства и методы открыты и доступны из вне класса объектам данного класса и унаследованных классов;

protected — свойства и методы зашищены и доступны только внутри класса и и внутри унаследованных классов;

private — свойства и методы доступны только внутри класса и недоступны за его пределами , а также внутри унаследованных классов;

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

Полиморфизм

       Нам осталось разобрать что такое полиморфизм. Вы только поразмыслите как это слово звучит — поли(множественность) и морфи(форма), что означает многоформенность. Возьмем из реальной жизни такие сущности или объекты как автомобиль, самолет, мотоцикл и попробуем в них найти сходные элементы и первое , что приходит на мысль — это колеса, то все они движутся благодаря вращению колеса с малыми отличиями. Если это все применить к ООП, то у нас должен быть главная сущность, от которого будут унаследованы все данные колесные средства передвижения и тогда у всех будет метод go(), который специфичен для каждого объекта, т.е. отличен в передвижении, к примеру, самолет должен набирать скорость постепенно до определенного уровня, чтобы взлететь, а автомобиль может иметь 4 — 5 скоростей и задний заезд, против переднего мотоцикла и в этой ситуации, когда все эти классы унаследованы от колесного класса возникает потребность в переопределении данных методов в унаследованных классах. И тут мы вплотную приближаемся к понятиям абстрактные классы и интерфейсы, которые служат начальной основой для переопределяемого кода в парадигме ООП.

Сначала определимся с новыми понятиями:

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

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

Покажем все это на примере кода:


abstract class 	Machine {
 //определяем базовый общий метод
 abstract public function go();
}

//Унаследуем абстрактный класс и реализуем его абстрактный метод
class Auto{
  //Переопределяем абстрактный метод езды применительно к машине
  public function go()
  {
    echo("Правила езды для автомобиля");
  }
}

class Plane{
  //Переопределяем абстрактный метод езды применительно к самолету
  public function go()
  {
    echo("Правила езды для самолета");
  }
}

class Moto{
  //Переопределяем абстрактный метод езды применительно к мотоциклу
  public function go()
  {
    echo("Правила езды для мотоцикла");
  }
}

//Создаем экземпляры(объекты) этих классов

autoObj = new Auto();
planeObj = new Plane();
motoObj = new Moto();

//Попытаемся использовать и тогда
autoObj->go();//Выведет "Правила езды для автомобиля"
planeObj->go();//Выведет "Правила езды для самолета"
motoObj->go();//Выведет "Правила езды для мотоцикла"

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

Урок 1. Синтаксис языка PHP

👁 78 просмотров

Использование языка PHP

Язык PHP можно использовать в любом файле, который возможно парсировать с помощью интерпретатора PHP и в частности, он очень часто используется с языком HTML. Главной особенностью является то, что код PHP может генерировать HTML, являясь серверным языком и может быть вставлен в HTML, обрамив код специальными тегами:

   
      <?php 
        //Код PHP 
      ?> 

или тегами :

      <? 
        //Код PHP 
      ?> 

Разница между ними в том, что теги <?php ?> будут работать всегда и они по умолчанию включены , а у прощенный вариант по умолчанию запрещен и чтобы их использовать вам будет необходимо через командную строку выполнить операцию   —enable-short-tags  либо изменить в конфигурационном файле поле short_open_tag   на 1.  Выше мы рассмотрели вариант вcтавки в HTML, но обычно PHP код пишется в отдельном файле с расширением *.php и потом включается как модуль операции к основному файлу, чтобы было легче отлаживать. Существует несколько, общепринятых, расширений файловых расширений для кода PHP — php, php5, phtm, phtml… и это никак не влияет на обработку и выполнение кода, главное, чтобы это расширение было разрешено сервером на обработку.

Еще одной особенностью PHP является то, что последний тег можно опустить, если дальше нет никакого вывода информации:

 


    <?php
      echo "Hello world";
      // ... еще какой-то код
      echo "Последнее выражение";
      // Скрипт заканчивается без закрывающего тега PHP

Не родные теги

Помимо этого есть еще несколько вариантов тегов, которые оптимизированы для работы с документами XML и XHTML, в особенности  — теги <script language=»php»></script>, которые нам известны из клиентского языка JavaScript, чтобы выполнился код , необходимо явно указать тип языка в атрибуте language=»php»:

<script language="php">
   echo 'Будут проблемы с некоторыми редакторами, на пример с FrontPage';
</script>

Другой способ — это теги <%  %> в стиле ASP и доступны они только, если вы их включили через директиву asp_tags в конфигурационном файле php.ini, и разрешены через short_open_tag в конфигурационном файле php.ini, либо если PHP был скомпилирован с опцией —enable-short-tags:


<% echo 'Вы можете по выбору использовать теги в стиле ASP'; %>

Если вы еще новичок в PHP, не стоит на этом акцентировать внимание, чтобы не заблудиться и смело используйте всегда проверенный вариант <?php  ?>, а остальное уже в силу овладения, дабы облегчить процесс разработки.

 Признак окончания инструкции

Следует заметить, что по правилу синтаксиса языка язык PHP требует, чтобы после каждой инструкции стояла точка с запятой(;), который информирует интерпретатор PHP о том, что после данной инструкци будет другая инструкция или вообще не будет, но это можно опустить, если после инструкции следует закрывающий тег:


<?php
    echo 'Привет!';//Можно так
?>
<?php echo 'Привет!' //А можно и так, заметьте, не ставим точку с запятой, так как последний тег?>
<?php echo 'Опустили последний тег';//А можно и так

Комментарии

Все, что находится за пределами тегов PHP игнорируется и выводится как обычный текст или HTML для браузера и еще PHP игнорирует все, что находится за двумя косыми слешами // и между набором /**/ и является всего лишь комментарием для разъяснения принципа работы кода:


<?php
//Все, что за этими слешами является комментарием и игнорируется PHP,только на этой строке
/*Все, что внутри этого обрамления является комментарием и игнорируется PHP
можно перейти и на новую строку, но главное, чтобы все находилось внутри обрамления*/
?>

Кроме того, следует упомянуть об еще одном методе создания комментариев — это использование символа #:


  #Это тоже однострочный комментарий
  //как и это
  /*
  А это многострочный
  */

1. ООП в PHP 5. Вводная часть

👁 77 просмотров

Начиная с PHP 4 объектно-ориентированная модель PHP была полностью переписана в силу того, что полномасштабные крупные проекты в современном мире принято писать на модели ООП в виду его эффективности.  В PHP 3 ООП был реализован впервые, с этого момента ядро обновлялось с успехом и к версии PHP 4 движок работал уже намного быстрее, чем предыдущие версии , но было очень мало изменений в плане ООП.

Как ООП работало в PHP 4

В PHP 4 , несмотря на то, что ООП поддерживался, но он был еще очень сыроват для данного языка, главной особенностью было прожорливость ресурсов, так как объекты или экземпляры работали как копии, а не как ссылочные типы, как это сделано в Java или в C#, отсутствовала безопасное использование полей и методов.

Приведем пример:

class MyClass{

    var $field;

    function setField($variable) { this ->field = $variable; }
    function getField() { return  this ->field = $variable; }

} 
function setNewName($object, $name) 
{ 
    $object->setField($name); 
} 
$object = new MyClass(); 
$object ->setField("Вася"); 
setNewName($object, "Маша"); 
echo getField();//Выведет "Вася"

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

Что нового в PHP 5

Так как в PHP5 реализована уже зрелая модель ООП по сравнению с предыдущими версиями, то появились множество обновлений, в частности —  видимость, абстрактные и ненаследуемые (final) классы и методы, а также магические методы, интерфейсы, клонирование и контроль типов (typehinting). Теперь PHP работает с объектами как с ссылками, что означает, что каждая переменная хранит в себе ссылку на объект , а не его копию, что является большим преимуществом в плане снижения ресурсоемкости , быстродействия и построения крупных проектов. Об объектах и их особенностях мы еще поговорим в следующих уроках.

Использование Live Templates в PhpStorm

👁 209 просмотров

Часто бывает так, что вам приходится писать много однотипных операций — объявление классов, функций, массивов или какого то цикла операций. Чтобы не тратить на ввод каждый раз однотипных операций в PhpStorm создали такую фишку, которая носит название Live Templates, иначе говоря «живые шаблоны». Live Templates — это кусочки пользовательского кода , которые часто используются разработчиками. Вы можете добавить, редактировать  и удалять шаблоны,  сгруппирурая их в тот или иной язык.

Использование

Начну я с примеров использования LT. Чтобы посмотреть какие шаблоны нам доступны по умолчанию в PhpStorm откроем File -> Settings -> Live Templates и перед вами откроется окно как на рисунке:

php-live-tmlpl-1

Здесь представлены различные, стандартные, шаблоны кода, откройте вкладку php и наметим какой-нибудь шаблон, допусти шаблон создания закрытого метода под аббривиатурой prif, что означает Private Function. Закрываем окно настройки и переходим в редактор, открываем любой файл php расширения и нажимаем сочетание клавищ Ctrl + J и откроется список всех доступных шаблонов, которые будут отсортировываться в зависимости от того, что мы будем печатать, а печатать мы будем prif:

php-live-tmlpl-2

После жмете ENTER и данный шаблон вставиться в печатаемое место, вам остается всего лишь дописать название метода, ввести параметры и написать необходимый код и так со всеми остальными шаблонами-все очень просто:

php-live-tmlpl-3

Добавление новых шаблонов

Чтобы добавить новый шаблон, как и впредыдущий раз заходим в Settings  -> Live Templates или сразу жмите Alt +F7 и выбираем язык из списка существующих языков, допустим PHP и жмем зеленый плюсик в правом верхнем углу и вам предлагаю создать 1.Live Template(шаблон) или 2.Template Group(группу шаблонов), выберем шаблон:

php-live-tmlpl-4

Здесь вам предлагается ввести аббревиатуру для нового шаблона, по которому будет доступен данный шаблон, его следует подбирать в укороченной форме, чтобы не печатать длинный текст при подборе, вводите описание, чтобы не забыть что данный шаблон делает. Давайте создадим шаблон, который 5 раз выводит «Hello World» для этого пропишите все пункты, как указано на картинке и код:


for($i; $i<4; $i++)
{
echo "Hello".$i."\n";
$END$
}

не обращайте внимание на $END$, его мы обсудим попозже:

php-live-tmlpl-5

Все, создали и он будет теперь доступен как и все шаблоны.

Создание псевдопеременных в Live Templates

Псевдопеременные — это пользовательские переменные внутри шаблона, которые автоматически можно указать при вставке шаблона одним вводомт и вам не потребуется в каждом участке кода, где одна и та же переменная вновь и вновь написать одну и ту же переменную. Данные переменные начинаются и заканчиваются на знак $, к примеру, мы сейчас создадим переменную $i$ для нашего шаблона, для этого, вместо $i, напишем $i$ вот так:


for($i$; $i$<4; $i$++)
{
echo "Hello".$i$."\n";
$END$
}

php-live-tmlpl-6

 

Теперь нажимаем в редакторе, как в прошлый раз, Ctrl + J и печатаем say5hello и жмите ENTER, начинайте вводить переменную и вы увидите, как это название вставляется сразу в нескольких местах:

php-live-tmlpl-7

Открываем официальную страницу PhpStorm и видим такую надпись:

PhpStorm supports two predefined live template variables: $END$ and $SELECTION$.

Т.е. это уже предопределенные переменные, которые пользователь не может изменить. Переменная $END$  указывает положение курсора после того, как шаблон вставлен, а $SELECTION$  используется для фрагмента кода, который должен быть упакован. О всех особенностях Live Templates можете прочесть по этой же ссылке.

Установка PEAR со сборкой OpenServer (PHP 5.5.4 + Apache 2.4.6)

👁 188 просмотров

 

В одном из прошлых постов мы рассказывали про PEAR, это, так сказать, вводная статья или краткий ликбез что такое PEAR.

Теперь настало то самое время, чтобы установить его на наш компьютер.

Замечание. Предполагается, что у вас установлен уже рабочий сервер с интерпретатором PHP 5.x.x, насчет ранних версий не знаю, не устанавливал.

(далее…)

Что такое PEAR и с чем его едят

👁 111 просмотров

 

Сначала определимся с этой замысловатой и непонятной аббревиатурой PEAR.  Статья из Википедии следующую формулировку:

    «PEAR (акроним от английских слов PHP Extension and Application Repository) — это библиотека классов PHP с открытым исходным кодом. В стандартную поставку PHP входит система управления классами PEAR, которая позволяет легко скачивать и обновлять их.»

(далее…)

Принцип дерева в Мироздании. Часть 2. Начало, события, конец

👁 57 просмотров

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

Начало

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

Все “тело” нашей цели – кругооборот событий, одно событие сменяется другой, ничего не происходит спонтанно ибо, если какое-то событие обрабатывается по просту без смысла, то субъект данной цели устраняет этот недочет. Это полноценная система, которая работает осмысленно и смысл этой системы строит субъект(первооткрыватель).
Конец

Здесь подразумевает конец всей системы, цель или система(объект) не может существовать без его творца(субъекта). Конец цели может осуществить его первооткрыватель, а это значит, что конец первооткрывателя – по сути тоже конец системы, уже навсегда.

Аналогии в в архитектуре нашего Мира

1. Природа

Здесь достаточно привести пару примеров. К примеру животный мир, где существует четкий баланс между жертвой и ее регулятором, который противодействует тому, чтобы какой-то вид преобладал больше того количества особей, что необходимо для равновесия системы. Вся эта система имело начало, и продолжается до сей поры и только человек ее может разрушить.
Другой пример из природы – растительный мир, если взять само дерево, которое имеет начало – корень, события в теле- место, где происходят события и развиваются цели в виде плода, ну конечно смерть, который означает конец цели. Так можно привести множество примеров, но нельзя забывать, что всей этой системой властен человек и может ее разрушить.
2. Наука

Человек не создал науку, человек не сможет этого сделать, даже если и захочет. Наука подвластна высшему субъекту, чем человек, которому подчиняются все системы. В этом плане человек выступает лишь наблюдателем законов этой научной системы, которую он может воспроизводить, строя. опять таки, подвластные ему системы цели, имеющие начало, цикл событий и плодов, конец, имеет общую цель для человека.
Пример с ОС(операционной системой). Как мы знаем, точнее те, кто по профессии занимается программингом, ОС состоит из процессов и алгоритмов. Что такой алгоритм, по научному это некая последовательность ограниченного количества ассемблерных команд, которых поддерживает архитектура процессора . Что это за последовательность? Имеет ли она цели — начало, плоды события, конец? Да, имеет, как и древовидная структура это система последовательных команд разветвляется в череду событий, выполняя ту или иную ветвь событий. И эта последовательность умеет обрабатывать только один процесс за раз, если только это не многоядерный процессор, как и мозг человека, который, в течении одного промежутка может обрабатывать только текущий процесс информации.
3. Жизнь человека

Понятное дело – родился человек в начале, живет в череду событий, умирает в конце. Ничего не вечно ибо мы имеем Высшего Субъекта, у которого относительно нас своя цель, которому подвластны вся древовидная структура нашего Мира, коим Создателем он является.

Заключение.
В этом посте я хотел разъяснить, конечно, у каждого свое мнение, как все должно быть, но это мой вариант того, что все же мы живем не просто так, каждый из нас мелкая система, и мы живем в другой системе, которая имеет свои надсистемы. Конечной основная часть нашей жизни – это события, плоды нашей деятельности, относительно этих событий а стало быть есть какой-то алгоритм, по которому каждый из нас живет и у каждого свой алгоритм и этот алгоритм имеет ветви в которые мы попадаем относительного выбора, а итогом является либо стебли, либо макушка этой древовидной системы. Если есть алгоритм и нам дано управлять этим алгоритмов а стало быть есть и какое-то руководство как пользоваться этим алгоритмом, ведь, когда производится какое-то устройство, то к нему прилагается документация, а стало быть и у нас она есть? Ну а дальше размышляйте сами. Спасибо за внимание ).

Принцип дерева в Мироздании. Часть 1. Вводная часть

👁 99 просмотров

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

 Принцип дерева и аналоги

Если взять любой объект или сущность, которую мы видим в этом Мире, то невольно возникает вопрос: » Если мы все из одной мелкой субстанции, то возможно ли, что макропроцессы из этой субстанции развиваются по какому-то изначальному принципу, точнее сказать, каким образом эти процессы развиваются?» Естественно, что наш Мир — динамическая причинно-следственная система, где имеется начало(мысль, идея, цель), процесс событий на основе цели и конец. Аналогов у этой структуры не существует ибо любой параллельный процесс в корне к чему -то привязано.

Наука как модель принципа дерева

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