zoukankan      html  css  js  c++  java
  • 道德经与抽象、接口及框架

    道德经常提到的两个字就是“无”和“有”,那这无和有又是什么样的概念呢?不同的人有不同的解答,在不同的领域也会有不同的诠释。道德经中第十一章说到:

    三十辐共一毂(gǔ),当其无,有车之用。
    埏(shān)埴以为器,当其无,有器之用。
    凿户牖(yǒu)以为室,当其无,有室之用。
    故有之以为利,无之以为用。

    这一段将无与有的关系说的相当奥妙,“当其无,有X之用”。这段话是什么意思呢?摘自一段网上的译文:

    三十根辐条汇集到一根毂中的孔洞当中,有了车毂中空的地方,才有车的作用。揉和陶土做成器皿,有了器具中空的地方,才有器皿的作用。开凿门窗建造房屋,有了门窗四壁内的空虚部分,才有房屋的作用。所以,“有”给人便利,“无”发挥了它的作用。

    总的来说,都是需要先有空虚的部分,才能添加相应的部分以实现所需的功能。比如车毂(相当于自行车车轮连着钢筋的部分)要有孔洞的空虚部分,才能将辐条插进去,连接到车轮圈上,这样才能形成可用的轮子,也才能发挥车的作用。再如器皿,要有中间空虚的部分,才能用来装东西,也才能发挥器皿的作用。对于房屋也是一个道理。

    那这与我们编程中的抽象、接口及框架又有什么关系呢?

    我们知道抽象类一般是基于多个类共同点的抽象,然后要实现具体的功能时,再从抽象类中去继承实现。而在进行抽象的时候,我们并不会直接实现所抽象的部分,只是作了一些声明。比如有公共汽车和摩托车两种机动车,他们的共同点都是机动车,都有速度和加速,所以把这些给抽象出来 ,形成一个类,下面是JAVA的代码:

    package com.example;
    
    public abstract class Vehicle {
    	
    	public double Speed=1;
    	
    	public abstract void Accelerate();	
    	
    }
    

    这里,Vehicle是一个机动车的抽象类,Accelerate是加速,但只是声明了,并没有去实现,是一种无,是空的、虚的状态。下面我们再依据Vehicle的Accelerate的空虚部分去添加相应的内容,达到所要的功能。代码如下

    package com.example;
    
    public class Motorbus extends Vehicle{
    
    	@Override
    	public void Accelerate() {
    		// TODO Auto-generated method stub
    		Speed=Speed*2.5;
    	}
    }
    

    package com.example;
    
    public class Motorcycle extends Vehicle {
    
    	@Override
    	public void Accelerate() {
    		// TODO Auto-generated method stub
    		Speed = Speed * 1.5;
    	}
    
    }
    

    我们看到,在公共汽车类Motorbus和摩托车类Motorcycle中各自实现了Accelerate,达到了各自加速的功能。这是将Vehicle的Accelerate的“无”变成了各自的“有”,当无变成有之后,就成了具体的,可利用的。下面是利用的代码。

    package com.example;
    
    public class Test {
    	
    	public static void main(String args[])
    	{
    		Motorbus motorbus=new Motorbus();
    		Motorcycle motorcycle=new Motorcycle();
    		
    		System.out.println("Motorbus:"+motorbus.Speed+"  Motorcycle:"+motorcycle.Speed);
    		
    		motorbus.Accelerate();
    		motorcycle.Accelerate();
    		
    		System.out.println("Motorbus:"+motorbus.Speed+"  Motorcycle:"+motorcycle.Speed);
    	}
    	
    }
    
    下面是利用的效果图。

    所以我们可以看到,从无到有的过程,无是一种抽象的、待实现的,而有是一种具体的、已实现的。而且不只是从无到有,还可以从有到无。也就是当我们有多个功能相似的具体类时,可以抽象成一个抽象的类或者接口。这样就实现了优化,提高了效率和可维护性。

    对于接口也是类似的理解。对于框架也是类似的。比如.NET框架、Android框架,都是对一种高度的无,我们依赖于这些框架可以实现所要的功能,比如基于.NET框架可以实现WinForm/WPF等程序,又如基于Android框架可以做出所要的App。

    对于道德经中的无和有,类同于佛学中的空与色。空是万物皆空,是形相中的无形相,色是世界诸般,是形相中的有形相。而在编程中的无和有,是抽象与具体、框架与应用,感觉很是奇妙。

    以上是个人的浅见。

    转载请注明出处


  • 相关阅读:
    luogu P3704 [SDOI2017]数字表格
    「雅礼集训 2018 Day4」Magic(分治NTT)
    「清华集训 2017」小 Y 和恐怖的奴隶主
    [WC2019]数树(树形dp+多项式exp)
    「FJWC2020Day5-zzq」lg (容斥)
    BoundedOptimization TopCoder
    MapGuessing TopCoder
    线性递推(Berlekamp-Massey 算法)
    杜教筛小记
    「余姚中学 2019 联测 Day 6」解码
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7605032.html
Copyright © 2011-2022 走看看