Абстрактные классы против интерфейсов против миксинов

В целом:

интерфейс - это контракт, определяющий abstract-class операции, но без какой-либо interfaces реализации. Некоторые языки nomenclature (Java, C#) имеют встроенную programming-terms поддержку интерфейсов, а oop в других «интерфейс» описывает oop соглашение, подобное чистому programming-terms виртуальному классу в C++.

абстрактный класс - это terminology класс, который определяет object-oriented по крайней мере одну операцию nomenclature без реализации. Абстрактные oops классы также могут предоставлять oop некоторые части своей реализации. Опять abstract-classes же, в некоторых языках есть terminology встроенная поддержка маркировки abstract-class классов как абстрактных, а terminology в других это неявно. Например, в object-oriented C++ класс, определяющий чистый nomenclature виртуальный метод, является programming-terms абстрактным.

mixin - это класс, который terminology предназначен для упрощения interfaces реализации определенных функций mixins в подклассах, но не предназначен terminology для использования сам по interfaces себе. Например, предположим, что interface у нас есть интерфейс для wording объекта, который обрабатывает terminology запросы

interface RequestHandler {
  void handleRequest(Request request);
}

Возможно, было бы interface полезно буферизовать запросы, накапливая interface их до тех пор, пока у нас terminology не будет некоторого заранее terminology определенного числа, а затем mixins очистить буфер. Мы можем oops реализовать функцию буферизации programming-terms с помощью микширования без указания поведения wording сброса:

abstract class BufferedRequestHandlerMixin implements RequestHandler {
  List buffer = new List();

  void handleRequest(Request request) {
    buffer.add(request);

    if (buffer.size == BUFFER_FLUSH_SIZE) {
        flushBuffer(buffer);
        buffer.clear();
    }
  }

  abstract void flushBuffer(List buffer);
}

Таким образом, нам object-oriented легко написать обработчик abstract-classes запросов, который записывает oops запросы на диск, вызывает nomenclature веб-службу и т. д., не переписывая object-oriented каждый раз функции буферизации. Эти wording обработчики запросов могут nomenclature просто расширять BufferedRequestHandlerMixin и реализовывать oops flushBuffer.

Еще один хороший пример oops миксина - это один из многих terminology классов поддержки в Spring, а oop именно. HibernateDaoSupport.

oop

interface

terminology

abstract-class

mixins

2022-10-21T08:51:58+00:00
Вопросы с похожей тематикой, как у вопроса:

Абстрактные классы против интерфейсов против миксинов