что значит TYPE REF TO, => и -> ?

Автор jacknk88, Жовтень 04, 2012, 02:54:26 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

jacknk88

есть отрывок кода:

DATA:   go_alv       TYPE REF TO cl_salv_table

  TRY.
      cl_salv_table=>factory(
         IMPORTING
           r_salv_table = go_alv
         CHANGING
           t_table = gt_all[] ).
    CATCH cx_salv_msg .
      MESSAGE 'Ошибка при создании ALV' TYPE 'E'.
  ENDTRY.

  go_alv->set_screen_status( EXPORTING
                               report = sy-repid
                               pfstatus = 'SALV_STANDARD'
                               set_functions = CL_SALV_MODEL_BASE=>C_FUNCTIONS_ALL ).


1) что значит TYPE REF TO ?
2) что такое go_alv, что в нем содержится, какая структура будет у него?
3) что значит "=>" в cl_salv_table=>factory(... и само выражение?
4) что значит "->" в go_alv->set_screen_status( и само выражение?
         что будет содержаться в go_alv?

заранее Огромное спасибо за разъяснения!

Uukrul

Ну как бы это все таки больше вопросы по правилам ООП (Объектно Ориентированное Программирование), чем по именно абапу, поэтому я возможно буду объяснять не очень понятными словами.
Цитата: jacknk88 від Жовтень 04, 2012, 02:54:26 ПП
1) что значит TYPE REF TO ?
Объявляем переменную, которая будет содержать ссылку на экземпляр объекта, в данном случае объекта cl_salv_table.

Цитата: jacknk88 від Жовтень 04, 2012, 02:54:26 ПП
2) что такое go_alv, что в нем содержится, какая структура будет у него?
Это переменная которая содержит в себе адрес размещения экземпляра объекта cl_salv_table. Сам экземпляр объекта создался при вызове конструктора. Хотя в данном случае конструктор был вызван при использовании метода класса (или как еще говорят классового метода) cl_salv_table=>factory, ну тут просто такая вот реализация, которая не требует предварительного вызова конструктора.

Цитата: jacknk88 від Жовтень 04, 2012, 02:54:26 ПП
3) что значит "=>" в cl_salv_table=>factory(... и само выражение?
4) что значит "->" в go_alv->set_screen_status( и само выражение?
В первом случае => - как уже говорилось вызов метода класса, во втором случае, -> - вызов метода экземпляра объекта. Разница между методами следующая, для вызов метода класса, не нужен созданный экземпляр, поэтому вы указываете имя класса cl_salv_table и далее имя метода. Во втором случае вы создает экземпляр, т.е. конкретную уже ALV-таблицу и далее обращаетесь к свойствам/методам этого экземпляра объекта.

Цитата: jacknk88 від Жовтень 04, 2012, 02:54:26 ПП
         что будет содержаться в go_alv?
Ссылка на конкретный экземпляр объекта ALV-таблицы.

Uukrul

Что такое метод класса и метод экземпляра.. ну например смотрите, как создать объект в общем виде? Да есть переменная которая объявлена как XY TYPE RET TO z_class, но это только ссылка на... на пока что ни на что, так как переменная пустая. Теперь нужно создать экземпляр объекта, но как написать типа create(XY)? Ну в некоторых языках так и делают, но на самом деле что происходит, на само деле у класса z_class, есть метод который можно вызвать именно для класса и который сделает начальное создание объекта, т.е. этот метод не требует наличия конкретного уже созданного экземпляра. У этого метода есть определенные ограничения в работе по доступу к переменным и т.д. но его задача в большинстве случаев типа создать экземпляр объекта в памяти и поместить его адрес в переменную XY. Дальше уже работа будет идти с конкретными данными из памяти, т.е. работа с экземпляром (реализацией) класса z_class.

jacknk88

Uukrul
.спасибо еще раз...Вам либо преподавать надо, либо лучше всего писать книги...help-ы...очень понятно и доступно объясняете

PS: если не секрет - вам сколько лет и какой стаж в ABAP-е?

Uukrul

#4
Цитата: jacknk88 від Жовтень 04, 2012, 03:28:26 ПП
Uukrul
.спасибо еще раз...Вам либо преподавать надо, либо лучше всего писать книги...help-ы...очень понятно и доступно объясняете
Ну это спорный вариант :-) а хелпы.. ну как видите потихоньку пишу  8)


Цитата: jacknk88 від Жовтень 04, 2012, 03:28:26 ПП
PS: если не секрет - вам сколько лет и какой стаж в ABAP-е?
38, а абап.. ну это знания не из абапа, а из объектного паскаля, который позже стал Delphi и т.д. Вообще-то я не специалист по именно ABAP (хотя уже лет 15 кажется с SAP работаю), я все больше как-то вроде думал, что специалист по ММ и все что около него лежит.

PS: Между нами говоря объектный ABAP мне не нравится, ну или я не очень умею его готовить, поэтому и не нравится  :P

jacknk88

#5
после таких объяснений у меня все вопросы отпадают)))....хорошо когда при объяснениизатрагивается и физическая сторона вопроса
Цитатасоздать экземпляр объекта в памяти и поместить его адрес в переменную XY. Дальше уже работа будет идти с конкретными данными из памяти

кстати, для меня Delphi более понятный чем ABAP...ABAP устаревший какой-то....и не понятный язык

Uukrul

Цитата: jacknk88 від Жовтень 04, 2012, 03:37:10 ПП
хорошо когда при объяснениизатрагивается и физическая сторона вопроса
Ну это у меня типа годы программирования на ассемблере сказываются  8)

Цитата: jacknk88 від Жовтень 04, 2012, 03:37:10 ПП
хорошо когда при объяснениизатрагивается и физическая сторона вопроса
кстати, для меня Delphi более понятный чем ABAP...ABAP устаревший какой-то....и не понятный язык
Есть одна статейка у меня по этому поводу, не моя. я только перевод сделаю, она на как раз вот поднятую тему, что такое ABAP и не устарел ли он... может на днях выложу. Мое мнение все таки ABAP это не совсем язык, это "Среда разработки" + "Язык" что накладывает определенные ограничения, возьмите тот же язык программирования 1С например. Вообще по ходу картина такая, что системы которые написали ядро + бизнес логика на внутреннем языке, оказались более тиражируемые, чем системы просто написанные с какими-то настройками.

ysichov

еще курс BC401 можно почитать об ООП на ABAP. Есть много небольших простых примеров.