Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Что такое полиморфизм
 
 автор: Fddd   (17.02.2012 в 09:00)   письмо автору
 
 

Я только начинаю программировать. Коснулся темы ООП.
Что такое инкапсуляция, наследование - вроде понятно. Могу применить и реально использовать.
А вот что такое Полиморфизм - никак не пойму. В учебниках как то всё размыто на столько, что кажется или я совсем глуп или авторы сами не понимают о чём речь.
Если кто то может, расскажите пожалуйста простыми словами - что такое полиморфизм? Будет здорово если приведёте небольшой примерчик(только его мусором всяким не нужно загромождать), а что бы сразу была видна суть.

  Ответить  
 
 автор: cheops   (17.02.2012 в 10:21)   письмо автору
 
   для: Fddd   (17.02.2012 в 09:00)
 

На входе в стадион видели "скотозагонники", такие металлические рамки, которые выстраивают толпу в очереди по одному человеку, чтобы они не устраивали давок? Суть полиморфизма проста, когда вы строите огромную иерархию метод отображения формы у вас назывался одним именем, а не скажем тут showForm(), здесь formShow(), где-то еще просто show(), а где-то form(). С практической точки зрения - это механизм позволяющий дисциплинировать названия методов и потребовать, что бы у этого дедушки дети и внучата таким методом обладали. Тогда вы не изучая интерфейс класса просто смотрите, а ты внук этого? Ну понятно, тогда у тебя точно должен быть метод show() и делает он то-то и то-то - у вас у всех так в роду. Более того, вы можете взять сотни разных объектов из этого рода (с разными классами), вызывать обработку их в цикле и быть уверенным, что обращение к методу не вызовет ошибки (он есть у каждого и называется именно так).

  Ответить  
 
 автор: Кузнецов М.В.   (17.02.2012 в 10:27)   письмо автору
 
   для: Fddd   (17.02.2012 в 09:00)
 

>Будет здорово если приведёте небольшой примерчик(только его мусором всяким не нужно загромождать), а что бы сразу была видна суть.

По поводу мусора.
Вообще говоря, полиморфизм не самая простая штука, чтобы в двух словах и "небольшой примерчик". Во-первых, полиморфизм бывает разным. Динамическим и статическим. Во вторых, без знания того, что такое виртуальные функции понять что такое полиморфизм невозможно. Также надо знать что такое раннее и позднее связывание.
И четко могу сказать что Ваше "инкапсуляция, наследование - вроде понятно. Могу применить и реально использовать" не соответствует действительности. Если не знаете, что такое полиморфизм. Использовать наследование и инкапсуляцию без знания третьего кита ООП это всё равно, что играть на двух блатных аккордах на гитаре, не зная третьего.

На пальцах.
Есть базовый класс и есть сеть наследственных объектов, которые снабжаются методами базового класса на автомате. Вот это и есть полиморфизм. Когда Вы можете программировать объекты, не заботясь о том, какой у них тип. Т.е. допустим есть объекты, которые ездят. Без разницы что. Подводная лодка, бронетранспортер, вертолет... У них всех есть один метод - они ездят. Независимо от того как, и по чему - в воздухе ли, по воде ли. Но Вы можете использовать метод базового класса, потом переопределяя его для конкретики - для судов, для воздушных судов, для танков... Но у всех них есть одно общее - они ездят. А значит у них есть такие свойства как скорость, тоннаж, количество экипажа, они все жрут топливо, у всех у них есть понятие "амортизационного запрета" и т.д. А конкретику Вы затем уже будете переопределять для конкретно взятого класса - для вертолета, машины и т.д. Потому что экипаж на подлодке и на катере - разный. Но суть в том, что он есть. И в нем, независимо от его численности, есть общее. В том что это люди. Что они жрут и в туалет ходят. Все. И вот это общее их свойство будет базовым классом. От которого отнаследуются эти общие свойства, при возможности добавлять уникальные (ест то ест, но только вегетарианские щи, плавать в принципе может, но только брасом и т.д.).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования