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



Автор Fenix задал вопрос в разделе Другие языки и технологии

Основные принципы ООП: инкапсуляция, полиморфизм, наследование Объясните пожалуйста простыми словами? и получил лучший ответ

Ответ от Dim565[гуру]
Инкапсуляция - это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект.
Итак, зачем же нам нужна инкапсуляция? Ответ прост, мы - люди. А человеку свойственно ошибаться. Никто не застрахован от ошибок. Применяя инкапсуляцию, мы, как бы, возводим крепость, которая защищает данные, принадлежащие объекту, от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Кроме того, применение этого принципа очень часто помогает локализовать возможные ошибки в коде программы. А это на много упрощает процесс поиска и исправления этих ошибок.
Можно сказать, что инкапсуляция подразумевает под собой скрытие данных (data hiding), что позволяет защитить эти данные.
Хорошим примером применения принципа инкапсуляции являются команды доступа к файлам. Обычно доступ к данным на диске можно осуществить только через специальные функции. Вы не имеете прямой доступ к данным, размещенным на диске. Таким образом, данные, размещенные на диске, можно рассматривать скрытыми от прямого Вашего вмешательства. Доступ к ним можно получить с помощью специальных функций, которые по своей роли схожи с методами объектов. При этом, хотелось бы отметить два момента, которые важны при применении этого подхода. Во-первых, Вы можете получить все данные, которые Вам нужны за счет законченного интерфейса доступа к данным. И, во-вторых, Вы не можете получить доступ к тем данным, которые Вам не нужны. Это предотвращает случайную порчу данных, которая возможна при прямом обращении к файловой системе. Кроме того, это предотвращает получение неверных данных, т. к. специальные функции обычно используют последовательный доступ к данным.
dim565
(411605)
Не могу сказать

Ответ от Игорь Марченко[гуру]
Если говорить простым языком, то:
Инкапсуляция - сокрытие полей и методов от других классов. Зачем?
Во-первых для приватности. То есть, если поле или метод создавалось для работы только в данном классе, то и другим классам не нужно о нем знать. Это позволяет меньше зависеть от других классов и делает структуру более гибкий к изменениям. Например, если класс, который Вы используете необходимо будет заменить на другой, то чем меньше зависимость, тем проще это будет сделать.
Во-вторых для безопасности. Если поле скрыто, то это почти всегда гарант того, что никакой другой класс, не сможет повлиять на Ваш класс через это поле (изменив например его значение), что могло бы повлечь за собой непредсказуемое поведение (вплоть до падения приложения). Вместо этого, Вы создаете методы или свойства, которые дают доступ, но при этом проверяют, какие значения передает другой класс. Также, если это поле очень важное, и Вы не хотите, чтобы другие классы, могли менять значение (например баланс на счету пользователя).
Для скрытия полей необходимо помечать уровень доступа для данного поля или класса: private, public, internal и пр. (например, что доступно только в пределах класса, либо в пределах сборки, либо еще и наследник имеет доступ, либо вообще все имеют доступ).
Наследование - унаследование одним классом всех полей и методов другого класса. Зачем? Допустим у Вас есть класс "Гуманоид" и Вам нужно сделать 2 класса "Мужчина" и "Женщина". По сути классы содержат в себе все то, что есть у класса "Гуманоид". Так зачем плодить одинаковые сущности? Используя наследование мы можем унаследовать эти 2 класса от "Гуманоид" и тем самым лишь дополнить его, а не копировать тонну кода здесь, вставлять его там и потом другой программист не будет разбираться с проектом, в котором половина классов копипаст с кучей одинаковых полей и методов.
По поводу полиморфизма, на хабре было очень хорошо объяснено это. Поэтому, простите я просто скопирую.
"Если говорить кратко, полиморфизм — это способность объекта использовать методы производного класса, который не существует на момент создания базового. "
"Предположим, на сайте нужны три вида публикаций — новости, объявления и статьи. В чем-то они похожи — у всех них есть заголовок и текст, у новостей и объявлений есть дата. В чем-то они разные — у статей есть авторы, у новостей — источники, а у объявлений — дата, после которой оно становится не актуальным.
Самые простые варианты, которые приходят в голову — написать три отдельных класса и работать с ними. Или написать один класс, в которым будут все свойства, присущие всем трем типам публикаций, а задействоваться будут только нужные. Но ведь для разных типов аналогичные по логике методы должны работать по-разному. Делать несколько однотипных методов для разных типов (get_news, get_announcements, get_articles) — это уже совсем неграмотно. Тут нам и поможет полиморфизм. "

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Основные принципы ООП: инкапсуляция, полиморфизм, наследование Объясните пожалуйста простыми словами?
Инкапсуляция программирование на Википедии
Посмотрите статью на википедии про Инкапсуляция программирование
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*