zoukankan      html  css  js  c++  java
  • 关于抽象

    我理解的抽象

    记得是去年8月份。第一次听到抽象这个词语,觉得它很很神秘。所以花了很大的力气去理解它,期间包括看了很多的书籍也查了很多的资料。但是当我真的触摸到它的时候,才发现它真的是比我想象中的要难很多。

    所有的编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。所谓的“类型”是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象。接着出现的许多所谓“命令式”语言(如FORTRAN.BASIC.C等)都是对汇编语言的抽象。这些语言在汇编的基础上有了大幅的改进。但是它们所做的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决问题的结构来考虑。程序员必须建立起在机器模型(位于"解空间"内,这是对问题建模的地方,例如计算机)和实际待解问题的的模型(位于“问题空间”内,这是问题存在的地方,例如一项业务)之间的关联 ---<<thinking in java>>

    抽象

    我目前所理解的抽象,就是一个建模的过程。这里的模不单单只是模型的意思。举个例子
    比如java Socket就是对TCP/IP的一种抽象。我们在操作的时候不用直接操作TCP/IP各种底层协议,也不用去了解它的底层的具体实现。编程的时候我们只需要关注Socket这个对象,操作这个对象就行了。

    正确的抽象

    抽象其实并不难,但是如何正确的抽象才是抽象过程的难点。举个例子开放平台商品上传的例子
    商品上传,包括商品属性的上传和商品图片的上传。那么在这个抽象过程中,我们赋予这个对象的接口是只单单是上传接口:

    public interface ItemTransUploadService {
    
    	void uploadItem(GoodUploadBO goodsUploadBO);
    
    	}
    

    还是分为上传商品接口和上传图片接口呢?

    public interface ItemTransUploadService {
    
    	void uploadItem(GoodUploadBO goodsUploadBO);
    
    	void uploadPic(PicBO pic);
    
    	}
    

    这个就需要根据实际的需求来考量了。如果外部需要区分ItemTransUploadService的这两个行为,那么就需要把两个接口独立出来。如果不需要那么写在一起也是可以的。

    而根据抽象的维度不同,我们抽象出来的对象接口数量也会不同。如何正确的抽象是抽象中的难点。

    抽象的误区

    在刚接触抽象那会儿,特别是看了几个设计模式以后。觉得抽象就是,把一些有共同行为的对象,一抽抽成一个父类,然后由这个父类派生出各个子类。
    包括网上很多资料中,搜索抽象的时候。避免不了会涉提及到interface和abstract。
    其实interface和abstract只是抽象的一个结果。当我们利用interface和abstract往往是想利用其多态性质来进行程序的解耦。

  • 相关阅读:
    如何使用Linux命令实时查看最新的日志信息
    什么是缺陷(bug)
    APP 崩溃测试点小结
    软件测试之权限测试
    web安全测试之 xss攻击
    URL详谈
    随机生成名字或短句代码机
    JAVA环境变量配置
    Properties类与读取properties文件
    JAVA 打印九九乘法表
  • 原文地址:https://www.cnblogs.com/iMouseWu/p/4234690.html
Copyright © 2011-2022 走看看