В C++ общепринятой практикой является только определение методов в классе-корпусе и их реализация в исходном файле.
Но это не интерфейс. Потому что только класс может реализовать методы.
В Java можно определить "интерфейс" так же, как вы могли бы определить класс. Теперь любой класс может реализовать определенный интерфейс.
Теперь представьте себе следующее: при программировании на Java. У меня есть класс "администрация", а другой - "контакт". Класс "администрирование" содержит массив "контакт" -objects. Теперь должны быть определены и реализованы некоторые полезные методы как "добавить", "удалить", "обмен" и т.д. Для работы с "контактом" -array.
Эти методы должны быть определены интерфейсом и реализованы классом "администрирование".
Мой вопрос в том, должен ли интерфейс быть отнесен к классу "клиент", поэтому, например, мы называем его "ICustomer", или его следует отнести к классу "администрирование", который дает "IAdministration".
Я не возражаю против "foo-able" или "I-foo", как раз о концепции, которая стоит за интерфейсами?
Должны ли они быть ориентированы классом, который описывает данные ("контакт") или класс, который обрабатывает данные ("администрирование")?
Я знаю, что это более философский вопрос, но в любом случае я хотел бы узнать ваше мнение по этому поводу.
С уважением
Интерфейсы могут быть ориентированы на любой тип класса.
Неявно/неформально каждый класс имеет некоторый интерфейс
определяемый методами, которые определяет класс.
Это должно быть IAdministration в вашем смысле. Потому что
определяет операции над administration
которая является
контейнер для contact
объектов (подкрепленный массивом в ваших словах).
"Add", "delete", "swap" не являются операциями contact
объект, кажется, но на объект administration
.
ICustomer/IContact будет другим интерфейсом, который
такие методы, как setFirstName, setLastName, setPhone,
getFirstName, getLastName, getPhone и т.д. Это всего лишь POJO/bean
перенося некоторые данные. Так мне кажется из вашего описания.
То, что означает термин "интерфейс" (и что означает "объект"), зависит от парадигмы программирования, которую вы отбрасываете.
Java полностью охватывает классическую парадигму ООП, основанную на наследовании базы и некоторых интерфейсов.
C++, наоборот, может поддерживать "множественное наследование", что является более общей концепцией. "Интерфейс" в этом контексте можно рассматривать как класс с только чистыми виртуальными методами;
class Ia
{
public:
virtual int method1()=0;
virtual int method2()=0;
virtual ~Ia() {}
};
class Ib
{
public:
vritual int method3()=0;
vritual int method4()=0;
virtual ~Ib() {}
};
class Object
{
public:
virtual ~Object() {}
};
class A:
public Object,
public Ia,
{
public:
virtual int method1(); //implementation
virtual int method2(); //implementation
};
class B:
public A,
public Ib
{
public:
virtual int method3(); //implementation
virtual int method4(); //implementation
};
В этом смысле должно быть легко распознать ваше дело
Я не могу следовать вашему примеру, но я считаю, что путаница может возникать из разных видов использования и значений того же термина.
В общем, интерфейсом к системе является то, как внешние части могут взаимодействовать с этим. Это часто используется в коде, в котором говорится, что этот класс предлагает эту и эту функцию в своем интерфейсе.
Другая концепция - это интерфейс OO-интерфейса, который действительно является протоколом для взаимодействия с типом. На разных языках интерфейс используется для обозначения протокола или абстрактного интерфейса.
Вы должны использовать оба применения этого термина, поскольку оба они являются общими. В C++ класс может реализовать протокол (чистые абстрактные классы без учета состояния эквивалентны интерфейсам) и, таким образом, реализовать этот интерфейс, и он может иметь те и другие функции, которые определяют его собственный интерфейс.