[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: наследование нескольких предков
Страницы: 1, 2, 3
SoMeOnE
twin
Java тоже не поддерживает множественного наследования. Там тоже не имеет смысла говорить об ООП?
twin
У меня как то руки ни разу не доходили до JAVA. Там вроде как множественное наследование интерфейсов есть. Да и вроде как там вообще практически нельзя юзать имератив... Не знаю, врать не стану. Впрочем и не суть.

Тут не о том речь. Суть в подмене понятий. Вот что есть наследование. Это получение каких то признаков родителя. Если мой отец допустим рыжий и кудрявый, и я рыжий и кудрявый, это наследственность. Я унаследовал от родителя его особенности. А когда я иду в парикмахерскую и крашусь в радикально черный цвет "титаник", это уже переопределение свойств. Тут никуда не денешься, это действительно наследование. Как бы оно мне не нравилось. Расширением это не назовешь.

А в PHP часто это делают сознательно, оправдывая сие безобразие неверным толкованием слова extends. Брать базовый класс "самолет", отпиливать крылья и приделывать винт, чтобы вертолет получился. Это норма?

Я понимаю, что пример не совсем удачный, но в том и дело, что если привести удачный пример, наследования не получается. Получается расширение.

И колосс на трех глиняных ногах начинает шататься.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
SoMeOnE
Я вот только в последнее время начал хоть что-то понимать в ООП. Ну где-то на 1 процент)
Когда начал абстрагироваться от языка php и просто читать о ООП. прочитал про проблему diamond. И мне не представляется логичным обойти эту проблему. Там много мнений. А множественное наследование интерфейсов есть и в php или я что-то путаю?)
А переопределение методов это уже полиморфизм. Просто php по умолчанию переопределение в отличии от C++ к примеру.

Да и еще вроде 4 глиняных ноги. Почему то все забывают об абстракции. Хотя это одна из главных особенностей. Те же самые интерфейсы это просто высокий уровень абстракции. Хотя я пока и не очень понимаю когда их нужно использовать. Хотя в проекте и работаю с ними. Но самому понять когда они нужны и как их реализовывать это немного другое)
kaww
Цитата (Invis1ble @ 17.07.2014 - 16:31)
traits - это не множественное наследование, а своего рода костыль

traits - это mixin т.е. примеси
Invis1ble
Цитата
traits - это mixin
sergeiss
Николай, я понимаю, что ты готов спорить со всеми. А с разработчиками ПХП тоже будешь спорить? wink.gif Давай почитаем хэлп в оригинале, чтобы не ссылаться на "неправильный перевод".
Пруф линк: http://php.net/manual/en/language.oop5.inheritance.php
Цитирую:

Цитата
For example, when you extend a class, the subclass inherits all of the public and protected methods from the parent class. Unless a class overrides those methods, they will retain their original functionality.

Перевожу первое предложение, т.к. оно очень хорошо показывает суть того, на что я хочу обратить внимание:
Цитата
Например, когда вы расширяете класс, подкласс наследует все публичные и все защищенные методы от родительского класса.

Как видишь, речь идет именно о наследниках и родителях.

Это было первое.

Далее. Твой пример с коровой и седлом, еще раз повторю, наглядно показывает непонимание сути ООП. Аналогия с обычным наследованием будет другой: если ты сделаешь так, что у потомков коровы будет расти седло - вот это будет наследование (!!!). А приделать к корове седло - это просто использовать 2 разных объекта, не более того. Почему? Да очень просто. Потому что у телят от этой коровы не будут, в твоем случае, расти сёдла. И это существенно! Потому что сохранение свойств/методов родителей - это и есть суть наследования.

Твой же пример с летучей мышью и дельфином. Твои рассуждения некорректны. В частности, ты говоришь
Цитата (twin @ 18.07.2014 - 10:42)
Потому что кроме названий органов у этих двух животных нет ничего общего. Любой орган в классе-наследнике придется переопределять и описывать с нуля. У мыши кровеносная система приспособлена для прокачки крови в положении "вверх ногами", у дельфина адаптирована к компрессионным воздействиям. И так далее, ты сам описал.

Да нифига подобного smile.gif В том и дело, что не с нуля определять! Да, функции могут в каких-то деталях отличаться. Но у них есть лёгкие, есть сердце и кровеносная система, желудок и много-много чего однотипного. Того, что выполняет одинаковые функции. Естественно, что конечности работают совершенно по-разному. Но, тем не менее, структура костей и суставов все равно схожа!

Цитата (twin @ 18.07.2014 - 10:42)
Что касается селекции.

Я очень хорошо понял smile.gif Тут как раз и проявляется наследование "во всей своей красе". И да, у потомков некоторые "константы" и "методы" переопределяются. Так суть селекции в том и состоит, чтобы переопределить что-то, получить что-то новое на базе существующего.

Цитата (twin @ 18.07.2014 - 10:42)
просто взять и добавить свойство в потомке. Так же, как и седло корове.

Еще раз повторю. Если ты сделаешь так, чтобы седло стало само расти у потомков коровы, то это будет наследование. До тех пор, пока ты просто пристегиваешь седло к корове (лошади, быку, слону....), то ты просто используешь 2 разных объекта для выполнения определенной задачи.

Короче говоря... Говорить можно долго, но суть одна. Как это ни печально, но суть ООП ты все-таки так и не понял sad.gif


Цитата (McLotos @ 18.07.2014 - 10:20)
метод или свойство делается private для того чтобы оно могло использоваться только внутри методов класса.
а тут вдруг появляется наследование и все ограничения летят к чертям

И что в этом плохого? Приватные методы/свойства недоступны посторонним объектам, но доступны наследникам. Прямо как в жизни у людей smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.