Другие языки программирования и технологии
Объясните доступным языком, что такое "интерфейс" в ООП
В википедии сказано: "Интерфе́йс (англ. interface) — программная/синтаксическая структура (ясно), определяющая отношение между объектами (нормально), которые разделяют определенное поведенческое множество (а вот за такую формулировку нужно убивать) и не связаны никак иначе." Объясните, пожалуйста, это человеческим языком. И чем, конкретно, отличается интерфейс от API?
интерфейс это что-то типа переходника обьединяющий две разные структуры или объекты
Артур Матвеев
Отличие от API?
Возможно, это некорректный перевод. Не всегда можно точно передать суть сказанного в др. языке.
Собсно переводчик с его знаниями, это как раз и есть интерфейс между русским и английским.
И да, там стилистическая ошибка (спасибо, собираю неточности в вики)
" структура, определяющая отношениЯ между объектами, которые разделяют определенное поведенческое множество и не связаны никак иначе."
Есть объекты и у каждого свои методы. множество методов - совокупность поведений при обращении. Коряво, но читаемо.
В английском варианте уже предложена корректная формулировка
"These are definitions of methods and values which the objects agree upon in order to co-operate."
Собсно переводчик с его знаниями, это как раз и есть интерфейс между русским и английским.
И да, там стилистическая ошибка (спасибо, собираю неточности в вики)
" структура, определяющая отношениЯ между объектами, которые разделяют определенное поведенческое множество и не связаны никак иначе."
Есть объекты и у каждого свои методы. множество методов - совокупность поведений при обращении. Коряво, но читаемо.
В английском варианте уже предложена корректная формулировка
"These are definitions of methods and values which the objects agree upon in order to co-operate."
интерфейс это контракт
реализуя тот или иной интерфейс класс обязуется предоставить реализацию для членов интерфейса
например, есть интерфейс перемещаемого объекта
интерфейс требует, чтобы у класса были
- два поля для координат
- метод для перемещения
класс наследующий такой интерфейс обязан реализовать у себя
- два поля для координат
- метод для перемещения
то же касается любого класса реализующего интерфейс
реализуя тот или иной интерфейс класс обязуется предоставить реализацию для членов интерфейса
например, есть интерфейс перемещаемого объекта
интерфейс требует, чтобы у класса были
- два поля для координат
- метод для перемещения
класс наследующий такой интерфейс обязан реализовать у себя
- два поля для координат
- метод для перемещения
то же касается любого класса реализующего интерфейс
например есть игровой движёк, для использования нужно подключить только 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, код будет один.
в этом инклуд файле абстрактный класс
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
Одно из лучших объяснений интерфейсов
https://www.youtube.com/watch?v=FQf14kj8HwU&index=5&list=PLWCoo5SF-qAMDIAqikhB2hvIytrMiR5TC
Одно из лучших объяснений интерфейсов
Общий вид
Артур Матвеев
Подробнее. Если чисто визуальное представление управления клиенту - то да, это интерфейс. Но в ООП это вроде бы нечто другое
Похожие вопросы
- как разогнать процессор, объясните доступным языком)))
- Объясните значение понятия "интерфейсы" в ООП? Что это такое, отличия от классов, зачем нужны, и где используются.
- Зачем нужны интерфейсы в ООП. C#
- Объясните плиз доступным языком,как скачивать с торрентов файлы?спасибо огромное
- что такое ассемблер? более доступным языком объясните пожалуйста
- C++ Объясните пож. на доступном языке про спецификаторы класса памяти. В инете и в книгах слишком заумно. Продолж ниже.
- для чего народ подвешивает сайты с помощью Ddos-атак?! зачем??? объясните девушке доступным языком, пожалуйста.
- объясните нубу в этом деле, что такое хостинг, только на доступном языке. например хостинг сервера minecraft
- Чем скриптовые языки отличаются от структурных и ООП?
- Разработайте программу на любом доступном языке программирования вычисляющую наименьшее общее кратное двух чисел...