Re: Инкапсуляция (видимость и "вызываемость")
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.21 00:47
Оценка:
Здравствуйте, Pek2014, Вы писали:

P>Что думаете? Правильно я понимаю ситуацию? Ни чего не напутал (запутал)?


Думаю, что место этому в философии, а не здесь.

Конечно контракт — это не железобетонная гарантия. В конце концов есть рефлексия и даже хаки с доступом к памяти процесса. Но это явное, осознанное и грубое нарушение контракта. Тут тот кто это делает ССЗБ. Ну а уж если речь идет о банальной ссылке на методы, то тут все нормально. Ведь давать такую ссылку или нет решает автор типа.

P>Предложение: методы-обработчики событий формы надо бы делать и формально публичными,

дабы не само-обманываться... Дабы понятия "видимость" и "вызываемость"
были по возможности близкими (лучше бы совпадали).

Это глупость. Не надо путать метод и ссылку. Подписываясь на событие или отдавая ссылку на метод в виде делегата ты осознаешь, что делаешь, и рассчитываешь на совершенно конкретное поведение. А вот делая метод публичным ты как бы объявляешь контракт позволяющий вызывать его по делу и без дела.

И ООП тут по сути не причем. Колбэки и функции высшего порядка стандартный строительный элемент и в не ООЯ.

Ну, а к событиям действительно нужно относиться очень острожное. Фиг бы с тем, что это возможность вызвать метод. Еще и ручка за которую удерживают ваш класс. Большая часть утечек памяти в дотнете связана именно с событиями. У нас даже изобрели специальный класс позволяющий этого избежать — WeakEventHandler.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Инкапсуляция (видимость и "вызываемость")
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.21 00:51
Оценка:
Здравствуйте, Pek2014, Вы писали:

P>Программист, может не сразу осознать, что происходит у него за спиной.


Так это проблема образования программиста. Если он не понимает, что под коптом, то он может такого натворить, что проблема вызова приватного метода покажется детской шалостью.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Инкапсуляция (видимость и "вызываемость"), покаяние
От: Pek2014 Россия  
Дата: 06.06.21 09:27
Оценка: 18 (1) +1
...читал комментарии, долго думал и согласился с коллегами. Был неправ...

Когда класс сам подписывает свои приватные методы на какие-то внешние события —
это не повод делать эти приватные методы публичными,

Успокоился вот чем.

Прикол здесь в том, что класс при такой подписке всё-таки в каком-то смысле вызывает сам себя,
но вызывает "в широком смысле слова", т.е. он делает вызов не обычным (прямым) способом, а косвенно...

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

Он формулирует условия на момент времени вызова и на то, какие аргументы вызова
надо передать в метод: "вызови меня, когда пользователь нажмёт на тебя (на кнопку),
и передай в метод ссылку на себя (на эту кнопку)". Фактически это его (класса) решение,
а не кнопки — что и как делать. Кнопка — это исполнитель его (класса) воли,
она лишь выполняет его распоряжение. Решение о вызове принимает класс-подписчик.

Короче, подписка на приватные методы — это совсем не открытие метода для произвольного внешнего использования,
это поручение вызвать метод в определённый момент, с определёнными аргументами.

Поэтому метод оставляем приватным...

Всем спасибо.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.