(*~\Глагол\ПриложенияТесты\ПредмОписПодход\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                                 ОТДЕЛ Пример_ПоП+;
(*============================================================================*)

ИСПОЛЬЗУЕТ 
  НаЭкран ИЗ "..\..\Отделы\Обмен\ВводВывод\";

ВИД
        ДкПредмету = ДОСТУП К нПредмет;
                              нПредмет = НАБОР (* описание предмета = дискриптор [ПредметDisc] *)

                _цел:ЦЕЛ;                            (* свойство/атрибут вида Класса\предмета (поле данных) *)
(*
                Сохр:ЗАДАЧА(п+:нПредмет; ц:ЦЕЛ);     (* свойство              Класса\предмета (поле-задача) *)

                Сохр:ЗАДАЧА (SELF:нПредмет)   Метод (ц:ЦЕЛ); - неверное задание свойства - вида ЗАДАЧА
                Сохр:ЗАДАЧА (SELF:ДкПредмету) Метод2(ц:ЦЕЛ); - неверное задание свойства - вида ЗАДАЧА
           или 
                Сохр:ЗАДАЧА(предмет+ :нПредмет;   ц:ЦЕЛ); (* свойство Предмета (поле-задача) *)

              Метод :ЗАДАЧА(предмет+ :нПредмет;   ц:ЦЕЛ);
              Метод2:ЗАДАЧА(предметД+:ДкПредмету; ц:ЦЕЛ);
*)
                                         КОН; (* нПредмет *)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА             Сохр(предмет+:нПредмет; ц:ЦЕЛ);
УКАЗ
                        предмет._цел:=ц;     

  НаЭкран.Цел4числа("^ Значение поля в наборе\предмете   в задаче   Сохр()  предмет._цел = %2d ",
                                                                            предмет._цел,0,0,0);
КОН Сохр;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА (*(нПредмет)*) Метод(предмет+:нПредмет; ц:ЦЕЛ);
УКАЗ
                        предмет._цел:=ц;     

  НаЭкран.Цел4числа("^ Значение поля в наборе\предмете в Свойстве  Метод()  предмет._цел = %2d ",
                                                                            предмет._цел,0,0,0);
КОН Метод;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА (*(нПредмет)*) Метод2(предметД+:ДкПредмету; ц:ЦЕЛ);
УКАЗ
                         предметД._цел:=ц;     

  НаЭкран.Цел4числа("^ Значение поля в наборе\предмете в Свойстве Метод2() предметД._цел = %2d ^",
                                                                           предметД._цел,0,0,0);
КОН Метод2;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Главная;
ПЕР
  предметД:ДкПредмету;
  предмет :нПредмет;
                               (*-+++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
(*- Проверка работы НАБОРа-класса нПредмет -*)

  НаЭкран.ВсяЦепь("^ Проверка Предметно-Описательного Подхода (ПоП - аналог ООП) с предметами^ (т.е. экземплярами) вида нПредмет в рус.ЯП Глагол.^");
  НаЭкран.ВсяЦепь("^ ООП - это подход с акцентом на классы (class-centered),");
  НаЭкран.ВсяЦепь("^ ПоП - это подход с акцентом на экземпляры вида нПредмет (instance-centred),^ при котором одно и тоже 'свойство предмета' может иметь разные реализации у одного^ экземпляра предмета или отличаться у разных экземпляров одного предмета.^");

  предмет._цел:=9;

  НаЭкран.Цел4числа("^ Значение поля набора\предмета предмет._цел = %2d ^",
                                                     предмет._цел,0,0,0);
(*
       предмет.Сохр(предмет,10); - такой вызов свойства приводит к зависанию ОС
 *)
(*Пример_ПоП.*)Сохр(предмет,10);
(*
       предмет.Метод(предмет,11); - свойство не определено в наборе
 *)
(*Пример_ПоП.*)Метод(предмет,11);

(* --- *)

  СОЗДАТЬ(предметД);

  предметД._цел:=29;

  НаЭкран.Цел4числа("^^ Значение поля набора\предмета предметД._цел = %2d ^",
                                                      предметД._цел,0,0,0);
(*Пример_ПоП.*)Сохр(предметД^,30);
(*
      предметД.Сохр(предметД^,30); - значение доступа "ПУСТО", т.е. в Глаголе,
                                  как и в предметическом Обероне-1 (1988-1990гг.) [в Предметно-описательном Подходе]
                               Свойство набора (или Метод() класса) не вызывается
                                  как в Обероне-2 через точку после переменной вида набор или вида доступ к набору, (т.е. Метод() НЕ связан с ВИДом\классом)
                               а только как параметр источник-приёмник в задаче

     предметД^.Метод2(предметД,32); - значение доступа "ПУСТО"
 *)
(*Пример_ПоП.*)Метод (предметД^,31);
(*Пример_ПоП.*)Метод2(предметД,32);
(*
     предметД^.Метод2(предметД,32); - свойство не определено в наборе
 *)
КОН Главная;

(*+ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+*)
УКАЗ
  Главная
КОН Пример_ПоП.
