Комментарии:
спасибо за урок!!!!!
ОтветитьНа самом деле автор описывает наследование вместо полиморфизма.
ОтветитьЕсли кто не понял поповоду полиморфизма, вот я кратции вам расскажу:
Это по сути переопределение методов и свойств класса который наследуешь и само собой переопределение логики этих методов или свойств
"Дизлайк и отписка". Ну шутка, конечно, но вот прям видео совсем мимо. Если говорить, что инкапсуляция - это всего лишь сокрытие, такой ответ трактуется как неправильный, судя по многочисленным отзывам. И можно на этом вопросе сразу провалить собеседование. Инкапсуляция включает в себя, не ограничивается сокрытием.
Плюс пример неудачный. Кнопка это пример именно инкапсуляции, при чем тут полиморфизм? Вот если при нажатии на одну и ту же кнопку разными людьми происходят разные действия - это был бы полиморфизм. Ну например кнопка со сканером отпечатков пальца - если на нее нажимает хозяин, то открывается дверь, а если чужой - то звенит дверной звонок.
А вот просто кнопка - это инкапсуляция. Она в себе скрывает некий механизм работы, который для нажимающего не важен - это и есть инкапсуляция. И в том числе сокрытие логики работы, ну провода проложены где-то там в стене, чтобы какой-нибудь электрик от звонка случайно не запитал люстру в комнате.
Полиморфизм — способность функции обрабатывать данные разных типов.
Вот пример!
abstract class Shape{
//создаем шаблон outshape() метод для каждого наследуемего класса
abstract protected function outshape();
//вызов функции outshape() исходя из объекта $this->(этот_объект)
public function draw(){
print $this->outshape(). "\n";
}
}
class Circle extends Shape{
public function outshape(){
return "<h3>Рисуем круг</h3>";
}
}
class Square extends Shape{
public function outshape(){
return "<h3>Рисуем квадрат</h3>";
}
}
class Triangle extends Shape{
public function outshape(){
return "<h3>Рисуем треугольник</h3>";
}
}
$c = new Circle();
$s = new Square();
$t = new Triangle();
$c->draw();
$s->draw();
$t->draw();
/*
Получим после исполнения скрипта:
Рисуем круг
Рисуем квадрат
Рисуем треугольник
Создаем объект каждого класса кроме абстрактного.
$c = new Circle();
$s = new Square();
$t = new Triangle();
Вызываем метод draw()
$c->draw();
$s->draw();
$t->draw();
На этапе компиляции (позднее связывание) компилятор смотрит что в созданных объектах нет метода draw() и обращается к родительскому классу. Там находит метод draw() и исходя из объекта в котором была вызванная функции draw() вызывает метод
outshape() нужного класса.
*/
Самая большая сложность в ООП с которой я столкнулся, это понять, какое практическое применение этим знаниям, я до сих пор не понимаю многое, и как мне кажется, ошибка всех преподавателей в том, что они начинают рассказывать подход, но не рассказывают в каких практических ситуациях это может нам помочь((( Я уточню, принцип работы я понял, неследники класса А создают метод с разной начинкой и данными, а затем юзают метод из класса А чтобы вызвать метод из класса Б, но зачем так усложнять, можно вызвать метод сразу из нужного объекта. Я точно в чем то ошибаюсь и не говорю что это бесполезно, как-раз таки и хочется убеждаться в том, что это не бесполезно, но преподаватели просто говорят что вот так можно делать, счастливой дороги, просто знай это.
ОтветитьСпрашивается - зачем называть урок "полиморфизм" если этот самый полиморфизм тут ни хрена на объясняется? Объяснить его на собственном примере и растолковать людям - это дорогого стоит. А нахайпить на названии а потом кинуть ссылку на статью, где к тому же объяснено хреново - это и есть то, что определяет понятие "говноканал". И это печально.
ОтветитьСпасибо. Всё четко и понятно.
ОтветитьПолиморфизм по русски: Ручка с двумя цветами.
Дай ручку классу Учитель - он сучара только красным пишет. Этому он научил всех студентов.
Дай ручку классу Студент - он умеет еще и синим писать.
Класс студент может писать как учитель(красным), а может хуй покласть на учителя и писать синим. Вот и все. Когда он пишет синим он использует свой метод. Когда красным метод учителя.
Метод называется писать. Что у учителя, что у студента. Апплодисменты.
с каждым уроком просмотров все мееееньше и меееееньше. люди все брееееются и брееееются)) понимают что это не их видимо) а я. а я еще учусь) медленно но уверенно XD
ОтветитьАвтору спасибо за статью и попытку объяснить полиморфизм, но не сразу дошло мне и думаю и многим. Попытаюсь и я объяснить, может кому то моя трактовка будет более понятнее.
Есть у нас много классов с разными именами, но у всех есть метод который имеет одинаковое имя (по другому у всех есть функция с одним и тем же именем) но то, что внутри в этом методе(функции) у всех разное.
Пример:
class A{
function name() {
$per = 1;
}
}
class B{
function name() {
$type = 'b';
}
}
class C{
function name() {
$name = 'Alex';
}
}
И вот для каждого случая мы будет создавать объект с каким то классом. Так мы можем создать много объектов и запутаться в количестве этих объектов. Для того, что бы этого не произошло, нам нужно, что то одно - универсальное.
Мы может из этих классов выбрать один класс и сделать родительским для всех, но лучше создать новый класс и в него поместить метод с таким же именем и еще метод с другим именем, а во внутри второго метода будем обращаться к первому методу.
class D{
function name() {
$z = '3';
}
function call() {
name();
}
Всем классам теперь нужно добавить extends D. Получится class A extends D{}, class B extends D{}, class C extends D{}.
Для каждого класса создадим объект. И в каждом объекте вывозим метод name() то получим четыре разных результата. 1, b, Alex, 3 - ка бы логично. Но вызовем у каждого объекта метод call() то по логике он должен выдать четыре раза результат из базового класса class D - 3, но нет, будет результат 1, b, Alex, 3. Как так в других классах нет этого метода, но суть такая он выполняет метод name(), но этот метод обращается к своему классу. Вот и это и есть полиморфизм.
Может я еще больше кого то запутал, а кому то понятнее станет.
понравилась закладка с хабра "что такое полиморфизм?" в браузере)
ОтветитьЯ так и не понял, зачем создавать 3 класса. В 1: мы создаем пустую функцию. А в 2,3 наследуем 1 (пустой), зачем? Нельзя просто сделать 2,3 класс без 1. Какие задачи решает 1 класс с пустой функцией?
ОтветитьПо поводу инкапсуляции, Private, Protected и Public - это не ключевые слова, а модификаторы доступа.
ОтветитьРаз полиморфизм сложен в понимании, то надо подробно объяснить, а не оставлять ссылки в описании.
ОтветитьЛучше один раз послушать, чем глаза напрягать на хабрах
ОтветитьОтличный канал , лучший из того что я видел.
ОтветитьКоротко и ясно)
ОтветитьПолиморфизм, конечно, понятие на самом деле простое, но показывать примеры я вам не буду, скину ссылки на статьи, сами посмотрите.
Содержание урока верно передал?
Збс где примеры ? Мог бы просто оставить ссылки на статьи и всё .
Ответить