也不知道这个问题该发在那个栏目里了 就发在51栏目里吧 我想很多菜鸟都和我一样 搞不懂面向对象与面向过程的区别 希望老鸟们多多指教;
在百度里搜索里许多帖子,都讲面向对象与面向过程的区别,但是几乎都讲不明白。我想可能这就是搞硬件出身的和搞软件出身的不能融合到一起造成的吧;
我单片机执行是一步一步的执行的。我先去干这个,然后再去干那个,然后就是等待,这个就是面向过程,但是我很难理解面向对象;(本人没有PC机编程经验,就懂得些单片机)
我想好的实例更能说明一切吧。不要举太多例子,就像刚开始学中断,用烧水洗衣服做饭但是我还是花了好久好久才理解明白中断是干什么的,其实如果用最简单的程序举例,或许几行代码就能说清楚了;
这个问题困扰我好久了。希望老鸟们赐教,谢谢~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
初识对象的时候我们还不知道什么是对象
Java的一个重要特点就是面向对象(Object Oriented), 面向对象是相对于面向过程(Process Oriented)来说的。
E:1.JPG
我们用一个从冰箱中取一杯牛奶的例子来说明面向过程和面向对象的区别。
先用面向过程的思路描述这个过程:
E:2.JPG
再用面向对象的思路描述这个过程:
E:3.JPG
我们把冰箱作为一个对象的时候,问题变得异常简单,冰箱有一个方法就是取牛奶的方法,你调用这个方法,这个方法的返回值就是一杯牛奶。那么现实生活中有这样智能的冰箱吗?有的,找个人站冰箱旁边就行了,把那个人和冰箱合起来包装成一个对象它就是智能冰箱对象了^_^ 。
面向对象的编程语言把所有事物都看成对象:万事万物皆对象
很簡單,
以這個為例
Delay(int x)
{
for(i = 0; i < x; i++)
for(j = 0; j < 20; j++);
}
假如上面代碼在1M晶體時x=10是1ms,
而你需要從外設讀入一些數據,假如是AD結果吧,
你的外設的轉換時間是10ms,1ms,5ms...
如果你是面對過程,則你會在你需要的地方寫下相似的代碼
START AD1
Delay(100)
READ AD1
...
START AD1
Delay(100)
READ AD1
...
START AD2
Delay(10)
READ AD2
...
START AD2
Delay(10)
READ AD2
...
START AD3
Delay(50)
READ AD3
如果你是面對對象,則你會在你需要的地方寫下相似的代碼
READ_AD1
...
READ_AD1
...
READ_AD2
...
READ_AD2
...
READ_AD3
READ_AD1
START AD1
Delay(100)
READ AD1
RETURN AD1
READ_AD2
START AD2
Delay(10)
READ AD2
RETURN AD2
READ_AD3
START AD3
Delay(50)
READ AD3
RETURN AD3
可能你看不明上面代碼有什麼區別,
但你要知道,當你的代碼上了規模後,在你的外設改變了之後,
對於第一代碼,你要找出所有涉及的代碼.
但對於第二代碼,你只要找出相應外設所在的單元,只需改它就解決問題了.
或者這樣說,
對於代碼一,你需要了解整個系統的所有行為,
對於代碼二,你只需要了解整個系統的有那些對象.
更嚴面向過程的代碼是
是連Delay代碼都沒有的
類似
START AD1
for(i = 0; i < 100; i++)
for(j = 0; j < 20; j++);
READ AD1
...
START AD1
for(i = 0; i < 100; i++)
for(j = 0; j < 20; j++);
READ AD1
...
START AD2
for(i = 0; i < 10; i++)
for(j = 0; j < 20; j++);
READ AD2
...
還有,一定要記住,計算機是面向過程的,所以在代碼實現的層次,一定是面向過程的,只有在思考的層面,才有對象/過程之分.
一周热门 更多>