美文网首页
ABAP面向对象

ABAP面向对象

作者: TheFive | 来源:发表于2021-12-26 16:11 被阅读0次

面向对象程序设计重要概念
面向对象编程是编程范式(programming paradigm)的一种,是目前应用最为普遍的一种编程方式,但并不是说面向对象编程代表了编程范式的最“先进”形式,它仅仅是众多编程范式中的一种。
经常用于对比的过程化编程,与面向对象编程一样,同属于结构化的程序范式。面向对象的程序设计对比同等的过程化设计有相对的优势,但这并不代表面向对象的程序设计就超越了其他所有的编程模式,其他的编程模式在特定的要求下也具有不可替代的优势。
这里列举几种常用的编程方式和代表语言,如Haskell和Scheme所代表的函数式编程,Smalltalk和Java支持的纯面向对象编程,C++、Ruby、Python代表的多种范型编程,等等。
然而编程语言与编程范式并不能画等号,不同的人在不同的需求下,可以用一种语言编写出不同的范式代码,如C++可以支持过程化编程、面向对象编程和泛型(模板)编程。
而混合两种泛型的程序也很常见,如ABAP程序就支持过程化的传统ABAP和面向对象的ABAP混合在同一个程序中。
面向对象的ABAP可以替代传统ABAP的大多数功能,ABAP和ABAP OOP的混编情况与C和C++混编一样并不会让人感到意外。
如果比较面向过程和面向对象两种程序范式,那么面向过程的程序设计是以功能设计为核心的,其首先关注的是需求功能的实现,采用结构化、自顶向下、逐步细化的设计过程;用函数来实现功能,用常量、变量来存储数据,所形成的软件系统是函数和过程的集合。打个不太确切的比方,就像是历史里面的“编年体”史书,“以天时记人事”,以时间为中心,按年、月顺序记述史实。
如表5-1所示,面向对象的方法是将数据和行为进行封装,用属性来存储数据,用行为来实现功能,同时也引入继承、多态等机制,为可重用的软件设计以及降低软件的复杂度提供一种有效的方法。同样打个不太确切的比方,就像是历史里面的“纪传体”史书,“为人物立传记”,以人物对象作为传记的中心叙述史实。

特性
面向过程的方法 面向对象的方法

关注的重点
强调任务(task)强调做这些任务的对象(object)

设计方式
将程序分成不同的部分,成为函数 程序山类和对象组成,功能被嵌入到类的方法中实现

数据安全
大多数的函数能够并享全局数裾 数据可以被隐藏,不被外部资源访问

可扩展性
扩展或修改现有的功能可能会消粍更多的时间
基下以好的设计,必要的新的数倨和方法可以较为容易地添加到程序

5.2.1 封装的概述
首先介绍封装(Encapsulation)的概念。
封装是面向对象程序的第一特征,封装看起来很简单,其实却是面向对象设计中最为重要的一个特征。
封装是一个过程,是对要在程序中处理的业务对象进行抽象,定义成类(Class),隐藏数据和实现细节,公开调用接口。并且,封装过程可以对类的属性和方法的可见度进行限制,将类内的数据和方法授权给需要操作的类或者对象来操作,对不需要操作或者不可信的类或对象进行信息隐藏。
现实世界中很多东西是我们会用但不会制造的,有的东西我们不仅不会制造,甚至连它的工作原理都不知道。
如果我问大家:“谁会用空调?”人人都能做到。
而如果我问大家:“谁能够设计并装配一台空调?”不仅能做到的人不多,甚至了解空调制冷原理的人也不会很多。
封装过程就好比你是一名电器设计师,需要考虑如何设计并制作一台空调,你不仅需要了解空调的原理,并且还要设计出简单易用的方式,提供给普通用户。
空调的工作原理是“逆卡诺循环”(液体气化吸热),即高压的液态制冷剂进入蒸发器中蒸发为低压的气体,从空气中吸收热量而制冷。
空调的室外机里面封闭了压缩机、冷凝器、毛细管等部件,室内机封闭了控制电路、蒸发器等部件,这些组件对用户是不可见的。
用户不必知道里面的电路和压缩机是如何工作的,只要用户会用遥控器,就能让空调正常工作。
如果我们不为空调提供遥控器,而是直接把空调的电线和电路都暴露在外壳外面,使用时需要用户直接对裸露的电线手工对接通电,然后再调整压缩机来设定温度,这不仅不是简单的操作,实际上还是十分危险的操作。
类的封装与上述关于空调的使用比较类似,类封装了一些数据和方法(比如空调的三个方法:开启空调,关闭空调,调节温度);类的方法的具体实现也很复杂(比如空调这些方法的实现都涉及了电路操作、压缩机调节等对于普通用户来说有相当难度的细节)。而我们没有必要让用户了解如此复杂的细节,用户只需要正确地按照说明书使用,即可让空调正常工作。
封装就是为了隐藏细节和数据,隔离复杂度,如果要调用类执行业务,那么只需要正确调用类的方法即可,不需要了解被调用类内部的具体实现。
封装同时也是对数据安全的一种保障,我们可以为类的属性或方法添加控制权限,用私有声明来隐藏和隔离数据,这在一定程度上还可以保证业务和封装数据的安全性。
也有一些理解,认为封装就是为了保障数据安全,这样才能防止一些经验不足的程序员的代码误操作,甚至还可以防止经验太足而“节操”不足的程序员预留漏洞,供以后随意获取数据和篡改逻辑,其实这并不是封装的主要目的。

对于封装这一术语,我们还是查一下字典,体会一下其原意。我们用《牛津词典》查看原词(Encapsulation)的解释:
Encapsulation~sth(in sth)(formal)to express the most important parts of sth in a few words,a small space or a single object——简述;概括;压缩。
可见“封装”的原意就是“用几句话描述一个事物最重要的部分”,是简述和概括的意思,从英语的原意中可见封装的根本目的是简要地描述清楚一个事物,由此可以说数据隐藏和保护数据安全并不是封装的主要目的,仅是附加功能而已。
面向对象中封装的主要目的具体如下。
1)在数据结构设计阶段:封装是业务逻辑抽象的软件实现过程,封装是以业务抽象设计为输入,经过数据结果的封装而产出的一组类和实现代码。封装是为了实现良好的业务逻辑的抽象设计,能够让类之间可以良好地表现业务逻辑,同时也是为了应对未来的业务需求变化和产品升级,能够经得起需求变化而最大限度地保持代码重用,这是面向对象编程的最核心的思想之一。
2)在开发阶段:封装是为了能够进行良好的模块化分工,隐藏其他团队或人员不需要了解的属性和实现细节,仅公开完整且必要的接口方法,简化工作,提高协作效率,同时用较小的成本来防止在编程过程中产生易对数据进行误操作的代码逻辑的可能性,从而提高软件的稳健性。
3)在系统运行阶段:可以按预定的业务要求去控制属性读写的访问等级,按特定的访问权限来使用类的属性,防止业务中的不可信逻辑对类对象的随意访问和修改,从而防止相应的误操作。
如表5-2所示,类可以将数据和方法分装成3个不同的可见度,在ABAP OOP中,这些可见度可用以下语句进行定义。

·公共可见部分(PUBLIC SECTION):在此部分声明的数据和方法在任何类(包括友元类)和程序中都可以访问。
·受保护的可见部分(PROTECTED SECTION):在此部分声明的数据和方法在类本身和类的子类或者友元类中可见。
·私有可见部分(PRIVATE SECTION):在此部分声明的数据和方法在类本身及其友元类内可见。

相关文章

网友评论

      本文标题:ABAP面向对象

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