Презентация Компонентно-ориентированное программирование Об интерфейсах компонентов: Под
Вид материала | Презентация |
- Программа вступительного экзамена по специальности 05. 13. 18 Математическое моделирование,, 115.33kb.
- Рабочая программа учебной дисциплины (модуля) Объектно-ориентированное программирование, 99.17kb.
- Пояснительная записка к курсовому проекту по дисциплине: «Объектно-ориентированное, 43.57kb.
- Рабочая программа дисциплины «Объектно-ориентированное программирование» для специальности, 325.53kb.
- Учебно-методический комплекс для студентов заочного обучения специальности Прикладная, 63.23kb.
- Е. К. Пугачев Объектно-ориентированное программирование Под общей редакцией Ивановой, 3922.01kb.
- Программа дисциплины Объектно-ориентированное программирование Рекомендуется для направления, 591.42kb.
- Рабочая программа наименование дисциплины Объектно-ориентированное программирование, 207.39kb.
- Объектно-ориентированное программирование, 40.72kb.
- Программа курса «Объектно-ориентированное программирование», 143.86kb.
Презентация 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
*/