CLASS Employee DEFINITION.
PUBLIC SECTION.
DATA:
nEmployeeNo(4) type n,
cEmployeeName(30) type c,
iNoOfUnits type i,
iPayPerUnit type i.
METHODS:
CalculatePay RETURNING VALUE(iPay) TYPE i,
WritePay IMPORTING VALUE(iPay) TYPE i.
ENDCLASS.
CLASS Employee IMPLEMENTATION.
METHOD CalculatePay.
iPay = iNoOfUnits * iPayPerUnit.
ENDMETHOD.
METHOD WritePay.
WRITE: / 'The pay for employee ',
nEmployeeNo, cEmployeeName,
' is : ', iPay.
ENDMETHOD.
ENDCLASS.
CLASS FactoryWorker DEFINITION INHERITING FROM Employee.
PUBLIC SECTION.
EVENTS: LazyEmployee.
DATA: iExtraNoUnits type i.
METHODS:
CalculatePay REDEFINITION.
ENDCLASS.
CLASS FactoryWorker IMPLEMENTATION.
METHOD CalculatePay.
iPay = ( iNoOfUnits * iPayPerUnit ) +
( iExtraNoUnits * iPayPerUnit * 2 ).
IF iNoOfUnits < 100.
raise event LazyEmployee.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS FireEmployee DEFINITION.
PUBLIC SECTION.
METHODS YouAreFired
FOR EVENT LazyEmployee
OF FactoryWorker.
ENDCLASS.
CLASS FireEmployee IMPLEMENTATION.
METHOD YouAreFired.
WRITE:/ 'You lazy worker, you have produced less than 100 units.'
color col_heading,
'YOU ARE FIRED !!!' color col_negative intensified.
ENDMETHOD.
ENDCLASS.
DATA: MyPay TYPE i.
START-OF-SELECTION.
DATA: SamSmith TYPE REF TO Employee.
CREATE OBJECT: SamSmith.
SamSmith->nEmployeeNo = 433.
SamSmith->cEmployeeName = 'Sam Smith'.
SamSmith->iNoOfUnits = 150.
SamSmith->iPayPerUnit = 3.
MyPay = SamSmith->CalculatePay( ).
CALL METHOD SamSmith->WritePay( MyPay ).
SKIP.
DATA: JessicaJones TYPE REF TO FactoryWorker.
CREATE OBJECT: JessicaJones.
JessicaJones->nEmployeeNo = 1500.
JessicaJones->cEmployeeName = 'Jessica Jones'.
JessicaJones->iNoOfUnits = 300.
JessicaJones->iExtraNoUnits = 600.
JessicaJones->iPayPerUnit = 3.
MyPay = JessicaJones->CalculatePay( ).
CALL METHOD JessicaJones->WritePay( MyPay ).
SKIP.
DATA: LazyJohn TYPE REF TO FactoryWorker,
FireHim TYPE REF TO FireEmployee.
CREATE OBJECT: LazyJohn,
FireHim.
SET HANDLER FireHim->YouAreFired FOR LazyJohn.
LazyJohn->nEmployeeNo = 1500.
LazyJohn->cEmployeeName = 'Lazy John'.
LazyJohn->iNoOfUnits = 90.
LazyJohn->iExtraNoUnits = 500.
LazyJohn->iPayPerUnit = 3.
WRITE: / 'Lazy John has produced less than 100 units'.
MyPay = LazyJohn->CalculatePay( ).[@more@]
PUBLIC SECTION.
DATA:
nEmployeeNo(4) type n,
cEmployeeName(30) type c,
iNoOfUnits type i,
iPayPerUnit type i.
METHODS:
CalculatePay RETURNING VALUE(iPay) TYPE i,
WritePay IMPORTING VALUE(iPay) TYPE i.
ENDCLASS.
CLASS Employee IMPLEMENTATION.
METHOD CalculatePay.
iPay = iNoOfUnits * iPayPerUnit.
ENDMETHOD.
METHOD WritePay.
WRITE: / 'The pay for employee ',
nEmployeeNo, cEmployeeName,
' is : ', iPay.
ENDMETHOD.
ENDCLASS.
CLASS FactoryWorker DEFINITION INHERITING FROM Employee.
PUBLIC SECTION.
EVENTS: LazyEmployee.
DATA: iExtraNoUnits type i.
METHODS:
CalculatePay REDEFINITION.
ENDCLASS.
CLASS FactoryWorker IMPLEMENTATION.
METHOD CalculatePay.
iPay = ( iNoOfUnits * iPayPerUnit ) +
( iExtraNoUnits * iPayPerUnit * 2 ).
IF iNoOfUnits < 100.
raise event LazyEmployee.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS FireEmployee DEFINITION.
PUBLIC SECTION.
METHODS YouAreFired
FOR EVENT LazyEmployee
OF FactoryWorker.
ENDCLASS.
CLASS FireEmployee IMPLEMENTATION.
METHOD YouAreFired.
WRITE:/ 'You lazy worker, you have produced less than 100 units.'
color col_heading,
'YOU ARE FIRED !!!' color col_negative intensified.
ENDMETHOD.
ENDCLASS.
DATA: MyPay TYPE i.
START-OF-SELECTION.
DATA: SamSmith TYPE REF TO Employee.
CREATE OBJECT: SamSmith.
SamSmith->nEmployeeNo = 433.
SamSmith->cEmployeeName = 'Sam Smith'.
SamSmith->iNoOfUnits = 150.
SamSmith->iPayPerUnit = 3.
MyPay = SamSmith->CalculatePay( ).
CALL METHOD SamSmith->WritePay( MyPay ).
SKIP.
DATA: JessicaJones TYPE REF TO FactoryWorker.
CREATE OBJECT: JessicaJones.
JessicaJones->nEmployeeNo = 1500.
JessicaJones->cEmployeeName = 'Jessica Jones'.
JessicaJones->iNoOfUnits = 300.
JessicaJones->iExtraNoUnits = 600.
JessicaJones->iPayPerUnit = 3.
MyPay = JessicaJones->CalculatePay( ).
CALL METHOD JessicaJones->WritePay( MyPay ).
SKIP.
DATA: LazyJohn TYPE REF TO FactoryWorker,
FireHim TYPE REF TO FireEmployee.
CREATE OBJECT: LazyJohn,
FireHim.
SET HANDLER FireHim->YouAreFired FOR LazyJohn.
LazyJohn->nEmployeeNo = 1500.
LazyJohn->cEmployeeName = 'Lazy John'.
LazyJohn->iNoOfUnits = 90.
LazyJohn->iExtraNoUnits = 500.
LazyJohn->iPayPerUnit = 3.
WRITE: / 'Lazy John has produced less than 100 units'.
MyPay = LazyJohn->CalculatePay( ).[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24345566/viewspace-1057405/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24345566/viewspace-1057405/