SlideShare uma empresa Scribd logo
1 de 28
Melhores práticas em desenvolvimento de classes de negócio em ABAP orientado a objetos Leonardo De Araujo
Agenda O que são classes de negócio? Por que precisamos delas?  Regras de desenvolvimento Exemplos Como utilizá-las Scopo Próximos passos
O que são classes de negócio? Global Classes ABAP OO que representam objectos de negócio (ex: Ordem de compra, Ordem de venda, Forneciments, Materiais, etc); Na maior parte baseado em objetos standard SAP, mas não restrito apenas a eles (voce pode criar a duas proprias classes !);
Por que precisamos de classes de negócio? Reduzir TCO atravez da implementação e use de padrões de desenvolvimento, reutilização, código e supporte;  Melhor representação de programas SAP; Implementação de ABAP OO; Suporte e promoção de MVC. Business classes = Model;
Por que precisamos de classes de negócio? (cont.) (Razões pelas quais OO promove reutilização de código) Abstração do codigo simplifica a comunicação entre times funcionais e tecnicos; Reutilização garante que a mesma regra de negócio nao e’ programada em varios differentes lugares, o que complica a manutenção e potencialmente ocasiona discrepancia nos resultados; Encapsulamento torna o programa mais robusto;
Por que precisamos de classes de negócio? (cont.) Tecnica Procedural(?) Necessidade (Business) Objetos de desenvolvimento Programas Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) Tabelas (?) Tables Telas (?) Screens Comocriar a especificaçãotecnica? Por onde comecar?
Por que precisamos de classes de negócio? (cont.) TecnicaOrientada a Objetos Business Requirement Objetos de desenvolvimento Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) CLASS ZCL_PURCHASE_ORDER MétodoRELEASE MétodoCREATE_DELIVERY
Regras de desenvolvimento Regra para os nomes / Naming convention; Instanciação (?) / Instantiation; Utilização de Buffers – Performance / Buffering - performance optimization;  Inheritance (?); Classes Utilitárias; Utilização de Classes de exceção; Classes MODEL (MVC) / Model Class; Hierarquia de pacotes / Package Hierarchy;
Regra para os nomes - Geral Use inglês Use “glossary terms” (não MARA) No case de nomes compostos, use separador “_”
Regra para os nomes / Naming convention - Atributos Atributo KEY (Chave) – Instance Público (ONLY!); ex: Number(vbeln) Atributo HEADER (if applicable) – Instance Private; ex: VBAK Atributo ITEMS (if applicable) – Instance Private; ex: table of VBAP Outras opcoes(SCHEDULE LINES, PARTNERS, etc…) Sem prefixos (ex: GS_HEADER) Constantes ; use prefixo CO_
Regra para os nomes / Naming convention - Métodos Momes de Métodos devem comecar por um verbo (ingles); Métodos que retornam um boolean devem comecar por IS_ Métodos Handler de eventos devem comecar por ON_ Métodos que verificam ou validam um “estado” devem comecar por CHECK_ Nomes de Eventos devem ter a forma substantivo_participativoe (ex: ordem_criada) Parametros de Métodos recomendados IM_ for IMporting parameters EX_ for EXporting parameters CH_ for CHanging parameters RE_ for REturning parameters
Regra para os nomes / Naming convention - Métodos Público Método READ – Static Public; Método DISPLAY – Instance Public; Método GET_<<attrib>> – Instance public; Lifecycle Métodos CRUD (Create, Read, Update* and Delete*) Protegido/ Privado Método READ_<<attrib>> – Instance Private; Método CONSTRUCTOR – Instance Private;
Instanciação Instantiation as Private or Protected. NOT PUBLIC; Ofereca Métodos para instanciar sua classe de negócio: Search Read / Factory Exemplo: PARAMETERS pa_vbeln TYPE vbeln_vl OBLIGATORY. DATA lo_delivery TYPE REF TO zcl_outbound_delivery. lo_delivery = zcl_outbound_delivery=>read( pa_vbeln ).
Utilização de Buffers – Otimização de Performance Usando o Método READ, performance pode ser ameliorada atravez do use de buffers; Atributo BUFFERED_OBJECTS (Public Static) do type tabela com a seguinte estrutura: KEY    type <<TYPE do atributo KEY>> DATA type ref to <<CLASSE>> Método READ checa existencia no Buffer ANTES da instanciação; Método READ atualiza o Buffer DEPOIS da method updates buffer DEPOIS da instanciação;
Utilização de Buffers – Otimização de Performance (cont.) Method READ. Data: wa_buffered_obj     type <<< >>>.   Read table BUFFERED_OBJECTS with key KEY = INPUT                               into wa_buffered_obj <<binary search>>.   If sy-subrc eq 0.     Return = wa_buffered_obj-data.   Else.   Create object Return     exporting         key   = INPUT.     wa_buffered_obj-key = Return-key.     wa_buffered_obj-data = Return.     Apppend wa_buffered_obj to buffered_obj.   Endif. Endmethod READ. ** PS. FREE_ALL( )  ou parametro opcional bypass_buffer
Inheritance (?) ZCL_MMDOCUMENT Atributos: ,[object Object]
HEADER (EKKO)
ITEMS (EKPO)Métodos: ,[object Object]
READ
FLAG_FOR_DELETIONZCL_PURCHASEORDER ZCL_STO Atributos: ,[object Object]
HEADER (EKKO)
ITEMS (EKPO)
INBOUND DELIVERIESAtributos: ,[object Object]
HEADER (EKKO)
ITEMS (EKPO)
OUTBOUND DELIVERIESMétodos: ,[object Object]
READ
FLAG_FOR_DELETION

Mais conteúdo relacionado

Mais procurados

Java Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãOJava Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãO
danielfc
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
Luis Ferreira
 

Mais procurados (20)

Java Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãOJava Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãO
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
Slides
SlidesSlides
Slides
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Palestra
PalestraPalestra
Palestra
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
 
Php05
Php05Php05
Php05
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Programação Dinâmica para Web - Aula 2
Programação Dinâmica para Web - Aula 2Programação Dinâmica para Web - Aula 2
Programação Dinâmica para Web - Aula 2
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objeto
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 

Destaque

Sap Inside Track Sao Paulo 2010 - SAP Business Objects
Sap Inside Track Sao Paulo 2010 - SAP Business ObjectsSap Inside Track Sao Paulo 2010 - SAP Business Objects
Sap Inside Track Sao Paulo 2010 - SAP Business Objects
Marcelo Ramos
 
Sap Inside Track Sao Paulo 2010 - keynote
Sap Inside Track Sao Paulo 2010 - keynote Sap Inside Track Sao Paulo 2010 - keynote
Sap Inside Track Sao Paulo 2010 - keynote
Marcelo Ramos
 
SAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 KeynoteSAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 Keynote
Marcelo Ramos
 
SAP Inside Track Sao Paulo 09 Enterprise Architecture
SAP Inside Track Sao Paulo 09 Enterprise ArchitectureSAP Inside Track Sao Paulo 09 Enterprise Architecture
SAP Inside Track Sao Paulo 09 Enterprise Architecture
Marcelo Ramos
 
SAP Inside Track Sao Paulo 09 - Output Message
SAP Inside Track Sao Paulo 09 - Output MessageSAP Inside Track Sao Paulo 09 - Output Message
SAP Inside Track Sao Paulo 09 - Output Message
Marcelo Ramos
 
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
SAP Inside Track Sao Paulo '09 - ABAP Objects OverviewSAP Inside Track Sao Paulo '09 - ABAP Objects Overview
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
Marcelo Ramos
 

Destaque (7)

Sap Inside Track Sao Paulo 2010 - SAP Business Objects
Sap Inside Track Sao Paulo 2010 - SAP Business ObjectsSap Inside Track Sao Paulo 2010 - SAP Business Objects
Sap Inside Track Sao Paulo 2010 - SAP Business Objects
 
Sap Inside Track Sao Paulo 2010 - keynote
Sap Inside Track Sao Paulo 2010 - keynote Sap Inside Track Sao Paulo 2010 - keynote
Sap Inside Track Sao Paulo 2010 - keynote
 
SAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 KeynoteSAP Inside Track Sao Paulo '09 Keynote
SAP Inside Track Sao Paulo '09 Keynote
 
SAP Inside Track Sao Paulo 09 Enterprise Architecture
SAP Inside Track Sao Paulo 09 Enterprise ArchitectureSAP Inside Track Sao Paulo 09 Enterprise Architecture
SAP Inside Track Sao Paulo 09 Enterprise Architecture
 
SAP Inside Track Sao Paulo 09 - Output Message
SAP Inside Track Sao Paulo 09 - Output MessageSAP Inside Track Sao Paulo 09 - Output Message
SAP Inside Track Sao Paulo 09 - Output Message
 
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
SAP Inside Track Sao Paulo '09 - ABAP Objects OverviewSAP Inside Track Sao Paulo '09 - ABAP Objects Overview
SAP Inside Track Sao Paulo '09 - ABAP Objects Overview
 
Academia ABAP
Academia  ABAPAcademia  ABAP
Academia ABAP
 

Semelhante a Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos

Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
Ryan Padilha
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 

Semelhante a Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos (20)

12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
Aula1
Aula1Aula1
Aula1
 
Angular js
Angular jsAngular js
Angular js
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
Aula1
Aula1Aula1
Aula1
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDE
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 

Sap Inside Track Sao Paulo 09 Classes De Negócio Em Abap Orientado A Objetos

  • 1. Melhores práticas em desenvolvimento de classes de negócio em ABAP orientado a objetos Leonardo De Araujo
  • 2. Agenda O que são classes de negócio? Por que precisamos delas? Regras de desenvolvimento Exemplos Como utilizá-las Scopo Próximos passos
  • 3. O que são classes de negócio? Global Classes ABAP OO que representam objectos de negócio (ex: Ordem de compra, Ordem de venda, Forneciments, Materiais, etc); Na maior parte baseado em objetos standard SAP, mas não restrito apenas a eles (voce pode criar a duas proprias classes !);
  • 4. Por que precisamos de classes de negócio? Reduzir TCO atravez da implementação e use de padrões de desenvolvimento, reutilização, código e supporte; Melhor representação de programas SAP; Implementação de ABAP OO; Suporte e promoção de MVC. Business classes = Model;
  • 5. Por que precisamos de classes de negócio? (cont.) (Razões pelas quais OO promove reutilização de código) Abstração do codigo simplifica a comunicação entre times funcionais e tecnicos; Reutilização garante que a mesma regra de negócio nao e’ programada em varios differentes lugares, o que complica a manutenção e potencialmente ocasiona discrepancia nos resultados; Encapsulamento torna o programa mais robusto;
  • 6. Por que precisamos de classes de negócio? (cont.) Tecnica Procedural(?) Necessidade (Business) Objetos de desenvolvimento Programas Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) Tabelas (?) Tables Telas (?) Screens Comocriar a especificaçãotecnica? Por onde comecar?
  • 7. Por que precisamos de classes de negócio? (cont.) TecnicaOrientada a Objetos Business Requirement Objetos de desenvolvimento Exemplo: Precisa de um programapara (autorizar/release) umaordem de compra e criar um fornecimentoparaela (inbound delivery) CLASS ZCL_PURCHASE_ORDER MétodoRELEASE MétodoCREATE_DELIVERY
  • 8. Regras de desenvolvimento Regra para os nomes / Naming convention; Instanciação (?) / Instantiation; Utilização de Buffers – Performance / Buffering - performance optimization; Inheritance (?); Classes Utilitárias; Utilização de Classes de exceção; Classes MODEL (MVC) / Model Class; Hierarquia de pacotes / Package Hierarchy;
  • 9. Regra para os nomes - Geral Use inglês Use “glossary terms” (não MARA) No case de nomes compostos, use separador “_”
  • 10. Regra para os nomes / Naming convention - Atributos Atributo KEY (Chave) – Instance Público (ONLY!); ex: Number(vbeln) Atributo HEADER (if applicable) – Instance Private; ex: VBAK Atributo ITEMS (if applicable) – Instance Private; ex: table of VBAP Outras opcoes(SCHEDULE LINES, PARTNERS, etc…) Sem prefixos (ex: GS_HEADER) Constantes ; use prefixo CO_
  • 11. Regra para os nomes / Naming convention - Métodos Momes de Métodos devem comecar por um verbo (ingles); Métodos que retornam um boolean devem comecar por IS_ Métodos Handler de eventos devem comecar por ON_ Métodos que verificam ou validam um “estado” devem comecar por CHECK_ Nomes de Eventos devem ter a forma substantivo_participativoe (ex: ordem_criada) Parametros de Métodos recomendados IM_ for IMporting parameters EX_ for EXporting parameters CH_ for CHanging parameters RE_ for REturning parameters
  • 12. Regra para os nomes / Naming convention - Métodos Público Método READ – Static Public; Método DISPLAY – Instance Public; Método GET_<<attrib>> – Instance public; Lifecycle Métodos CRUD (Create, Read, Update* and Delete*) Protegido/ Privado Método READ_<<attrib>> – Instance Private; Método CONSTRUCTOR – Instance Private;
  • 13. Instanciação Instantiation as Private or Protected. NOT PUBLIC; Ofereca Métodos para instanciar sua classe de negócio: Search Read / Factory Exemplo: PARAMETERS pa_vbeln TYPE vbeln_vl OBLIGATORY. DATA lo_delivery TYPE REF TO zcl_outbound_delivery. lo_delivery = zcl_outbound_delivery=>read( pa_vbeln ).
  • 14. Utilização de Buffers – Otimização de Performance Usando o Método READ, performance pode ser ameliorada atravez do use de buffers; Atributo BUFFERED_OBJECTS (Public Static) do type tabela com a seguinte estrutura: KEY type <<TYPE do atributo KEY>> DATA type ref to <<CLASSE>> Método READ checa existencia no Buffer ANTES da instanciação; Método READ atualiza o Buffer DEPOIS da method updates buffer DEPOIS da instanciação;
  • 15. Utilização de Buffers – Otimização de Performance (cont.) Method READ. Data: wa_buffered_obj type <<< >>>. Read table BUFFERED_OBJECTS with key KEY = INPUT into wa_buffered_obj <<binary search>>. If sy-subrc eq 0. Return = wa_buffered_obj-data. Else. Create object Return exporting key = INPUT. wa_buffered_obj-key = Return-key. wa_buffered_obj-data = Return. Apppend wa_buffered_obj to buffered_obj. Endif. Endmethod READ. ** PS. FREE_ALL( ) ou parametro opcional bypass_buffer
  • 16.
  • 18.
  • 19. READ
  • 20.
  • 23.
  • 26.
  • 27. READ
  • 30.
  • 31. READ
  • 34.
  • 35. Utilização de Classes de exceção Introduzido com SAP BASIS BASIS versão 6.10 Criado atravez do Class Builder (SE24) Gerenciamento de Textos de Exceção Classe de mensagens - Message Class (recommended)
  • 36. Utilização de Classes de exceção (cont.) Have your own EC linked to your BC (1:1 if applicable) Example: ZCL_OUTBOUND_DELIVERY (Business Class) ZCX_OUTBOUND_DELIVERY (Exception Class) Assign a Message Class to the EC (1:n) Example: Z_LE_SHP_DL (for Delivery Processing)
  • 37. Utilização de Classes de exceção (cont.) Atributos Defina atributo KEY da classe de negócio Marque Atributos publicos como “read-only” BAPIRET2_T(opcional) Métodos Log & display messagens de exceção no BAL Mensagens de exceção em transações RF para lidar com limitações do SAP Console.
  • 38. Model Class (MC) Crie a sua logica de programa utilizando uma camada de abstração Exemplos: ZCL_DISTRIBUTION (Process de Distribuição …) ZCL_PICKING (Picking …) ZCL_PACKING (Packing Station …)
  • 39. Hierarquia de Pacotes de desenvolvimento
  • 40.
  • 54.
  • 55. Scopo Implementação do Programação orientada a objetos (Até onde ir?) Acesso ao DB – Persistent classes or in-metodo? Items de uma Ordem de venda, subobjetos ou nao?
  • 56. Próximos passos Consolidação dos padrões de programação junto a SCN Criação de um Wizard para automatizar o process de criação da classe de negócio
  • 57.
  • 58. SCN Blog series– Best Practice in Development of Business Classes in OO ABAP
  • 59. PART 1: What are Business Classes and why do we need them?
  • 60. PART 2: Naming convention and Class structure (Atributos and Métodos);
  • 64. PART 6: Exceptions (Exception Classes);
  • 65. PART 7: Model Classes
  • 66. PART 8: Others (Package Hierarchy, performance optimization);
  • 67. PART 9: Community content and collaboration;
  • 69. Next Generation ABAP Development
  • 70. ABAP Objects: ABAP Programming in SAP NetWeaver
  • 73.