Objetos – Collection – MAP – Abap

Publicado: 6 de março de 2014 em Abap

Podemos ver muitos posts por ai dizendo que Abap não possui Arrays em vez disto possui Internal Tables e que são melhores que Arrays pela sua facilidade de manipulação.

Bem isto não é de inteira verdade, o Abap possui sim Arrays, como vimos em nosso post anterior, criamos uma Lista de Arrays contendo objetos usando a classe de coleção standart (CL_OBJECT_COLLECTION) e vamos usar agora outra forma de array para guardar objetos, mas desta vez teremos um pouco mais de controle sobre eles.

Map é um objeto que mapeia chaves e valores. Um mapa não pode conter chaves duplicadas, cada chave pode mapear , no máximo, um valor. Em algumas linguagens de programação um MAP chama-se Dictionary.

A interface Map fornece três visualizações de coleta, que permitem que o conteúdo de um mapa seja visto como um conjunto de chaves, cobrança de valores, ou um conjunto de mapeamentos chave-valor. A ordem de um mapa é definida como a ordem em que os iteradores em exibições de coleta do mapa devolver os seus elementos.

Em ABAP um MAP pertence a classe: CL_OBJECT_MAP

Exemplo: Neste exemplo criamos um simples programa que guarda objetos dentro de um objeto MAP e usa sua chave para remover um objeto do mapa, para dar ênfase nos mapas usamos um estilo de programação hibrida.

Abap

*&---------------------------------------------------------------------*
*& Report  ZCOLLECTION
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Collection - MAP
*&---------------------------------------------------------------------*

REPORT  ZCOLLECTION.

* Classe MAPA

CLASS MAPA DEFINITION.

PUBLIC SECTION.

     DATA CHAVE TYPE STRING.
     DATA VALOR TYPE STRING.

METHODS: CONSTRUCTOR  IMPORTING  CHAVE TYPE STRING OPTIONAL
                                 VALOR TYPE STRING OPTIONAL.

ENDCLASS.

CLASS MAPA IMPLEMENTATION.

  METHOD constructor.
    me->CHAVE = CHAVE.
    me->VALOR = VALOR.
  ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

* Declara e instancia objeto MAP

DATA MAP TYPE REF TO CL_OBJECT_MAP.
CREATE OBJECT MAP.

* cria Objeto MAPA

DATA MAPA TYPE REF TO MAPA.

* Adiciona CHAVE e VALOR no MAP

WRITE : / 'Lista de musicas do Beatles'.

PERFORM ADD USING '01' 'Let it be'.
PERFORM ADD USING '02' 'Dont let me down'.
PERFORM ADD USING '03' 'Come togheter'.
PERFORM ADD USING '04' 'Hey Jude'.
PERFORM ADD USING '05' 'Twist and shout'.

* Declara Iterador

DATA ITERADOR TYPE REF TO CL_OBJECT_COLLECTION_ITERATOR.
ITERADOR ?= MAP->GET_VALUES_ITERATOR( ).

PERFORM MOSTRAMAPA.

WRITE : / , / .
WRITE : / 'Remove musica 04 da lista'.
MAP->REMOVE( '04' ).

* Lembre-se que com o  Iterador podemos fazer
* uma alusão ao result de um banco de dados

ITERADOR ?= MAP->GET_VALUES_ITERATOR( ).

PERFORM MOSTRAMAPA.

* Retorna conteudo do mapa usando o Iterador

FORM MOSTRAMAPA.

  WHILE  ITERADOR->HAS_NEXT( ) IS NOT INITIAL.
    MAPA ?= ITERADOR->GET_NEXT( ).
    WRITE : / 'Chave:', MAPA->CHAVE,'Valor:', MAPA->VALOR.
  ENDWHILE.

ENDFORM.

* Adiciona objeto no objeto MAP

FORM ADD USING VALUE(C) TYPE STRING
   VALUE(V) TYPE STRING.

   CREATE OBJECT MAPA
       exporting
            CHAVE = C
            VALOR = V.

   MAP->PUT( exporting KEY  = MAPA->CHAVE  VALUE = MAPA ).

ENDFORM.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s