Текущее время: Ср, июн 25 2025, 15:39

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по Abap Object
СообщениеДобавлено: Чт, авг 25 2005, 21:44 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
Расскажите пожалуйста что такое Narrowing cast и Widening cast


:?:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 26 2005, 09:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
А где на такое чудо-чудное посмотреть?
:roll:
В первый раз такие термины слышу.

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 26 2005, 12:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 09 2004, 11:38
Сообщения: 127
Пол: Мужской
Хммм... Насколько я понимаю, это возможность рассматривать объект как объект суперкласса (Narrowing cast)
Code:
DATA: pet TYPE REF TO lcl_pet
        , dog TYPE REF TO lcl_dog_pet " где lcl_dog_pet подкласс lcl_pet
        .
...
CREATE OBJECT dog.
...
pet = dog.

*Теперь, используя pet, мы можем обращаться к компонентам dog, *унаследованным от суперкласса lcl_pet и работать как с объектом *класса lcl_pet


или как объект класса-потомока (Widening cast) из своей иерархической ветки (т.е. обратная Narrowing cast'у процедура)...
Code:
DATA: pet TYPE REF TO lcl_pet
        , dog1 TYPE REF TO lcl_dog_pet " где lcl_dog_pet подкласс lcl_pet
        , dog2 TYPE REF TO lcl_dog_pet " аналогично
        .
...
CREATE OBJECT dog1.
...
pet = dog1.
...
dog2 ?= pet.
...
* В dog2 доступны все компоненты dog1


Вроде бы так. :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 26 2005, 12:22 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
В более развёрнутом виде, если позволите:
Code:
*&---------------------------------------------------------------------*
*&       Class LC_PARENT
*&---------------------------------------------------------------------*
CLASS lc_parent DEFINITION.
  PUBLIC SECTION.
    DATA:
      a_class_id TYPE c LENGTH 10
    .
    METHODS:
      constructor.
ENDCLASS.               "LC_PARENT

*&---------------------------------------------------------------------*
*&       Class LC_CHILD
*&---------------------------------------------------------------------*
CLASS lc_child DEFINITION INHERITING FROM lc_parent .
  PUBLIC SECTION.
    METHODS:
      constructor,
      child_method
    .
ENDCLASS.               "LC_CHILD

*&---------------------------------------------------------------------*
*&       Class (Implementation)  lc_parent
*&---------------------------------------------------------------------*
CLASS lc_parent IMPLEMENTATION.
  METHOD constructor.
    a_class_id = 'PARENT'.
  ENDMETHOD.                    "constructor
ENDCLASS.               "lc_parent

*&---------------------------------------------------------------------*
*&       Class (Implementation)  lc_child
*&---------------------------------------------------------------------*
CLASS lc_child IMPLEMENTATION.
  METHOD constructor.
    CALL METHOD super->constructor.
    a_class_id = 'CHILD'.
  ENDMETHOD.                    "constructor

  METHOD child_method.
    WRITE 'CHILD_METHOD'.
  ENDMETHOD.                    "child_method
ENDCLASS.               "lc_child

START-OF-SELECTION.

  DATA:
    glc_parent TYPE REF TO lc_parent,
    glc_child1 TYPE REF TO lc_child,
    glc_child2 TYPE REF TO lc_child
  .
  CREATE OBJECT glc_parent.
  CREATE OBJECT glc_child1.
  CREATE OBJECT glc_child2.

  WRITE glc_parent->a_class_id.
  TRY.
      CALL METHOD glc_parent->('CHILD_MEHTOD').
    CATCH cx_sy_dyn_call_illegal_method.
      MESSAGE 'The Dump!' TYPE 'I' DISPLAY LIKE 'E'.
  ENDTRY.
  NEW-LINE.

*Narrowing cast
  glc_parent = glc_child1.
  WRITE glc_parent->a_class_id.
  CALL METHOD glc_parent->('CHILD_METHOD').
  NEW-LINE.

*Widening cast
  glc_child2 ?= glc_parent.
  WRITE glc_child2->a_class_id.
  CALL METHOD glc_child2->child_method.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 26 2005, 13:40 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
Спасибо!
я так понял что при
Code:
glc_parent := glc_child1.

происходит привидение типов....
glc_parent объект класса родителя приводиться к классу потомка
при этом теряя свои собственные методы!? :idea:

а можно словами объяснить что вот тут
Code:
glc_child2 ?= glc_parent.

происходит ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 26 2005, 14:02 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Ну по большому счёту эти два присвоения одинаковы. Просто в первом случае ссылка gcl_parent указывает на объект типа lc_child неявно и вызов методов класса lc_child возможен только динамический. А в случае присвоения
Code:
glc_child2 ?= glc_parent.

происходит "легализация" методов и атрибутов класса-потомка, и их можно вызывать явно.
По-моему, так.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 01 2005, 09:53 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
При

Code:
glc_child2 ?= glc_parent.


происходит приведение типов объектов во время выполнения программы с возможностью catch system-excption в случае их возникновения и соответсвенно не вываливаться в дамп.

При
Code:
glc_parent := glc_child1.


происходит статическая проверка типов объектов (не во время выполнения), не гарантирующая правильного приведения типов во время выпполнения и соответственно с возможностью вываливания в дамп.

По моему так.

_________________
Волю в кулак, мышцы в узду, работай себе и не ахай!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB