Здравствуйте, Videoman, Вы писали:
V>Хотел коллег спросить, кто как именует чистые интерфейсные классы, в случае если везде используется snake_case ?
Иногда бывает необходимость выделить корень какой-то иерархии классов и тогда хочется, чтобы в названии было что-то, что бы говорило, что это уже корень, отсюда все и растет. В таких случаях название начинается с abstract_, вроде abstract_message_mbox, abstract_message_sink, abstract_connection_pool.
Иногда используется суффикс _iface, вроде notificator_iface, controller_iface, consumer_iface. Правильнее, наверное, было бы использовать _interface, но слишком уж длинные названия получаются. При этом _iface не обязательно означает абстрактный класс, иногда это вполне себе обычный класс, просто дающий какой-то другой способ доступа к объекту. Что-то вроде:
// Публично-доступная часть.
namespace impl {
class private_consumer_iface;
}
class consumer {
friend class impl::private_consumer_iface;
...
public:
void a();
void b();
...
};
// Приватная часть, детали реализации.
// Скорее всего, другая единица трансляции.
namespace impl {
class private_consumer_iface {
public:
void c(consumer & target);
void d(consumer & target);
...
};
}
Но вообще жизненный опыт показывает, что в каком-то специальном именовании абстрактных классов смысла нет. Т.к. вначале кажется что abstract_ или _iface в названии как-то помогают, а через N лет оказывается, что то, что было чистым _iface со временем обросло и какими-то невиртуальными вспомогательными методами. А какой-нибудь abstract_ раньше был самым корнем иерархии, но со временем он сам стал производен от каких-то дополнительных классов.