Языки программирования - концепции и принципы

Ada with Linked_Set_Package; use Linked_Set_Package;


Ada with Linked_Set_Package; use Linked_Set_Package;

Ada

procedure Main is

       S1.S2, S3: Set;

begin

       S1 := Union(S2, S3);

end Main;

В C++ абстрактный класс создается с помощью объявления чистой виртуаль­ной функции, обозначенной «начальным значением» 0 для функции.



    Абстрактный класс для множеств в языке C++ выглядит следующим обра­зом:

class Set {

C++

public:

      virtual void Union(Set&, Set&) = 0;

      virtual void lntersection(Set&, Set&) = 0;

   };

У абстрактных классов не бывает экземпляров; абстрактный класс может только быть базовым для производных классов:

class Bit_Set: public Set {

public:

     virtual void Union(Set&, Set&);

     virtual void lntersection(Set&, Set&);

C++

private:

      int data[100];

};

class Linked_Set: public Set {

public:

     virtual void Union(Set&, Set&);

     virtual void lntersection(Set&, Set&);

private:

      int data;

      Set *next;

};

Конкретные производные классы можно использовать как любой другой класс: __

void proc()

{

C++

Bit_Setb1,b2, bЗ;

Linked_Set 11,12,l3;

b1.Union(b2,b3);

H.Union(l2,I3);

}

Обратите внимание на разницу в синтаксисе двух языков, которая вызвана разными подходами к ООП. В языке Ada 95 определяется обычная функция, которая получает два множества и возвращает третье. В языке C++ одно из множеств — отличимый получатель сообщения. Для

b1.Union(b2,b3);

 

 

подразумевается, что экземпляр b1, отличимый получатель операции Union,  получит результат операции от двух параметров — Ь2 и bЗ — и использует его, • чтобы заменить текущее значение внутренних данных.

    Возможно, вы предпочтете перегрузить предопределенные операции, например «+» и «*», вместо того чтобы использовать имена Union и Intersection. Это можно сделать как в C++, так и в Ada 95.

     Все реализации абстрактного класса покрываются типом класса (CW-типом) Set'Class.

Содержание раздела