`
阅读更多


一、编程的任务

    编程只是分配做以下三件事:1)描述要计算什么;2)将计算序列分解成小的步骤;3)计算时管好内存分配。

    也许,如何分配这三件事的工作,也是低级语言与高级语言的一点差别所在吧。毫无疑问,1)是所要解决的主要任务,属于“问题域”的核心问题;而2)、3)只是类似“行政工作”的辅助任务而已,只是“实现域”中琐碎的具体手段。理想状态下,我们只需把注意力集中在1)上面,而不用为2)、3)分心。如果由Computer本身自动处理“行政工作”,由Programmer关注业务层面的分析、设计和编码,编程的过程会直接、容易得多吧。

    或许,判断某种语言构造的高低也有了一个标准:是否移除了足够的“行政工作”。从这个角度来说,C不是高级语言,C++也不是合格的高级语言:(,当然也不能抹杀C++中的模板和泛型。伴随语言的演化过程,我们的关注焦点也是逐渐提前、逐渐缩小。Joyner甚至认为,高级语言最重要的特性就是免去程序员进行这些琐碎的行政工作之苦,“这一特性比‘面向对象’本身更重要,应当是所有现代编程方法的内在本性”。

二、类型的作用

    很多语言,记得刚开始学习的第一步,都是类型。提到类型,这总会没来由的让我想起亚里士多德提出的对西方文明作出巨大贡献的动物分类系统。动物有有血的、无血的,程序中的变量有整型的、有字符型的等等。其中的区别,也许在于动物之间不能像程序里的变量一样强制转换吧 -_-!

    编程语言里,类型系统是做什么的,为什么需要类型?Cardelli说,“类型系统的基本作用在于避免程序在运行过程的执行错误”。简而言之,类型定义了实体的属性与行为,而类型系统的作用,就在于基于语法检查之上,负责对实体的操作是否符合该类型所定义的属性的检查,也就是语义层面的检查。

    按照类型系统,程序语言可以分为有类型的和无类型的。对于有类型的语言,静态的类型检查语言与动态类型检查的语言的区别在于前者在编译时就能保证只有合法的操作才能施与某一类型的实体。

    随着编程语言的演进,类型与类型系统也在不停地发展。从FORTRAN、COBOL到ALGOL,改进编程语言的办法是发明新的编程语言来处理不同种类的实体。自从OO之后,以类为媒介,我们可以自己定义自己所需的类型,因为语言本身已经提供了扩充语言已有实体的机制。

三、封装或隐藏

    提到OO,就不能不提到OO的三驾马车之首:封装。是的,我们都知道封装,可是封装什么呢?首先把数据和操作揉合到一起,然后就开始把数据隐藏?

    封装的目的是隐藏数据么?如果一个实体把关于数据的一切都隐藏了,这个实体还有什么意义呢?存储数据的真正目的是是数据可以访问而不是拒绝访问或是隐藏他们。噫,难道是隐藏操作?哈,把数据公开把操作隐藏,那可是一个标准的结构体,和OO无关。

    翻开书本,封装encasulation的定义是“to enclose in or as in a capsule”,在OO中的作用在于保护类的实现部分不受外界破坏。关键在于,实现和接口的分离。我们要隐藏的既不是数据也不是操作而是实现,我们要公开的既不是数据也不是操作而是接口。把所有的数据都设为private然后写上一堆的get、set 函数是令人厌烦的,想想C#提供的属性都作了些什么:公开的一致的接口界面,和隐藏起来的Get、Set的计算细节。

    某个曾经在《程序员》上大放厥词的公司的CTO说到,“面向对象把数据结构包在对象里面,外面的功能就不再受数据结构的变化的影响”,但是“对于大型企业的业务系统来说,数据是长期稳定的,业务过程或者说对象的接口才是变化无穷”,所以“对象包装了稳定的东西,把不稳定的东西暴露出来”,导致了“从总体上看,软件还是不稳定”。哦不,面向对象编程并不是用来解决业务层面复杂多变的需求变更的灵药,尤其是如果前期没有作好面向对象分析和面向对象设计的时候。同时,OO的封装也并不是把数据藏进去,把方法签名拉出来那么简单。真正要隐藏的,仅仅是对接口的实现方式而已,数据并不是天生隐藏的~~

分享到:
评论

相关推荐

    ABAP OOALV学习文档

    ### ABAP OOALV 学习文档详析 #### 一、ABAP OOALV 概述 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种用于SAP系统的高级列表显示技术,主要用于生成复杂的报表和列表视图。自R/3 4.6C版本起...

    OOALV常用功能完整简例

    标题中提及的“OOALV常用功能完整简例”,描述中说明了该简例包含的内容:热键单击、双击、帮助、编辑和自定义工具条等。OOALV是指面向对象的ALV,它是在SAP系统中常用的报表输出组件,用于将数据以表格形式展示。在...

    实战OO 用例 建模

    实战OO_用例建模 实战OO_用例建模 实战OO_用例建模

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    在本课程中,我们将深入探讨SAP ABAP的面向对象技术在ALV(ABAP List Viewer)中的应用,这是SAP ABAP开发学习的第10课,专注于OOALV。这个主题对于任何想要在SAP系统中进行高效数据展现和处理的开发者来说都是至关...

    oo2core_6_win64

     1、Windows 95/98/Me系统,将oo2core_6_win64.dll复制到C:\Windows\System目录下。  2、Windows NT/2000系统,将oo2core_6_win64.dll复制到C:\WINNT\System32目录下。 3、Windows XP/WIN7/win10系统(64位系统对应...

    OO4O简介以及其在VC++中的应用

    ### OO4O简介及其在VC++中的应用 #### 摘要 OO4O(Oracle Objects for OLE)是Oracle公司推出的一种高级底层接口,专为基于Oracle数据库的应用程序开发而设计。它提供了快速访问Oracle数据库的能力,并且兼容微软...

    ABAP OOALV报表开发

    ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数

    SAP OO ALV技术介绍.pdf

    SAP OO ALV技术介绍 SAP OO ALV技术是SAP系统中的一种报表控件类,通过调用cl_gui_alv_grid类的方法可以实现ALV报表的显示。OO ALV技术可以满足大多数ALV需求,但有时需要与后续的屏幕开发等集中在一个屏幕中,或者...

    ABAP OO的八个理由

    【ABAP OO的八大理由详解】 1. 数据封装与稳定性:ABAP面向对象(OO)编程的核心优势之一是数据封装,它将数据和操作数据的方法捆绑在一起,形成对象。这提高了程序的可维护性和稳定性,因为对象内部状态的改变对...

    实战OO的pdf自留备份

    《实战OO》是一本深入探讨面向对象(Object-Oriented, OO)编程技术的书籍,主要针对软件开发人员,特别是那些关注于软件设计流程和优化的开发者。此书的PDF版本是作者或读者为了个人学习和参考而留存的备份,包含了...

    ABAP oo的8个理由

    ABAP Object-Oriented (OO) Programming 是 SAP 开发环境中的一个重要里程碑,它引入了许多现代编程范式的概念,显著提升了代码的可维护性、稳定性和重用性。以下是 ABAP OO 的八大理由,以及对这些理由的详细解释:...

    OO4O(Oracle Objects for OLE C++ Class Library)

    Oracle Objects for OLE (OO4O) is a product designed to allow easy access to data stored in Oracle databases using any programming or scripting language that supports the Microsoft ...

    oracle oo4o安装包part1

    oracle oo4o 817安装包oracle oo4o 817安装包oracle oo4o 817安装包

    SAP OO ALV技术介绍.pptx

    SAP OO ALV技术介绍 SAP OO ALV技术是SAP系统中的一种报表控件类,通过调用cl_gui_alv_grid类的方法set_table_for_first_display可以实现ALV报表的显示。OO ALV技术相比于标准函数REUSE_ALV_GRID_DISPLAY和REUSE_...

    [SAP ABAP开发技术总结]ALV详解(Fuction ALV 和OO ALV)

    [SAP ABAP开发技术总结]ALV详解(Fuction ALV 和OO ALV) 图文并茂,详细介绍了Fuction ALV 和OO ALV的相关开发 [SAP ABAP开发技术总结]ALV详解:Function ALV(一) [SAP ABAP开发技术总结]ALV详解:Function ALV...

    需求分析_OO分析

    PPT,需求分析,OO分析前言,PPT,需求分析,OO分析前言,

    基于OO4O和VC 6.0 实现Oracle数据库操作C++源代码程序小实例

    在本实例中,我们将深入探讨如何使用Object Oriented for Oracle (OO4O)库和Microsoft Visual C++ 6.0(或Visual Studio .NET)来实现对Oracle数据库的C++编程操作。OO4O库是Oracle公司提供的一个接口,允许开发者...

    oracle_sdk(OO4O)

    Oracle SDK(OO4O)是Oracle公司提供的一个用于在Visual C++环境中与Oracle数据库进行交互的接口。OO4O代表“Oracle Objects for OLE”,它允许开发者使用COM(Component Object Model)技术直接在C++代码中执行SQL...

    ABAP OO去掉ALV中的标准工具栏

    在ABAP面向对象编程(ABAP OO)中,经常需要对ALV(Application List Viewer)进行定制化的控制,包括移除或隐藏某些默认显示的工具栏功能。这通常是为了提供更简洁、更符合业务需求的用户界面。本文将详细介绍如何...

Global site tag (gtag.js) - Google Analytics