Текущее время: Чт, июн 26 2025, 23:46

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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