Презентация Компонентно-ориентированное программирование Об интерфейсах компонентов: Под

Вид материалаПрезентация

Содержание


Определение управляемого интерфейса на языках C# и C++/CLI отличается
Класс Component, наследуемый интерфейс IComponent
Наследование класса MarshalByRefObject позволяет любой объект компонента сделать удаляемым объектом
Класс Container, наследуемый интерфейс IContainer
ComponentCollection comList= contA.Components
Подобный материал:
Презентация 2.


Компонентно-ориентированное программирование

Об интерфейсах компонентов:


Под интерфейсом объекта понимается совокупность всех его открытых (public) функций, свойств и событий. Составляющие интерфейс функции, свойства и события используются при применении объекта

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


Определение управляемого интерфейса на языках C# и C++/CLI отличается:


C#

interface имя-интерф [: имя-базов-интерф [, имя-базов-интерф ] … ]

{

объявление функций, свойств и событий

}


C++/CLI

interface class имя-интерф [ : public имя-базов-интерф

[ , public имя-базов-интерф ] … ]

{

объявление функций, свойств и событий

};


// C# 3

using System;

interface Ipe // Интерфейс, объявляющий свойство P и функцию Hallo

{ int P {set; get;} // Объявить свойство

void Hallo ( ); // Объявить функцию

}

class A: Ipe // Класс, наследующий интерфейс Ipe

{ private int x;

public void Hallo ( ) // Реализовать функцию Hallo интерфейса Ipe

{ Console.WriteLine ("ПРИВЕТ");}

public int P // Реализовать свойство P интерфейса Ipe

{set {x= par;} get {return x;} }

}

class Test

{ static void Main ( )

{ A sA= new A ( ); // Создать объект

sA.P= 5; // Установить свойство P

Console.WriteLine ("P= “, sA.P); // Выдать значение свойства P

sA. Hallo ( ); // Приветствовать

}

}


// C++/CLI 4

using System;

interface class Ipe // Интерфейс, объявляющий свойство P и функцию Hallo

{ property int P; // Объявить свойство

void Hallo ( ); // Объявить функцию

}

ref class A: public Ipe // Класс, наследующий интерфейс Ipe

{ private: int x;

public: virtual void Hallo ( ) // Реализовать функцию Hallo

{ Console.WriteLine ("ПРИВЕТ");}

property int P // Реализовать свойство P интерфейса Ipe

{ virtual void set (int par) {x= par;}

virtual int get {return x;} }

}

}

void main ( )

{ A pA= gcnew A ( ); // Создать объект

pA->P= 5; // Установить свойство P

Console::WriteLine ("P= “, pA->P); // Выдать значение свойства P

pA-> Hallo ( ); // Приветствовать

}


Интерфейс IComponent


Интерфейс IComponent является базовым интерфейсом для всех компонентов, определяя их единообразное поведение. Интерфейс IComponent наследует интерфейсы IDisposable, ISite и IServiceProvider.




Класс Component, наследуемый интерфейс IComponent


Класс Component – базовый класс для всех компонентов в среде CLR (Common Language Runtime).



Наследование класса MarshalByRefObject позволяет любой объект компонента сделать удаляемым объектом


Компоненты и контейнер

Интерфейс IContainer


Объект контейнера позволяет создавать сообщество из объектов компонентов, добавляя, удаляя или просматривая их и предоставляя им набор услуг. Функциональность контейнера обеспечивается интерфейсом IContainer





Класс Container, наследуемый интерфейс IContainer


Класс Container контейнера наследует интерфейсы IContainer и IDisposable. Он переопределяет свойство Components и виртуальные функции Add(), Remove() и Dispose() интерфейсов IContainer и IDisposable.





// C#

using System;

using System.Collections;

using System.ComponentModel;

class Compnt: Component // Компонент

{ int numCompnt; // Номер компонента

// Конструктор

public Compnt (int NumCompnt)

{ numCompnt= NumCompnt;}

// Cвойство Number

public int Number

{get {return numCompnt;} } // Возвратить номер

}

class Test

{ static void Main ( )

{ . . . }

}


static void Main ( )

{

Container contA= new Container ( ); // Создать объект контейнера


Compnt comp1= new Compnt (1); // Создать объект компонента

contA.Add (comp1); // Включить первый компонент в контейнер

comp1.Site.Name= "aaa"; // Дать имя первому объекту


Compnt comp2= new Compnt (2); // Создать второй объект

contA.Add (comp2); // Включить второй объект в коллекцию

comp2.Site.Component.Site.Component.Site.Name="bbb";

contA.Remove (comp1); // Удалить первый объект из коллекции


Compnt comp3= new Compnt (3); // Создать третий объект

contA.Add (comp3, "ccc"); // Включить третий объект


// Просмотр объектов компонентов контейнера contA

. . .

}


static void Main ( )

{

// Просмотр объектов компонентов контейнера contA

// Получить коллекцию объектов компонента из объекта контейнера

ComponentCollection comList= contA.Components;


// Получить нумератор

IEnumerator inum= comList.GetEnumerator ( );

// Перебрать коллекцию

while (inum.MoveNext ( ))

{

Compnt cm= (Compnt) inum.Current; // Текущий объект

Console.WriteLine ("Номер: " + cm.Number); Console.WriteLine ("Компонент: " + cm.Site.Component);

Console.WriteLine ("Контейнер: " + cm.Site.Container);

Console.WriteLine ("Имя сайта: " + cm.Site.Name);

}

}


/*

Result:

Номер: 2

Компонент: bbb [Compnt]

Контейнер: System.ComponentModel.Container

Имя сайта: bbb

Номер: 3

Компонент: ccc [Compnt]

Контейнер: System.ComponentModel.Containe

Имя сайта: ccc

*/