Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 204


D'вегр(1) = 11.

Абстракция от длины вектора (окончание). Теперь совершенно ясно, как объявить процедуру "минус", применимую к любому массиву типа вектор_любой_длины.

procedure минус (X : in out вектор_любой_длины) is

begin

  for j in (X'нигр(1)..X'вегр(1)) loop

    X(j) := -X(j) ;

  end loop ;

     end минус ;

[Для одномерных массивов вместо нигр(k) и вегр(k) можно писать короче - нигр и вегр, так что заголовок цикла может выглядеть красивей

   for j in (X'нигр..X'вегр) loop                ].

 

Итак, мы полностью справились с нашей второй абстракцией. При этом воспользовались принципом целостности, чтобы обеспечить реальность абстракции. Со стороны данных для этого понадобилось ввести неограниченные типы и ограничения-подтипы, а со стороны операций - атрибутные функции (опять потребовалось согласовывать абстракции!). В ближайших разделах поговорим об этих понятиях подробнее.

Замечание. Сочетание относительно "свободных" типов с постепенным ограничением изменчивости вплоть до полной фиксации значений объектов (когда они становятся константами) широко применяется при прогнозировании-контроле поведения объектов в Аде. В качестве одного из самых общих ограничений изменчивости можно указать также на требование ко всем компонентам регулярного типа иметь один и тот же подтип. Оно позволяет выделять для них одинаковый объем памяти и легко обеспечивать доступ к компонентам по индексу.

Конец замечания.

 

4.11.7. Объявление подтипа

Подтип, вводимый в объявлении объекта, является анонимным. Но можно объявлять именованные подтипы. Естественно делать это тогда, когда одни и те же ограничения нужно использовать для объявления многих различных объектов. (Обратите внимание, подтип играет роль, аналогичную той роли, которую играл сам тип в ранних ЯП - ведь подтип затрагивает только совокупность значений объектов, не касаясь применимых к ним операций. Кроме присваивания, как было показано совсем недавно).

Вот несколько примеров именованных подтипов.




- Начало -  - Назад -  - Вперед -