Абстрактные классы против интерфейсов против миксинов
В целом:
интерфейс - это контракт, определяющий 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
Абстрактные классы против интерфейсов против миксинов
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.