浅释"面向xxoo"

问:JAVA和C有什么区别?
答:JAVA面向对象,C面向过程。
        以上是我很久以前看到的一段对话,当时就觉得有点高深莫测的样子。近日又看到了同样的对话,一时有些不安。于是,就有了这篇小文。先声明本文不是妄论语言长短,只是对“面向xxoo”这种古怪的的说法浅作解释。
        话说自上古洪荒时期盘古抄起家伙劈开那混沌天地以来……很遗憾这与本文无关。
        先扯扯“过程”,这个其实不用解释太多。在我们人类的思想里,干什么事都得通过一个过程。一个过程是几个小过程按序拼凑成的,然后小过程又是小小过程……然后小小过程又是小小小…………(从前有座山……)。计算机也不例外,它解释并按照指令来运作,这里有个过程。程序就是这样,像一系列有序的过程,不管你的程序是用什么语言实现的,也不论你面向哪家闺女,咳~面向对象还是过程~。
        总之,程序设计语言都是用来向计算机表达我们人类的思想的“媒介”。各种奇形怪状的“媒介”会被编译器,或者解释器(JAVA混合两种方式)译成计算机能识别的指令序列。这些人类与计算机沟通的媒介,必然是既要贴合我们人类的表达方式,也要能被计算机所识别。后者是编译器和解释器的事。咱只扯前者,在我们人类的表达方式里很重要的信息载体——对象。
        OK,总算扯到“对象”了。跟“过程”一样,也是我们人类的表达方式。我们平日里听和说的都是“某人某物做某事某某某……”这样的各种对象在一个个的过程里交互着。我表达点具体的:               
        “胡小来开自行车回家。” 对象—胡小来、自行车,过程—开、回家的过程。
        “半路上自行车刹车坏了、踏板折了、轮子掉了。”对象—自行车、刹车阀、踏板、轮子,过程—坏了、折了、掉了的过程。
        “没刹车,胡小来放慢速度开。”对象—胡小来、自行车的刹车阀,过程—减速的过程。
        “没踏板,胡小来滑着走。” 对象—胡小来、自行车踏板,过程—滑的过程。
        “没车轮,胡小来扛着自行车走。”略…………
        “胡小来干脆买了辆新车”
        这便是我们人类的表达方式,各种对象在一个个的过程里交互着。或者说,无所谓什么对象和过程,都只是我们人类的表达方式。……鉴于我也只是个人类,看官请无视我 “无所谓什么对象和过程”这种大逆不道的话吧,毕竟我还得用“它”来表达。
        干扯淡结束,放点代码更有助于意淫~下面用C和JAVA来描述“胡小来开自行车回家”这个场景:
关于对象定义就略了~。

/* C代码*/
//实例化对象,用struct够拉轰嘛~~
struct SHUAIGE *胡小来; //中文名只为方便表述
struct BIKE   *bike;

胡小来 = malloc(sizeof(SHUAIGE));

bike = malloc(sizeof(BIKE));

//初始化略……

      
while( ! BeReachedHome(胡小来) ) //坚定不移地在回家的路上
{
    if( ! BikeIsBroken( bike ))
    {
         DriveBike(胡小来, bike); //没坏?OK那就正常开
    }
    else
    {
        switch( CheckBike( bike ) ) //检查自行车出现哪些问题
        {
            case DEFINE_BIKE_BRAKE_BROKEN: //刹车坏了
                if( ! RepairBike(胡小来,bike) ) //修不好,限速行驶~
                {
                    SetBikeSpeed( DEFINE_BIKE_LOW_SPEED );
                    SetShuaiGeSpeed(DEFINE_BIKE_LOW_SPEED );
                }
                break;  

            case DEFINE_BIKE_FOOTBOARD_RIVED: //踏板折了
                if( ! RepairBike(胡小来,bike) ) //修不好,当滑板车滑着走
                {
                    SkaleBike(胡小来, bike);
                }
                break;
 
            case DEFINE_BIKE_CARTWHEEL_DROPED: //车轮掉了
                if( ! RepairBike(胡小来,bike) ) //修不好,扛着走
                {
                    WalkWithBike(胡小来, bike);
                }
                break;               
             
           default:
                printf(“BUG~这TMD破自行车到底坏成什么样了~”);

        }

    }
    BreakBrake(bike.brake); //刹车坏了
    RiveFootboard (bike.footboard); //踏板折了
    DropCartwheel (bike.cartwheel); //车轮掉了
}

free(胡小来);

free(bike);

/* JAVA代码*/
Human 胡小来= new ShuaiGe(“好帅”); //中文名只为方便表述
Bike bike =胡小来.buyNewBike(“便宜货”);

while( !胡小来.isReachedHome())  //一定要回家~
{
    try{
        胡小来.drive( bike ); //开车,用try catch,对不妙的情况可以挑个方便的地方集中解决
        bike.brakeIsBroken(); //刹车坏了
        bike.footboardIsRived(); //踏板折了
        bike.cartwheelIsDroped(); //车轮掉了

    } catch ( BrakeBrokenException e){
        if(!胡小来.repair(bike)){
            bike.setSpeed( Bike.LOW_SPEED ); //刹车坏了,限速开~
            胡小来.setSpeed( Bike.LOW_SPEED );
        }

    } catch ( FootboardRivedException e){
        if(!胡小来.repair(bike)){
            胡小来.skale(bike); //踏板坏了,当滑板车开~
        }

    } catch ( CartwheelDropedException e){
        if(!胡小来.repair(bike)){
            胡小来.walkWith(bike); //车轮掉了,那就只好扛着走~
        }
    }
}


咱们的两种程序代码其实描述的都是数据(对象)不断变化以实现某功能的过程,只是表达方式不同。
        C说:“在某过程里有一堆数据(对象)进行各种逻辑交互”,你会首先注意这个过程是怎么回事。
        但是JAVA说:“数据(对象)通过某一过程发生改变或与其他产生数据(对象)进行逻辑交互”,你会首先注意这个对象是怎么回事。语言之所以号称“面向对象”,只是它有些更贴合我们人类表达方式的特性,跟语法糖相似。有国外教授反对学校教“对象”语言,认为这让人偏离了真正的“道”。反正横竖都好,就看人怎么用了~
        好的,扯完~。
        区区半吊子,不敢议论长短的。若能减轻初学者的一丝丝疑惑,足矣~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值