Принцип инверсии зависимостей (DIP) — это принцип объектно-ориентированного программирования, который гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня, а оба типа модулей должны зависеть от абстракций. Это позволяет сделать код бол. Читать далее
Принцип разделения интерфейса (ISP) — это один из пяти принципов SOLID, который описывает, что клиенты не должны зависеть от интерфейсов, которые они не используют. Как применять принцип ISP в PHP и какие преимущества он имеет. Читать далее
Принцип подстановки Барбары Лисков является важным принципом объектно-ориентированного программирования. Его соблюдение позволяет создавать гибкую, расширяемую и легко поддерживаемую программу. При разработке приложений на PHP необходимо учитывать этот принцип, чтобы со. Читать далее
Как принцип Берта Мейерса может быть реализован в PHP с помощью интерфейсов и абстрактных классов. Читать далее
Принцип единственной ответственности (Single Responsibility Principle, SRP) — это один из пяти принципов SOLID в PHP. Узнайте, почему каждый класс должен иметь только одну ответственность и нести только один функциональный аспект, и как следовать этому принципу. Читать далее
Почему нужно понимать ООП Python и как это упрощает разработку
Пространства имен в PHP позволяют группировать код в логически связанные блоки. Пример использования пространства имен в своих классах на PHP. Читать далее
Пространства имен в PHP — это механизм, который позволяет группировать связанные функции, классы и константы в отдельные области видимости. Это позволяет избежать конфликтов имен между различными компонентами приложения. Читать далее
Описание применения принципов SOLID в PHP, подробная инструкция с примерами. Читать далее
SOLID — это акроним, который означает пять базовых принципов объектно-ориентированного программирования (ООП). Рассмотрим каждый из пяти принципов SOLID и их применение в ООП. Читать далее
Примеры использования методов __call() и __callStatic() в PHP, которые позволяют нам более гибко управлять поведением нашего кода при вызове несуществующих методов. Читать далее
Что такое __get() и __set() в PHP и как их использовать Читать далее
Источник: stepcode.ru
Объектно-ориентированное программирование в PHP
Для того, чтобы написать любую программу, требуется выбрать специальный язык, изучить его синтаксис и функционал, а затем продумать код. Программа может быть составлена как на основе логики и математики, так и опираясь на концепцию объектов. Второй вариант более привлекателен, особенно для новичков.
PHP – язык программирования, который входит в ряды самых популярных средств создания программного обеспечения по рейтингу TIOBE. В основном применяется для веб-приложений (согласно сведениям из Google). Имеет концепции ООП, о который зайдет речь далее. Информация позволит получить максимально много знаний о PHP и программировании на нем «через объекты».
Объектно ориентированное программирование в Python за 10 минут!
PHP – это…
В Google можно увидеть немало информации о рассматриваемом языке. Это «способ общения с ПО и устройствами» широкого спектра применения. В основе лежит принцип сценариев. Обладает открытым кодом и общим назначением.
Разработан для того, чтобы создавать веб-приложения. Предусматривает:
- простой и понятный синтаксис;
- возможность создания генерируемых динамическим способом веб-страничек;
- интерфейс, с которым разберется даже новичок;
- стабильную работу;
- высокий уровень безопасности;
- выполнение PHP-скриптов на серверной стороне.
Согласно Google, функции языка позволяют программировать не только мелкие веб-утилиты, но и крупные игры/проекты. Использовать его удобно и легко. Отличный вариант для тех, кто только начинает погружение в мир программных кодификаций.
ООП – определение
ООП в PHP – важная концепция, без которой не получится полноценно создавать контент на соответствующем языке. Нужно уделить изучению соответствующей особенности должное внимание.
В Google немало определений объектно-ориентированного программирования. Это своеобразная методология программирования, опирающаяся на представлении контента в виде связи объектов. Каждый из них выступает как экземпляр класса. Классы образовывают иерархию, носящую название наследования.
ООП – подход к написанию утилит в виде моделирования информационных элементов. Предусматривает быструю разработку сложного контента. Утилиты, в основе которой лежит соответствующая концепция, согласно Google, обладают хорошей масштабируемостью и легкой поддержкой на протяжении длительного времени.
Для чего нужно объектно-ориентированное программирование
ООП в PHP появилось относительно недавно – после 5 версии. До этого момента соответствующая концепция не поддерживалась. Эту информацию можно подтвердить через Google или любую иную поисковую систему. Но классы и объекты здесь встречаются с 3 версии.
- помогает исправлять фатальные ошибки языка;
- способствует более простому и быстрому пониманию кодификации;
- минимизирует избыточность информации;
- позволяет управлять имеющимися моделями предельно эффективно.
Она помогает воссоздавать новые игры и сложные программы, задействовать базы данных, а также быстро осваиваться в коддинге и обнаруживать ошибки софта.
Классы в языке
Класс – своеобразный шаблон, который позволяет представлять реальное понятие. Отвечает за управление свойствами задействованного элемента. Позволяет манипулировать, используя разного рода методы.
Класс, согласно Google, подразумевает объединение нескольких «себеподобных» в иерархию наследования.
Наглядные примеры помогут лучше сориентироваться. Выше представлен код, в котором создан класс Employee. Он отвечает за объект служащего. Оператор class Employee, прописанный в первой строке определяет класс Employee. После остается объявлять свойства, методы класса, а также конструктор.
Как быть со свойствами
Свойство класса – переменная, которая задействована для хранения данных об объекте. Такое определение удастся отыскать через Google. В приведенной ранее практике происходит следующее:
- Определены три свойства.
- Название свойств – first_name, age, last_name.
- Доступ к свойствам класса чаще всего производится через создаваемые объекты.
- Private-свойства доступны в пределах конкретного класса. За счет подобной особенности удается обеспечить предельную безопасность кодификации.
Существуют различные уровни доступа к свойствам и методам класса. Они будут рассмотрены позже.
Что там с конструкторами
Конструктор – спецметод класса, вызываемый автоматически при инстанцинации элемента (Google). Классы, в которых объявлен constructor, отвечают за вызов соответствующего метода при каждом создании нового элемента.
Конструкторы, согласно Google, очень полезны при различных обстоятельствах. Пример – инициализация состояния элемента перед непосредственным применением в кодификации.
Выше – практика применения конструктора при наследовании. Определение оного происходит через метод _construct.
Методы
ООП в PHP немыслимо без методов. Это – функции, которые отвечают за выполнение тех или иных действий. Последние имеют тесную связь с объектами.
Используются для доступа и управления свойствами элемента, выполнения связанных операций. Примеры выше предусматривают определение метода getLastName. Он будет возвращать фамилию, которая имеет связь с соответствующей составляющей.
Объекты
Предыдущая информация раскрывает базовую структуру класса. Теперь можно изучить понятие объектов.
Для того, чтобы задействовать класс, требуется инстанцировать оный. Конечный результат — это и есть объект. Реальный элемент, который предусматривает возможность работы над ним.
Выше представлена практика работы с class и object. Стоит запомнить следующие данные:
- Для создания объекта любого класса вместе с его «названием» требуется использовать ключевик new.
- Когда class определил метод «конструктор» и ему нужны аргументы, программеру придется передать оные. Это необходимо для создания экземпляра объекта.
- Приведенные примеры используют три аргумента. Они были созданы в момент появления $objEmplayee.
- Метод _construct будет автоматически вызываться при инициализации элемента.
- После всего происходит вызов методов класса для $objEmployee. Это нужно для того, чтобы получить сведения, которые возникли в момент появления элемента.
В Google удается обнаружить информацию о том, что можно создавать несколько объектов одного класса.
Соответствующая манипуляция прописана в кодификации выше. В вот один из примеров наглядного представления класса Employee и его экземпляров.
Если рассматривать ООП через PHP в элементарной форме, можно сделать вывод о том, что класс – это проект. Он необходим для создания структурированных объектов/элементов.
Инкапсуляция
Инкапсуляция – важная составляющая объектно-ориентированного программирования. В Google прописано, что с ее помощью удается ограничивать доступ к тем или иным свойствам/методам элемента.
Инкапсуляция по Google служит для быстрой организации иерархической управляемости. Значительно упрощает процедуру коддинга.
Об уровнях доступа
При создании приложения в кодификации используются разного рода уровни доступа. Они отвечают за безопасность.
Различают следующие варианты:
- public function;
- private;
- protected.
Далее каждый вариант будет рассмотрен более подробно.
Общий
В Google общий доступ – это возможность получения оного из любого места вне класса к свойствам или методам. Обращение доступно по всему приложению. Корректировки можно производить из любого блока кодификации.
Выше – пример, в котором общедоступным выступает name. К нему можно обратиться из любого пространства за пределами класса. Именно такой вариант был рассмотрен раньше.
Приватный
Private по Google – это доступ, который предоставляется в пределах конкретного элемента кодификации. В рассматриваемом случае – в классе.
Именно там происходит определение методов получения и установки.
Так будет выглядеть предыдущий элемент кода, переделанный на доступ типа private. Запомнить рекомендуется следующие сведения:
- При попытке подключиться к свойству за пределами класса на экране появится сообщение об ошибке.
- Значение private стоит прописывать через метод setter.
- Такой вариант позволяет обеспечивать достаточный уровень безопасности кодификации.
Применяется при различных обстоятельствах. Убережет от спонтанных корректировок свойств и методов.
Protected
Последний вариант, который указан в Google – это protected. К ним возможно обращение того же класса, который определил methods и параметры. Сюда также включены классы, наследующие оный.
Понятие наследования
В PHP и ООП примеры работы с кодами предусматривают наследование. Это – важный аспект объектно-ориентированного программирования. Позволяет наследовать параметры и methods других классов, расширяя оные. Именно такие возможности прописаны в Google.
Стоит запомнить следующие данные:
- Класс, который будет наследоваться – родительский.
- Класс, которому передаются параметры – дочерний.
- При создании экземпляра элемента дочернего класса оный будет наследовать свойства и methods родительского.
Выше – наглядный пример работы наследования. Person тут – родитель, а Employee – дочерний. А вот реальный пример кода:
Важно запомнить такую информацию:
- Employee для наследования использовал ключевик extends.
- Employee способен получать доступ ко всем свойствам и методам Person.
- $employee получает доступ к getName и setName, определенные в Person, так как оные имеют статус public.
Элемент $employee подходит для установки age. За счет рассмотренной особенности удается значительно сократить длину итоговой кодификации.
Полиморфизм
Последний момент, который важен для использования – полиморфизм. В Google так называют концепцию, которая имеет отношение к возможности разными путями обрабатывать элементы. Все зависит от типа заданной информации.
Здесь происходит следующее:
- Корректировка formatMessage посредством переопределения в классе BoldMessage.
- Сообщение будет форматироваться по-разному в зависимости от того, какой тип элемента перед разработчиком.
- В ООП на PHP нет поддержки перегрузки.
Для того, чтобы лучше разобраться в рассмотренных примерах, рекомендуется проработать вручную все кодификации. А еще можно отыскать немало полезных туториалов на соответствующую тематику в Google.
По этой ссылке находятся видео-уроки, которые помогут лучше разобраться в объектно-ориентированном программировании и PHP. Это – отличный настольный помощник как для новичков, так и для опытных разработчиков.
А для того, чтобы быстрее освоить PHP и его особенности, можно пройти специализированные дистанционные курсы. В конце процесса ученику будет вручен электронный сертификат, подтверждающий знания в выбранном направлении. Всего за пару месяцев получится разобраться в сложных процессах IT-сферы, а также получить бесценный практический опыт.
Источник: otus.ru
Три «кита» ООП. Пример 1
Как думает программист, использующий технологию ООП ?
Зачем нужны инкапсуляция, наследование и полиморфизм?
Пусть требуется создать программу, обрабатывающую данные о семьях, имеющих детей.
1. Начнем с традиционной семьи (мать-отец-ребенок).
а) cоздадим класс MFC, содержащий следующие поля — имена матери, отца и ребенка, назовем эти поля соответственно:
mother, father, child;
б) в классе необходим конструктор MFC(string m, string f, string c), который будет задавать три поля нашего класса;
в) создадим метод класса void Output(), который будет выводить данные о семье (пока только имена);
г) добавим также метод, возвращающий только имя ребенка GetChild();
В консольное приложение кроме файла Program.cs добавим файл Class2.cs (имя может быть любое), куда поместим следующий текст:
using System; namespace МатьОтецРебенок < // Инкапсуляция в классе MFC public class MFC < protected string mother; protected string father; protected string child; public MFC(string m, string f, string c) < mother = m; father = f; child = c; >// возврат имени ребенка public virtual string GetChild() < return child; >// вывод имен членов семьи public virtual void Output() < Console.WriteLine(«Mать: » + mother + » отец: » + father); Console.WriteLine(«Ребенок: » + child); >// Рисование разграничительной линии (пригодится) public virtual void Tir() < Console.WriteLine(«_____________________________»); >> >
Комментарий. Поля класса MFC объявим защищенными (protected), так как они будут наследоваться в дочерних классах. Для извлечения всех полей будет использоваться метод void Output() как public, а также и как virtual с учетом его дальнейшей перегрузки. Заметим, что метод string GetChild() имеет такие же модификаторы.
Проверим, как это работает. Для этого добавим в метод Main() три оператора:
using System; namespace МатьОтецРебенок < class Program < static void Main() < // R — объект родительского класса MFC R = new MFC(«Барбара», «Борис», «Бэлла»); R.Output(); R.Tir(); // разделитель информации >> >
Результат:
Mать: Барбара отец: Борис
Ребенок: Бэлла
_____________________________
2. Что делать, если в семье 2 ребенка? Переделывать исходный класс, или наследовать от него другой? В ООП выбирают второй вариант.
Нам нужно будет только добавить поле child2, увеличить на 1 список параметров конструктора, изменив и его. Далее выполним перегрузку двух других методов исходного класса, при этом их имена не изменяются — помните, что означает полиморфизм? Тогда новый дочерний класс назовем DMFC:
// Наследование класса MFC (3 + 1) public class DMFC : MFC < protected string child2; // + 2-й ребенок // конструктор класса наследуется вот так: public DMFC(string m, string f, string c, string d): base (m, f, c) < child2=d; >// перегрузка метода (модификатор override) public override string GetChild() < return child + «, » +child2; >// Перегрузка метода — полиморфизм (добавим 2 ребенка) public override void Output() < base.Output(); // используем метод родительского класса Console.WriteLine(«Второй ребенок: » + child2); // только добавление >>
Выполним проверку, добавив в Main( ) три оператора:
// D — объект дочернего класса DMFC D = new DMFC(«Валентина», «Виктор», «Владимир», «Валентина»); D.Output(); D.Tir();
Результат:
Mать: Барбара отец: Борис
Ребенок: Бэлла
_____________________________
Mать: Валентина отец: Виктор
Ребенок: Владимир
Второй ребенок: Валентина
_____________________________
Как Вы видите, добавился вывод имени второго ребенка.
3. Но если Вам теперь потребуется добавить еще одно поле — фамилию семьи и метод для возврата фамилии семьи GetName( ), то поступайте также, создайте дочерний класс (класс-внук) от DMFC, назвав его, например, VMFC:
// Наследование класса DMFC (4 + фамилия) public class VMFC: DMFC < protected string name; // + фамилия семьи public VMFC(string m, string f, string c, string d, string n): base (m, f, c, d) < name = n; >// Перегрузка метода — полиморфизм (добавим фамилию) public override void Output() < Console.WriteLine(«Фамилия семьи: «, name); base.Output(); // будет использоваться метод класса DMFC > public string GetName() < return name; >>
Выполним проверку, добавив в Main( ) три оператора:
// V объект класса — внук, наследуется от DMFC VMFC V = new VMFC(«Прасковья», «Петр», «Павел», «Паулина», «Петровы»); V.Output(); V.Tir();
Результат:
Mать: Барбара отец: Борис
Ребенок: Бэлла
_____________________________
Mать: Валентина отец: Виктор
Ребенок: Владимир
Второй ребенок: Валентина
_____________________________
Фамилия семьи: Петровы
Mать: Прасковья отец: Петр
Ребенок: Павел
Второй ребенок: Паулина
_____________________________
4. Для чего могут пригодиться методы GetChild( ) и GetName( )? А вот для чего. Добавив в Main( ) еще 4 оператора:
// Дети и фамилия Console.WriteLine(«Дети: » + R.GetChild()); Console.WriteLine(«Дети: » + D.GetChild()); Console.WriteLine(«Дети: » + V.GetChild()); Console.WriteLine(«Фамилия: » + V.GetName()); V.Tir();
Результат:
Mать: Барбара отец: Борис
Ребенок: Бэлла
_____________________________
Mать: Валентина отец: Виктор
Ребенок: Владимир
Второй ребенок: Валентина
_____________________________
Фамилия семьи: Петровы
Mать: Прасковья отец: Петр
Ребенок: Павел
Второй ребенок: Паулина
_____________________________
Дети: Бэлла
Дети: Владимир, Валентина
Дети: Павел, Паулина
Фамилия: Петровы
_____________________________
Как Вы видите, с помощью этих методов Вы получаете доступ к защищенным полям классов.
Вот как в целом записывается текст Program.cs (приводится для контроля):
// Инкапсуляция, Наследование, Полиморфизм // на примере разного состава семей и полей // Классы MFC, DMFC, VMFC — в файле Class2.cs // (С) c-sharp.pro, 2020 using System; namespace МатьОтецРебенок < class Program < static void Main() < // R — объект родительского класса MFC R = new MFC(«Барбара», «Борис», «Бэлла»); R.Output(); R.Tir(); // разделитель информации // D — объект дочернего класса DMFC D = new DMFC(«Валентина», «Виктор», «Владимир», «Валентина»); D.Output(); D.Tir(); // V объект класса — внук, наследуется от DMFC VMFC V = new VMFC(«Прасковья», «Петр», «Павел», «Паулина», «Петровы»); V.Output(); V.Tir(); // Дети и фамилия Console.WriteLine(«Дети: » + R.GetChild()); Console.WriteLine(«Дети: » + D.GetChild()); Console.WriteLine(«Дети: » + V.GetChild()); Console.WriteLine(«Фамилия: » + V.GetName()); V.Tir(); >> >
Как Вы считаете, достаточно легко воспринимается Вами текст метода Main( )?
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Источник: c-sharp.pro