powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование метода класса с дополнением
19 сообщений из 19, страница 1 из 1
Наследование метода класса с дополнением
    #36173411
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть ли возможность в каком-нибудь языке программирования реализовывать следующее:

class A {
function ParentFunc() {...}
}

class B extends A {
function ParentFunc() {...}
}

И при вызове B->ParentFunc будет выполняться сначала A->ParentFunc, а затем уже то, что в B->Parent Func.

В последнее время я пишу на РНР, но несмотря на свою свободу, он при такой записи всё равно затрёт А->ParentFunc. Абстрактные (виртуальные) методы не могут содержать тела, так что не выход...

Приходится вызывать явно родительскую функцию (переименовав её, естественно), что не очень красиво...
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36173465
OZKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А о какой версии пхп идет речь?
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36173485
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie, а что мешает вызвать parent::A()?
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36173537
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторАбстрактные (виртуальные) методы не могут содержать тела, так что не выход...

Правильно, чисто виртуальные методы класса не могут иметь тела, а вот просто виртуальные вполне себе могут (по крайней мере в цпп). Так что выход...
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36173547
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nавторАбстрактные (виртуальные) методы не могут содержать тела, так что не выход...

Правильно, чисто виртуальные методы класса не могут иметь тела, а вот просто виртуальные вполне себе могут (по крайней мере в цпп). Так что выход...в плюсах могут, а некоторые так просто обязаны, mikhail_n, не морочьте людям голову.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36173865
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymFrankie, а что мешает вызвать parent::A()?
Наверное книгу не дочитал ещё.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36175223
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymFrankie, а что мешает вызвать parent::A()?
Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим.

XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()?
Наверное книгу не дочитал ещё.
Ага, а Вы даже исходное сообщение
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36175354
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankiean0nymFrankie, а что мешает вызвать parent::A()?
Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим.

XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()?
Наверное книгу не дочитал ещё.
Ага, а Вы даже исходное сообщение
Я как раз всё сообщение дочитал.
Модератор:
ваш добрый вечер пришел
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36175392
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankiean0nymFrankie, а что мешает вызвать parent::A()?
Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим.

XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()?
Наверное книгу не дочитал ещё.
Ага, а Вы даже исходное сообщение
так а если не понадобится такой вызов что делать?
думаю везде нужно вызывать руками
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36176620
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasтак а если не понадобится такой вызов что делать?
думаю везде нужно вызывать руками
Если не понадобится, значит имя метода будет другим.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36176631
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankiebarrabasтак а если не понадобится такой вызов что делать?
думаю везде нужно вызывать руками
Если не понадобится, значит имя метода будет другим.
А как же идеология наследования? Виртуальные функции и всё такое...
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36176642
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie,

Не понял, такое вас тоже напрягает, выходит?:

Код: plaintext
1.
2.
3.
4.
5.
function ParentFunc()
{
    base.ParentFunc();
    ...................
}
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36176904
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoFrankiebarrabasтак а если не понадобится такой вызов что делать?
думаю везде нужно вызывать руками
Если не понадобится, значит имя метода будет другим.
А как же идеология наследования? Виртуальные функции и всё такое...
Виртуальные функции - штука чисто организационная. Чтобы коллега не забыл определить метод, который необходим при наследовании от созданного тобою класса. Ещё раз - мне не достаёт возможности чего-то вроде append, когда сначала выполняются тела одноимённых методов предков, а затем твой.

SQL_LamerFrankie,
Не понял, такое вас тоже напрягает, выходит?
Да.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36176942
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, поломал форматирование.
XDiaBLoFrankie
Виртуальные функции - штука чисто организационная. Чтобы коллега не забыл определить метод, который необходим при наследовании от созданного тобою класса. Ещё раз - мне не достаёт возможности чего-то вроде append, когда сначала выполняются тела одноимённых методов предков, а затем твой.

Нифига подобного, не всегда это требуется. Хотя в принципе это было бы наиболее правильно, судя по Роберту Мартину, там про какой то принцип Лискоу было... Так что возможно вы правильно ожидаете такое поведение. Но и навязывать его наверное всё таки не стоит.
Frankie
SQL_LamerFrankie,
Не понял, такое вас тоже напрягает, выходит?
Да.
Ну да там же никаких проблем, кроме религиозных.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36177198
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frankie,

вдругих языка все также. только некоторых достаточно одного слова super() для вызова метода предка. Если реализовать ваше предложение оно не сильно будет удобнее: все равно придется оставить то, что есть для гибкости. А так же надо будет добавить какой-то способ указывать, хочется мне выполнить довесок перед после или вместо метода предка.

Походие конструкции есть в АОП, но это не то, что вам нужно.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36177646
Гыы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати такое поведение есть по-моему в Visual FoxPro. Там чтобы метод предка не выполнялся нужно явно писать NODEFAULT.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36180356
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieЗдравствуйте. Есть ли возможность в каком-нибудь языке программирования реализовывать следующее:
В любом. О чём собственно и сказали.

FrankieАбстрактные (виртуальные) методы не могут содержать тела, так что не выход...
У меня такое ощущение, что Вы считаете "абстрактные" и "виртуальные" синонимами. На самом деле это не так (во всяком случае вне php).

FrankieЭстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим.
Такой вызов необходим даааалеко не всегда. Именно поэтому его правильно указывать явно. Даже традиционный для с++ - наследников вызов конструктора предка обязательно до тела конструктора потомка - в ряде случаев реально напрягает.

belugin4Если реализовать ваше предложение оно не сильно будет удобнее: все равно придется оставить то, что есть для гибкости. А так же надо будет добавить какой-то способ указывать, хочется мне выполнить довесок перед после или вместо метода предка.
Оно будет сильно неудобнее. Потому как вообразите "какой-то способ", которым надо будет указать, что метод предка вызывается в середине кода при срабатывании определённого условия.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36180980
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerFrankieЭстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим.
Такой вызов необходим даааалеко не всегда. Именно поэтому его правильно указывать явно. Даже традиционный для с++ - наследников вызов конструктора предка обязательно до тела конструктора потомка - в ряде случаев реально напрягает.

Флеш сейчас изучаю, так там такая ситуация:
Колин Мук конструктор суперкласса должен вызываться до обращения к любой переменной или методу экземпляра. Если конструктор суперкласса не будет вызван явно, компилятор автоматически добавит вызов конструктора суперкласса без аргументов. И наконец, ключевое слово super не должно использоваться в методе-конструкторе более одного раза.

А в С++ точно обязательно до всего тела? А то я вот точно не помню уже, запутался уже во всех этих языках.
...
Рейтинг: 0 / 0
Наследование метода класса с дополнением
    #36181089
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoКолин Мук конструктор суперкласса должен вызываться до обращения к любой переменной или методу экземпляра.
Это ещё не худший вариант. По крайней мере он позволяет то, что меня сильно напрягало в Яве:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
pubic MyObject (params) {
   super  (<very complex expression>); // работает
}

 public  MyObject (params) {
   int  i = <very complex expression>;
   super  (i); // компилятор показывает мужской половой орган 
}

А вот чего не позволяет и этот вариант - сейчас в яве может и можно, а тогда, например, пришлось очень извращаться, чтобы реализовать следующее (прошу прощения за возможные ошибки в названиях классов, таки много лет прошло):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public  FilteredList  extends  List { // листбокс, фильтруемый задаваемой строкой

   public  FilteredList (Model model) {
     super  ( new  FilteredModel (model));
  }

   private  String filter;

   public   void  setFilter (String newFilter) { filter = newFilter; touchModel();}

   class  FilteredModel {
    ... // использует filter
  }
}

XDiaBLoЕсли конструктор суперкласса не будет вызван явно, компилятор автоматически добавит вызов конструктора суперкласса без аргументов.
В целом я совершенно не понимаю тупого копирования вызванных реализацией особенностей C++ в те языки, где реализация совершенно другая. Но это уже отдельная песня.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Наследование метода класса с дополнением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]