Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Делегирование private-метода.

5
08 декабря 2007 года
hardcase
4.5K / / 09.08.2005
Ночь, депрессняк, всякие мысли лезут в голову.
Среди них попалась одна интересная.
Допустимо ли, с архитектурной точки зрения, делегировать экземпляру произвольного класса (рассматриваю наиболее общий случай) собственный private-метод? Ведь это фактически равносильно вызову внешней средой private-метода.
370
08 декабря 2007 года
koval
443 / / 29.08.2005
Вообщем-то допустимо.
Код:
class Class1
    {
        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);
        }
    }


Но дальнейшая инкапсуляция данных, явна противоречит основам ООП. Хотя с другой стороны все зависит уже от конкретной релизации. Ведь в итоге, как всегда, все зависит от программиста, ИМХО.
505
08 декабря 2007 года
vAC
343 / / 28.02.2006
Странное понятие о делегировании. Лично я под этим подразумеваю исключительно альтернативу наследования. К тому же, и сам автор упоминал о методе, а не поле класса.
ИМХО, таким архитектурным приемом не удобно пользоваться, поэтму редко его применяю.
370
08 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: vAC
Странное понятие о делегировании. Лично я под этим подразумеваю исключительно альтернативу наследования. К тому же, и сам автор упоминал о методе, а не поле класса.
ИМХО, таким архитектурным приемом не удобно пользоваться, поэтму редко его применяю.



Делегирование - на мой взгляд разницы особой нет, метод это или поле, сущность одна и таже.

Согласен очень неудобно использовать подобное, но как оказывается - это брешь в архитектуре ООП, а может быть и нет.

3
08 декабря 2007 года
Green
4.8K / / 20.01.2000
Цитата: koval
Вообщем-то допустимо.
Код:
class Class1
    {
        private int x;
       
        public Class1(int x)
        {
            this.x = x;

            Class2 class2 = new Class2(this.x);
        }
    }


Что-то я не вижу здесь никакого делегирования...
Вижу передачу параметра, причем, даже не по ссылке.
Это делегирование?

 
Код:
class Class1
{
    public Class1(int x)
    {
        Class2 class2 = new Class2(555);
    }
}

нет?
а в чем тогда отличие от:
 
Код:
class Class1
{
    public Class1(int x)
    {
        Class2 class2 = new Class2(this.x);
    }
}

?
505
08 декабря 2007 года
vAC
343 / / 28.02.2006
Цитата: koval
Делегирование - на мой взгляд разницы особой нет, метод это или поле, сущность одна и таже.

Согласен очень неудобно использовать подобное, но как оказывается - это брешь в архитектуре ООП, а может быть и нет.



Я придерживаюсь терминологии, введеной Бучем. Кстати в своей книге по ООАиП этот тип связи он не выделяет как основной. И понятие делегирование связано с понятием поведения, а поведение, в свою очередь с операцией (методом).

P.S. Да, как говорил Green, если уж на то и пошло, то рассматривая делегирование как наследование, поля нужно передавать по ссылке.
P.P.S. Koval, я бы на вашем месте не принимал за первоисточник подобную информацию :)
P.P.P.S. Вот отругал я делегирование, а сам только что решил его применить :)

370
08 декабря 2007 года
koval
443 / / 29.08.2005
В полне возможно, что я заблуждаюсь с понятием делегирования.
370
08 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: Green
Что-то я не вижу здесь никакого делегирования...
Вижу передачу параметра, причем, даже не по ссылке.
Это делегирование?
 
Код:
class Class1
{
    public Class1(int x)
    {
        Class2 class2 = new Class2(555);
    }
}

нет?
а в чем тогда отличие от:
 
Код:
class Class1
{
    public Class1(int x)
    {
        Class2 class2 = new Class2(this.x);
    }
}

?



На мое представление делегирование - это создание обекта одного класса в другом классе, хотя как я писал выше, могу и заблуждаться. А отличия действительно нет. Насколько я вкурил тему, данные которые должны быть инкапсулированы, просто получают паблик доступ через другой класс. Действительно, моя ошибка - надо передавать по ссылке.

5
09 декабря 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: koval
На мое представление делегирование - это создание обекта одного класса в другом классе


Я подразумевал делегирование private-метода. Класс трудно называть private-методом.
Делегирование метода - это предоставление другому классу вызывать этот метод в контексте выполнения собственного кода. На этом построена модель событий.

370
09 декабря 2007 года
koval
443 / / 29.08.2005
Вот теперь я понял, в чем суть дела:).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог