Другие языки программирования и технологии

Объясните доступным языком, что такое "интерфейс" в ООП

В википедии сказано: "Интерфе́йс (англ. interface) — программная/синтаксическая структура (ясно), определяющая отношение между объектами (нормально), которые разделяют определенное поведенческое множество (а вот за такую формулировку нужно убивать) и не связаны никак иначе." Объясните, пожалуйста, это человеческим языком. И чем, конкретно, отличается интерфейс от API?
интерфейс это что-то типа переходника обьединяющий две разные структуры или объекты
Евгений Шароглазов
Евгений Шароглазов
33 681
Лучший ответ
Артур Матвеев Отличие от API?
Возможно, это некорректный перевод. Не всегда можно точно передать суть сказанного в др. языке.
Собсно переводчик с его знаниями, это как раз и есть интерфейс между русским и английским.
И да, там стилистическая ошибка (спасибо, собираю неточности в вики)
" структура, определяющая отношениЯ между объектами, которые разделяют определенное поведенческое множество и не связаны никак иначе."
Есть объекты и у каждого свои методы. множество методов - совокупность поведений при обращении. Коряво, но читаемо.
В английском варианте уже предложена корректная формулировка
"These are definitions of methods and values which the objects agree upon in order to co-operate."
Камиль Амиров
Камиль Амиров
53 654
интерфейс это контракт

реализуя тот или иной интерфейс класс обязуется предоставить реализацию для членов интерфейса

например, есть интерфейс перемещаемого объекта
интерфейс требует, чтобы у класса были
- два поля для координат
- метод для перемещения

класс наследующий такой интерфейс обязан реализовать у себя
- два поля для координат
- метод для перемещения

то же касается любого класса реализующего интерфейс
ВS
Валерий Shatrab
44 389
например есть игровой движёк, для использования нужно подключить только 1 include файл, никаких sdK не нужно.
в этом инклуд файле абстрактный класс
class Driver{
virtualvoid BeginRender( void ) = 0;
virtualvoid EndRender( void ) = 0;
virtualvoid SetClearColor( const Color& color ) = 0;
};

а в движке можно выбирать через что рисовать картинку, OpenGL DirectX и прочее.

в самом движке уже чтобы рисовать конретно через эти отдельные API вот такие классы
class DriverOpenGL : public Driver{
void BeginRender( void ){
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
void EndRender( void ){
SwapBuffers( HDc );
}
void SetClearColor( const Color& color ){
glClearColor( color.r, color.g, color.b, color.a );
}
};

для DirectX нужны свои версии этих функций.

class DriverDirect3D11 : public Driver{
void BeginRender( void ){
d3d11DevCon->ClearRenderTargetView(renderTargetView, bgColor);
d3d11DevCon->ClearDepthStencilView(depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
}
void EndRender( void ){
if (m_vsync_enabled){SwapChain->Present(1, 0);}
else{SwapChain->Present(0, 0);}}
}
void SetClearColor( const Color& color ){
bgColor = color;
}
};

а в самой программе, в игре, там будет просто

int main(){

std::cout << " 1 - OpenGL, 2 - DirectX: ";
int x;
std::cin >> x;

Device* device = CreateGameDevice( x, 800, 600 );
Driver* driver = device->GetVideoDriver();

while(true){
driver->BeginRender();
//объекты для рисования
driver->EndRender();
}
return 0;
}

без разницы, выбрал ты OpenGL или DirectX, код будет один.
Есть первый класс, в котором определены публичные методы и поля.
Есть второй класс, у которого есть свои публичные методы и поля.

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

И чтобы это было возможно практически, вводятся интерфейсы, которые описывают, какие поля и методы будут доступны у экземпляров классов, которые реализуют (содержат все описанные поля и методы) этот интерфейс
Артур Матвеев Проще говоря, по каким методам и полям можно обратиться к данному объекту? А также регламент их доступности?
Рекомендую вот это видео:
https://www.youtube.com/watch?v=FQf14kj8HwU&index=5&list=PLWCoo5SF-qAMDIAqikhB2hvIytrMiR5TC

Одно из лучших объяснений интерфейсов
Общий вид
Артур Матвеев Подробнее. Если чисто визуальное представление управления клиенту - то да, это интерфейс. Но в ООП это вроде бы нечто другое

Похожие вопросы