Новый комментарий

DmitryGavrilov 26.09.2018 в 14:42

Спасибо классный урок, как работает разобрался, однако сформулировать для себя что именно такое полиморфизм до конца не смог)

ivashkevich 27.09.2018 в 23:20

Главное что понял как работает, потом сформулируешь, программируй давай)

[email protected] 16.04.2021 в 18:27

Дмитрий, пригодилось понимание полиморфизма в реальной практике?)

stiv822 06.04.2023 в 14:20

Ну я так понял что, полиморфизм это способность функции выполняться в зависимости от внешних факторов

[email protected] 29.11.2018 в 21:23

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

ivashkevich 29.11.2018 в 21:31

Суть не только в этом. Прежде всего это возможность зависеть от абстракций, а не от реализаций.

[email protected] 29.11.2018 в 23:26

Безусловно, просто с ходу понять эти абстракции очень не просто...

ivashkevich 30.11.2018 в 23:16

Сходу да, со временем придёт =)

[email protected] 25.02.2019 в 12:57

Можно на пальцах, что именно тут имеется ввиду под понятиями абстракция и реализация? Уроки мне нравятся, спасибо!

ivashkevich 26.02.2019 в 09:08

Абстракция - это интерфейс, а реализация - это классы. Могут быть разные классы, реализующие один и тот же интерфейс.

[email protected] 26.02.2019 в 09:17

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

ivashkevich 26.02.2019 в 09:44

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

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

landialog 02.01.2019 в 12:17

Рад что сюда попал. Толковое объяснение. Спасибо.

ivashkevich 02.01.2019 в 21:31

На здоровье, дружище!)

[email protected] 26.02.2019 в 10:06

Понятно, спасибо!

excent63 03.02.2019 в 20:02

Спасибо за уроки!

ivashkevich 04.02.2019 в 00:01

Спасибо за твой выбор в пользу этих уроков)

studentDev 25.04.2020 в 09:22

Спасибо за урок, конечно полностью понять трудно но суть логики данного кита немного понял...)

pixel 18.11.2020 в 00:05

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

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

Если я правильно понял:)

ivashkevich 19.11.2020 в 20:32

Всё верно. Возможность выбора реализации во время выполнения кода и есть полиморфизм

tunok 26.12.2020 в 10:36

спасибо за уроки!!

как я понял, какой метод ближе, тот и вызывается) как по принципу наследования

ivashkevich 26.12.2020 в 21:48

Да, реализация в ближайшем родительском классе

OneMoreTime 28.12.2020 в 17:41

Однако, мы можем переопределить этот метод в классе B. Для этого мы описываем метод с таким же названием и описываем в нём свою логику

А как это соотносится с принципом SOLID?
Это хорошая идея - переопределять наследуемые методы?

ivashkevich 29.12.2020 в 19:34

Это хорошая идея когда это нужно. Вас что-то смущает?
P.S. SOLID - это не один принцип.

OneMoreTime 29.12.2020 в 22:33

Вас что-то смущает?

Я про принцип подстановки Барбары Лисков, где наследование должно дополнять базовый класс, а не переопределять его. Во всяком случае, везде пишут о том, что если наследуя, мы переопределяем родительские методы новой логикой, а не просто дополняем(расширяем) их, значит с архитектурой что-то не так...

ivashkevich 04.01.2021 в 06:34

А, вот вы про что) В целом да, следовать SOLID нужно, но не рассказать о возможности переопределения нельзя. Далее мы рассмотрим возможности интерфейсов и абстрактных классов в плане полиморфизма, без нарушения принципа L.

serega19860511 26.05.2021 в 22:16

Здравствуйте Артём, я понимал проявление полиморфизма, в том что мы можем переопределить родительские методы в дочерних классах. Теперь прочитав комменты, получается что моё понимание не совсем верное, если следовать принципам SOLID. Или имеется ввиду, чтобы не полностью переписать родительский метод, а добавить в существующий функционал дополнительную логику? К примеру есть класс проверяющий авторизацию, с методом checkLogin, проверяет он допустим по одному логину, мы наследуемся от этого класса и добавляем в метод ещё и пароль. И тут у меня возникает вопрос зачем мне наследоваться, если я могу в родительском классе в метод добавить этот пароль?
Или у меня пример кривой?

ivashkevich 29.05.2021 в 22:01

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

serega19860511 29.05.2021 в 23:42

Согласен пример не подходящий, но всё-же моё понимание верное или нет?

ivashkevich 30.05.2021 в 06:34

Мне кажется у вас спуталось понимание полиморфизма и принципов SOLID. Прочитайте статьи в интернетах и про то и про это.

dirty-monk 31.01.2022 в 19:32

Большое спасибо за очередной качественный урок! До сих пор не перестаю радоваться формату материала. Чувствуется, что автор делал это от чистого сердца. Мир=)

[email protected] 04.03.2024 в 16:50

Как я понял.
Полиморфизм - это использование метода с одним и тем же названием, но с разным функционалом. Это вкратце.

Логические задачи с собеседований