Makalemizde ABAP-OO local class yaratma üzerinde duracağız. Temel olarak ABAP-OO geliştirmesi yaparken izlememiz gereken yolları ve ABAP-OO syntax’ına temel seviyeden girişini yapacağız. SAP üzerinde ABAP-OO kullanımı iki şekilde yapılabilir. Local class veya Global class ile çalışabiliriz.
Amaç
SAP projelerinde özellikle “Full-Cycle” projelerde, temelden mimariyi biz kuruyorsak Global Class kullanmayı tercih ederiz ki projenin genelinde ortak bir yapı oluşturmak adına. Ancak Local class ve Global class kullanımı ihtiyaca göre karar verilmesi gereken bir konudur, hiçbir zaman kesin bir doğrudan söz edemeyiz bu durumlarda. Bizler genel OO-ABAP prensiplerini ve kullanımını öğrenirken Local class’lar üzerinden işleyeceğiz. İki class arasında syntax veya kurgu açısından hiçbir farklılık yoktur. O yüzden öğrenilen her şeyi Global class’lar üzerinde de uygulayabilirsiniz. Global class’ların üzerinde de farklı makalelerde ayrıca duracağız.
Teorik bölümü bir kenara bırakıp uygulamaya geçelim şimdi. Öncelikle SE38 işlem kodu üzerinden yürütülebilir program(Executable program) oluşturuyoruz ve aşağıdaki şekilde kodlarımızı yazmaya başlıyoruz.
ABAP Kodu
[ABAP]
************************************************************************
* ABAP Development
*
* Author : Barış Arslan
* Description : Class definition and usage
************************************************************************
” ABAP class’ları iki aşamadan oluşur.
” Class Defitinion ve Class Implementation yapılması gerekir.
” Öncelikle sınıfımızın adıyla birlikte tanımlamalarını yapıyoruz.
” Daha sonra sınıfımızın metodları için implementasyon yapıyoruz.
” Yani ilgili kodlarımızı yazacağımız yer Class Implementation bölümü.
” Bizim örneğimizde bir müşteri sınıfı yaratacağız ve özelliklerini belirleyeceğiz.
CLASS lcl_customer DEFINITION.
” Sınıfımızın tanımlandığı aşamadaki en önemli konu
” sınıfın içerdiği Attribute veya Method’ların erişebilirlik durumu.
” Bu durum Class Section’lar üzerinden yönetilmektedir.
PUBLIC SECTION.
” Public Section içerisinde tanımlanan tüm değişkenler veya metodlar
” sınıfın dışındaki herhangi bir yerden erişilebilir demek.
” Hiçbir kısıt gerekmeksizin burada ki tanımlamalara erişilebilir ve görünebilir.
” Public attributes
DATA : v_name TYPE char10
, v_sector TYPE char10
, v_country TYPE char10
.
” Public methods
METHODS : print_customer.
PROTECTED SECTION.
” Protected Section içerisinde tanımlanan tüm değişkenler veya metodlar
” yalnızca sınıfın kendisi tarafından veya alt sınıfları tarafından erişilebilir.
” Dışarıdan erişimi engellemek amaçlı kullanılan bir bölümdür.
PRIVATE SECTION.
” Private Section içerisinde tanımlanan tüm değişkenler veya metodlar
” yalnızca sınıfın kendisi tarafından erişilebilir.
” Dışarıdan veya alt sınıflarından hiçbir şekilde bu bölüme erişilemez.
ENDCLASS.
CLASS lcl_customer IMPLEMENTATION.
” Class Definition kısmında tanımlanan metodların implementasyonlarını
” bu bölümde yapıyoruz. Yukarıda “PRINT_CUSTOMER” metodunu tanımlamıştık
” bu bölümde ilgili metodun nasıl davranması gerektiğini yazacağız.
” Kısacası kodlama kısmını gerçekleştireceğiz.
METHOD print_customer.
WRITE : v_name
, v_sector
, v_country
.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
” Instance alacağımız nesnemiz için referans tanımlamasını yapıyoruz
DATA go_customer TYPE REF TO lcl_customer.
” Müşteri nesnemiz için instance alıyoruz.
CREATE OBJECT go_customer.
” Müşteri nesnemizin özelliklerini belirliyoruz. (Set Attributes)
” Eğer tanımladığımız özellikler Public Section içerisinde olmasaydı,
” Protected veya Private bölümde olsaydı, buradan erişim sağlayamazdık.
” Şu an sınıfımızın dışından yarattığımız nesne ile ilgili işlemler yapıyoruz.
go_customer->v_name = ‘Ford’.
go_customer->v_sector = ‘Otomotiv’.
go_customer->v_country = ‘USA’.
” Müşterimizin bilgilerini ekrana yazdırıyoruz
go_customer->print_customer( ).
[/ABAP]
Programın Çıktısı
Notlar
Kod üzerinde eklediğim yorumlarla biraz daha detaylı açıklamaları yaptım konuyla ilgili. Ancak vurgulamak istediğim birkaç nokta var.
Local class yaratırken isimlendirme için sınıf adından önce “lcl_” prefix’ini kullanıyoruz ki büyük programlarda yaratılan sınıfları ayırt etmemiz daha kolay oluyor. Kod okunabilirliğini arttırmak adına önemli çünkü bir program içerisinde sadece Local class değil aynı zamanda Global sınıfta kullanabileceğimiz için isimlendirmelere önem verirseniz kodun bakımını sonradan çok daha rahat yaparsınız.
Class Section’larından bahsettik, üç farklı sınıf erişim bölümümüz var. Bu konuyu ayrı bir makalede işleyeceğiz detaylı olarak çünkü bu konu başlı başına bir ünite. O yüzden bu örnekte sadece Public Section ile ilgili bir tanımlama yaptım odaklanmamız gereken konuyu kaçırmamak veya zorlaştırmamak adına.
Konuyla ilgili sorularınız olursa makalenin yorum bölümünden veya email yoluylada sorabilirsiniz. Elimden geldiğince yardımcı olmaya çalışacağım.