Делегирование private-метода.
Среди них попалась одна интересная.
Допустимо ли, с архитектурной точки зрения, делегировать экземпляру произвольного класса (рассматриваю наиболее общий случай) собственный private-метод? Ведь это фактически равносильно вызову внешней средой private-метода.
{
private int x;
public Class1(int x)
{
this.x = x;
Class2 class2 = new Class2(this.x);
}
}
class Class2
{
public int X;
public Class2(int x)
{
X=x;
Console.WriteLine("X From Class1: {0}",x);
}
}
class Program
{
static void Main(string[] args)
{
Class1 class1 = new Class1(15);
}
}
Но дальнейшая инкапсуляция данных, явна противоречит основам ООП. Хотя с другой стороны все зависит уже от конкретной релизации. Ведь в итоге, как всегда, все зависит от программиста, ИМХО.
ИМХО, таким архитектурным приемом не удобно пользоваться, поэтму редко его применяю.
ИМХО, таким архитектурным приемом не удобно пользоваться, поэтму редко его применяю.
Делегирование - на мой взгляд разницы особой нет, метод это или поле, сущность одна и таже.
Согласен очень неудобно использовать подобное, но как оказывается - это брешь в архитектуре ООП, а может быть и нет.
{
private int x;
public Class1(int x)
{
this.x = x;
Class2 class2 = new Class2(this.x);
}
}
Что-то я не вижу здесь никакого делегирования...
Вижу передачу параметра, причем, даже не по ссылке.
Это делегирование?
{
public Class1(int x)
{
Class2 class2 = new Class2(555);
}
}
нет?
а в чем тогда отличие от:
{
public Class1(int x)
{
Class2 class2 = new Class2(this.x);
}
}
?
Согласен очень неудобно использовать подобное, но как оказывается - это брешь в архитектуре ООП, а может быть и нет.
Я придерживаюсь терминологии, введеной Бучем. Кстати в своей книге по ООАиП этот тип связи он не выделяет как основной. И понятие делегирование связано с понятием поведения, а поведение, в свою очередь с операцией (методом).
P.S. Да, как говорил Green, если уж на то и пошло, то рассматривая делегирование как наследование, поля нужно передавать по ссылке.
P.P.S. Koval, я бы на вашем месте не принимал за первоисточник подобную информацию :)
P.P.P.S. Вот отругал я делегирование, а сам только что решил его применить :)
Вижу передачу параметра, причем, даже не по ссылке.
Это делегирование?
{
public Class1(int x)
{
Class2 class2 = new Class2(555);
}
}
нет?
а в чем тогда отличие от:
{
public Class1(int x)
{
Class2 class2 = new Class2(this.x);
}
}
?
На мое представление делегирование - это создание обекта одного класса в другом классе, хотя как я писал выше, могу и заблуждаться. А отличия действительно нет. Насколько я вкурил тему, данные которые должны быть инкапсулированы, просто получают паблик доступ через другой класс. Действительно, моя ошибка - надо передавать по ссылке.
Я подразумевал делегирование private-метода. Класс трудно называть private-методом.
Делегирование метода - это предоставление другому классу вызывать этот метод в контексте выполнения собственного кода. На этом построена модель событий.