PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   物件導向是在學什麼??它的定義是?? (https://www.pcdvd.com.tw/showthread.php?t=746868)

michelle_lai529 2007-09-24 10:46 AM

引用:
作者booger
我個人是在語法學到一個階段之後,才開始有一點感覺的
(從運算子多載那邊吧...)


我覺得OO的主要...步驟吧,是先針對介面寫程式,而不是針對實作。
例如用程序導向(c)寫個印表機,一開始就要把函數的參數規劃好,
不然後期會改的很辛苦,例如print_A4(Data d) 或是 print(Data d,int paper_type)
...之類的細節 (結構化程式設計)


用OOP的話,就是先把印表機切成好幾個小類別,
例如進紙匣、噴墨系統、資料串流...等,
然後規劃他們的互動和結構...

這部份如果規劃的不錯,改天你要寫台雷射印表機時,
只要把噴墨系統拿出來,把碳粉系統放進去,
再改一下外觀就可以了

因為物件和物件之間不會管對方的實作,而是用介面溝通,
譬如說碳粉系統不會管進紙匣是哪一種,反正有紙會送來就對了,

也就是說OOP是在比較抽象的地方來作規劃

也有人把這些常用的、經典的物件結構、互動方式...

+1
其實物件導向本身的重點已經不在寫程式身上,而是在於設計工具...
解決一個問題需要哪些工具,而工具本身稍加變動,可以讓工具本身變成系統
是設計出工具,並不是創造出工具,依據設計的藍本,在呼叫時才創造出工具
如同該網友所提,想將某些表格書面化,設計一個印表機的類別,並賦予他功能;想像每次需要時,像哈利波特一樣,呼叫某些咒語,印表機即出現在你面前,又大喊"表格列印",印表機隨即印出您想要的表格,當然您也可以喊"圖形列印",或者其他的,一切都在於您怎麼去設計這個印表機咒語...
這就是物件導向的基本觀念,觀念通了,其實物件導向並不那麼深不可測

RogerShih 2007-09-24 10:55 AM

引用:
作者Xforce
你講的是encapsulation 封裝的概念吧
以類別來說
亞里斯多德最早對類別下定義,魚類,鳥類等

而相同類別通常都有共享的"屬性"(property,field),譬如說腳的數目。與共享的"行為"(method,behavior)飛,走,吃飯,說話等。

既然分出的類別 就有類別的仔細程度的劃分,像是自然類的 界門綱目科屬種
人類向下劃分黑人,白人,黃種人等
越往下區分,性質就會越特定,也會越來越詳細的描訴

你可以說黑人是個人類,但是人類不一定是黑人,因為黑人是人類的子類別,所以將黑人視為人類叫up casting,

既然有了類別,屬於這類別的"東西"就叫作物件,譬如說我是個人(物件),我屬於人類(類別)

我有身高,體重的屬性,我會吃飯,說話等行為



物件是類別的實體化, 所以一體兩面, 一般寫程式比較搞不清楚的是物件的實際運作, 其實多寫就慢慢可以摸出自己的心得了.

話說, 曾有一說學物件導向最好是一開始就學物件導向, 學過太多程序導向的人會比較痛苦.

關於這點我倒是有不少意見, 因為現在的 IDE 太方便了, RAD 中 click 來 click 去寫程式很方便, 程式撰寫的方式很物件導向, 可是學的新手卻學不到物件的精神, 看過很多XX電腦或是XX會培訓出來的, 寫的程式一眼就看得出來沒什麼技巧可言.... :jolin:

passerx 2007-09-24 12:48 PM

linux kernel己經是物件化的os了,只是是用c寫的而已,
物件導向只是個觀念跟所用語言無關,學到精用assembly都可以寫的很OO


BTW:
物件導向的意思只有"用程式語言描述一個物體"這樣而已,
其他的說明只是要讓人更明白而已,但是對多數人來看好像更不明白!






引用:
作者lyl

linux kernel到了百萬行的等級, 也沒使用物件導向, 卻模組切割得很好, 很容易讀懂, 也很好維護


lyl 2007-09-24 01:01 PM

引用:
作者passerx
linux kernel己經是物件化的os了,只是是用c寫的而已,
物件導向只是個觀念跟所用語言無關,學到精用assembly都可以寫的很OO


BTW:
物件導向的意思只有"用程式語言描述一個物體"這樣而已,
其他的說明只是要讓人更明白而已,但是對多數人來看好像更不明白!

我是把物件與模組化的定義分開, 兩者之間有交集, 但也有地方並非等號
linux kenel有使用許多物件的觀念, 但卻不算有繼承的這種東西, 封裝也沒做好 (以最後看的2.4 kernel來講)
到底算不算物件OS呢? 有人說是, 但我還是稱之為模組化

passerx 2007-09-24 01:08 PM

另外要先把程式語言先學好,
不然就會像你不懂英文要如何用英文描述一件事情.

passerx 2007-09-24 01:18 PM

封裝沒做好??什麼意思??
繼承是一定必要的嗎?
沒有繼承就不算是物件了嗎?
再說真的沒有繼承嗎?只是寫法不明顯而已吧!
用c是有一定程度上的限制沒瓣法太直觀的.



引用:
作者lyl
我是把物件與模組化的定義分開, 兩者之間有交集, 但也有地方並非等號
linux kenel有使用許多物件的觀念, 但卻不算有繼承的這種東西, 封裝也沒做好 (以最後看的2.4 kernel來講)
到底算不算物件OS呢? 有人說是, 但我還是稱之為模組化

whoami1 2007-09-24 01:20 PM

物件導向的確是用擬人化的手法
企圖將其介面跟實做分離開來
以達成重複使用及解耦合的目的
其中可以建議透過設計樣式來了解物件導向的實做
物件導向往往要透過實作來重複理解其理論跟原則
物件導向只有一些原則,但怎麼運用卻是存乎一心,並無特定公式可言
雖然依SUN官方教材對OO的定議是封裝繼承多型
但我對OO的定義是行為的界定
希望你可以對OO有自己的看法

lyl 2007-09-24 03:20 PM

引用:
作者passerx
封裝沒做好??什麼意思??
繼承是一定必要的嗎?
沒有繼承就不算是物件了嗎?
再說真的沒有繼承嗎?只是寫法不明顯而已吧!
用c是有一定程度上的限制沒瓣法太直觀的.

物件幾個基本要件, 封裝, 繼承, 動態連結, 多型等
要是一部份做到, 一部份沒做到, 那到底算不算物件程式呢?
你要說linux kernel有沾到繼承, 那我也不反對啦, 但距離很完整的繼承那還有相當差距, 同樣的我覺得那叫模組化還比較貼切

linux kernel就連動態連結也不是很完整...
可以去參考用C++寫的TAO之類的東西, 就知什麼叫做99%物件化程式了

lyl 2007-09-24 03:40 PM

前文所述, 僅是表達Linux kernel離道地的物件程式還有相當的距離, 但並沒說物件程式就一定比較好, 非物件程式就一定不好

物件化的目的是如何讓程式變得很好寫很好讀, 開發速度很快, 很好維護, 很好達到工作分配等等, 但要是太走火入魔, 用太多物件的技巧, 沒啥人看的懂... 那...

軟體工程與模組化設計才是王道, 根據各種需求使用各種工具與方法
像是將driver寫的很物件, 也不是不能做, 但絕大多才幾十到幾百行程式碼, 加上維護的人大都是電機出身, 這樣做就本末倒置了

mulder1031 2007-09-24 10:31 PM

物件導向程式跟物件導向程式語言兩者是不一樣的,很多語言都可以實做出物件導向程式,只要符合三個精神(封裝、繼承跟多形),而程式語言或是RAD若是稱自己為物件導向,是將物件導向的精神融入該語言或開發環境裡了,讓開發人員可以將精神投入開發而不必擔心元件是否無意間漏掉某環節而出現弱點。
基本上物件導向三個精神根本就是人類的抽象思考模式,將之歸納成三個名詞而已,沒什麼好讓人望之生畏,你時時刻刻腦中都是這樣在思考的,只是自己沒有體會出來而已,「世紀末軟體革命」這本書很適合初學者了解物件導向精神的入門書,請注意是「精神」而不是「語言」,再次強調不要搞錯了,很多講物件導向的書籍常發現一個章節就講完三個精神了,剩下的章節對入門者一點幫助也沒有。


所有的時間均為GMT +8。 現在的時間是04:40 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。