ABAP101 de casa nova!

Senhores, o ABAP101 está de casa nova:

http://abap101.com

Todos os posts e comentários foram migrados para a casa nova! Apareçam! Mi casa, su casa!

Abraços!

Material Inicial Sobre Orientação a Objetos

Aprender Orientação a Objeto (OO) é mudar a sua forma de resolver problemas. OO não substitui a programação procedural, mas fornece um ferramental poderoso para comunicar e solucionar problemas complexos.

Não quero aqui explicar extensivamente OO, mas apresentar alguns materiais que pesquisei na internet e que julgo ser apropriados como introdução ao assunto.

Sugiro o capítulo 1 do livro Think in Java ele dá uma boa base sobre OO. Esse livro é um clássico no mundo Java, pricipalmente por ser distribuido gratuitamente em PDF.

O Wikipedia também pode ser uma boa fonte.

Você vai ver que tem várias fontes na internet e muito livros sobre o assunto. Para aprender OO eu li muito e principalmente treinei. A chave de OO é usar, usar e usar. Não tem mágica.

Nesse estudo inicial, atente para os conceitos de classe, instância, atributos, métodos e mensagens. Dependendo da sua experiência com programação, herança pode ser aprendida sem muito esforço. Já polimorfismo é mais complicado e demanda um pouco mais de esforço para entender.

Não há uma explicação final para os conceitos de orientação a objeto. Você terá que estudar várias fontes para chegar as duas próprias conclusões.

Você tem medo de ensinar?

Trabalho com projetos SAP, especificamente ABAP, há cerca de 7 anos. Uma prática muito comum é a figura do “sombra”. O sombra é aquele consultor júnior (geramente no seu primeiro projeto), que é alocado a um projeto, sem cobrar as suas horas do cliente.

Com isso, a sua consultoria consegue treinar um novo consultor em situações reais da rotina de um projeto.Isso pode ser ótimo para o sombra, pois esse treinamento on-the-job é uma maneira de dar a ele alguma experiência sem a responsabilidade de um consultor cobrado do cliente.

No entanto, para o consultor experiênte, isso representa um aumento de trabalho, pois além do trabalho normal como consultor, ele precisa explicar tudo ao sombra.

Eu nunca tive um sombra para ajudar, mas já coordenei uma equipe de umas 10 pessoas totalmente inexperiêntes, onde tive de ensinar muitos macetes para que as coisas andassem no prazo determinado.

Nessa semana, conversando com um consultor que trabalha comigo, ele revelou-me que já criou a maior confusão em um projeto por negar-se a ensiar um outro consultor menos experiênte. De acordo com ele, não havia sido contratado para ensinar. O seu outro argumento foi que ele não queria que o mercado SAP crescesse muito e que ele tinha medo que o seu salário diminuisse devido ao aumento do número de consultores.

Vi comentário semelhante a esse no dieblinkenlights.com. De acordo com o autor, falando sobre a linguagem de programação Phyton, disse:

Eu a considero uma vantagem competitiva e se você, meu leitor, não souber do que se trata, melhor para mim.

Nesse projeto onde eu fui o coordenador, tive a satisfação de acompanhar o desenvolvimento profissional de alguns deles. Hoje, ainda converso com eles pelo MSN e fico orgulhoso quando leio “fulano @ USA” no nickname, indicando que está em algum projeto internacional.

Por que esse medo de ensinar? Então quer dizer que se eu ensinar outras pessoas, corro risco de “saturar” o mercado de profissionais e diminuir a minha “empregabilidade”?

Esse medo expressa uma mentalidade limitada. Aprendi que o meu sucesso não depende de uma ferramenta, linguagem ou plataforma. Essas vão e vêm a todo momento. O que relamente conta é qual é o seu comportamento profissional, ou seja, vontade de aprender coisas novas e procurar novos conhecimentos para se manter sempre a frente.

Eu realmente adoro ensinar e sou totalmente seguro da minha empregabilidade, pois ela não depende 100% da ferramenta ou linguagem de programação que uso. Tanto que hoje, além do meu trabalho como coordenador de desenvolvimento, sou intrutor ABAP. A vontade de ensinar, abriu-me novas portas além da consultoria.

Cuidado se você pensa como meu amigo, provavelmente logo será ultrapassado por esse consultor júnior que está do seu lado, afinal de contas, para o meu amigo, a sua única preocupação é:

… se meus concorrentes lerem e aprendam alguma coisa.

(Texto originalmente publicado no Papel no Vaso.)

Quando Usar Type, Like e Begin Of?

A principal tarefa de qualquer programa, independente da linguagem, é trabalhar com dados. Cada linguagem possui as suas formas de criar e manipulá-los. ABAP utiliza tipos como base para criação dos dados que o programa manipulará.

Para criar algum objeto de dado no ABAP, você utiliza o comando DATA:

DATA v_texto(20) TYPE c VALUE ‘Objeto de Dados’.

Nessa declaração, é criado um objeto de dado (uma variável) v_texto, de comprimento 20 caracteres, com valor inicial “Objeto de Dados”.

Da mesma maneira para criar variáveis para operações matemáticas. Nesse caso, criamos variáveis do tipo numéricas, como no exemplo da listagem 1. A saída desse programa será:

Além dos tipos fundamentais da linguagem ABAP (veja mais na discussão desse post), podemos criar qualquer tipo de estrutura de dados, como por exemplo, workareas (área de trabalho) e internal tables (tabelas internas).

Veja a listagem 2. Esse programa irá calcular a diferença entre os campos SFLIGHT-SEATSMAX e SFLIGHT-SEATSOCC, de todo as linhas da tabela SFLIGHT. Como solução, criamos uma tabela interna que contenha as chaves da tabela SFLIGHT e também um o campo DIFF, quem contém a diferênça. Depois de todas as diferênças calculadas, imprimimos o resultado na saída do programa:

Na listagem 2, temos o uso da intrução TYPES, que é usada para criar tipos locais. Esses tipos somente podem ser utilizados no program no qual ele foi declarado, nesse caso ZTYPE1.

Como tipos locais, temos ty_s_sflight_dif, descreve uma estrutura de dados e ty_t_sflight_dif uma tabela interna com a estrutura de ty_s_sflight_dif. Para declararmos um tipo estruturado local, usando BEGIN OF / END OF.

Já os tipos globais podem ser provenientes do dicionário de dados do SAP. No programa ZTYPE1, usamos alguns tipos globais, como a tabela SFLIGH e alguns de seus campos, como sflight-carrid, sflight-connid etc. Os tipos globais podem ser usados (DATA… TYPE….) em qualquer programa o sistema, não há necessidade de nenhuma declaração no programa.

Quando usamos o TYPE com uma tabela transparente (tabela de banco de dados), o objeto de dado declarado será uma workarea, com a estrutura da tabela transparente. Por outro lado, quando usamos TYPE TABLE OF, estamos declarando uma tabela interna, com estrutura da tabela transparente.

Veja essa parte do programa ZTYPE1.

DATA: w_sflight TYPE sflight,mas
t_sflight TYPE TABLE OF sflight,

Temos uma workarea w_sflight e uma internal table t_sflight, com estrutura da tabela transparente SFLIGHT.

Por último, temos a seguinte declaração de variável:

DATA: v_diff LIKE w_sflight_dif-diff.

O LIKE indica que o objeto de dado declarado possui o mesmo tipo de outro objeto de dado já declarado, podendo este ser local ou global.

No caso acima, a variável v_diff, possui o mesmo tipo do campo da workarea w_sflight_dif-diff, ou seja, sflight-seatsmax.

Agora já sabemos quando usar TYPE, LIKE e BEGIN OF.

Modelo de Dados do SAP Flight Model

O SAP Flight Model é o modelo de dados usado em um sistema muito simplificado de controle de reservas de vôos.

Esse modelo é utilizado em quase todos os exercícios e demonstrações do treinamento ABAP Workbench. Ele está disponível em todas as implementações e por isso é também usado em todos os exemplos do ABAP 101, salvo algum caso específico onde será necessário o uso de outras tabelas que não as do SAP Flight Model (SFM).

O SFM é composto por 4 tabelas transparentes, SCARR, SPFLI, SFLIGHT e SBOOK, com o seguinte relacionamento:

sap_flight-model.jpg

SCARR – Contém as informações das companhias aéreas, como código, nome etc.

SPFLI – Contém as rotas ou conecções oferecidas pelas companhias aéreas da tabela SCARR.

SFLIGHT – Contém os vôos que servem as rotas ou conecções da tabela SPFLI.

SBOOK – Contém as reservas para os vôos disponíveis na tabela SFLIGHT.

Nas várias versões de Application Server (WAS), incluindo minisap e Linux testdriver, essas tabelas já vem preenchidas com alguns dados, facilitando os exercícios.

Criando um Programa Calculadora – Versão Report

Problema

Criar um programa ABAP que receba dois valores digitados pelo usuário e execute as quatro operações (adição, subtração, divisão e multiplicação) entre os dois valores.

Continuar lendo

Criando Uma Transação de Report

Problema

Criar uma transação e associar o programa ZHELLO.

Continuar lendo