Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр

Копай Дыру в России

Симуляторы, Приключения, Экшены

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • AlexKud AlexKud 26 постов
  • StariiZoldatt StariiZoldatt 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Ооп

С этим тегом используют

Программирование IT Все
77 постов сначала свежее
64
vasiljevalentin
1 год назад
Лига программистов
Серия ООП

Поговорим про ооп⁠⁠1

Говорят, чтобы разобраться в чем-то достаточно хорошо, нужно попробовать объяснить это другому. Поэтому я решил написать несколько постов о программировании и заодно узнать / понять какие-то важные штуки получше. В этой первой статье начнем говорить об объектно-ориентированном подходе в программировании. Примеры я буду писать на языке PHP. Но, надеюсь, общие концепции будут применимы для любого языка.

Поговорим про ооп PHP, Программирование, Ооп, Oop, Длиннопост

Мем из интернетов

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

Итак, говорят, что существует две основные парадигмы программирования. Часто одну называют функциональной, а вторую объектно-ориентированной. Однако в статье Яндекса к этому понятию подходят более широко.
Ну, нам теоретические нюансы не важны, будем считать, что сначала программы писали как последовательность команд. Компьютер эту последовательность выполнял и программист получал какой-то результат. Позднее программы стали больше и сложнее и в них появилось много повторяющихся операций, тогда программисты придумали использовать функции.
Функция - часть программы, оформленная для многократного использования.
Такие функции можно вызывать из любого места в основной программе и вызывать их множество раз. Таким образом, вместо 10 одинаковых команд в двух разных местах, мы можем вызвать одну и тужу функцию в двух местах программы и сэкономить время, силы и размер программы.

Еще позднее функций стало недостаточно и программисты придумали классы и объекты.
Класс - часть программы, которая может содержать внутри функции и переменные, оформленная для многократного использования в более сложных конструкциях.
Предположим, мы хотим создать программу, которая выведет строку "Hello, world!" несколько раз.
На PHP это будет выглядеть, например так:

Здесь три команды вывода текста на экран. Поэтому удобно использовать функцию:

<?php
echo 'Hello, world!';
echo 'Hello, world!';
echo 'Hello, world!';
?>

Если вдруг, мы захотим внести изменения в программу и выводить другой текст, или, например, добавить перевод строки после текста, нам придется изменить только одну функцию в одном месте. А вызов функции останется неизменным.

<?php
function hello(){
echo 'Hello, world!';
}
hello();
hello();
hello();
?>

Что на счет ООП?

Создадим класс Текст. Он будет печатать текст и хранить этот текст внутри себя.

<?php
class Text{
public $text = 'Hello, world!';
function printText()
{
echo $this->text;
}
}
$hello = new Text();
$hello->printText();
?>

Здесь у нас класс Текст. У него есть общедоступное свойство текст, которое равно "Hello, world" и метод, который выводит этот текст на экран. Из такого простого примера не очень понятна выгода классов по отношению к простым функциям. Однако такой класс имеет рад преимуществ.

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

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

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

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

В будущих статьях я попробую описать все основные моменты работы с ооп. Попробую разобраться в ни сам и объяснить заинтересованным. Так что, присоединяйтесь.

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

Показать полностью 1
[моё] PHP Программирование Ооп Oop Длиннопост
172
5
alz0
alz0
1 год назад

Знания, чтобы что?⁠⁠

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

Общался с коллегой и вскользь сказал ему, что неисполнение задач в срок - это некомпетентность (не сделано уже 8 месяцев) . Видимо у человека таких неисполнений много, наступил на больное, он завёлся и начал говорить, что это всего лишь "опоздания" и небольшие упущения.

Ближе к финалу он выдал:

— Ну, вот ты же считаешь себя айтишником?

— Да, в каком-то роде. Всё же первое образование именно инженерное.

— Назови мне три постулата ООП, не открывая Яндекс.

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

Знания, которые получены для того, чтобы их получить и делиться с коллегами на обеде - 30% контента, который мы потребляем, чтобы потреблять.

Эти знания не принесут денег или статуса, но мы гордимся тем, что знаем "три постулата ООП" и под пивко всегда расскажем друзьям. А, глядишь, завоюем еще и сердце подвыпившей дамы своим умом.

Знания Умники Ооп Текст
16
artoff
1 год назад

Губерман про ООП⁠⁠

Губерман про ООП
[моё] Программирование Игорь Губерман Ооп Искусственный интеллект ChatGPT Скриншот Программист
0
11
Kiddynamite91
Kiddynamite91
1 год назад

Смотрите какого зверя откопал⁠⁠

Давеча попался мне такой зверь Ратник 410. Пока ещё не опробовал его, но очень интересно.

Смотрите какого зверя откопал Оружие, Ооп
Показать полностью 1
Оружие Ооп
12
pmus
pmus
2 года назад
Серия Не Ван Россум

Python полностью поддерживает ООП?⁠⁠

"Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой"

(Мещанин во дворянстве, Жан-Батист Мольер).

Давайте вспомним основные принципы ООП. Наследование, инкапсуляция и полиморфизм.

С наследованием, думаю, все понятно. Наверняка каждый создавал класс наследованный от чего-либо, начиная с dict и далее.

class NoneDict(dict):

····def missing(self, key):

········return None

nd = NoneDict({'a': 1, 'b':2})

print(nd['a'], nd['b'], nd['c'])

>>>1 2 None

(Также я обещал одному юному подписчику показать пример, как не париться с ключами даже без defaultdict модуля collections)

Рассматриваем дальше. Инкапсуляция.

"Под инкапсуляцией в объектно-ориентированном программировании понимается упаковка данных и методов для их обработки вместе, т. е. в классе."

Очевидно, что это реализовано тоже, и каждый экземпляр класса всё своё носит с собой.

"Полиморфизм позволяет обращаться с объектами разных классов так, как будто они являются объектами одного класса."

Тоже весьма очевидно. Наследование и перегрузка методов (плюс магические методы) позволяют нам при желании взаимодействовать с классами универсально и единообразно.


На самом деле, мы используем эти принципы ежедневно, даже не задумываясь о том, что "мы используем здесь такой-то принцип, потому что...". Очевидно, что язык явным и естественным образом направляет нас к единственно правильному способу сделать "это" (см. PEP20).

Ребята, сказал бы я, мальчишки и девчонки – пока молодые, развивайте полный лотос, он очень пригодится вам в жизни. И ничего не берите в голову, кроме щебета птиц, шума ветра и плеска волн.

(Тайные виды на гору Фудзи, Виктор Пелевин).


Ребята, мальчишки и девчонки – пишите классы, хорошие и разные, наследуйте их, храните их данные рядом с методами, перегружайте методы под особенности класса. И ничего не берите в голову, кроме чистоты кода и красоты реализации.

Таким образом, мы выяснили, что Python полностью поддерживает ООП.

Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.

Показать полностью
[моё] Python Программист Ооп Текст
5
daymaner
daymaner
2 года назад

Уже выкладывал, но тот ак удалён⁠⁠

Уже выкладывал, но тот ак удалён Картинка с текстом, IT, IT юмор, Программирование, Программист, Ооп
Показать полностью 1
[моё] Картинка с текстом IT IT юмор Программирование Программист Ооп
3
22
TheTeaLover
TheTeaLover
2 года назад
Web-технологии
Серия Туториалы по бэкенд разработке

Продолжаю делать курс про PHP⁠⁠

Сегодня в программе куки, сессии и азы ООП

Показать полностью 5
[моё] IT PHP Туториал Ооп Видео YouTube Длиннопост
7
Sergeytolkachyov
Sergeytolkachyov
2 года назад

Dependency Injection Containers (DI контейнеры) в Joomla 4⁠⁠

Этот текст - перевод статьи из нового портала документации для разработчиков Joomla, раздел "Основные концепции".

Введение

Joomla 4 внедряет практику контейнеров внедрения зависимостей (DI контейнеры, DIC) в Joomla. Эта статья призвана объяснить, почему мы внедряем их и как их использовать в Joomla.

DI контейнеры уже давно существуют в экосистеме PHP для поддержки целей внедрения зависимостей. Например, Symfony представила эту концепцию в 2009 году.
Есть несколько причин, по которым пришло время внедрить их в Joomla 4:
1. Тестирование — одной из тем Joomla 3 были глючные релизы. Нам нужно иметь возможность тестировать классы и компоненты более простым способом. Внедрение зависимостей позволяет значительно упростить внедрение классов Mock, что, мы надеемся, позволит нам уменьшить количество ошибок.

2. Нужно уменьшить количество магии в Joomla - Joomla имеет большое количество "волшебных" файлов, названия которых нужно угадывать. Это увеличивает количество времени, которое люди, плохо знакомые с Joomla, тратят на изучение соглашений по именованию файлов. Предоставление конкретного класса в расширениях позволяет нам легко тестировать совместимость расширений с другими расширениями (например, категориями и ассоциациями).

Глобальный контейнер
Внедрение глобального контейнера зависимостей очень слабо заменяет класс Factory (ex. JFactory). Однако его не следует путать с прямой заменой. Так, например, в ваших контроллерах в CMS вместо \Joomla\CMS\Factory::getDocument(); стоит использовать $this->app->getDocument();.

Это использует внедренное приложение и поэтому упрощает тестирование.

Ссылки по теме на Хабре:

- Опубликован скорректированный план выпуска релизов Joomla 4 и Joomla 5

- Распространенные ошибки при написании плагинов Joomla 4

Создание объекта в контейнере

Чтобы поместить что-то в глобальном DI-контейнере Joomla проще всего передать анонимную функцию. Пример для логгера ниже:

Dependency Injection Containers (DI контейнеры) в Joomla 4 Разработка, Joomla, Ооп, Di, PHP, Cms, Framework, Web, Web-программирование, Длиннопост

Функция share принимает два обязательных параметра и необязательный третий параметр:

1. $key - имя сервиса (dataStore key) - почти всегда является именем класса, который вы создаете.

2. $value - Анонимная функция принимает единственный параметр — экземпляр контейнера (это позволяет вам получать любые зависимости из контейнера). return — это сервис, который вы хотите поместить в контейнер.

3. $protected - (необязательный параметр) - это булев параметр, определяет, защищена ли служба от перезаписи (т. е. разрешено ли кому-либо еще переопределять ее в контейнере). Как правило, для основных служб Joomla, таких как объекты сессии (Session), это true.


Теперь рассмотрим более сложный пример:

Dependency Injection Containers (DI контейнеры) в Joomla 4 Разработка, Joomla, Ооп, Di, PHP, Cms, Framework, Web, Web-программирование, Длиннопост

Здесь видно, что мы добавили две вещи — начали использовать зависимости (роутер API получает приложение API из контейнера) и мы также создали алиас для ApiRouter (в Joomla 4 существует 5 типов приложений - Application - Site, Administrator, Cli, API и Installation, а также могут быть созданы свои типы - Т.С.). Это означает, что контейнер создает экземпляр ApiRouter тогда, когда распознает использование класса.  Зато в нашем коде для простоты мы сможем запустить следующий вызов, чтобы получить роутер (That means whilst the container recognises that if it needs to build an ApiRouter instance it can do that. But in our code to keep things simple we can also run to retrieve our router).


Factory::getContainer()->get('AmazingApiRouter');


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

ПровайдерыПровайдеры в Joomla — это способ регистрации зависимости в сервис-контейнере. Для этого создайте класс, реализующий Joomla\DI\ServiceProviderInterface.

Это дает вам метод регистрации, который содержит контейнер. Затем вы можете снова использовать метод share, чтобы добавить любое количество объектов в контейнер. Затем вы можете зарегистрировать их в контейнере с помощью \Joomla\DI\Container::registerServiceProvider. Вы можете посмотреть, как мы регистрируем все сервис-провайдеры, здесь, в методе \Joomla\CMS\Factory::createContainer.

Dependency Injection Containers (DI контейнеры) в Joomla 4 Разработка, Joomla, Ооп, Di, PHP, Cms, Framework, Web, Web-программирование, Длиннопост

Контейнер компонентаКаждый компонент также имеет свой собственный контейнер (который находится в разделе администратора (administrator section) Joomla). Однако этот контейнер не подвергается воздействию. Он нужен только для того, чтобы получить системные зависимости и позволить классу представлять ваше расширение. Этот класс является классом Extension и как минимум должен реализовывать интерфейс соответствующего типа расширения. Например, компонент должен реализовать \Joomla\CMS\Extension\ComponentInterface (libraries/src/Extension/ComponentInterface.php). Для получения полной информации о реализации в Вашем расширении мы рекомендуем обратиться к официальной документации Joomla «Разработка компонента MVC для Joomla 4».

Использование контейнера компонента в другом расширении

Вы можете легко получить контейнер другого расширения через объект CMSApplication. Например, Factory::getApplication()->bootComponent('com_content')->getMVCFactory()->createModel('Articles', 'Site');

Получите контейнер com_content, получите MVC Factory и получите ArticlesModel фронтенда Joomla. И это будет работать в любом расширении во фронтенде, бэкэнде или API Joomla (в отличие от старого метода LegacyModel::getInstance()).

ДополнительноВ документации Joomla Framework есть отличный пример того, почему внедрение зависимостей полезно для вашего приложения и как DIC помогает его структурировать. Читать на GitHub.

От переводчикаЗамечания и пожелания по переводу приветствуются.

Показать полностью 3
[моё] Разработка Joomla Ооп Di PHP Cms Framework Web Web-программирование Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии