Re[3]: Какие преимущества от NVI шаблона?
От: afurmanov Россия  
Дата: 09.04.07 22:06
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, afurmanov, Вы писали:


A>>Читатель класса Derived понимает, что DoWork() — специализирует Work(), в то время как Job() — расширяет набор операций базового класса. Иными словами DoWork() определяет специфику поведения операции Work() сохраняя инварианты присущие базовому классу, тогда как Job() — операция не присущая базовому классу, эта операция расширяет набор допустимых действий. Сравниваем с


A>>
A>>public class Derived : Base
A>>{
A>>  public virtual void Job() 
A>>  {
A>>     Console.WriteLine( "Derived.Job()" );
A>>  }
A>>}
A>>


A>>Читателю класса не понять: Job() — расширяет или специализирует поведение? Т.е. надо посмотреть а что оно там в Base.


L>Пример некорректен.


Корректный пример:

class File {};

class ILogger
    {
    public:
                void    Write( std::string const& a_line );
    private:
        virtual void    DoWrite( std::string const& a_line ) = 0;
    };

class FileLogger : public ILogger
    {
    public:
                void    SetFile( File const& );
    private:
        virtual void    DoWrite( std::string const& a_line );
    private:
                File    file_;
    };
    
class ILogger2
    {
    public:
        virtual void    Write( std::string const& a_line );
    };

class FileLogger2 : public ILogger2
    {
    public:
                void    SetFile( File const& );
        virtual void    Write( std::string const& a_line );
    };

Читателю FileLogger очевидно где есть имплементация, а где есть публичный интерфейс. В случае же с
FileLogger2, Write() — это что, имплементация или этот метод расширяет интерфейс ILogger2 ?
Re: Какие преимущества от NVI шаблона?
От: _FRED_ Черногория
Дата: 11.04.07 15:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

Поищите, пожалуйста, Саттера (это вот
Автор(ы): Герб Саттер

Данная книга представляет собой продолжение вышедшей ранее книги
Решение сложных задач на
C++. В форме задач и их решений рассматриваются
современные методы проектирования и программирования
на C++. В книге сконцентрирован богатый многолетний опыт
программирования на C++ не только самого автора, но и всего
сообщества программистов на C++, так что некоторые
рекомендации автора могут показаться неожиданными даже опытным
программистам-профессионалам. Автор рассматривает и конкретные
методики, приемы и идиомы программирования, однако основная тема
книги — это стиль программирования, причем в самом широком
понимании этого слова. Особое внимание во всех задачах книги
уделено вопросу проектирования, которое должно обеспечить максимальную
надежность, безопасность, производительность и сопровождаемость
создаваемого программного обеспечения.
, задача 18 — виртуальность). В нём отлично всё разъяснено.
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Какие преимущества от NVI шаблона?
От: _FRED_ Черногория
Дата: 11.04.07 15:06
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Мне тоже в свое время хотелось узнать об преимуществах NVI , особенно в свете того что некоторые авторы советуют его применять ВСЕГДА когда есть виртуальная функция.

M>К сожалению , внятной аргументации я тогда не получил.

здесь
Автор: _FRED_
Дата: 11.04.07
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 11.04.07 17:53
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, <Аноним>, Вы писали:


_FR>Поищите, пожалуйста, Саттера (это вот
Автор(ы): Герб Саттер

Данная книга представляет собой продолжение вышедшей ранее книги
Решение сложных задач на
C++. В форме задач и их решений рассматриваются
современные методы проектирования и программирования
на C++. В книге сконцентрирован богатый многолетний опыт
программирования на C++ не только самого автора, но и всего
сообщества программистов на C++, так что некоторые
рекомендации автора могут показаться неожиданными даже опытным
программистам-профессионалам. Автор рассматривает и конкретные
методики, приемы и идиомы программирования, однако основная тема
книги — это стиль программирования, причем в самом широком
понимании этого слова. Особое внимание во всех задачах книги
уделено вопросу проектирования, которое должно обеспечить максимальную
надежность, безопасность, производительность и сопровождаемость
создаваемого программного обеспечения.
, задача 18 — виртуальность). В нём отлично всё разъяснено.



Саттер вообще никакой внятной аргументации не приводит , даже без примеров.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Какие преимущества от NVI шаблона?
От: Rutven Россия http://rutven.narod.ru
Дата: 11.04.07 18:30
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вот классическая реализация


А>
А>public class Base
А>{
А>  public void DoWork()
А>  {
А>    CoreDoWork();
А>  }
А>  protected virtual void CoreDoWork() 
А>  {
А>    Console.WriteLine( "Base.DoWork()" );
А>  }
А>}
А>public class Derived : Base
А>{
А>  protected override void CoreDoWork() 
А>  {
А>    Console.WriteLine( "Derived.DoWork()" );
А>  }
А>}
А>//Применение шаблона NVI
А>public class EntryPoint
А>{
А>  static void Main() 
А>  {
А>    Base b = new Derived();
А>    b.DoWork();
А>  }
А>}
А>



А>Чем такая реализация лучше этой?

А>
А>public class Base
А>{
А>  public virtual void DoWork() 
А>  {
А>     Console.WriteLine( "Base.DoWork()" );
А>  }
А>}
А>public class Derived : Base
А>{
А>  public override void DoWork() 
А>  {
А>    Console.WriteLine( "Derived.DoWork()" );
А>  }
А>}
А>public class EntryPoint
А>{
А>  static void Main() 
А>  {
А>    Base b = new Derived();
А>    b.DoWork();
А>  }
А>} 
А>


Несовсем корректный пример. Основная идея в том, что у вас есть некоторая общая последовательность действий, но с разными вариантами реализации. Например так:
public class BaseFormatter
    {
        public void DoWork()
        {
            string message;

            message = FormatHeader("Hello message") + FormatBody("Hello world!");
            Console.WriteLine(message);
        }
        protected virtual string FormatHeader(string aMessage) { return ""; }
        protected virtual string FormatBody(string aMessage) { return ""; }
    }

    public class HTMLFormatter : BaseFormatter
    {
        protected override string FormatHeader(string aMessage)
        {
            return "<html> <header>" + aMessage + "</header>";
        }

        protected override string FormatBody(string aMessage)
        {
            return "<body> <p>" + aMessage + "</p> </body> </html>";
        }
    }

    public class XMLFormatter : BaseFormatter
    {
        protected override string FormatHeader(string aMessage)
        {
            return "<?xml version='1.0' encoding='utf-8' ?> <header>" + aMessage + "</header>";
        }
        protected override string FormatBody(string aMessage)
        {
            return "<body> <line> " + aMessage + "</line> </body>";
        }
    }

    //Применение шаблона NVI
    class Program
    {
        static void Main(string[] args)
        {
            BaseFormatter b = new HTMLFormatter();
            b.DoWork();
        }
    }
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Какие преимущества от NVI шаблона?
От: bnk СССР http://unmanagedvisio.com/
Дата: 12.04.07 03:39
Оценка:
Здравствуйте, Rutven, Вы писали:

R>Несовсем корректный пример. Основная идея в том, что у вас есть некоторая общая последовательность действий, но с разными вариантами реализации. Например так:


хъ

Я вот тоже так думал, но автор уже написал, что то такой пример называется уже не NVI, а "шаблонный метод" ("Template method").
Так что не катит... Насколько я понял, NVI — это когда реализация не-виртуальной функция базового класса не содержит
ничего кроме вызова соответствующей виртуальной функции...

IMHO, смысл у такой реализации только один —
чтобы была возможность в последующем преобразовать ее в "полноценный" шаблонный метод.
Re[3]: Какие преимущества от NVI шаблона?
От: Rutven Россия http://rutven.narod.ru
Дата: 12.04.07 05:38
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, Rutven, Вы писали:


R>>Несовсем корректный пример. Основная идея в том, что у вас есть некоторая общая последовательность действий, но с разными вариантами реализации. Например так:


bnk>хъ


bnk>Я вот тоже так думал, но автор уже написал, что то такой пример называется уже не NVI, а "шаблонный метод" ("Template method").

bnk>Так что не катит... Насколько я понял, NVI — это когда реализация не-виртуальной функция базового класса не содержит
bnk>ничего кроме вызова соответствующей виртуальной функции...

bnk>IMHO, смысл у такой реализации только один —

bnk>чтобы была возможность в последующем преобразовать ее в "полноценный" шаблонный метод.

На самом деле, это я лоханулся , мой пример — это как раз Template method, а тот, что привели вы и есть NVI.

The template method is strongly related to the NVI (Non-Virtual Interface) pattern. The NVI pattern recognizes the benefits of a non-abstract method invoking the subordinate abstract methods. This level of indirection allows for pre and post operations relative to the abstract operations both immediately and with future unforseen changes.


http://en.wikipedia.org/wiki/Template_method_pattern
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Какие преимущества от NVI шаблона?
От: _FRED_ Черногория
Дата: 12.04.07 08:35
Оценка:
Здравствуйте, minorlogic, Вы писали:

_FR>>Поищите, пожалуйста, Саттера (это вот
Автор(ы): Герб Саттер

Данная книга представляет собой продолжение вышедшей ранее книги
Решение сложных задач на
C++. В форме задач и их решений рассматриваются
современные методы проектирования и программирования
на C++. В книге сконцентрирован богатый многолетний опыт
программирования на C++ не только самого автора, но и всего
сообщества программистов на C++, так что некоторые
рекомендации автора могут показаться неожиданными даже опытным
программистам-профессионалам. Автор рассматривает и конкретные
методики, приемы и идиомы программирования, однако основная тема
книги — это стиль программирования, причем в самом широком
понимании этого слова. Особое внимание во всех задачах книги
уделено вопросу проектирования, которое должно обеспечить максимальную
надежность, безопасность, производительность и сопровождаемость
создаваемого программного обеспечения.
, задача 18 — виртуальность). В нём отлично всё разъяснено.

M>Саттер вообще никакой внятной аргументации не приводит , даже без примеров.

Ты не прав. Начни читать на 119ой странице со слов

Открытая виртуальная функция вынуждена выполнять две работы…

Далее следует 120ая и 12ая страницы объяснений. Если ты их за доводы не считаешь, то извини
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 12.04.07 18:13
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, minorlogic, Вы писали:


_FR>>>Поищите, пожалуйста, Саттера (это вот
Автор(ы): Герб Саттер

Данная книга представляет собой продолжение вышедшей ранее книги
Решение сложных задач на
C++. В форме задач и их решений рассматриваются
современные методы проектирования и программирования
на C++. В книге сконцентрирован богатый многолетний опыт
программирования на C++ не только самого автора, но и всего
сообщества программистов на C++, так что некоторые
рекомендации автора могут показаться неожиданными даже опытным
программистам-профессионалам. Автор рассматривает и конкретные
методики, приемы и идиомы программирования, однако основная тема
книги — это стиль программирования, причем в самом широком
понимании этого слова. Особое внимание во всех задачах книги
уделено вопросу проектирования, которое должно обеспечить максимальную
надежность, безопасность, производительность и сопровождаемость
создаваемого программного обеспечения.
, задача 18 — виртуальность). В нём отлично всё разъяснено.

M>>Саттер вообще никакой внятной аргументации не приводит , даже без примеров.

_FR>Ты не прав. Начни читать на 119ой странице со слов

_FR>

Открытая виртуальная функция вынуждена выполнять две работы…

_FR>Далее следует 120ая и 12ая страницы объяснений. Если ты их за доводы не считаешь, то извини

Я считаю что ИНОГДА NVI может быть полезен , но скорее как шаблонная функция. и уж точно он не полезен ВСЕГДА , в чем сатер пытается безуспешно читателей убедить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[5]: Какие преимущества от NVI шаблона?
От: _FRED_ Черногория
Дата: 13.04.07 07:53
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Я считаю что ИНОГДА NVI может быть полезен , но скорее как шаблонная функция. и уж точно он не полезен ВСЕГДА , в чем сатер пытается безуспешно читателей убедить.


А аргументировать "Я считаю" чем-либо, кроме как апперкэйсом по силам? Сказать, что, мол "старик ошибается, гонит и ваще он не прав" имеет возможность каждый и цена этому ноль и не интересно.
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[5]: Какие преимущества от NVI шаблона?
От: Lloyd Россия  
Дата: 13.04.07 08:58
Оценка: +2
Здравствуйте, minorlogic, Вы писали:

M>Я считаю что ИНОГДА NVI может быть полезен , но скорее как шаблонная функция. и уж точно он не полезен ВСЕГДА , в чем сатер пытается безуспешно читателей убедить.


То есть ты считаешь нормальным, что у класса Derived кто-угодно может вызвать вируальный методы из Base, несмотря на то, что он был перекрыт в Derived?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 13.04.07 18:55
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, minorlogic, Вы писали:


M>>Я считаю что ИНОГДА NVI может быть полезен , но скорее как шаблонная функция. и уж точно он не полезен ВСЕГДА , в чем сатер пытается безуспешно читателей убедить.


L>То есть ты считаешь нормальным, что у класса Derived кто-угодно может вызвать вируальный методы из Base, несмотря на то, что он был перекрыт в Derived?


Я считаю что это замечательно иметь такую возможность !
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 13.04.07 18:55
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А аргументировать "Я считаю" чем-либо, кроме как апперкэйсом по силам? Сказать, что, мол "старик ошибается, гонит и ваще он не прав" имеет возможность каждый и цена этому ноль и не интересно.


Если интерессно тогда тебе в поиск РСДН.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[7]: Какие преимущества от NVI шаблона?
От: Lloyd Россия  
Дата: 13.04.07 20:17
Оценка:
Здравствуйте, minorlogic, Вы писали:

L>>То есть ты считаешь нормальным, что у класса Derived кто-угодно может вызвать вируальный методы из Base, несмотря на то, что он был перекрыт в Derived?


M>Я считаю что это замечательно иметь такую возможность !


Ну приплыли. Дай угадаю твое следующее желание — получить доступ к приватным членам?
Re[8]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 14.04.07 09:27
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, minorlogic, Вы писали:


L>>>То есть ты считаешь нормальным, что у класса Derived кто-угодно может вызвать вируальный методы из Base, несмотря на то, что он был перекрыт в Derived?


M>>Я считаю что это замечательно иметь такую возможность !


L>Ну приплыли. Дай угадаю твое следующее желание — получить доступ к приватным членам?


Я могу тебя удивить , но и такая есть возможность в C++ . Вообще , я бы советовал не коверкать язык к неприспособленным конструкциям , а просто поменять язык.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[9]: Какие преимущества от NVI шаблона?
От: Lloyd Россия  
Дата: 14.04.07 15:30
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>>>Я считаю что это замечательно иметь такую возможность !


L>>Ну приплыли. Дай угадаю твое следующее желание — получить доступ к приватным членам?


M>Я могу тебя удивить , но и такая есть возможность в C++ .


Фрэнды не считаются. Если бы вызов перекрытых методов был только для фрэндов, необходимости в NVI не возникло бы.

M>Вообще , я бы советовал не коверкать язык к неприспособленным конструкциям , а просто поменять язык.


Я-то уже поменял на C#. Но вот только дух C++ преследует и тут — в .Net-е оставили возможность вызвать перекрытый метод.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Какие преимущества от NVI шаблона?
От: minorlogic Украина  
Дата: 14.04.07 16:28
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, minorlogic, Вы писали:


M>>>>Я считаю что это замечательно иметь такую возможность !


L>>>Ну приплыли. Дай угадаю твое следующее желание — получить доступ к приватным членам?


M>>Я могу тебя удивить , но и такая есть возможность в C++ .


L>Фрэнды не считаются. Если бы вызов перекрытых методов был только для фрэндов, необходимости в NVI не возникло бы.


А нет такой необходимостм....

M>>Вообще , я бы советовал не коверкать язык к неприспособленным конструкциям , а просто поменять язык.


L>Я-то уже поменял на C#. Но вот только дух C++ преследует и тут — в .Net-е оставили возможность вызвать перекрытый метод.


Видимо строители языков заблуждаются , жаль что получилось пролить на них свет познанья ...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[11]: Какие преимущества от NVI шаблона?
От: Lloyd Россия  
Дата: 14.04.07 17:00
Оценка:
Здравствуйте, minorlogic, Вы писали:

L>>Фрэнды не считаются. Если бы вызов перекрытых методов был только для фрэндов, необходимости в NVI не возникло бы.


M>А нет такой необходимостм....


Если бы не было необходимости, никому в голову не пришлось бы изобретать NVI.

M>>>Вообще , я бы советовал не коверкать язык к неприспособленным конструкциям , а просто поменять язык.


L>>Я-то уже поменял на C#. Но вот только дух C++ преследует и тут — в .Net-е оставили возможность вызвать перекрытый метод.


M>Видимо строители языков заблуждаются , жаль что получилось пролить на них свет познанья ...


Извини, распарсить эту фразу у меня не удалось.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.