Абстрактный шрифт - Abstract type
Системы типов |
---|
Общие понятия |
Основные категории |
|
Второстепенные категории |
Смотрите также |
В языках программирования , абстрактный тип является типом в именительной системе типа , которая не может быть реализованной непосредственно; тип, который не является абстрактным, который может быть создан, называется конкретным типом . Каждый экземпляр абстрактного типа является экземпляром некоторого конкретного подтипа . Абстрактные типы также известны как экзистенциальные типы .
Абстрактный тип может не предоставлять реализации или обеспечивать неполную реализацию. В некоторых языках абстрактные типы без реализации (а не с неполной реализацией) известны как протоколы , интерфейсы , сигнатуры или типы классов . В основе классов объектно-ориентированное программирование , абстрактные типы реализуются как абстрактные классы (также известных как абстрактные базовых классы ), а также конкретными типы , как конкретные классы . В универсальном программировании аналогичное понятие - это концепция , которая аналогичным образом определяет синтаксис и семантику, но не требует отношения подтипов: два несвязанных типа могут удовлетворять одной и той же концепции.
Часто абстрактные типы будут иметь одну или несколько реализаций, предоставляемых отдельно, например, в форме конкретных подтипов, которые могут быть созданы. В объектно-ориентированном программировании абстрактный класс может включать абстрактные методы или абстрактные свойства , общие для его подклассов. Другие имена языковых функций, которые используются (или могут использоваться) для реализации абстрактных типов, включают черты , миксины , разновидности , роли или классы типов .
Обозначение абстрактных типов
Абстрактные классы могут быть созданы, обозначены или смоделированы несколькими способами:
- Путем использования ключевого слова explicit
abstract
в определении класса, как в Java , D или C # . - Путем включения в определение класса одного или нескольких абстрактных методов (называемых чистыми виртуальными функциями в C ++ ), которые класс объявлен как часть своего протокола, но для которых не предусмотрена реализация.
- При наследовании от абстрактного типа, а не перекрывая все недостающие функции , необходимые для завершения определения класса. Другими словами, дочерний тип, который не реализует все абстрактные методы своего родителя, сам становится абстрактным.
- Во многих динамически типизированных языках , таких как Smalltalk , любой класс , который посылает конкретный метод для этого , но не реализует этот метод, можно рассматривать абстрактно. (Однако во многих таких языках, как Objective-C , ошибка не обнаруживается до тех пор, пока класс не будет использован, и сообщение возвращает результаты в виде сообщения об ошибке исключения, такого как «Не распознает селектор: xxx»,
- [NSObject doesNotRecognizeSelector:(SEL)selector]
которое вызывается при обнаружении нереализованный метод).
Пример (Java)
//By default, all methods in all classes are concrete, unless the abstract keyword is used.
abstract class Demo {
// An abstract class may include abstract methods, which have no implementation.
abstract public int sum(int x, int y);
// An abstract class may also include concrete methods.
public int product(int x, int y) { return x*y; }
}
//By default, all methods in all interfaces are abstract, unless the default keyword is used.
interface DemoInterface {
[abstract] int getLength(); //Abstract can be used here, though is completely useless
//The default keyword can be used in this context to specify a concrete method in an interface
default int product(int x, int y) {
return x * y;
}
}
Использование абстрактных типов
Абстрактные типы - важная особенность статически типизированных языков ООП. Многие языки с динамической типизацией не имеют эквивалентной функции (хотя использование утиной печати делает ненужными абстрактные типы); однако черты можно найти в некоторых современных языках с динамической типизацией.
Некоторые авторы утверждают, что классы должны быть листовыми (не иметь подтипов) или же быть абстрактными.
Абстрактные типы полезны тем, что их можно использовать для определения и обеспечения соблюдения протокола ; набор операций, которые должны поддерживать все объекты, реализующие протокол.
Абстрактные типы также являются неотъемлемой частью шаблона метода шаблона .
Смотрите также
использованная литература
дальнейшее чтение
- Начни сначала Java . O'Reilly Media. 2003. С. 688 . ISBN 0-596-00920-8.
- Ядро Java: комплексный подход Р. Нагешвара Рао
внешние ссылки
- «Объяснение абстрактных или скелетных интерфейсов» [1]
- Типы и языки программирования Бенджамина Пирса (MIT Press, 2002) [2]
- Абстрактный шрифт в Rosetta Code