Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 291 292 [293] 294 295 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4381
,
|
|
|
|
Цитата Flex Ferrum @ В каких-то случаях логично одно. В других случаях - другое (кстати, capacity - можно и r/w-свойством сделать). Кхм. В TList, аналоге, как раз Capacity r/o, и нет способа его изменить (в потомке только, перекрыв расчет). А Size как раз rw И небо от этого не рушится. |
|
Сообщ.
#4382
,
|
|
|
|
Мне как-то непонятно, чего вы спорите. Ну не нравятся пропертя не юзайте. Заставляет кто, что ли? Кто-то любит чёрный кофе, кто-то со сливками и сахаром. Кофе как-то побоку, как его употребляют, он выполняет своё предназначение и счастлив. Лично я предпочитаю без сливок, но с сахаром.
Коль на то пошло, я предпочитаю реализовывать свойства перегрузкой operator[], которому на вход подаются предопределённые экземпляры классов с "говорящими" именами. Вот, 8 лет назад писано: ![]() ![]() void execute(CProtocol* handle, int numPort) { CProperty28854& option= dynamic_cast<CProperty28854&>(*dynamic_cast<CPropertyProtocol&>(*handle).getOption()); commIO& link = dynamic_cast<commIO&>(*handle->getMedia()); option.INVOKE_COUNT = 3; option.receiveTimeout= 200; option.answerTimeout = 200; if(!dynamic_cast<CPropertyProtocol&>(*handle).setOption()) throw xmsg("setOption failed"); if(!dynamic_cast<CComm&>(link).bind(numPort)) throw xmsg("bind failed"); link[BitRate ]=CBR_115200; link[ByteSize]=8; link[StopBits]=ONESTOPBIT; link[fParity ]= link[fCTSFlow]= link[fDSRFlow]= link[fDSRSens]=FALSE; link[fDTRCtrl]=DTR_CONTROL_DISABLE; link[fXonXoff]= link[fOutX ]= link[fInX ]= link[fNullRcv]= link[fErrRplc]=FALSE; link[fRTSCtrl]=RTS_CONTROL_DISABLE; link[readChar] =10; link[readMult] =10; link[readAdd ] =10; link[writeMult]=10; link[writeAdd] =10; handle->applyProp(); /* дальше неинтересно */ } И ещё одно кстати. В трёхуровневой иерархии интерфейсов взаимодействия удалённых подсистем, допускающей подмену протоколов и физических каналов, использовалось множественное наследование. Например ![]() ![]() class CComm: public commIO, public CPropertyRS, public CPropertyMedia P.S. Не обижатесь, но жутко надоело вашу демагогию читать. Добавлено Туюмать © сами знаете кого. Реализации интерфейсов B и C! Воскресенье тяжёлое, а, D_KEY? Добавлено Romkin, а предыдущее сообщение читал? Ты A дважды реализовал или один раз? |
|
Сообщ.
#4383
,
|
|
|
|
Цитата Qraizer @ Туюмать © сами знаете кого. Реализации интерфейсов B и C! Ты интерфейсы с абстрактными классами не путаешь? Добавлено Цитата Qraizer @ Ты A дважды реализовал или один раз? Классов сколько? Один. Значит и реализовать интерфейс A класс должен один раз. Вот если B и C тоже являются классами, то есть над чем подумать. Но это уже случай множественного наследования реализаций, а не интерфейсов. |
|
Сообщ.
#4384
,
|
|
|
|
Цитата Flex Ferrum @ Эххх... Вот ты несколькими постами выше взялся спроектировать интерфейс некоторого объекта. И даже описывал подходы, которыми будешь пользоваться. При этом на простой вопрос ответить не можешь. Ну либо я его не так формулирую. Попробую ещё раз. Ты добавил в интерфейс объекта метод getCaption. Какую смысловую нагрузку несёт каждое слово из его именования? Почему именно get? Почему Caption? Какова семантика этого конкретного метода? Зачем этот метод нужен клиенту объекта? Для каких целей и в каких случаях клиент будет его вызывать? Ведь интерфейс объекта - он появляется не просто так. С этим ты согласен? Он появляется для того, чтобы клиенты могли с этим объектом как-то взаимодействовать. При этом каждый метод интерфейса должен нести конкретную семантику для клиента (называемую также контрактом). В том числе быть непротиворечивым и неизбыточным.ну мне метод getCaption не нужен, поэтому я не могу сказать, зачем он вообще нужен. а конкретная семантика у него может быть разная (реализация метода), непротиворечащая при этом абстрактнной семантике (сигнатура метода). Добавлено Цитата Romkin @ Кхм. В TList, аналоге, как раз Capacity r/o, и нет способа его изменить (в потомке только, перекрыв расчет). А Size как раз rw И небо от этого не рушится.а зачем там size rw? |
|
Сообщ.
#4385
,
|
|
|
|
Умиляет когда термин "жопа" берут и делают интерфейсом, и еще к этому всему прикручивают фичи... |
|
Сообщ.
#4386
,
|
|
|
|
Цитата Qraizer @ Romkin, а предыдущее сообщение читал? Ты A дважды реализовал или один раз? Цитата D_KEY @ лассов сколько? Один. Значит и реализовать интерфейс A класс должен один раз. Вот если B и C тоже являются классами, то есть над чем подумать. Но это уже случай множественного наследования реализаций, а не интерфейсов. Ну да, естественно. Я в самом начале и сказал: абстрактные классы - это не интерфейсы, не надо их путать. У интерфейса наследование только при реализации делается. А в Delphi вообще все интерфейсы от IInterface порождаются, но это же не приводит к реализации методов IInterface столько раз сколько интерфейсов у класса. |
|
Сообщ.
#4387
,
|
|
|
|
Цитата D_KEY @ Почему бы не существовать объекту "текста", который бы делал бы всю работу по хранению и работы с текстом, и отдельному объекту, который бы умел отображать текст нужного размера, шрифта и т.п. Зачем нужно все валить в одну кучу? Я, конечно, с ГУИ уже работаю очень мало, но все-время как ни посмотрю в его сторону, у меня стабильно возникает ощущение, что что-то там не так... видимо потому что авторы этих библиотек осилили MVC уже после того, как начали писать их, но было уже поздно. то ли дело веб, там с этим как-то лучше. |
|
Сообщ.
#4388
,
|
|
|
|
Цитата korvin @ а зачем там size rw? Список. Просто меняешь количество элементов как хочешь когда хочешь. Кстати, называется он Count. |
|
Сообщ.
#4389
,
|
|
|
|
Цитата D_KEY @ Хотел бы ты, чтобы size, capacity и, скажем, empty были бы изменяемыми свойствами? И какие это бы дало преимущества(лично я вижу одни лишь недостатки). Да нормально было бы, в таком случае избавились бы от нескольких слов не в тему. |
|
Сообщ.
#4390
,
|
|
|
|
Romkin, их никто и не путает. Вот сейчас ты только что сказал, что наследование интерфейсов - это говнодизайн. Я правильно понял?
|
|
Сообщ.
#4391
,
|
|
|
|
Цитата Qraizer @ class CComm: public commIO, public CPropertyRS, public CPropertyMedia А нахрена так много, если не секрет? |
|
Сообщ.
#4392
,
|
|
|
|
Цитата Romkin @ Список. Просто меняешь количество элементов как хочешь когда хочешь. Кстати, называется он Count. и куда деваются элементы, оставшиеся вне диапазона, при уменьшении размера? |
|
Сообщ.
#4393
,
|
|
|
|
Цитата Romkin @ Я в самом начале и сказал: абстрактные классы - это не интерфейсы, не надо их путать. Если речь о С++, то тут стоит задуматься, абстрактный класс может вполне выступать в роли интерфейса. |
|
Сообщ.
#4394
,
|
|
|
|
Цитата scorpion @ Цитата Romkin @ Я в самом начале и сказал: абстрактные классы - это не интерфейсы, не надо их путать. Если речь о С++, то тут стоит задуматься, абстрактный класс может вполне выступать в роли интерфейса. Все, можно сказать, наоборот. Интерфейсы появились как средство, необходимое в языке с запретом множественного наследования. Если множественное наследование разрешено, то в интерфейсах(в том виде, что они есть в Delphi/C#/Java) просто нет необходимости. Добавлено Цитата korvin @ Цитата Romkin @ Список. Просто меняешь количество элементов как хочешь когда хочешь. Кстати, называется он Count. и куда деваются элементы, оставшиеся вне диапазона, при уменьшении размера? Думаю, что уничтожаются. По крайней мере в плюсовом std::vector resize ведет себя именно так. |
|
Сообщ.
#4395
,
|
|
|
|
Цитата D_KEY @ Его множественное наследование разрешено, то в интерфейсах(в том виде, что они есть в Delphi/C#/Java) просто нет необходимости. Есть необходимость, очень даже существенная! Непонимаю откуда выводы такие взялись? Цитата D_KEY @ Интерфейсы появились как средство, необходимое в языке с запретом множественного наследования. Интерфейс имеет четкую грань, которая отличает его от класса. Добавлено Вообще, прочитав 5 последних страниц, я солидарен с korvin. |