tag:blogger.com,1999:blog-1702873441071265539.post5914436300637775428..comments2023-05-29T19:02:20.570+03:00Comments on Блог GunSmoker-а: "Дружественность" в DelphiGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-1702873441071265539.post-71010946148617519192021-05-25T22:30:21.174+03:002021-05-25T22:30:21.174+03:00Спасибо за интересную статью!Спасибо за интересную статью!Anonymoushttps://www.blogger.com/profile/10726379263788993352noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-82267412003610830412018-08-28T18:50:13.186+03:002018-08-28T18:50:13.186+03:00ощущение, что автор не до конца понимает ООП. насл...ощущение, что автор не до конца понимает ООП. наследование - это ни как завещание (как рассуждает автор говоря про стул, причем приведя не правильный пример, ведь стул это экземпляр класса стульев. который можно отнести как наследуемый от класса элемента мебели, а не просто мебели), наследование это подобие от общего к частному, что встроено в нейронную сеть мозга человека - это поиск подобия, анализ через подобие, сопоставление вещей. Есть обратный метод в программироовании от общего к частному, что тоже присуще природе вещей.Anonymoushttps://www.blogger.com/profile/14167588063188224220noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-51472594152834736022014-03-13T01:49:19.248+04:002014-03-13T01:49:19.248+04:00Не сочтите "рекламой"...
Прочитайте - h...Не сочтите "рекламой"...<br /><br />Прочитайте - http://programmingmindstream.blogspot.ru/2014/03/blog-post_12.html<br /><br />Там НЕТ ответов...<br /><br />Но по-моему - я там написал "хорошие вопросы". Мне так кажется...Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-27998065013894682182013-04-09T20:31:31.149+04:002013-04-09T20:31:31.149+04:00Хотелось бы добавить что доступ (как чтение так и ...Хотелось бы добавить что доступ (как чтение так и запись) к private и protected елементам класса можно осуществлять и из class helper что тоже является вариацией чистого хака и как по мне лучше чем создание пустого наследникаAnonymoushttps://www.blogger.com/profile/12724693281162866468noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-63061285781065036832013-03-25T11:15:46.083+04:002013-03-25T11:15:46.083+04:00А не является ли такая форма с интерфейсом изобрет...А не является ли такая форма с интерфейсом изобретением очередного вилосипеда ?<br />Например, уже давно существуют ActiveX формы и компоненты.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-13286181698671343482013-02-20T05:11:40.535+04:002013-02-20T05:11:40.535+04:00>> если у тебя в текущий момент времени есть...>> если у тебя в текущий момент времени есть левые ссылки на удаляемый объект, то у тебя появятся битые ссылки, а значит AV - не за горами. Если же у тебя есть механизм нотификации(когда внешние ссылки очищаются), то и с интерфейсами ты всегда можешь принудительно освободить память<br />Intf.RemoveFreeNotifications(); // а-ля TComponent.RemoveFreeNotifications() все внешние ссылки ссылки на интерфейс очищаются<br />Intf := nil; // память гарантирована освобождена.<br /><br />Только в случае AV мы видим где это произошло, если вдруг что-то не так пошло с механизмом чистки ссылок, а с Intf.RemoveFreeNotifications() мы надеемся, что при Intf := nil; у нас почистится память. В противном случае мы как минимум огребем утечку, которую будет трудно найти, а как максимум - не будут освобождены ресурсы, к которым у объекта был эксклюзивный доступ, что обернется в неработающий софт. Я кстати не спроста упомянул про IDisposable в дотнете. Это своеобразный "костыль", решающий проблему чрезмерных утечек + освобожение ресурсов здесь и сейчас, а не когда GC вздумает чистить память.MrShoorhttps://www.blogger.com/profile/13896494656726335749noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-10221007623895219062013-02-19T22:57:57.225+04:002013-02-19T22:57:57.225+04:00Статья интересная, но...
Это конечно мое ИМХО, но...Статья интересная, но... <br />Это конечно мое ИМХО, но я всегда с большим подозрением отношусь к любым объектам, контролирующим собственный RefCount.<br />Это из серии как ты озвучил: "Хм, а может мне не следует это трогать?"Александр (Rouse_) Багельhttps://www.blogger.com/profile/03072586754182036553noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-23496216288513131712013-02-12T11:26:50.008+04:002013-02-12T11:26:50.008+04:00> ибо наследование интерфейсов в Delphi множест...> ибо наследование интерфейсов в Delphi множественное<br /><br />Да ну. Так нельзя:<br /><br />IMyInterface = interface(IInterface1, IInterface2, IInterface3)<br />end;<br /><br />> Это такая же дыра, как если всё сделать public, причем неконтролируемая.<br /><br />См. к примеру http://www.transl-gunsmoker.ru/2010/10/blog-post_14.html Ключевые слова: "Идея в том, что в этот момент в вашей голове должен прозвенеть звонок: "Хм, а может мне не следует это трогать?". Так же и здесь: если у чего-то есть интерфейс для всех (public) и интерфейс для кого-то определённого (внутренний интерфейс), то при использовании внутреннего интерфейса публичным кодом должно быть то же самое: стоп, тут что-то не то.<br /><br />Вы отталкиваетесь от неявного утверждения, что любой контракт должен быть одинаков для всех. Вот откуда идёт ваше "нарушение инкапсуляции". А кто вообще сказал, что это правильно? К примеру, в реальной жизни это не так. У нас есть, скажем, бухгалтер. И он имеет доступ к финансовой отчётности фирмы - нарушая её инкапсуляцию (фин. отчётность недоступна другим фирмам). <br /><br />> Интерфейс - не класс. И не запись. Это интерфейс.<br /><br />Синтаксически - нет. Но я и не говорил про синтаксис, я говорил про концепцию. Ключевые слова были: "грубо говоря".<br /><br />> Кроме того, иногда уничтожать надо именно сейчас, т.к. могут быть захвачены ресурсы (в том числе аппаратные).<br /><br />Сам же решение и указал. Чем не нравится?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-75751968608683123212013-02-12T10:37:02.738+04:002013-02-12T10:37:02.738+04:00>> У объектов же плюс, что можно удалить име...>> У объектов же плюс, что можно удалить именно тогда когда нужно мне, а не когда там счетчик ссылок станет равен нулю. <br /><br />если у тебя в текущий момент времени есть левые ссылки на удаляемый объект, то у тебя появятся битые ссылки, а значит AV - не за горами. Если же у тебя есть механизм нотификации(когда внешние ссылки очищаются), то и с интерфейсами ты всегда можешь принудительно освободить память<br />Intf.RemoveFreeNotifications(); // а-ля TComponent.RemoveFreeNotifications() все внешние ссылки ссылки на интерфейс очищаются<br />Intf := nil; // память гарантирована освобождена.jack128https://www.blogger.com/profile/06241586079811572654noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-3240437254964159902013-02-12T00:37:30.577+04:002013-02-12T00:37:30.577+04:00По какой то причине все открещиваются от использов...По какой то причине все открещиваются от использования интерфейсов, между тем концепция "чёрного ящика" насильно заставляет неопытного члена команды разработчиков использовать «договор» и не выходить за его рамки, либо если он выходит за рамки это видно другим и они сразу могут начать использовать новое свойство/метод или оградить его от ошибок ... <br />А опытного заставляет пойти единственным путём решения а не плодить сотни одинаковых решений нагромождая класс используя разные способы реализации одной и той же целиAnonymoushttps://www.blogger.com/profile/10668725958697226456noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-45914404788778976382013-02-10T21:36:12.305+04:002013-02-10T21:36:12.305+04:00Никак не могу согласиться, что интерфейсы нужны дл...Никак не могу согласиться, что интерфейсы нужны для всего. Интерфейсы нужны там, где они нужны исходя из их плюсов. У интерфейсов это:<br />1. Автоматический подсчет ссылок. Но могут возникнуть (и часто возникают) проблемы с циклическими ссылками.<br />2. Независимость от компилятора. Однако на границу модулей все равно многие вещи выводить проблематично, из-за того что нельзя вывести те же самые массивы например.<br />3. Возможность множественного наследования.<br />У объектов же плюс, что можно удалить именно тогда когда нужно мне, а не когда там счетчик ссылок станет равен нулю. В случае, когда реализован механизм обратной связи для чистки ссылок (как TComponent.FreeNotify например) - это очень удобно. Кроме того, иногда уничтожать надо именно сейчас, т.к. могут быть захвачены ресурсы (в том числе аппаратные). В С# например ввели костыльное решение из IDisposable. Жаль такого нет на уровне языка, и приходится вручную это делать.<br /><br />В общем объекты хороши в одних случаях, интерфейсы в других, но зачастую интерфейсы в коде преобладают.MrShoorhttps://www.blogger.com/profile/13896494656726335749noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-74140189489797354142013-02-10T11:14:44.388+04:002013-02-10T11:14:44.388+04:00Спасибо, исправил.Спасибо, исправил.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-74106421681096421072013-02-09T21:55:56.821+04:002013-02-09T21:55:56.821+04:00Интересный последний раздел с примером TInterfaced...Интересный последний раздел с примером TInterfacedForm. Жалко, что приходится тянуть реализацию TInterfacedObject целиком и полностью, только ради того, чтобы использовать подсчет ссылок. <br /><br />И один момент:<br /><br />class function TDialogForm.NewInstance: TObject;<br />begin<br /> Result := inherited NewInstance;<br /> TForm4(Result).FRefCount := 1;<br />end;<br /><br />наверное <br /> TDialogForm(Result).FRefCount := 1;<br /><br />?<br />Igor Schevchenkohttps://www.blogger.com/profile/06503541755579898125noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-75386356855533974242013-02-08T23:22:46.745+04:002013-02-08T23:22:46.745+04:00Да, забыл:
> Интерфейс - это полностью абстракт...Да, забыл:<br />> Интерфейс - это полностью абстрактный класс<br />Интерфейс - не класс. И не запись. Это интерфейс.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-53230062371921851692013-02-08T22:51:03.470+04:002013-02-08T22:51:03.470+04:00Такое ощущение, что сайт взломан...
Если нужны фре...Такое ощущение, что сайт взломан...<br />Если нужны френд-классы - делайте все public, если таки нужна инкапсуляция, то френд-классы - зло, поскольку нарушают её. Это такая же дыра, как если всё сделать public, причем неконтролируемая. Как class helpers прямо.<br />Другое дело, что что-то типа явовского package private бы не помешало, но это уже другой вопрос - о чем там в ЕМБТ думают, вводя вместо этого удивительно бесполезные вещи, типа тех же strict'ов.<br />Что касается этой фразы:<br /> "Также замечу, что в Delphi отсутствует возможность множественного наследования не только классов, но и интерфейсов"<br />то либо я чего-то не понял, либо автор, ибо наследование интерфейсов в Delphi множественное.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-77709117810186136502013-02-06T16:21:09.628+04:002013-02-06T16:21:09.628+04:00Не, у меня план был точно не такой. Я сначала всё ...Не, у меня план был точно не такой. Я сначала всё написал, а потом вспомнил, что было бы неплохо про published пару слов сказать. Это в тексте отражено приставкой "бонус".GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-82529002024305725242013-02-06T16:19:25.791+04:002013-02-06T16:19:25.791+04:00>>почему у меня ощущение, что читают только ...>>почему у меня ощущение, что читают только последний раздел?<br /><br />Создается впечатление, что все было написано ради последнего разделаАндрейnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-42877907801736428092013-02-06T13:39:40.127+04:002013-02-06T13:39:40.127+04:00...почему у меня ощущение, что читают только после......почему у меня ощущение, что читают только последний раздел? :)GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-65300845533585210162013-02-06T12:13:34.211+04:002013-02-06T12:13:34.211+04:00Александр, при всём уважении... не убедил. Может п...Александр, при всём уважении... не убедил. Может пример не очень удачный?Николай Зверевhttps://www.blogger.com/profile/08965247674233981930noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-56148420094761425872013-02-06T11:22:50.048+04:002013-02-06T11:22:50.048+04:00Статья вызывает противоречивые чувства... На мой в...Статья вызывает противоречивые чувства... На мой взгляд, применительно к тексту статьи интерфейсы могут полезны для создания фасадов (как в последнем примере). <br />Утверждения вроде "Также замечу, что, применяя объекты, вы вынуждены писать декларативный интерфейс рядом с реализацией. Это, в свою очередь, означает, что все ваши объявления и типы данных будут размазаны по разным модулям, как это требует реализация. С другой стороны, интерфейсы, как не имеющие реализации, могут быть собраны в одном месте." достаточно спорны, т.к. применение интерфейсов не отменяет создание реализации через наследование/делегирование/дублирование кода, поэтом призыв все оборачивать в интерфейсы может быть воспринят неправильно.<br />Другое дело, если разработчик осмысленно вводит в код фасады на интерфейсах, чтобы разделить разные уровни абстракции исходного кода и сделать код самого высокого уровня абстракции наиболее близким к языку предметной области...<br />Андрейnoreply@blogger.com