浅释"面向xxoo"
来源:互联网 发布:咕咚刷步数软件 编辑:程序博客网 时间:2024/05/19 02:20
问: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说:“数据(对象)通过某一过程发生改变或与其他产生数据(对象)进行逻辑交互”,你会首先注意这个对象是怎么回事。语言之所以号称“面向对象”,只是它有些更贴合我们人类表达方式的特性,跟语法糖相似。有国外教授反对学校教“对象”语言,认为这让人偏离了真正的“道”。反正横竖都好,就看人怎么用了~
好的,扯完~。
区区半吊子,不敢议论长短的。若能减轻初学者的一丝丝疑惑,足矣~
- 浅释"面向xxoo"
- XXOO
- xxoo
- 妹子图XXOO
- 网络爬虫:抓取XXOO图片
- XXOO 传说90黑阔论坛
- 不用go-(xxoo)agent的也有可能是程序员
- webdriver遇见的can not XXOO webdriver解决方法
- BFS、DFS——surrounded-regions矩阵包围XXOO
- 我如何用前端技术得到XXOO网站的VIP
- 第一次玩github,第一个开源小项目——xxoo
- fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory
- 263企业邮箱在foxmail上的成功设置(smtpwcom/popwcom.xxoo.com)
- fatal error C1083: Cannot open precompiled header file: 'Debug\xxoo.pch': No such file or directory
- fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory
- fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory
- Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory
- java堆 、栈学习(深刻理解String s=new String("xoxo")和String s=" xxoo"的区别)
- 价值共创,价值共享
- weka学习1-数据加载
- MFC中调用Console窗口
- 逻辑卷管理器 (Logical Volume Manager) 之三!
- sharepoint 中添加计时器作业TimerJob
- 浅释"面向xxoo"
- Java语法_方法重载的说明之一
- 使用VC++和CRT库定位和排除内存泄漏
- 对于刚毕业的,工作上遇见一个好的老大至关重要
- android图片特效处理之光晕效果
- JavaScript大牛:Douglas Crockford
- sharepoint 使用feature 是用到的一些命令
- 哲理故事与管理之道(6)-看学历更要看能力
- DEV中背景颜色和字体颜色改变