powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественное наследование
25 сообщений из 127, страница 3 из 6
Множественное наследование
    #34071834
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sofwarer

в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный, т. е. "заготовка"="полуфабрикат". Интерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова.


формально интерфейс представляет предельный случай абстрактного класса, но практически это не так. На практике области применения интерфейсов и абстрактных классов различаются. Интерфейс представляет собой "спецификацию"
класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код.


с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения. Кстати Вы реально используете полностью абстракные классы?
...
Рейтинг: 0 / 0
Множественное наследование
    #34071854
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 OU
- Вы не видите сути проблемы. Прежде чем опонировать, ответьте на вопрос: "зачем программисту может понадобиться множественное наследование?"

На мой взгляд есть два случая когда это может быть нужным:

1. наследование функциональности нескольких родителей.

2. приведение типа к типу любого из родителей.

- Вы упорно убеждаете меня в необходимости пункта 2, я согласен с Вашими тезисами по этому пункту и не вижу смысла спорить, тем более в таком тоне. Поверьте, что с наследованием и полиморфизмом в Java я познакомился 9 лет назад из которых 5 лет провел в статусе SCJ2P. Не надо предлагать мне Ваши чудесные книжицы - не куплю. А под "вложенными классами", в данном случае, я понимаю вложенные классы (inner-классы и, с некоторыми ограничениями, nested-классы, являющиеся элементами синтаксиса языка Java начиная с Java 2). Причем тут шаблоны проектирования Decorator и Adapter я не понимаю.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071910
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov в приведенном примере если требуется дефолтная реализация метода, Вам нужен не интерфейс а абстрактный класс, причем не полностью абстрактный
Я как раз и пытаюсь показать, что граница между этими понятиями надумана. Представьте себе следующую последовательность событий: изначально я реализовал интерфейс с методами getCount и getObject; это интерфейс, не так ли? Затем я добавляю в него getIcon - при этом интерфейс остается интерфейсом - понимаю, что для него была бы удобна дефолтовая реализация - и только из-за этого вроде_бы_концептуальное_понятие "интерфейс" вдруг меняется на нечто другое. Так выходит при Вашем строгом понимании "интерфейса".

KachalovИнтерфейс никак не может быть "полуфабрикатом" - не передергивайте мои слова.
Я нисколько не пытаюсь передернуть Ваши слова (собственно, я даже не понимаю, как мне можно приписать такую попытку - для этого нужно, чтобы я сослался на Ваше утверждение, чего вроде бы не было). Я апеллирую к Вашему здравому смыслу.

Kachalovформально интерфейс представляет предельный случай абстрактного класса, но практически это не так.
Вы говорите о той практике, в которой из-за отсутствия множественного наследования других вариантов просто не существует.

KachalovИнтерфейс представляет собой "спецификацию" класса, необходимую для приведения типов и гарантирующую наличие требуемых методов (java.lang.Runnable) или сигнализирующую что класс удовлетворяет некоторым требованиям (java.io.Serializable), а абстрактный класс представляет собой частичную реализацию - "полуфабрикат", на основе которого легко построить что то новое опираясь на чужой код.
По большому счету (с точностью до формулировок) я с этим согласен. Вопрос не в конкретном синтаксисе, а в предназначении, в применении того или иного класса-интерфейса. Обратите внимание, здесь нет принципиального требования отсутствия реализации в интерфейсе; от того, что мы добавим реализацию getIcon в пример выше, применение MyModel как "спецификации, необходимой для приведения типов и гарантирующей наличие" ничуть не убудет. Собственно, применение останется ровно таким же.

Kachalov с точки зрения програмирования на Java случай полностью абстрактного класса представляется бессмыслицей не имеющей практического значения.
Безусловно. По той причине, что в этом случае разумнее объявить этот абстрактный класс интерфейсом и не связывать себя ограничениями единонаследия.

Kachalov Кстати Вы реально используете полностью абстракные классы?
Каждый раз, когда использую интерфейсы :) Если не считать этого, сходу вспоминаю единственный случай, класс TAbstractStep - это "шаг тестирования" в моем автотестере.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071925
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Kachalov Кстати Вы реально используете полностью абстракные классы?
Каждый раз, когда использую интерфейсы :)
- кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object, т. е. в отличие от интерфейса обладает рядом не абстрактных методов.
softwarerЯ как раз и пытаюсь показать, что граница между этими понятиями надумана.
- а я пытаюсь доказать обратное :) Когда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею).
...
Рейтинг: 0 / 0
Множественное наследование
    #34071939
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- кстати, разница между интерфейсом и классом у которого все методы абстрактные, с точки зрения Java, более существенна. Любой класс является наследником от java.lang.Object
Если помнить об этом, то "полностью абстрактных классов" в Java, как впрочем и в Delphi, вообще не бывает - поскольку методы, унаследованные от Object/TObject, вполне себе конкретные. Но я полагаю, это малосущественная деталь.

Kachalov- а я пытаюсь доказать обратное :)
Вот и определились :)

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

Таким образом, если вспомнить пример с MyModel и рассмотреть его предполагая наличие в языке множественного наследования, дискуссия упирается в следующий вопрос: добавление реализации getIcon - принципиальное изменение или нет?

В принципе, это вопрос вкусов. Я полагаю, что непринципиальное, почему: потому что на самом деле это мелкая техническая деталь, удобная, но не более того; от нее ничего особенного не зависит, в архитектуре решения она просто не видна. Она есть - мы можем написать несколько классов чуть быстрее и чуть качественнее; ее нет - придется скопировать несколько строк кода. Но в том, что касается принципиальных вещей - например, организации взаимодействия объектов в приложении - разницы ровным счетом никакой.

KachalovКогда Вы создаете интерфейс Вы создаете "спецификацию", когда Вы создаете абстрактный класс Вы делаете "запас на будущее". Мне кажется что разница между "консервами" и "стандартом на консервы" довольно велика (извините за идиотские аналогии, но они, на мой взгляд, хорошо отражают идею).
Я нисколько не против аналогий, сам их активно использую. Данная конкретная представляется мне не совсем верной, не совсем удобной для рассуждений, но не более того (она безусловно образна и хорошо раскрывает Вашу мысль).

Если Вы не против, давайте проведем маленький натурный эксперимент. Я показываю кусок кода, а Вы скажите, это "консервы" или "стандарт на консервы", и почему именно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 type 
  TAbstractStep =  class 
   protected 
     function  GetStepName :  string  ; virtual ; abstract ;
     function  DoStep (  var  Message :  string  ) : boolean ; virtual ; abstract ;
   public 
     class   procedure  Execute (  const  ACallback : ITestingCallback ) ;
   end  ;

P.S. Мне действительно интересно, появится ли на этом сайте когда-нибудь качественная подсветка синтаксиса, или нет.
...
Рейтинг: 0 / 0
Множественное наследование
    #34071998
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Я полагаю истинным следующее утверждение: два объекта имеют принципиальное, качественное отличие, тогда и только тогда, когда один из них нельзя мелкими, неконцептуальными изменениями перевести в другой. Если можно - разница между ними количественная, непринципиальная.

- из интерфейса класс точно не сделаешь :) а разница все таки принципиальная. Вопрос в том для чего применять ту или иную конструкцию, что то типа вопроса: можно ли микроскопом гвозди забивать - ответ да можно, но это будет не правильно .

- извините, но если можно, примерчик на Java, на объектном паскале я писал более 10 лет назад и плохо помню синтаксис, а главное не помню есть ли в нем такое понятие как интерфейсы? Кроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072054
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovКроме того обсуждение Java-интерфейсов на примере другого языка заведет нас в неведомые дебри :)
Хм. Я до сих пор полагал, что мы обсуждаем концепцию вообще, а не применительно к Яве. Имхо обсуждать множественное наследование "применительно к Яве" глупо, его здесь просто нет.

Kachalov- из интерфейса класс точно не сделаешь
Why?

Kachalovа разница все таки принципиальная.
Где? Если в Java - безусловно. Но представьте язык, где есть множественное наследование; какая принципиальная разница там?

Kachalov- извините, но если можно, примерчик на Java
Хм. Попробую; проблема в том, что я уже успел подзабыть синтаксис Явы. Будет примерно так:

Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Kachalov а главное не помню есть ли в нем такое понятие как интерфейсы?
Есть.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072057
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Не буду мешать :)
Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072061
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеСкажу лишь, что в Java все параметры передаются по ссылке
В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072064
я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
я
Гость
он же softwarer
Код: plaintext
1.
2.
3.
4.
 class  TAbstractStep {
   protected   abstract  String GetStepName(); 
   protected   abstract   boolean  DoStep(/* тут должен быть out-параметр Message, но если не ошибаюсь, Ява так не умеет */);
   public   static   void  Execute(ITestingCallback ACallback);
}

Не буду мешать :)
Скажу лишь, что в Java все параметры передаются по ссылке (за исключением J2EE-бинов, в которых по-умолчанию всё передается по значению).
чушь. фсе передается по значению. другое дело, что передаёца.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072067
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
В смысле, как в Фортране? Странно, если я успел это забыть. Хотя наверное бывает.
Вот уж не знаю, как в Фортране.

Передаются по ссылке все кроме примитивных типов (т.е. все объекты), только о String разговор особый - хоть и объект, но неизменяемый и в out его значение не возвращается :)
Это я забыл уточнить. А то будут еще обвинять меня в безграмотности и незнании основ, тут такие :(
...
Рейтинг: 0 / 0
Множественное наследование
    #34072068
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я
чушь. фсе передается по значению. другое дело, что передаёца.
Фсё - это что?
И где?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072074
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеВот уж не знаю, как в Фортране.
Именно что все передается по ссылке. С этим связан классический прикол - можно было сделать примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
....
call sub1 (  5  ) 
call sub2 (  5  ) 

......
subroutine sub1 ( integer* 4  i ) -- совсем не помню, как описываются параметры
  i =  10  
  return 
end 

и в результате в вызов sub2 параметром передавалась десятка.

он жеПередаются по ссылке все кроме примитивных типов
Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072078
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Ээ, нет. То, что Вы говорите - это передача по значению. Просто для "непримитивных" типов значением является ссылка.
Не хочу спорить.
Вопрос лишь с какой точки зрения рассматривать.
Лично мне привычнее считать, что если я могу изменять переданный объект внутри функции и он изменится снаружи - значит мне передана ссылка на объекте. А если я могу менять его до умопомрачения, но снаружи этого не заметят - значит я получил полную копию объкта (т.е. значение).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072080
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Передана ссылка" - весьма условное понятие в Java, естественно.
Просто нужно ж как-то не сойти с ума
...
Рейтинг: 0 / 0
Множественное наследование
    #34072088
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеЛично мне привычнее считать, что
Я понимаю. Вопрос в том, к каким последствиям это приводит.

Если смотреть на ситуацию "как она есть", то достаточно трех концепций: двух общих - "объект есть указатель на объект" и "манипуляции со String приводят к появлению нового String-объекта" - и одной с параметрами - "параметры передаются по значению". Этого достаточно, чтобы понимать все возможные ситуации.

У Вас же получилось так, что Вы описали три правила только для параметров:

- примитивные типы передаются по значению
- непримитивные кроме String передаются вроде как по ссылке
- String передается скорее по значению

Две общих концепции по-прежнему необходимо помнить, итого пять, да еще помнить, что вторая-третья из частных концепций верны условно. Усложнение на пустом месте.
...
Рейтинг: 0 / 0
Множественное наследование
    #34072096
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он жеПросто нужно ж как-то не сойти с ума
Есть довольно известная и толковая по сути статья . Так вот, выход из этой ситуации - не путаться в сказках, а разбираться в сути. Если угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу".
...
Рейтинг: 0 / 0
Множественное наследование
    #34072112
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Есть довольно известная и толковая по сути статья .
Спасибо.
Интересная статья (в очередной раз благодарен переводчикам вроде тех что на википедии - из-за их безобразий я непрерывно совершенствую свой английский ).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072113
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда мне пока не приходилось сталкивать с необходимостью деабстрагирования.
Но ведь рано или поздно придется, наверное...
...
Рейтинг: 0 / 0
Множественное наследование
    #34072117
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли угодно, это сишный подход, но он единственно правильный, если не хочется периодически оказываться в ситуации "у меня происходит что-то, что я и понять не могу".
Ну, хм, бывает :)
...
Рейтинг: 0 / 0
Множественное наследование
    #34072132
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chroвызывается не то, что Вы думали, а первый попавшийся такой метод (как в Питоне, без сообщения об ошибке).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Sampla:
  def __init__(self):
    pass 

  def maMethod(self, maValue):
    self.maValue = maValue

  def maMethod(self, maValue):
    self.maValue = maValue *  2 

s = Sampla()
s.maMethod( 2 )
print s.maValue # wazup
Что будет в sysout'e после выполнения строки, помеченной wazup'ом?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072135
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER Kachalovможно унаследовать несколько методов с одинаковой сигнатурой и разной реализацией - возникает коллизия.
В интерфейсах также - заимплементишь два интерфейса с одноимёнными полями - всё слетит.А какие у интерфейсов поля?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072138
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mправильный ответ уже дан - множественное наследование не нужно. А неправильных можно давать сколько угодно. Никакая это не священная война, но достают некоторые с претензией "Почему Java это не C++". Ну и пользуйтесь своим С++ и не приставайте с глупостями. И не надо про "высокую квалификацию" программистов на С++". Я сам долго программировал на C++ (ввиду отсутствия выбора), и с тех пор как перешёл на Java, моя квалификация повысилась (поизучал новые технологии, доступные программистам на Java).
Кстати, по моим наблюдениям, большинство программирующих на С++ - дураки, невежды, демократы и психи. Чтобы не быть голословным - один на прямо рабочем месте плевался (фирма Галактика). Я так и не понял, что он хотел этим выразить. Он же, каждый день программируя на VC6, года через 2 после появления VС7, спросил меня, чем оно отличается от VC7. И это не самый тяжёлый случай.
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
...
Рейтинг: 0 / 0
Множественное наследование
    #34072140
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"?
...
Рейтинг: 0 / 0
Множественное наследование
    #34072154
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же А.Грасоff™
О! Первый осмысленный (кроме заглавного) пост в этом топике. Да и заглавный пост тоже глуповат - он порождает обсуждение того, чего нет (имеется в виду java).
Это потому что "большинство программирующих на С++ - дураки, невежды, демократы и психи"? Нет. Это потому, что "... обсуждение того, чего нет ...".
...
Рейтинг: 0 / 0
25 сообщений из 127, страница 3 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественное наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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