интерфейсы в oop, «java-like» и «c ++-like»

0

В C++ общепринятой практикой является только определение методов в классе-корпусе и их реализация в исходном файле.

Но это не интерфейс. Потому что только класс может реализовать методы.

В Java можно определить "интерфейс" так же, как вы могли бы определить класс. Теперь любой класс может реализовать определенный интерфейс.

Теперь представьте себе следующее: при программировании на Java. У меня есть класс "администрация", а другой - "контакт". Класс "администрирование" содержит массив "контакт" -objects. Теперь должны быть определены и реализованы некоторые полезные методы как "добавить", "удалить", "обмен" и т.д. Для работы с "контактом" -array.

Эти методы должны быть определены интерфейсом и реализованы классом "администрирование".

Мой вопрос в том, должен ли интерфейс быть отнесен к классу "клиент", поэтому, например, мы называем его "ICustomer", или его следует отнести к классу "администрирование", который дает "IAdministration".

Я не возражаю против "foo-able" или "I-foo", как раз о концепции, которая стоит за интерфейсами?

Должны ли они быть ориентированы классом, который описывает данные ("контакт") или класс, который обрабатывает данные ("администрирование")?

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

С уважением

Теги:
oop

3 ответа

1
Лучший ответ

Интерфейсы могут быть ориентированы на любой тип класса.
Неявно/неформально каждый класс имеет некоторый интерфейс
определяемый методами, которые определяет класс.

Это должно быть IAdministration в вашем смысле. Потому что
определяет операции над administration которая является
контейнер для contact объектов (подкрепленный массивом в ваших словах).

"Add", "delete", "swap" не являются операциями contact
объект, кажется, но на объект administration.

ICustomer/IContact будет другим интерфейсом, который
такие методы, как setFirstName, setLastName, setPhone,
getFirstName, getLastName, getPhone и т.д. Это всего лишь POJO/bean
перенося некоторые данные. Так мне кажется из вашего описания.

  • 0
    Большое спасибо за быстрый ответ. Это прояснило ситуацию для меня.
2

То, что означает термин "интерфейс" (и что означает "объект"), зависит от парадигмы программирования, которую вы отбрасываете.

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 
};

В этом смысле должно быть легко распознать ваше дело

  • 0
    Большое спасибо за ответ и демонстрацию.
1

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

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

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

Вы должны использовать оба применения этого термина, поскольку оба они являются общими. В C++ класс может реализовать протокол (чистые абстрактные классы без учета состояния эквивалентны интерфейсам) и, таким образом, реализовать этот интерфейс, и он может иметь те и другие функции, которые определяют его собственный интерфейс.

  • 0
    Это правда, например, в Object-Pascal класс определяется внутри области, которая также называется «интерфейс». Возможно, третья возможность, как используется термин «интерфейс». Тем не менее, меня смущает, что OO-интерфейс - это своего рода «определенное взаимодействие двух компонентов», потому что он предоставляет только определения методов. Но, в конце концов, это просто способ определения . Большое спасибо за ответ.
  • 0
    @ user3272529: в терминах C ++ это не определения , а объявления . Он объявляет, что функции существуют, но не дает определения для них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню