Наследование классов

Crazy

Developer
Автор оригинала: Screjet
т.е. потомок содержит ненужных родителей...
Пологаюсь на Вашу мудрость..
Приведи, please, пример такого кода с потомком, содержащим ненужных родителей...
 

Screjet

Новичок
Возможна моя идея неверна, вот пример:

//базовый класс "карбюратор"
class карбюратор {
var $жиклер
var $диффузор
...
}

//класс "двигатель" уже содержит "карбюратор"
//(его не нужно "прикручивать" во время работы двигателя)
class двигатель extends карбюратор {
var $блок_цилиндров
var $головка_цилиндров
...
}

//так же и здесь, класс "авто" уже содержит "двигатель",
//следовательно и "карбюратор"
class авто extends двигатель {
var $салон
var $трансмиссия
...
}

//но вот проблема: мне нужно укомплектовать "авто2" не карбюратором,
//а инжектором. При этом все составные компоненты уже известны.
//в XML парсере, который я написал недавно, действительно, неизвестно,
//что будет содержать в себе класс верхнего уровня
//и там классы последующего уровня инстансировались в предыдущий.
//А в этой ситуации уже известнен "проект" авто и авто2
 

tony2001

TeaM PHPClub
//класс "двигатель" уже содержит "карбюратор"
именно "содержит", а не наследует.
карбюратор в данном примере - это атрибут двигателя, а не его родитель.
 

Crazy

Developer
Screjet, в твоем варианте получается, что "Автомобиль есть особый вид двигателя", что явно является бредом. :)
 

kvn

programmer
такой типа серьезный топик - а так посмеялся...:))))

Screjet - короче, берем/покупаем Гради Буч "Объектно ориентированное проектирование и анализ" - и rtfm.

> Жиклер с тормозами.
Класс! :)
 

Screjet

Новичок
Правильно подмечено..
Жиклеру тормаза ни к чему,
а вот авто нужен и жиклер и тормоза..

------------------------------------------------------------------------------
я так понял, что форум ваш несерьезный..
Всем спасибо за внимание.. рад, что развлек вас..
 

Crazy

Developer
Автор оригинала: Screjet
я так понял, что форум ваш несерьезный..
Мы выяснили, что ты крайне слабо представляешь себе основы ООП ("П" от "Проектирование") и, в частности, путаешь наследование с агрегированием. Если это показатель несерьезности форума, то лично я не вижу смысла тебя переубеждать.

BTW, меня всегда забавляла готовность не особо грамотных программистов при каждом удобном случае вставать в позу оскорбленного и непонятого гения.

Всем спасибо за внимание.. рад, что развлек вас..
Тебе спасибо...
 

sokol

Zavolga.Net
2Crazy - а агрегирование это разве не частный случай наследования? Если ты ответишь, что нет, то я отыщу твои же слова об обратном:)
ИМХО, есть всего два способа наследования: агрегирование (агрегат - некий класс собранный из нескольких других (утрировано)) и делегирование (делегат - объект другого класса, являющийся свойством данного)

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

Demiurg

Guest
Агрегирование никак не частный случай наследования. Есть способ реализации агрегирования посредством закрытого наследования. НО это только свойство к тому же не очень рекомендование к использованию.
 

Crazy

Developer
Автор оригинала: sokol
2Crazy - а агрегирование это разве не частный случай наследования? Если ты ответишь, что нет, то я отыщу твои же слова об обратном:)
Я тебя за язык не тянул. Ищи.

ИМХО, есть всего два способа наследования: агрегирование (агрегат - некий класс собранный из нескольких других (утрировано)) и делегирование (делегат - объект другого класса, являющийся свойством данного)
Делегирование и агрегация вместе составляют механизм наследования реализации. В ряде языков это слияние сделано невидимым для глаза. :)

Вооще, это первый путь к заблуждениям -- говорить о наследовании вообще. Ибо есть два разных неследования: неследование реализации и наследование интерфейса. Смысл и реализация у них разные. В некоторых языках эти механизма доступны по отдельности. В некоторых -- доступен только один из них (пример -- PHP). В некоторых они применяются строго одновременно...
 

Crazy

Developer
Автор оригинала: Demiurg
Есть способ реализации агрегирования посредством закрытого наследования.
Ближайший аналог:

1. Украсть ящик водки.
2. Водку продать.
3. Деньги пропить.

:)
 

Demiurg

Guest
Crazy, не совсем так. Есть случаи, когда это действительно нужно. Например когда агрегируемый объект должен пережить агригирующий (в С++ порядок вызова деструкторов как раз это позволяет).
 

Crazy

Developer
Это как раз из области извращений. :) Агрегация (в отличие от ассоциирования) подразумевает, что время жизни вложенных объектов находится строго в рамках времени жизни контейнера.

Ды, странности бывают. Но это именно в стиле приведенного выше -- ну бывает, что именно этот сорт водки не нравится... :)
 

Demiurg

Guest
>Агрегация (в отличие от ассоциирования) подразумевает, что
>время жизни вложенных объектов находится строго в рамках
>времени жизни контейнера.

не обезательно. Мне сейчас сложно привести конкретный пример, конец рабочего дня :)

ps Это кстати не мои мысли а Саттера :)
 

Crazy

Developer
Автор оригинала: Demiurg
не обезательно.
Это, собственно, было определение. :) Если не так, то это уже не агрегация. :) Источник навскидку не укажу.

ps Это кстати не мои мысли а Саттера :)
Не удивлен. В ООП существует несколько школ, которые трактуют термины весьма по-разному. Кстати, пример с наследованием автомобиля также принадлежит кому-то из корифееев. :)
 

Screjet

Новичок
sokol, спасибо за понимание..

Люди, чем плохо вместо агрегирования конструировать из готовых классов новые классы? По моему такая идея вполне подходит для ПХП и, согласен, мало подходит в компилируемых языках..
Конечно, авто неля назвать особым видом карбюратора, но вот карбюратор и мотор и кузов и т.д. - это все является автомобилем. Хотя тут, кажись, уже больше философии, чем логики.
Так сама идея заключается в том, чтоб отдельные классы использовать в будущем, с минимальными переделками.
P/S поднял книжку, по совету kvn и еще раз прочитал про наследование, там однозначно написано что это.. Про агрегирование ни слова, наверно пора эту книжку сдать в макулатуру :)
 

Demiurg

Guest
> В ООП существует несколько школ, которые трактуют термины весьма по-разному.
Довай тогда не будем цепляться за термины, а решим имеет ли данный метод право на жизнь или нет.
 
Сверху