06面向对象编程,A1.1-员工管理(本地类)

本实践通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。

No 部分 说明
1 程序声明 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少
2 对象定义 通过定义变量或常量或要使用的表结构等,以在程序执行过程中计算和存储临时值
3 类的定义 定义一个类,类中包含公共区域和私有区域
4 类的方法 从表中获得员工数据并存储到变量以待后续输出
5 数据输出 创建对象实例并调用方法,并按需求进行数据的输出

1、程序声明

程序声明部分代码如下:

REPORT zu0601_employee_method.

REPORT 程序名称,是对程序的定义,表明此程序代码不是FUNCTION MODULE(功能函数),不是CLASS(类),而是可以执行的可以输出数据的此程序;这是对程序最基本的声明,且必须存在的部分。

2、对象定义

对象定义部分代码如下:

******对象定义*****
CLASS local_employee DEFINITION DEFERRED.       "未定义本地类
DATA: cl_ref        TYPE REF TO local_employee,
      out_emp_id    TYPE ztemployee-employeeid,
      out_emp_sex   TYPE ztemployee-sex,
      out_emp_newid TYPE ztemployee-employeeid,
      writestr(20)  TYPE c.

PARAMETERS p_emp_id TYPE ztemployee-employeeid.

如上代码,首先通过预定义一个本地类“local_employee”,此类将在后续步骤中进行定义和实现;然后参考此类定义了一个cl_ref的对象,以在程序执行时创建员工对象实例;同时定义了变量: out_emp_id(员工ID)、 out_emp_sex(性别)、out_emp_newid(最新员工ID)、writestr(性别),以在程序执行时存储获得的员工信息以待输出;

最后通过PARAMETERS定义了一个初始输入框以输入员工ID。

3、类的定义

在对象预定义local_employee类后,还需要进行类的详细定义,包括类所包含的方法、属性,以及各方法、属性的访问控制级别:公开(PUBLIC)、保护(PROTECTED)、私有(PRIVATE)。详细代码如下。

CLASS local_employee DEFINITION.
  PUBLIC SECTION.                        "公有成员
    METHODS get_emp_lastid               "获得最后一个员工ID
      RETURNING
        VALUE(re_emp_id) TYPE ztemployee-employeeid.
    METHODS get_emp_byid                  "指定员工ID
      IMPORTING
        VALUE(im_emp_id) TYPE ztemployee-employeeid.
    METHODS get_emp_sex                   "获得员工的性别
      RETURNING
                 VALUE(re_emp_sex) TYPE ztemployee-sex
      EXCEPTIONS no_data.
    METHODS show_emp_maxid.                   "输出最后的员工ID
    METHODS set_emp_newid                  "设置新的员工ID
      RETURNING
        VALUE(re_newemp_id) TYPE ztemployee-employeeid.

  PRIVATE SECTION.                              "私有成员
    DATA:emp_maxid TYPE ztemployee-employeeid,  "员工类的最大员工id值
         emp_id    TYPE ztemployee-employeeid.  "员工类的员工id
ENDCLASS.

通过如上代码,定义了类local_employee有4种方法:get_emp_lastid(获得最后一个员工ID)、get_emp_byid(根据输入值获得员工)、get_emp_sex(获得员工性别)、show_emp_maxid(输出最后员工ID)、set_emp_newid(设置新的ID),这些方法都是在PUBLIC SECTION中,表明对外公开;另外定义了2个属性emp_maxid(员工的最大ID)、emp_id(员工对象的ID),这2个属性都是在PRIVATE SECTION中,表明只能在对象的内部访问。

4、类方法的实现

在《类的定义》中,只是说明类包含了哪些方法哪些属性,但并没有说明方法的具体实现、属性的赋值等,在本部分则进行这些方法、属性赋值的实现。

CLASS local_employee IMPLEMENTATION.
  METHOD get_emp_lastid.
    SELECT MAX( employeeid ) FROM ztemployee INTO emp_maxid. "从员工表中获得最大员工ID值
    emp_id = emp_maxid.                                              "赋值给员工类中的emp_id属性
    re_emp_id = emp_id.                                              "赋值给方法的输出参数re_emp_id
  ENDMETHOD.

  METHOD get_emp_byid.
    emp_id = im_emp_id.                                        "输入值直接赋值给员工类的emp_id属性
  ENDMETHOD.

  METHOD get_emp_sex.
    SELECT SINGLE sex  FROM ztemployee INTO re_emp_sex  "根据员工类的emp_id属性值从表获得性别
WHERE employeeid = emp_id.
    IF re_emp_sex IS INITIAL.
      RAISE no_data.
    ENDIF.
  ENDMETHOD.

  METHOD show_emp_maxid.
    WRITE:/5 '最后员工ID:' ,20 emp_maxid.                  "输出员工类中的emp_maxid属性值
  ENDMETHOD.

  METHOD set_emp_newid.
    DATA new_id(4) TYPE n.
    new_id = emp_maxid+1(4).                                 "根据员工类中的emp_maxid属性值得到新的ID
    new_id = new_id + 1.
    re_newemp_id = 'E' && new_id.
  ENDMETHOD.
ENDCLASS.

代码说明如下:
get_emp_lastid: 通过OPEN SQL从员工表中获得最大ID号;
get_emp_byid: 获取选择界面输入的员工ID号;
get_emp_sex: 根据员工ID从员工表中获得性别,并判断性别是否为空,空则抛出异常;
show_emp_maxid: 输出员工类中的emp_maxid值;
set_emp_newid: 根据最大员工ID号,计算出最新ID号。

5、数据输出

在前面各个部分完成后,则可在START-OF-SELECTION事件中,通过创建对象实例并调用方法,获得和输出数据。

*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.
  CREATE OBJECT cl_ref. "创建对象
  CALL METHOD cl_ref->get_emp_byid               "调用方法的方式1
    EXPORTING
      im_emp_id = p_emp_id.
  CALL METHOD cl_ref->get_emp_sex
    RECEIVING
      re_emp_sex = out_emp_sex
    EXCEPTIONS
      no_data    = 1.
**  cl_ref->get_emp_byid( p_emp_id ).             "调用方法的方式2
**  out_emp_sex = cl_ref->get_emp_sex( ).
  IF sy-subrc <> 0.
    writestr = '没有获得性别'.
  ELSE.
    writestr = out_emp_sex.
  ENDIF.
  WRITE:/5 '输入员工ID', 20 p_emp_id,
        /5 '输入员工性别:',20 writestr.
  SKIP.

  out_emp_id = cl_ref->get_emp_lastid( ).
  out_emp_sex = cl_ref->get_emp_sex( ).
  WRITE:/5 '最后员工ID', 20 out_emp_id,
        /5 '最后员工性别:',20 out_emp_sex.
  SKIP.

  cl_ref->show_emp_maxid( ).
  out_emp_newid = cl_ref->set_emp_newid( ).
  WRITE:/5 '最新员工ID:',20 out_emp_newid.

  CLEAR cl_ref.

在如上代码中:
首先通过CREATE创建对象的实例;
然后再通过CALL METHOD语句调用方法获得相应数据或执行相应语句,并根据获得的数据进行处理;
最后通过语句CLEAR清理对象内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,706评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,002评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,462评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,375评论 0 216
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,763评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,849评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,033评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,768评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,490评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,734评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,204评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,566评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,227评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,137评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,934评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,926评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,774评论 2 274

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,731评论 0 11
  • 本节课纲 类和对象 类的定义 self参数 初始化方法init() _str_()方法 面向对象vs面向过程 私有...
    郭_扬阅读 4,901评论 0 7
  • 面向对象介绍 范式编程 编程是程序员用 特定的语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程。 一...
    drfung阅读 1,843评论 0 1
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 991评论 0 1
  • 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx阅读 13,752评论 0 41