Поддержать проект
Новый комментарий

DmitryGavrilov 26.09.2018 в 14:42

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

ivashkevich 27.09.2018 в 23:20

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

lig7771991@list.ru 29.11.2018 в 21:23

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

ivashkevich 29.11.2018 в 21:31

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

lig7771991@list.ru 29.11.2018 в 23:26

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

ivashkevich 30.11.2018 в 23:16

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

505-565@mail.ru 25.02.2019 в 12:57

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

ivashkevich 26.02.2019 в 09:08

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

505-565@mail.ru 26.02.2019 в 09:17

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

ivashkevich 26.02.2019 в 09:44

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

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

landialog 02.01.2019 в 12:17

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

ivashkevich 02.01.2019 в 21:31

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

505-565@mail.ru 26.02.2019 в 10:06

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

excent63 03.02.2019 в 20:02

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

ivashkevich 04.02.2019 в 00:01

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

studentDev Patron 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.

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