ABAP-OO Read-Only Attributes bu makalede işleyeceğimiz konu. İngilizce terminolojisinden de anlaşılacağı gibi sadece okuma/görüntüleme özelliğine sahip sınıf özelliklerinden bahsedeceğiz. Karışık bir konu değil ancak önemli bir konu olduğunu düşünüyorum. Nesne yönelimli programlama için basit bir özellik olsada doğru şekilde kullanmamız gerekiyor.
Amaç
Bir sınıfın özelliklerini dışardan değişikliğe kapatıp sadece okunabilir yapmak.
ABAP Kodu
[ABAP]
************************************************************************
* ABAP Development
*
* Author : Barış Arslan
* Description : Read-Only Attributes
************************************************************************
CLASS lcl_customer DEFINITION.
PUBLIC SECTION.
” PUBLIC olarak belirlenen sınıf özellikleri
” READ-ONLY olarak tanımlandığında dışarıdan değişiklik yapılamaz.
” Dışarıdan erişim sadece görüntülemeye izin verir.
DATA : v_name TYPE name1 READ-ONLY
, v_address TYPE text40 READ-ONLY
.
” Dışarıdan değişiklik yapma yetkisi olmadığı için
” değişikliklerin yapılması adına iki SET metodu yaratıyoruz.
METHODS : set_customer_name IMPORTING VALUE(iv_name) TYPE name1
, set_customer_addr IMPORTING VALUE(iv_address) TYPE text40
.
ENDCLASS.
CLASS lcl_customer IMPLEMENTATION.
METHOD set_customer_name.
v_name = iv_name.
ENDMETHOD.
METHOD set_customer_addr.
v_address = iv_address.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA go_customer TYPE REF TO lcl_customer.
CREATE OBJECT go_customer.
” Aşağıdaki şekilde atamam yapılmaya çalışılırsa
” Hata alınacaktır. Hatayı görmek için kodu açıp deneyebilirsiniz.
” go_customer->v_name = ‘Apple’.
” Write access to the READ-ONLY attribute “V_NAME” is not allowed outside the class/interface
” Müşterinin özelliklerini belirliyoruz
go_customer->set_customer_name( iv_name = ‘Apple’ ).
go_customer->set_customer_addr( iv_address = ‘USA’ ).
WRITE : go_customer->v_name
, go_customer->v_address
.
[/ABAP]
Programın Çıktısı
Notlar
Bir sınıfın özelliklerini dışarıya kapatmanın iki yönteminden birisidir READ-ONLY. İkinci yöntem ise GET metodlarıdır. İkisinin işlevi tamamen aynıdır. İki yöntem arasında kıyaslama yaptığımızda READ-ONLY’nin performans olarak daha iyi olduğunu göreceksiniz. READ-ONLY kullanım her zaman daha hızlıdır. Ancak bu hız programınızın performansında çok çok büyük bir yüzdeye sahip değil bu şekilde bir algı oluşmasın.
[success]GET metodlarını daha detaylı olarak ABAP-OO ENCAPSULATION makalemizde detaylı olarak incelemiştik. Oradan da bakabilirsiniz.[/success]