что такое инкапсуляция php

Что такое инкапсуляция php

В последнее время идея объектно-ориентированного программирования (ООП), кардинально новая идеология написания программ, все более занимает умы программистов.

Объектно-ориентированные программы более просты и мобильны, их легче модифицировать и сопровождать, чем их «традиционных» собратьев. Кроме того, похоже, сама идея объектной ориентированности при грамотном ее использовании позволяет программе быть даже более защищенной от различного рода ошибок, чем это задумывал программист в момент работы над ней. Однако ничего не дается даром: сами
идеи ООП довольно трудны для восприятия «с нуля», поэтому до сих пор очень большое количество программ (различные системы Unix, Apache, Perl, да и сам PHP) все еще пишутся на старом добром «объектно-неориентированном» Си.

PHP до недавнего времени обеспечивал лишь некоторую поддержку ООП. Однако, после выхода PHP5 поддержка ООП в PHP стала практически полной.

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

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

Объектно-ориентированное программирование основано на:

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

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

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

Полиморфизм

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

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

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

Источник

ООП. Часть 3. Модификаторы доступа, инкапсуляция

Классы, методы и поля не всегда могут постоять за себя. Рассказываем, как быть защитником в объектно-ориентированном программировании.

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Инкапсуляция (от лат. in capsule — в оболочке) — это заключение данных и функционала в оболочку. В объектно-ориентированном программировании в роли оболочки выступают классы: они не только собирают переменные и методы в одном месте, но и защищают их от вмешательства извне (сокрытие).

Важно! Инкапсуляция не является сокрытием. Сокрытие — это часть инкапсуляции.

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

Все статьи про ООП

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Пишет о разработке сайтов, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.

Модификатор доступа public

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

Рассмотрим на примере класса Item:

Объявив экземпляр этого класса, можно обращаться к любым его полям в любом месте программы, где доступен сам объект (речь о локальных и глобальных переменных).

Так как поля публичные, в консоли они отобразятся без каких-либо проблем:

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

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

Из-за того, что поле публичное, оно изменится:

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Это плохо по нескольким причинам:

Разумеется, это не лучшее, что может случиться с приложением.

Модификатор доступа private

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

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

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Есть два способа сделать поле доступным только для чтения. Первый — использовать ключевое слово readonly, но оно запрещает менять значение вообще.

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

К такой практике прибегают Java-разработчики, но в C# есть более элегантный способ — свойства.

Теперь, чтобы получить данные, нужно обратиться к свойству, а не к полю:

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

Обратите внимание, что можно просто написать set; или get; если не требуется дополнительная логика. Это сработает, если у поля и свойства одинаковые имена и если это примитивный тип (int, float, char, double и другие). Со ссылочными типами (объекты и строки) это не работает.

Также можно менять логику работы со значением:

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

То есть если запустить вот такой код:

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Также можно создавать свойства без поля:

Это свойство вернёт true, если цена выше 5000, и false, если ниже.

Ключевое слово private можно также применять и к методам. Это делает их доступными только внутри класса.

Также приватным можно сделать сам класс, если он находится внутри другого класса:

Модификатор доступа internal

Иногда нужно сделать компонент доступным только внутри одного файла — например, в Program.cs, Item.cs или любом другом. Для этого используется ключевое слово internal.

Класс Backpack можно будет использовать только внутри файла Program.cs, и попытка объявить его внутри другого файла приведёт к ошибке.

Ключевое слово static

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

Метод Sum () используется в классе Program, хотя экземпляр класса Calc не создавался. При этом можно сделать статичным как отдельный метод или свойство, так и весь класс. В этом случае все поля и методы тоже должны быть статичными.

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

Другой пример — класс Math. Его можно использовать, чтобы выполнять различные математические операции (получение квадратного корня, модуляция, получение синуса, косинуса и так далее). У него много методов, а также он хранит различные константы вроде числа пи.

Домашнее задание

Напишите класс GameObject, в котором будут храниться координаты объекта. Координаты должны быть доступны для чтения, а их изменение должно происходить в методе Move ().

Заключение

Есть и другие ключевые слова:

Они будут рассмотрены в статье о наследовании.

Большая часть курса «Профессия С#-разработчик» посвящена именно ООП —
не только теории, но и практике. Вы научитесь писать программы, подбирая нужные инструменты — от инкапсуляции до полиморфизма. К концу курса у вас будет портфолио из нескольких проектов, а также все знания и навыки, которые нужны для получения первой работы.

Источник

Инкапсуляция — PHP: Введение в ООП

В общепринятом ООП есть один термин, которым любят пугать новичков. Имя ему — инкапсуляция.

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

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

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

Сеттеры в примере выше показаны только для демонстрации. В реальном коде точка почти наверняка будет неизменяемым объектом.

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

Реализация без классов:

Реализация в классе:

Данная операция обладает свойством коммутативности: результат вычисления не зависит от того, в каком порядке идут аргументы. Соответственно, при использовании методов, можно вызывать distanceTo как на одном объекте, так и на другом.

Нередко методы выполняют не только вычисления, но и возвращают новые объекты. Например, так произойдёт при вычислении симметричной точки.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

Наши выпускники работают в компаниях:

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Источник

Что такое инкапсуляция php

Инкапсуляция в ООП

«Сокрытие» никак не скрывает код от разработчика, но оно позволяет задать правила работы с классом. Инкапсуляция дает такие плюсы:

Инкапсуляция помогает реализовать принцип единой ответственности (single responsibility), о том, что каждый класс занимается своей задачей, у каждого класса есть своя зона ответственности, и никто другой не должен в нее лезть.

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

Пример PHP кода с инкапсуляцией

Вот пример кода класса с использованием инкапсуляции:

В нем всего 3 публичных метода, включая конструктор, и мы видим, что с объектом можно сделать только три действия:

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

Инкапсуляция за пределами ООП

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

Источник

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

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Введение в инкапсуляцию в PHP

В следующей статье «Инкапсуляция в PHP» дается подробное описание инкапсуляции PHP.

Как работает инкапсуляция в PHP?

пример

Если вам нужен доступ к закрытым / защищенным свойствам, вы можете использовать методы getter и setter в своем классе.

Как следует из названия,

И мы можем получить доступ, вызвав функцию, как это

Пример инкапсуляции в PHP

Реализованный код

Encapsulation in PHP

Encapsulation in PHP

Выход

что такое инкапсуляция php. Смотреть фото что такое инкапсуляция php. Смотреть картинку что такое инкапсуляция php. Картинка про что такое инкапсуляция php. Фото что такое инкапсуляция php

Преимущества инкапсуляции в PHP

Вывод

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

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

Рекомендуемые статьи

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *