SoftCraft
разноликое программирование

Отправная точка
Программирование
Windows API
Автоматы
Нейроинформатика
Парадигмы
Параллелизм
Проектирование
Теория
Техника кодирования
Трансляторы
Прочие вопросы

Разное

Беллетристика
Брюзжалки
Цели и задачи
Об авторе

Сервис

Форум
Подписка на новости


Как функции, не являющиеся методами, улучшают инкапсуляцию


[ <<< | 1 | 2 | 3 | 4 | врезка ]


Шаблоны и функции фабрики в контексте пространства имен

(Врезка)

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

// менее инкапсулированный проект
class Widget 
{
   ...
public: 
    static Widget* make(/* params */); 
}; 

// более инкапсулированный проект 

namespace WidgetStuff { class Widget { ... }; Widget* make( /* params */ ); };

Эндрю Коунинг (Andrew Koenig) подчеркивает, что первый вариант (в котором make является статическим методом класса) позволяет написать шаблонную функцию, которая может вызывать make и не знать порождаемый ею тип:

template<typename T>
void doSomething( /* params */ )
{
    // вызвать функцию фабрики для класса T
    T *pt = T::make( /* params */ );
    ...
}

Это не возможно в проекте, использующем пространство имен, потому что нет никакого способа, чтобы идентифицировать пространство имен, содержащего тип, внутри шаблона. То есть, нет способа выяснить чем является ??? в псевдокоде, приведенном ниже:

template<typename T>
void doSomething( /* params */ )
{
    // нельзя узнать какое T содержит пространство имен!
    T *pt = ???::make( /* params */ );
    ... 
}

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

Возврат к статье


[ <<< | 1 | 2 | 3 | 4 | врезка ]



Статьи



интернет магазин русских сувениров




Купить фаркоп в Красноярске.
Хотите выбрать честноеоказание бухгалтерских услуг в Спб
Like Asian Food? Try Asian Home Gourmet Korma Curry at EfoodDepot.com
Выполняем срочный заказ дипломов mba