АТД в языке C#
Деструкторы в языке C# тоже предусмотрены, однако используются они редко, поскольку применяется автоматическая сборка мусора.
Для создания АТД в языке C# могут быть применены структуры struct или классы. Структуры в языке C# существенно отличаются от своих прообразов в языке C++, по сути, они являются облегченными классами.
Они могут иметь конструкторы, свойства, методы, поля данных и способны реализовывать интерфейсы, но не поддерживают наследования.Существенное различие между структурами и классами заключается в том, что структуры являются типами-значениями, а классы — ссылочными типами. Структуры размещаются в стеке, а не в куче. При использовании в
412 |
Глава 15. Абстрактные типы данных |
качестве параметров структуры передаются по значению. Все типы-значения в C#, включая все примитивные типы, принадлежат к структурам. Экземпляры структур могут создаваться путем их объявления, подобно экземплярам других предопределенных типов-значений, таких как int или float. Кроме того, они могут создаваться с помощью оператора new, который вызывает конструктор для их инициализации. Структуры применяют для реализации относительно небольших и простых ти- пов, которые никогда не будут наследоваться. Они удобны для создания объектов, размещаемых в стеке (в противоположность куче). Три уровня доступа (public, private и protected) в C# указываются тем же путем, что и в языке Java. От языка Delphi C# унаследовал свойства как средства реализации операций get() и set() (без явного их вызова клиентом). Свойства обеспечивают неявный доступ к определенным приватным данным экземпляра. К примеру, рассмотрим следующий простой класс: |
В классе Observation определено свойство NumberOfDays. Это свойство обеспечивает как метод чтения (get), так и метод записи (set) для доступа к приватному элементу данных number_Days. Допустим, что фрагмент программы клиента имеет вид: Observation ob = new Observation (); int actualPeriod, oldPeriod; oldPeriod = ob.NumberOfDays; ob.NumberOfDays = actualPeriod; В этом фрагменте элемент класса number_Days рассматривается как переменная с публичным уровнем доступа, хотя на самом деле элемент приватен и доступ к нему возможен только через свойство. Обратите внимание на использование неявной переменной в методе записи. Это механизм, посредством которого ссылаются на новое значение свойства. Пример со стеком не приводится. Разница между версией на C# и версией на Java минимальна: меняются только методы вывода сообщений и тип возвращаемого результата для метода empty() (вместо boolean надо поставить bool). |
АТД в языке Ruby |
413 |