Понятие объекта в программировании

Объект (класс) – что это такое?

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

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

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

Например базовый класс “Собака” имеет свойства: цвет, цвет глаз, длина, вес; функции: сидеть, лежать, встряхнись, “ко мне”. Эта собака пока не определена, после создания инстанции класса “Собака”, мы получим например: “Собака по имени Рэйни, с цветом шерсти серый, белый и черный, глаза голубой и карие, 45 сантиметров ростом, 91 сантиметр в длину и около 13,5 килограммов весом”, каким образом мы присвоим ей эти свойства не важно, в ООП (объектно ориентированном программировании) важна абстрактность, не стоит переживать о том, как работает программа, это проблемы самой программы (у собаки) могут быть отдельные методы для присваивания ей значения свойств (имя и тд.).

В ООП существует такое понятие, как инкапсуляция (мы так же его рассмотрим отдельно как наследование позже). Если говорить в двух словах, то мы можем ограничить доступ к отдельным свойствам или методам. Свойства и методы бывают приватные – private (скрытые), публичные – public (доступные извне) и протектед – protected (защищенные). Рассмотрим пример класса в котором присутствует одно публичное и одно приватное свойство, один публичный метод который использует внутри себя приватный метод.

<?php

class Dog
    {
        private $_commands = [];

        public function learn($command)
            {
                if (in_array($command, $this->_commands) === false)
                    {
                        $this->_addCommand($command);
                    }
            }

        private function _addCommand($command)
            {
                $this->_commands[] = $command;
            }

   }

$dog = new Dog();
$dog->learn("sit");
$dog->learn("shake");
print_r($dog);

?>

Мы не можем обратиться напрямую к собаке и задать ей массив с командами, которые она понимает, но для этого у нее существует метод learn(), в который мы можем передать команду, так же напрямую мы не имеем доступа к методу _addCommand(), но к нему имеет доступ метод класса learn(). К приватным методам, имеет доступ только сам класс, даже его наследники не имеют доступа к приватным методам, приватные методы доступны из любой части класса, включая публичные методы. Инкапсуляция позволяет разделить ответственность и не позволяет разработчику вторгаться во “внутренние” дела класса, так как это может нарушить работу большой системы, в которой этот класс может состоять. Об инкапсуляции я вам расскажу позже, этот пример призван показать вам на деле, как работает класс. Если мы запустим наш скрипт, то результат будет следующим:

Dog Object
(
    [_commands:Dog:private] => Array
        (
            [0] => sit
            [1] => shake
        )
)

Классы позволяют разделить работу внутри программы между отдельными сущностями, ведь у вас чайник призван только кипятить воду, вы ведь кофе в нем не варите?! Так же и в программировании один класс – одна задача, чайник кипятит воду, плита – греет посуду стоящую на ней, микроволновка – разогревает еду и готовит ее. Для каждой отдельной задачи должен быть отдельный объект, инструмент для ее решения, не нужно сваливать весь функционал в один элемент системы, получится каша.

Подпишитесь на рассылку новых статей

Подпишитесь на рассылку свежих статей и присоединяйтесь к 7 остальным подписчикам.