Скачать презентацию Интерфейсы Интерфейс это крайний Скачать презентацию Интерфейсы Интерфейс это крайний

Парадигмы-Интерфейсы_коллекции.pptx

  • Количество слайдов: 33

Интерфейсы Интерфейсы

 • Интерфейс – это «крайний случай» абстрактного класса, в котором не предусмотрена ни • Интерфейс – это «крайний случай» абстрактного класса, в котором не предусмотрена ни одна реализация члена класса. • Таким образом, интерфейс описывает функциональность классов, но не определяет способа ее реализации. • Каждый класс, наследуя интерфейс, может реализовать его элементы по-своему. • Так достигается полиморфизм – объекты разных классов по-разному реагируют на вызовы одного и того же метода.

 Синтаксис интерфейса: [атрибуты] [спецификаторы] interface имя_интерфейса : [предки] { //объявление функциональных членов интерфейса Синтаксис интерфейса: [атрибуты] [спецификаторы] interface имя_интерфейса : [предки] { //объявление функциональных членов интерфейса без реализации … } Для интерфейса могут быть указаны спецификаторы new, public, internal и private. Спецификатор new применяется для вложенных интерфейсов и имеет такой же смысл, как и соответствующий спецификатор метода класса. По умолчанию интерфейс доступен только из сборки, в которой он описан (internal).

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

В качестве примера рассмотрим интерфейс IDemo и его реализацию для классов Demo. Point и В качестве примера рассмотрим интерфейс IDemo и его реализацию для классов Demo. Point и Demo. Line //определение интерфейса interface IDemo { void Show(); //объявление метода double Dlina(); //объявление метода int X {get; } //объявление свойства, доступного только для чтения int this [int i]{get; set; } //объявление индексатора, доступного для чтения-записи }

В интерфейсе IDemo было объявлено свойство Х, доступное только для чтения. Наследуя интерфейс IDemo, В интерфейсе IDemo было объявлено свойство Х, доступное только для чтения. Наследуя интерфейс IDemo, класс Demo. Point определил реализацию данного свойства. Класс Demo. Shape, наследуя класс Demo. Point и IDemo, не предложил собственной реализации свойства Х, поэтому при обращении к объекту типа Demo. Shape вызывается реализация данного свойства, определенная в базовом классе.

Стандартные интерфейсы. Net • В библиотеке классов. Net определено множество стандартных интерфейсов, задающих желаемую Стандартные интерфейсы. Net • В библиотеке классов. Net определено множество стандартных интерфейсов, задающих желаемую функциональность объектов. • Например, интерфейс IComparable задает метод сравнения объектов по принципу больше и меньше, что позволяет переопределить соответствующие операции в рамках класса, наследующего интерфейс IComparable. • Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью оператора foreach.

Стандартный интерфейс IСomparable. Интерфейс IComparable определен в пространстве имен System и содержит единственный метод Стандартный интерфейс IСomparable. Интерфейс IComparable определен в пространстве имен System и содержит единственный метод Compare. To, возвращающий результат сравнения двух объектов – текущего и переданного ему в качестве параметра: interface IComparable { int Compare. To(object obj); }

Реализация данного метода должна возвращать: • 0 – если текущий объект и параметр равны; Реализация данного метода должна возвращать: • 0 – если текущий объект и параметр равны; • отрицательное число, если текущий объект меньше параметра; • положительное число, если текущий объект больше параметра.

В качестве примера рассмотрим реализацию классом Demo. Point стандартного интерфейса IComparable. // класс Demo. В качестве примера рассмотрим реализацию классом Demo. Point стандартного интерфейса IComparable. // класс Demo. Point реализует стандартный //интерфейс IComparable class Demo. Point: IComparable {…}

 • Используя собственную реализацию метода Compare. To можно перегрузить операции отношения. • Напомним, • Используя собственную реализацию метода Compare. To можно перегрузить операции отношения. • Напомним, что операции отношения должны перегружаться парами: < и >, <= и >=, == и !=. • В следующем примере для класса Demo. Point перегрузим операции == и != таким образом, чтобы при сравнении двух объектов возвращалось значение true, если точки находятся на равном удалении от начала координат, в противном случае – false.

Наследование интерфейсов • Один интерфейс может унаследовать Наследование интерфейсов • Один интерфейс может унаследовать "богатство" другого. Синтаксис этого механизма аналогичен синтаксису, используемому для наследования классов. • Если класс реализует интерфейс, который наследует другой интерфейс, этот класс должен обеспечить способы реализации для всех членов, определенных внутри цепочки наследования интерфейсов. • Рассмотрим такой пример:

// Один интерфейс может наследовать другой. using System; public interface A { void meth // Один интерфейс может наследовать другой. using System; public interface A { void meth 1 () ; void meth 2(); } // Интерфейс В теперь включает методы meth 1() //и meth 2(), а также добавляет метод meth 3().

public interface В : A { void meth 3(); // Этот класс должен реализовать public interface В : A { void meth 3(); // Этот класс должен реализовать все методы // интерфейсов А и В. class My. Class : В { public void meth 1() { Console. Write. Line ("Реализация метода meth 1(). ”); } public void meth 2() { Console. Write. Line("Реализация метода meth 2(). "); } public void meth 3() { Console. Write. Line("Реализация метода meth 3(). "); }

class IFExtend { public static void Main() { My. Class ob = new My. class IFExtend { public static void Main() { My. Class ob = new My. Class(); ob. meth 1(); ob. meth 2(); ob. meth 3(); } }

 • Если бы в качестве эксперимента вы попытались удалить метод meth 1 (), • Если бы в качестве эксперимента вы попытались удалить метод meth 1 (), реализованный в классе My. Class, то сразу же получили бы от компилятора сообщение об ошибке. • Как упоминалось выше, любой класс, который реализует интерфейс, должен реализовать все методы, определенные этим интерфейсом, включая методы, которые унаследованы от других интерфейсов.

Выбор между интерфейсом и абстрактным классом • В программировании на С# при необходимости описать Выбор между интерфейсом и абстрактным классом • В программировании на С# при необходимости описать функции, а не способ их реализации, важно знать, когда следует использовать интерфейс, а когда — абстрактный класс. • Общее правило таково. Если вы полностью описываете действия класса и не нужно уточнять, как он это делает, следует использовать интерфейс. • Если же требуется включить в описание детали реализации, имеет смысл представить концепцию программы (или ее части) в виде абстрактного класса.

Коллекции • В С# под коллекцией понимается некоторая группа объектов. Коллекции упрощают реализацию многих Коллекции • В С# под коллекцией понимается некоторая группа объектов. Коллекции упрощают реализацию многих задач программирования, предлагая уже готовые решения для построения структур данных. • Все коллекции разработаны на основе четко определенных интерфейсов, поэтому стандартизируют способ обработки группы объектов. • Среда. NET Framework поддерживает три основных типа коллекций: общего назначения, специализированные и ориентированные на побитовую организацию данных.

 • Коллекции общего назначения определены в пространстве имен System. Collection и реализуют такие • Коллекции общего назначения определены в пространстве имен System. Collection и реализуют такие структуры данных, как стеки, очереди, динамические массивы, словари (хеш-таблицы, предназначенные для хранения пар ключ/значение), отсортированный список для хранения пар ключ/значение. Коллекции общего назначения работают с данными типа object, поэтому их можно использовать для хранения данных любого типа.

 • Коллекции специального назначения определены в пространстве имен System. Collection. Specialized и ориентированы • Коллекции специального назначения определены в пространстве имен System. Collection. Specialized и ориентированы на обработку данных конкретного типа или на обработку данных уникальным способом. • Например, существуют специализированные коллекции, предназначенные только для обработки строк.

 • В пространстве имен System. Collection определена единственная коллекция, ориентированная на побитовую организацию • В пространстве имен System. Collection определена единственная коллекция, ориентированная на побитовую организацию данных, которая служит для хранения групп битов и поддерживает такой набор операций, который не характерен для коллекций других типов. • Коллекция Bit. Array

Коллекции общего назначения Класс Описание Stack Hashtable Стек – частный случай однонаправленного списка, действующий Коллекции общего назначения Класс Описание Stack Hashtable Стек – частный случай однонаправленного списка, действующий по принципу: последним пришел – первым вышел Очередь – частный случай однонаправленного списка, действующего по принципу: первым пришел – первым вышел Динамический массив, т. е. массив который при необходимости может увеличивать свой размер Хеш-таблица для пар ключ/значение Sorted. List Отсортированный список пар ключ/значение Queue Array. List

Стек В С# реализацию АТД стек представляет класс Stack, который реализует интерфейсы ICollection, IEnumerable Стек В С# реализацию АТД стек представляет класс Stack, который реализует интерфейсы ICollection, IEnumerable и ICloneable. Stack – это динамическая коллекция, размер которой изменяется. В классе Stack определены следующие конструкторы: public Stack(); //создает пустой стек, начальная //вместимость которого равна 10 public Stack(int capacity); // создает пустой стек, //начальная вместимость которого равна capacity public Stack(ICollection c); //создает стек, который //содержит элементы коллекции, заданной параметром с Кроме методов, определенных в интерфейсах, реализуемых классом Stack, в этом классе определены собственные методы:

Метод Описание public virtual bool Возвращает значение true, если объект v Contains(object v) содержится Метод Описание public virtual bool Возвращает значение true, если объект v Contains(object v) содержится в вызывающем стеке, в противном случае возвращает значение false. public virtual void Устанавливает свойство Сount равным нулю, Clear() тем самым очищая стек. public virtual object Возвращает элемент, расположенный в Peek() вершине стека, но не извлекая его из стека public virtual object Возвращает элемент, расположенный в Pop() вершине стека, и извлекает его из стека public virtual void Помещает объект v в стек Push(object v) public virtual Возвращает массив, который содержит копии object[] To. Array() элементов вызывающего стека

Класс Queue В С# реализацию АТД очередь представляет класс Queue, который также как и Класс Queue В С# реализацию АТД очередь представляет класс Queue, который также как и стек реализует интерфейсы ICollection, IEnumerable и ICloneable. Queue – это динамическая коллекция, размер которой изменяется. При необходимости увеличение вместимости очереди происходит с коэффициентом роста по умолчанию равным 2. 0. В классе Queue определены следующие конструкторы: public Queue(); //создает пустую очередь, начальная вместимость которой равна 32 public Queue (int capacity); // создает пустую очередь, начальная вместимость которой равна capacity public Queue (int capacity, float n); //создает пустую очередь, начальная вместимость которой равна capacity, и коэффициент роста устанавливается параметром n public Queue (ICollection c); //создает очередь, которая содержит элементы коллекции, заданной параметром с, и аналогичной вместимостью

Метод public virtual bool Contains (object v) Описание Возвращает значение true, если объект v Метод public virtual bool Contains (object v) Описание Возвращает значение true, если объект v содержится в вызывающей очереди, в противном случае возвращает значение false public virtual void Устанавливает свойство Count равным нулю, clear () тем самым очищая очередь public virtual object Возвращает объект из начала вызывающей Dequeue () очереди, удаляя его из очереди public virtual object Возвращает объект из начала вызывающей Peek () очереди, не удаляя его из очереди public virtual void Добавляет объект v в конец очереди Enqueue(object v) public virtual object Возвращает массив, который содержит копии [ ] To. Arrау () элементов из вызывающей очереди public virtual void Устанавливает свойство Capacity равным Trim. To. Size. O значению свойства Count

Класс Array. List • В С# стандартные массивы имеют фиксированную длину, которая не может Класс Array. List • В С# стандартные массивы имеют фиксированную длину, которая не может измениться во время выполнения программы. • Класс Array. List предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться. • Объект класса Array. List представляет собой массив переменной длины, элементами которого являются объектные ссылки. Любой объект класса Array. List создается с некоторым начальным размером. При превышении этого размера коллекция автоматически удваивается. В случае удаления объектов массив можно сократить. • Класс Array. List реализует интерфейсы ICollection, IList, IEnumerable и ICloneable. В классе Array. List определены следующие конструкторы:

Конструкторы Array. List • public Array. List() //создает пустой массив с максимальной емкостью равной Конструкторы Array. List • public Array. List() //создает пустой массив с максимальной емкостью равной 16 элементам, при текущей размерности 0 public Array. List(int capacity) //создает массив с заданной емкостью capacity, при текущей размерности 0 • public Array. List(ICollection с) //строит массив, который инициализируется элементами коллекции с

Класс Hashtable • Класс Hashtable предназначен для создания коллекции, в которой для хранения объектов Класс Hashtable • Класс Hashtable предназначен для создания коллекции, в которой для хранения объектов используется хеш-таблица. В хеш-таблице для хранения информации используется механизм, именуемый хешированием (hashing). • Суть хеширования состоит в том, что для определения уникального значения, которое называется хеш-кодом, используется информационное содержимое соответствующего ему ключа. • Хеш-код затем используется в качестве индекса, по которому в таблице отыскиваются данные, соответствующие этому ключу. Преобразование ключа в хеш-код выполняется автоматически, т. е. сам хеш-код вы даже не увидите. • Но преимущество хеширования — в том, что оно позволяет сокращать время выполнения таких операций, как поиск, считывание и запись данных, даже для больших объемов

Класс Hashtable • Класс Hashtable реализует стандартные интерфейсы IDictionary, ICollection, IEnumerable, ISerializable, IDeserialization. Callback Класс Hashtable • Класс Hashtable реализует стандартные интерфейсы IDictionary, ICollection, IEnumerable, ISerializable, IDeserialization. Callback и ICloneable. • Размер хеш-таблицы может динамически изменяться. Размер таблицы увеличивается тогда, когда количество элементов превышает значение, равное произведению вместимости таблицы и ее коэффициента заполнения, который может принимать значение на интервале от 0, 1 до 1, 0. По умолчанию установлен коэффициент равный 1, 0.

В классе Hashtable определено несколько конструкторов public Hashtable() //создает пустую хеш-таблицу public Hashtable(IDictionary с) В классе Hashtable определено несколько конструкторов public Hashtable() //создает пустую хеш-таблицу public Hashtable(IDictionary с) // строит хеш-таблиц, которая инициализируется элементами коллекции с public Hashtable(int capacity) //создает хештаблицу с вместимостью capacity public Hashtable(int capacity, float n) //создает хеш-таблицу вместимостью capacity и коэффициентом заполнения n

Собственные методы класса Hashtable: Метод public virtual bool Contains. Key (object k) Описание Возвращает Собственные методы класса Hashtable: Метод public virtual bool Contains. Key (object k) Описание Возвращает значение true , если в вызывающей хеш-таблице содержится ключ, заданный параметром к. В противном случае возвращает значение false public virtual Возвращает значение true, если в вызывающей bool хеш-таблице содержится значение, заданное Contains. Value параметром v. В противном случае возвращает (object v) значение false public virtual Возвращает для вызывающей хеш-таблицы IDictionary. Enum нумератор типа IDictionary. Enumerator Get. Enumerator()

В классе Hashtable, помимо свойств, определенных в реализованных им интерфейсах, определены два собственных public-свойства: В классе Hashtable, помимо свойств, определенных в реализованных им интерфейсах, определены два собственных public-свойства: public virtual ICollection Keys { get; } //позволяет получить коллекцию ключей public virtual ICollection Values { get; } //позволяет получить коллекцию значений Для добавления элемента в хеш-таблицу необходимо вызвать метод Add(), который принимает два отдельных аргумента: ключ и значение. Важно отметить, что хеш-таблица не гарантирует сохранения порядка элементов, т. к хеширование обычно не применяется к отсортированным таблицам.