Оглавление
Абстрактный тип
-
Основы абстрактных типов
- Абстрактный тип в системе именных типов не может быть создан напрямую, но может быть создан через конкретный подтип.
- Абстрактные типы могут не иметь реализации или иметь неполную реализацию, в некоторых языках известны как протоколы, интерфейсы или сигнатуры.
- В объектно-ориентированном программировании абстрактные типы реализуются как абстрактные классы, а конкретные типы – как конкретные классы.
- В универсальном программировании абстрактные типы могут быть реализованы без отношения к подтипу.
-
Реализация и использование
- Абстрактные классы могут быть созданы с использованием ключевого слова abstract или путем наследования от абстрактного типа без реализации всех абстрактных методов.
- В языках с динамической типизацией абстрактные типы могут быть определены через отправку метода в this, но без его реализации.
- Абстрактные типы являются важной особенностью статически типизированных языков ООП и могут использоваться для определения и принудительного применения протоколов.
-
Примеры и рекомендации
- В языке Java все методы по умолчанию являются конкретными, но могут быть абстрактными с использованием ключевого слова abstract.
- В интерфейсах все методы по умолчанию являются абстрактными, но могут быть конкретными с использованием ключевого слова default.
- Некоторые авторы рекомендуют, чтобы классы были конечными или абстрактными для обеспечения целостности и соблюдения протоколов.
- Абстрактные типы полезны для шаблонного метода и являются неотъемлемой частью его реализации.
-
Ссылки и дальнейшее чтение
- Ссылки на книги и ресурсы по типам и языкам программирования, включая “Объяснение абстрактных или скелетных интерфейсов” и “Типы и языки программирования Бенджамина Пирса”.