美文网首页
ABAP 面向对象程序设计 (02)- 类的属性

ABAP 面向对象程序设计 (02)- 类的属性

作者: Stone0823 | 来源:发表于2018-10-03 12:14 被阅读67次

ABAP 语言中,类的属性可以从两个角度来看:

  • 从属性的可见性角度,属性可分为 public, protectedprivate。因为 ABAP 的类自身分为两种,局部类只能在某支程序中定义和使用,也只能在某支程序内可见。这些属性在程序之外是不可见的。全局类(SE24 定义)在外部是可见的,public, protectedprivate才有意义。

    • 在全局类中定义的 public 属性,在外部是可见的
    • 全局类中定义的 protected 属性,只能在类本身、子类和友元类可见
    • 全局类中定义的 private 属性,只能在类本身可见;
  • 实例属性 (instance attribute) 和静态属性 (static attribute)。

    • 实例属性:使用 DATA 关键字来声明,在每个对象中独立存在;
    • 静态属性:使用 CLASS-DATA 关键字声明,在各个对象之间共享。简单地说,静态属性与类相关,实例属性与对象相关。
    • 在调用类和对象的属性和方法的时候,如果是静态属性或方法,用 => 符号,如果是实例属性或方法,用 -> 符号。

借用 BC404 课程的两张图说明静态属性和实例属性的概念和语法要点。

静态属性和实例属性的概念:

接下来实现一个 lcl_student 类,进一步说明 ABAP 类和对象属性的用法。为了代码更加清晰,将类的声明和实现代码放在 include 程序中。

z_lcl_student include 程序:

CLASS lcl_student DEFINITION.
  PUBLIC SECTION.
    DATA: sid   TYPE char10,
          sname TYPE char10.
    CLASS-DATA: scount TYPE i.

    METHODS: constructor.
ENDCLASS.                  

" Class implementation
CLASS lcl_student IMPLEMENTATION.
  METHOD constructor.
    scount = scount + 1.
  ENDMETHOD.                    
ENDCLASS.  

在主程序中,创建两个学生对象,在两个学生对象中, sidsname 属性各自有不同的值。学生的数量在构造函数中自动计算。

REPORT  z_class_attributes.

INCLUDE Z_LCL_STUDENT.

DATA: lo_stu1 TYPE REF TO lcl_student,
      lo_stu2 TYPE REF TO lcl_student.

START-OF-SELECTION.
  CREATE OBJECT lo_stu1.
  lo_stu1->sid = '001'.
  lo_stu1->sname = 'Stone'.

  CREATE OBJECT lo_stu2.
  lo_stu2->sid = '002'.
  lo_stu2->sname = 'Brown'.

  WRITE: / lo_stu1->sid, lo_stu1->sname.
  WRITE: / lo_stu2->sid, lo_stu2->sname.

  WRITE: / 'Student count:',  lcl_student=>scount LEFT-JUSTIFIED.

静态属性 scount 在创建对象的时候,constructor 自动将 scount 加一,但如果在调用代码中直接改变,也可以导致学生数量的统计错误。比如,我们在输出之前,故意添加一个赋值语句:

  lcl_student=>scount = 10.
  WRITE: / 'Student count:', lcl_student=>scount LEFT-JUSTIFIED.

这个时候,输出结果如下图。明明只有两个学生,学生数量却变成了 10:

为了防止外部修改,可以在属性后加上 READ-ONLY 标记。具有 READ-ONLY 标记的属性,只能通过类内部的方法进行修改。

CLASS-DATA: scount TYPE i READ-ONLY.

相关文章

  • ABAP 面向对象程序设计 (02)- 类的属性

    ABAP 语言中,类的属性可以从两个角度来看: 从属性的可见性角度,属性可分为 public, protected...

  • javaScript高级程序设计读书笔记(六)

    面向对象的程序设计,面向对象的语言有类的概念,通过类创造多个具有相同的属性和方法的对象。 对象 属性类型 数据属性...

  • 《Java核心技术卷 I》之 Java对象与类

    Java对象与类 面向对象程序设计 面向对象程序设计,简称OOP,Java语言就是完全面向对象的。 类 类(cla...

  • 对象与类

    对象与类 Tags: Java核心技术卷I 面向对象程序设计概述 面向对象程序设计简单OOP。 类类是构造对象的模...

  • Java面向对象

    Java是面向对象的程序设计语言,提供定义类,属性,方法的基本功能.面向对象的三大特征:封装,继承,多态 1. 类...

  • java学习(六)-对象与类(一)——面向对象程序设计概述、用户

    面向对象程序设计概述 面向对象程序设计,简称OOP。 在类之间,最常见的关系有: 依赖("uses-a"):类A的...

  • 面向对象

    title:面向对象tags: 基础,Java 面向对象 面向对象程序设计简介 面向对象的基本思想是使用类、对象、...

  • Python面向对象(基础)

    面向对象 Python是支持面向对象的,面向对象编程是一种程序设计思想。 类和实例(基础) 面向对象最重要的就是类...

  • 类与对象

    在面向对象的程序设计模式中,使用类来区分具有相似属性的对象 类的定义和使用 使用class关键字来声明一个类: 类...

  • Python面向对象-类与对象

    在面向对象的程序设计模式中,使用类来区分具有相似属性的对象。 类的定义和使用 使用class关键字来声明一个类: ...

网友评论

      本文标题:ABAP 面向对象程序设计 (02)- 类的属性

      本文链接:https://www.haomeiwen.com/subject/nvjaoftx.html