从Java到ABAP,OO部分的学习以及对…
2017-04-21 10:51
260 查看
一些百思不得其解的语法现象:
居然把Integer的名称简化为I
那么变量名似乎就不能取为I了,类名就偶尔用用,使用的频率哪里够变量名高啊!
居然有教材这么写一个IF语句:
IF sy-index = 2. CONT INUE.
ENDIF.
显然运行不了。但是我该怎么改呢?不得不吐槽下,ABAP以点号结尾相当有迷惑性。
以Java的OO思维,2难道是一个类的实例?然后里面有个叫做CONT的方法?在使用CONT方法时传递
INUE类的ENDIF参数?
其实写成这样就清楚了:
IF sy-index = 2.
CONTINUE.
ENDIF.
突然觉得Java或者C里面多写点括号的好处了:
if(sy.index==2){
continue;
}
多么简洁易懂
WHILE sy-subrc=0.
数据对象 "SY" 没有组件 "SUBRC=0",但具有组件 "SUBRC"。called "SUBRC=0", but
there is a component called "SUBRC".
这个槽点满满。看看错误的语句与正确的语句的区别:
错误:WHILE sy-subrc=0.
正确:WHILE sy-subrc = 0.
问题在哪里?看出来了没?少了空格!!!这是一个把空格提升到至高无上地位的神奇语言。
让我们再看看OO部分,这里定义2个类作为例子:
* Class
Declarations
CLASS application
DEFINITION.
PUBLIC
SECTION.
METHODS: show_text.
PRIVATE
SECTION.
DATA text(100) TYPE c VALUE 'This is my first
ABAP Object.'. "
类成员的私有变量,【实例属性】 用 -> 符号访问
ENDCLASS.
CLASS Vehicle
DEFINITION.
PUBLIC
SECTION.
CLASS-DATA class_name(10) TYPE c VALUE
'Vehicle12'.
" 类成员的公有变量,【静态属性】 用 =>
符号访问
METHODS: accelerate,
show_speed.
PROTECTED
SECTION.
DATA speed TYPE i.
ENDCLASS.
* Class
implementation
CLASS application
IMPLEMENTATION.
METHOD
show_text.
WRITE text.
"
类方法调用私有变量
ENDMETHOD.
ENDCLASS.
CLASS Vehicle
IMPLEMENTATION.
METHOD
accelerate.
speed = speed + 1.
ENDMETHOD.
METHOD
show_speed.
WRITE: / 'Speed', speed.
ENDMETHOD.
ENDCLASS.
"Vehicle
我已经无法再吐槽了。本来以为C++里面把头文件和定义文件分开已经够了。结果你还要专门声明这是definition,这是implementation……还得有个END
真的,非常同意王垠对Java的评价了,没啥特别大的缺陷。
class Application {
Application() {
text = "This is my first ABAP
Object.";
}
public
void show_text() {
System.out.print(this.text);
}
private
String text;
}
class Vehicle{
Vehicle(){
speed = 0;
}
public
void accelerate(){
speed += 1;
}
public
void show_speed(){
System.out.print("\n
Speed"+speed);
}
private
int speed;
}
若是看ABAP的代码,真是满屏幕的METHOD、CLASS字段,而真正的变量名和方法名被埋没其中,很难查找。
可以再对比下写在一起的情况:
—————————————————————————————————————————————
居然把Integer的名称简化为I
那么变量名似乎就不能取为I了,类名就偶尔用用,使用的频率哪里够变量名高啊!
居然有教材这么写一个IF语句:
IF sy-index = 2. CONT INUE.
ENDIF.
显然运行不了。但是我该怎么改呢?不得不吐槽下,ABAP以点号结尾相当有迷惑性。
以Java的OO思维,2难道是一个类的实例?然后里面有个叫做CONT的方法?在使用CONT方法时传递
INUE类的ENDIF参数?
其实写成这样就清楚了:
IF sy-index = 2.
CONTINUE.
ENDIF.
突然觉得Java或者C里面多写点括号的好处了:
if(sy.index==2){
continue;
}
多么简洁易懂
WHILE sy-subrc=0.
数据对象 "SY" 没有组件 "SUBRC=0",但具有组件 "SUBRC"。called "SUBRC=0", but
there is a component called "SUBRC".
这个槽点满满。看看错误的语句与正确的语句的区别:
错误:WHILE sy-subrc=0.
正确:WHILE sy-subrc = 0.
问题在哪里?看出来了没?少了空格!!!这是一个把空格提升到至高无上地位的神奇语言。
让我们再看看OO部分,这里定义2个类作为例子:
* Class
Declarations
CLASS application
DEFINITION.
PUBLIC
SECTION.
METHODS: show_text.
PRIVATE
SECTION.
DATA text(100) TYPE c VALUE 'This is my first
ABAP Object.'. "
类成员的私有变量,【实例属性】 用 -> 符号访问
ENDCLASS.
CLASS Vehicle
DEFINITION.
PUBLIC
SECTION.
CLASS-DATA class_name(10) TYPE c VALUE
'Vehicle12'.
" 类成员的公有变量,【静态属性】 用 =>
符号访问
METHODS: accelerate,
show_speed.
PROTECTED
SECTION.
DATA speed TYPE i.
ENDCLASS.
* Class
implementation
CLASS application
IMPLEMENTATION.
METHOD
show_text.
WRITE text.
"
类方法调用私有变量
ENDMETHOD.
ENDCLASS.
CLASS Vehicle
IMPLEMENTATION.
METHOD
accelerate.
speed = speed + 1.
ENDMETHOD.
METHOD
show_speed.
WRITE: / 'Speed', speed.
ENDMETHOD.
ENDCLASS.
"Vehicle
我已经无法再吐槽了。本来以为C++里面把头文件和定义文件分开已经够了。结果你还要专门声明这是definition,这是implementation……还得有个END
真的,非常同意王垠对Java的评价了,没啥特别大的缺陷。
class Application {
Application() {
text = "This is my first ABAP
Object.";
}
public
void show_text() {
System.out.print(this.text);
}
private
String text;
}
class Vehicle{
Vehicle(){
speed = 0;
}
public
void accelerate(){
speed += 1;
}
public
void show_speed(){
System.out.print("\n
Speed"+speed);
}
private
int speed;
}
若是看ABAP的代码,真是满屏幕的METHOD、CLASS字段,而真正的变量名和方法名被埋没其中,很难查找。
可以再对比下写在一起的情况:
—————————————————————————————————————————————
CLASS vehicle2 DEFINITION. PUBLIC SECTION. METHODS: accelerate IMPORTING rate TYPE i, show_speed. PRIVATE SECTION. DATA speed TYPE i VALUE 0. ENDCLASS. CLASS vehicle2 IMPLEMENTATION. METHOD accelerate. speed = speed + rate. ENDMETHOD. METHOD show_speed. WRITE: / 'Speed', speed. ENDMETHOD. ENDCLASS | class Vehicle2{ public void accelerate(int rate){ speed += rate; } public void show_speed(){ System.out.print("\n Speed"+speed); } private int speed = 0; } |
CLASS circle DEFINITION. PUBLIC SECTION. METHODS get_area IMPORTING value(i_radius) TYPE i RETURNING value(r_size) TYPE f. PRIVATE SECTION. CONSTANTS pi TYPE f VALUE '3.14159265'. ENDCLASS. CLASS circle IMPLEMENTATION. METHOD get_area. r_size = i_radius ** 2 * pi. ENDMETHOD. ENDCLASS. —————————实例方法调用——————————— PARAMETERS radi b221 us TYPE i. " 创建一个输入框 DATA: o_circle TYPE REF TO circle, area TYPE f. CREATE OBJECT o_circle. CALL METHOD o_circle->get_area EXPORTING i_radius = radius RECEIVING r_size = area. WRITE: / area. area = o_circle->get_area( radius ). WRITE: / area. | class Circle{ private final float pi = (float) 3.1415926; public float get_area(int i_radius){ float r_size = (i_radius^2)*pi; return r_size; } } ———————————实例方法调用————————— int radius; Scanner sc = new Scanner(System.in); radius=sc.nextInt(); Circle o_circle; float area; o_circle = new Circle(); area = o_circle.get_area(radius); System.out.println(area); |
相关文章推荐
- Java网络编程---I/O部分学习笔记整理
- 数据连接部分通过测试源代码-----java学习笔记之4
- Combres库 学习小结以及部分源码分析
- [零散篇]Java学习笔记---Java的对象序列化以及文件IO处理
- Java学习笔记---7.面向对象编程02-类的封装性以及构造方法
- SAP ABAP/4学习--学习使用OO在ABAP中.简单入门概念.用个例子来说明
- java学习之ArrayList和HashSet的比较以及HashCode分析
- ABAP--关于OO ABAP的学习资料连接列表
- 看完think in java第8章后的想法以及对java 1.5以后版本泛型的学习笔记
- java正则表达式学习总结,以及和javascript正则表达式的区别
- ABAP--关于OO ABAP的学习资料连接列表
- java 学习笔记(core java)部分
- ABAP--关于OO ABAP的学习资料连接列表
- Java IO部分的学习笔记
- java学习中常见比较模糊的部分
- SAP ABAP/4学习--学习使用OO在ABAP中.简单入门概念.用个例子来说明
- ABAP--关于OO ABAP的学习资料连接列表
- JAVA中API的学习先后,以及查询网址和JAVA技术论坛
- 设计模式学习笔记以及java代码实现
- 字符集编码以及java乱码问题学习总结