Абстрактный тип

редактировать

В языках программирования, абстрактный тип- это тип в системе номинативного типа, который не может быть напрямую создан ; тип, который не является абстрактным, который может быть создан, называется конкретным типом. Каждый экземпляр абстрактного типа является экземпляром некоторого конкретного подтипа. Абстрактные типы также известны как экзистенциальные типы.

Абстрактный тип может не обеспечивать реализации или обеспечивать неполную реализацию. В некоторых языках абстрактные типы без реализации (а не с неполной реализацией) известны как протоколы, интерфейсы, сигнатуры или типы классов. В на основе классов объектно-ориентированного программирования абстрактные типы реализуются как абстрактные классы (также известные как абстрактные базовые классы ), а конкретные типы как бетонные классы. В универсальном программировании аналогичным понятием является концепция , которая аналогичным образом определяет синтаксис и семантику, но не требует отношения подтипов: два несвязанных типа могут удовлетворять одной концепции.

Часто абстрактные типы имеют одну или несколько реализаций, предоставляемых отдельно, например, в форме конкретных подтипов, экземпляры которых могут быть созданы. В объектно-ориентированном программировании абстрактный класс может включать в себя абстрактные методы или абстрактные свойства, общие для его подклассов. Другие имена языковых функций, которые используются (или могут использоваться) для реализации абстрактных типов, включают черты, миксины, разновидности, роли или классы типов.

Содержание
  • 1 Обозначение абстрактных типов
    • 1.1 Пример (Java)
  • 2 Использование абстрактных типов
  • 3 См. Также
  • 4 Ссылки
  • 5 Дополнительная литература
  • 6 Внешние ссылки
Обозначение абстрактных типов

Абстрактные классы могут быть созданы, обозначены или смоделированы несколькими способами:

  • С помощью явного ключевого слова abstractв определении класса, как в Java, D или C#.
  • Путем включения в определение класса одного или нескольких абстрактных методов (называемых чистыми виртуальными функциями в C ++ ), которые объявлен как принимающий как часть своего протокола, но для которого не предусмотрена реализация.
  • Путем наследования от абстрактного типа и не отмены всех недостающих функций, необходимых для завершения определения класса. Другими словами, дочерний тип, который не реализует все абстрактные методы своего родителя, сам становится абстрактным.
  • Во многих языках с динамической типизацией, таких как Smalltalk, любой класс, который отправляет определенный метод to этот, но не реализует этот метод, можно считать абстрактным. (Однако во многих таких языках, как Objective-C, ошибка не обнаруживается до тех пор, пока класс не будет использован, и сообщение возвращает результаты в виде сообщения об ошибке исключения, такого как «Не распознает селектор: xxx» as - [NSObject doesNotRecognizeSelector: (SEL) selector]вызывается при обнаружении нереализованного метода).

Пример (Java)

// По умолчанию все методы во всех классах являются конкретными, если не используется ключевое слово abstract. abstract class Demo {// Абстрактный класс может включать абстрактные методы, у которых нет реализации. абстрактная публичная int sum (int x, int y); // Абстрактный класс может также включать в себя конкретные методы. общедоступный продукт int (int x, int y) {return x * y; }} // По умолчанию все методы во всех интерфейсах являются абстрактными, если не используется ключевое слово default. интерфейс DemoInterface {[аннотация] int getLength (); // Здесь можно использовать абстракцию, но она совершенно бесполезна // В этом контексте можно использовать ключевое слово по умолчанию для указания конкретного метода в интерфейсе по умолчанию int product (int x, int y) {return x * y; }}
Использование абстрактных типов

Абстрактные типы - важная особенность статически типизированных языков ООП. Многие языки с динамической типизацией не имеют эквивалентной функции (хотя использование утиной печати делает ненужными абстрактные типы); однако черты встречаются в некоторых современных языках с динамической типизацией.

Некоторые авторы утверждают, что классы должны быть листовыми классами (не иметь подтипов) или же быть абстрактными.

Абстрактные типы полезны тем, что их можно использовать для определения и обеспечения соблюдения протокола ; набор операций, которые должны поддерживать все объекты, реализующие протокол.

Абстрактные типы также являются неотъемлемой частью Шаблон метода шаблона.

См. также
Ссылки
Дополнительная литература
  • Head First Java. O'Reilly Media. 2003. С. 688. ISBN 0-596-00920-8.
  • Ядро Java: интегрированный подход Р. Нагесвара Рао
Внешние ссылки
  • «Объяснение абстрактных или скелетных интерфейсов» [ 1]
  • Типы и языки программирования Бенджамина Пирса (MIT Press 2002) [2]
  • Абстрактный тип в Rosetta Code
Последняя правка сделана 2021-06-08 19:47:07
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте