SAP ABAP - คลาส
คลาสถูกใช้เพื่อระบุรูปแบบของอ็อบเจ็กต์และรวมการแสดงข้อมูลและวิธีการจัดการข้อมูลนั้นเป็นแพ็กเกจเดียว มีการเรียกข้อมูลและฟังก์ชันภายในคลาสmembers of the class.
นิยามคลาสและการนำไปใช้
เมื่อคุณกำหนดคลาสคุณจะต้องกำหนดพิมพ์เขียวสำหรับชนิดข้อมูล สิ่งนี้ไม่ได้กำหนดข้อมูลใด ๆ แต่เป็นการกำหนดความหมายของชื่อคลาสสิ่งที่วัตถุของคลาสจะประกอบด้วยและการดำเนินการใดที่สามารถดำเนินการกับวัตถุดังกล่าวได้ นั่นคือเป็นการกำหนดลักษณะนามธรรมของวัตถุเช่นแอตทริบิวต์เขตข้อมูลและคุณสมบัติ
ไวยากรณ์ต่อไปนี้แสดงวิธีการกำหนดคลาส -
CLASS <class_name> DEFINITION.
..........
..........
ENDCLASS.
นิยามคลาสเริ่มต้นด้วยคีย์เวิร์ด CLASS ตามด้วยชื่อคลาส DEFINITION และคลาสเนื้อหา คำจำกัดความของคลาสสามารถมีส่วนประกอบต่างๆของคลาสเช่นแอ็ตทริบิวต์วิธีการและเหตุการณ์ เมื่อเราประกาศเมธอดในการประกาศคลาสการใช้เมธอดจะต้องรวมอยู่ในการใช้คลาส ไวยากรณ์ต่อไปนี้แสดงวิธีใช้คลาส -
CLASS <class_name> IMPLEMENTATION.
...........
..........
ENDCLASS.
Note- การใช้งานคลาสประกอบด้วยการนำวิธีการทั้งหมดไปใช้ ใน ABAP Objects โครงสร้างของคลาสประกอบด้วยส่วนประกอบต่างๆเช่นแอตทริบิวต์เมธอดเหตุการณ์ประเภทและค่าคงที่
คุณลักษณะ
แอตทริบิวต์คือช่องข้อมูลของคลาสที่สามารถมีประเภทข้อมูลเช่น C, I, F และ N ซึ่งจะประกาศในการประกาศคลาส แอตทริบิวต์เหล่านี้สามารถแบ่งออกเป็น 2 ประเภท ได้แก่ อินสแตนซ์และแอตทริบิวต์แบบคงที่ อันinstance attributeกำหนดสถานะเฉพาะอินสแตนซ์ของวัตถุ สถานะจะแตกต่างกันสำหรับวัตถุที่แตกต่างกัน แอตทริบิวต์อินสแตนซ์ถูกประกาศโดยใช้คำสั่ง DATA
Static attributesกำหนดสถานะทั่วไปของคลาสที่ใช้ร่วมกันโดยอินสแตนซ์ทั้งหมดของคลาส นั่นคือถ้าคุณเปลี่ยนแอตทริบิวต์แบบคงที่ในออบเจ็กต์หนึ่งของคลาสการเปลี่ยนแปลงจะมองเห็นได้สำหรับอ็อบเจ็กต์อื่น ๆ ทั้งหมดของคลาสด้วย มีการประกาศแอตทริบิวต์แบบคงที่โดยใช้คำสั่ง CLASS-DATA
วิธีการ
เมธอดคือฟังก์ชันหรือโพรซีเดอร์ที่แสดงถึงพฤติกรรมของอ็อบเจ็กต์ในคลาส เมธอดของคลาสสามารถเข้าถึงแอ็ตทริบิวต์ของคลาสได้ นิยามของวิธีการยังสามารถมีพารามิเตอร์เพื่อให้คุณสามารถระบุค่าให้กับพารามิเตอร์เหล่านี้เมื่อมีการเรียกใช้เมธอด คำจำกัดความของวิธีการถูกประกาศในการประกาศคลาสและนำไปใช้ในส่วนการนำไปใช้ของคลาส คำสั่ง METHOD และ ENDMETHOD ใช้เพื่อกำหนดส่วนการนำไปใช้งานของเมธอด ไวยากรณ์ต่อไปนี้แสดงวิธีใช้วิธีการ -
METHOD <m_name>.
..........
..........
ENDMETHOD.
ในไวยากรณ์นี้ <m_name> แสดงถึงชื่อของวิธีการ Note - คุณสามารถเรียกเมธอดได้โดยใช้คำสั่ง CALL METHOD
การเข้าถึงแอตทริบิวต์และวิธีการ
ส่วนประกอบของคลาสสามารถกำหนดได้ในส่วนการเปิดเผยสาธารณะส่วนตัวหรือการมองเห็นที่ได้รับการป้องกันซึ่งควบคุมวิธีการเข้าถึงส่วนประกอบเหล่านี้ ส่วนการเปิดเผยส่วนตัวใช้เพื่อปฏิเสธการเข้าถึงคอมโพเนนต์จากภายนอกคลาส ส่วนประกอบดังกล่าวสามารถเข้าถึงได้จากในคลาสเท่านั้นเช่นวิธีการ
ส่วนประกอบที่กำหนดไว้ในส่วนการเปิดเผยสาธารณะสามารถเข้าถึงได้จากบริบทใด ๆ โดยค่าเริ่มต้นสมาชิกทั้งหมดของชั้นเรียนจะเป็นส่วนตัว ในทางปฏิบัติเรากำหนดข้อมูลในส่วนส่วนตัวและวิธีการที่เกี่ยวข้องในส่วนสาธารณะเพื่อให้สามารถเรียกใช้จากภายนอกชั้นเรียนได้ดังที่แสดงในโปรแกรมต่อไปนี้
แอตทริบิวต์และวิธีการที่ประกาศในส่วนสาธารณะในคลาสสามารถเข้าถึงได้โดยคลาสนั้นและคลาสอื่น ๆ คลาสย่อยของโปรแกรม
เมื่อมีการประกาศแอตทริบิวต์และวิธีการในส่วนที่ได้รับการป้องกันในคลาสผู้เรียนสามารถเข้าถึงได้โดยคลาสและคลาสย่อยนั้น
เมื่อแอททริบิวต์และเมธอดถูกประกาศในส่วนไพรเวตในคลาสผู้ใช้สามารถเข้าถึงได้โดยคลาสนั้นเท่านั้นไม่ใช่คลาสอื่น
ตัวอย่าง
Report ZAccess1.
CLASS class1 Definition.
PUBLIC Section.
Data: text1 Type char25 Value 'Public Data'.
Methods meth1.
PROTECTED Section.
Data: text2 Type char25 Value 'Protected Data'.
PRIVATE Section.
Data: text3 Type char25 Value 'Private Data'.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Write: / 'Public Method:',
/ text1,
/ text2,
/ text3.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: Objectx Type Ref To class1.
Create Object: Objectx.
CALL Method: Objectx→meth1.
Write: / Objectx→text1.
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
Public Method:
Public Data
Protected Data
Private Data
Public Data
คุณสมบัติคงที่
มีการประกาศแอตทริบิวต์แบบคงที่ด้วยคำสั่ง CLASS-DATA วัตถุหรืออินสแตนซ์ทั้งหมดสามารถใช้แอตทริบิวต์แบบคงที่ของคลาสได้ แอตทริบิวต์แบบคงที่สามารถเข้าถึงได้โดยตรงด้วยความช่วยเหลือของชื่อคลาสเช่น class_name Somename_1 = 'Some Text'
ตัวอย่าง
ต่อไปนี้เป็นโปรแกรมที่เราต้องการพิมพ์ข้อความที่มีบรรทัดหมายเลข 4 ถึง 8 ครั้ง เรากำหนดคลาส class1 และในส่วนสาธารณะเราประกาศ CLASS-DATA (แอตทริบิวต์แบบคงที่) และวิธีการ หลังจากใช้คลาสและวิธีการแล้วเราจะเข้าถึงแอตทริบิวต์แบบคงที่ในเหตุการณ์เริ่มต้นของการเลือกโดยตรง จากนั้นเราก็สร้างอินสแตนซ์ของคลาสและเรียกใช้เมธอด
Report ZStatic1.
CLASS class1 Definition.
PUBLIC Section.
CLASS-DATA: name1 Type char45,
data1 Type I.
Methods: meth1.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Do 4 Times.
data1 = 1 + data1.
Write: / data1, name1.
EndDo.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
class1⇒name1 = 'ABAP Object Oriented Programming'.
class1⇒data1 = 0.
Data: Object1 Type Ref To class1,
Object2 Type Ref To class1.
Create Object: Object1, Object2.
CALL Method: Object1→meth1,
Object2→meth1.
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
ตัวสร้าง
ตัวสร้างเป็นวิธีการพิเศษที่เรียกโดยอัตโนมัติไม่ว่าจะในขณะที่สร้างวัตถุหรือเข้าถึงส่วนประกอบของคลาส Constructor จะถูกทริกเกอร์ทุกครั้งที่มีการสร้างวัตถุ แต่เราจำเป็นต้องเรียกใช้เมธอดเพื่อเรียกใช้เมธอดทั่วไป ในตัวอย่างต่อไปนี้เราได้ประกาศวิธีการสาธารณะสองวิธีและตัวสร้าง ทั้งสองวิธีนี้มีการดำเนินการที่แตกต่างกัน ในขณะที่สร้างอ็อบเจ็กต์ของคลาสเมธอด constructor จะทริกเกอร์การดำเนินการ
ตัวอย่าง
Report ZConstructor1.
CLASS class1 Definition.
PUBLIC Section.
Methods: method1, constructor.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Write: / 'This is Method1'.
EndMethod.
Method constructor.
Write: / 'Constructor Triggered'.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data Object1 Type Ref To class1.
Create Object Object1.
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
Constructor Triggered
ME Operator ในวิธีการ
เมื่อคุณประกาศตัวแปรประเภทใดก็ได้ในส่วนสาธารณะของคลาสคุณสามารถใช้ตัวแปรนั้นในการนำไปใช้งานอื่น ๆ ได้ สามารถประกาศตัวแปรด้วยค่าเริ่มต้นในส่วนสาธารณะ เราอาจประกาศตัวแปรอีกครั้งภายในวิธีการที่มีค่าอื่น เมื่อเราเขียนตัวแปรภายในเมธอดระบบจะพิมพ์ค่าที่เปลี่ยนแปลง เพื่อแสดงค่าก่อนหน้าของตัวแปรเราต้องใช้ตัวดำเนินการ 'ME'
ในโปรแกรมนี้เราได้ประกาศตัวแปรสาธารณะ text1 และเริ่มต้นด้วยค่า เราได้ประกาศตัวแปรเดียวกันอีกครั้ง แต่สร้างอินสแตนซ์ด้วยค่าที่ต่างกัน ภายในเมธอดเรากำลังเขียนตัวแปรนั้นด้วยโอเปอเรเตอร์ 'ME' เพื่อรับค่าที่เริ่มต้นก่อนหน้านี้ เราได้รับค่าที่เปลี่ยนแปลงโดยการประกาศโดยตรง
ตัวอย่าง
Report ZMEOperator1.
CLASS class1 Definition.
PUBLIC Section.
Data text1 Type char25 Value 'This is CLASS Attribute'.
Methods method1.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Data text1 Type char25 Value 'This is METHOD Attribute'.
Write: / ME→text1,
/ text1.
ENDMethod.
ENDCLASS.
Start-Of-Selection.
Data objectx Type Ref To class1.
Create Object objectx.
CALL Method objectx→method1.
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
This is CLASS Attribute
This is METHOD Attribute