HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В общепринятом ООП есть один термин, которым любят пугать новичков. Имя ему - инкапсуляция.</p>
1 <p>В общепринятом ООП есть один термин, которым любят пугать новичков. Имя ему - инкапсуляция.</p>
2 <p>В первой части этого курса мы строили абстракции, используя обычные функции с применением подхода data hiding.</p>
2 <p>В первой части этого курса мы строили абстракции, используя обычные функции с применением подхода data hiding.</p>
3 <p>В объектно-ориентированном подходе функции объединяются с данными и описываются вместе внутри класса (в классово-ориентированных языках). Инкапсуляция - механизм, позволяющий описывать данные и функции, оперирующие ими, в рамках одной языковой конструкции. В случае PHP такой конструкцией является класс.</p>
3 <p>В объектно-ориентированном подходе функции объединяются с данными и описываются вместе внутри класса (в классово-ориентированных языках). Инкапсуляция - механизм, позволяющий описывать данные и функции, оперирующие ими, в рамках одной языковой конструкции. В случае PHP такой конструкцией является класс.</p>
4 <p>Мы уже начали так делать, когда знакомились с конструктором. Такие функции принято именовать методами, так как они связаны с объектом, на котором вызываются. Визуально вызов метода выглядит как обращение к свойству и его вызов.</p>
4 <p>Мы уже начали так делать, когда знакомились с конструктором. Такие функции принято именовать методами, так как они связаны с объектом, на котором вызываются. Визуально вызов метода выглядит как обращение к свойству и его вызов.</p>
5 <p>Вызов метода не требует передачи объекта в аргументах, потому что метод вызывается на объекте и имеет к нему доступ через переменную $this.</p>
5 <p>Вызов метода не требует передачи объекта в аргументах, потому что метод вызывается на объекте и имеет к нему доступ через переменную $this.</p>
6 <p>Методы, которые извлекают составные части объекта, принято называть геттерами (getters), а методы, изменяющие составные части - сеттерами (setters). Как правило, геттеры и сеттеры один в один отображаются на конкретные свойства внутри объекта. Технически методы - обычные функции, за исключением доступа к $this и способа вызова.</p>
6 <p>Методы, которые извлекают составные части объекта, принято называть геттерами (getters), а методы, изменяющие составные части - сеттерами (setters). Как правило, геттеры и сеттеры один в один отображаются на конкретные свойства внутри объекта. Технически методы - обычные функции, за исключением доступа к $this и способа вызова.</p>
7 <p><em>Сеттеры в примере выше показаны только для демонстрации. В реальном коде точка почти наверняка будет неизменяемым объектом.</em></p>
7 <p><em>Сеттеры в примере выше показаны только для демонстрации. В реальном коде точка почти наверняка будет неизменяемым объектом.</em></p>
8 <p>Но геттеры и сеттеры - не единственные типы функций, которые позволяют описывать класс. В принципе, всё, что мы описывали, работая без классов, с таким же успехом описывается и с классами.</p>
8 <p>Но геттеры и сеттеры - не единственные типы функций, которые позволяют описывать класс. В принципе, всё, что мы описывали, работая без классов, с таким же успехом описывается и с классами.</p>
9 <p>Реализация без классов:</p>
9 <p>Реализация без классов:</p>
10 <p>Реализация в классе:</p>
10 <p>Реализация в классе:</p>
11 <p>Данная операция обладает свойством коммутативности: результат вычисления не зависит от того, в каком порядке идут аргументы. Соответственно, при использовании методов, можно вызывать distanceTo как на одном объекте, так и на другом.</p>
11 <p>Данная операция обладает свойством коммутативности: результат вычисления не зависит от того, в каком порядке идут аргументы. Соответственно, при использовании методов, можно вызывать distanceTo как на одном объекте, так и на другом.</p>
12 <p>Нередко методы выполняют не только вычисления, но и возвращают новые объекты. Например, так произойдёт при вычислении симметричной точки.</p>
12 <p>Нередко методы выполняют не только вычисления, но и возвращают новые объекты. Например, так произойдёт при вычислении симметричной точки.</p>
13 <p>Выше мы рассмотрели техническую сторону вопроса, оставив за кадром описание преимуществ и недостатков такого подхода, а также связанные темы, например, data hiding или полиморфизм. Их описание довольно обширно и практически бесполезно без хотя бы минимального опыта использования. О том, что даёт или забирает инкапсуляция, мы поговорим на протяжении ближайших уроков. Отдельного обсуждения заслуживает вопрос о способе хранения методов - где они находятся физически (внутри объекта или нет?). С ним мы разберёмся в уроках, посвящённых полиморфизму и динамической диспетчеризации.</p>
13 <p>Выше мы рассмотрели техническую сторону вопроса, оставив за кадром описание преимуществ и недостатков такого подхода, а также связанные темы, например, data hiding или полиморфизм. Их описание довольно обширно и практически бесполезно без хотя бы минимального опыта использования. О том, что даёт или забирает инкапсуляция, мы поговорим на протяжении ближайших уроков. Отдельного обсуждения заслуживает вопрос о способе хранения методов - где они находятся физически (внутри объекта или нет?). С ним мы разберёмся в уроках, посвящённых полиморфизму и динамической диспетчеризации.</p>