看板 Soft_Job 關於我們 聯絡資訊
查詢一下這一系列的文章,感覺好幾篇都在鬼打牆, 從可以從 定性 談到 物件導向 再談到 命名原則... 實在有點獵奇... 小弟就我大學C語言以及 C++ 均獲得 A+ 以及多年的開發經驗來談一下 OOP 好了。 首先,OOP 不完全等與 C++ ,不一定要混在一起談,C++ 的範疇已經遠超越 OOP 了, OOP 的真正精髓在於 P.I.E. (有的時候,Abstract 也會被提及) P 指的是 Polymorphism (多型):   動態或靜態地轉換相同的訊息到不同的類別的物件。   聽起來有點抽象,簡短地說,就是像虛函式以及運算子重載。 I 指的是 Inheritance (繼承):   這好理解多了,看看C++輸入流以及輸出流的繼承關係大概就知道繼承的功能了   http://www.cplusplus.com/img/iostream.gif
  就是因為有很高的關聯性,所以用這個特性可以讓一個語言的功能發揮到極致。 E 指的是 Encapsulation (封裝)   通常指的是一個型態的可見度,通常使用類別來做封裝。 大家有沒有發現,這一切的一切都圍繞著一件東西... 沒錯... 就是類別! C++ 用類別(Class)來封裝(Encapsulation)各式各樣的型態(datatype)以及方法(method) 再讓繼承(Inheritance)去巧妙地處理不同類別可能的相互依賴關係,讓程式變得更好理解 最後,多型(Polymorphism)負責處理剩餘的問題,像是虛函數這種動態的轉換功能。 是不是覺得 OOP 很有趣呢? 這是一個完整的思路,必須要自己慢慢去體會,C++ 的範疇真的已經遠大與 OOP 了! 學好 OOP 不用一年,但是學 C++ 學到精通需要超過五年的時間,除非你是天才, 連 Stroustrup 自己都不敢說他自己精通 C++ 呢... 想要做 OOP 編程也不一定要用 C++,JAVA 也是屬於 OOP 的(閹割版的C++?) 我真心覺得,很多時候,根本用不到 OOP 的,硬是要使用 C++,這讓我覺得有點莫名其妙 一個好的生魚片師傅會去辨別哪種魚要用哪一種刀子, 如果一個自稱高級工程師的人卻不會選擇要使用的程式語言,實在貶低了自己的頭銜。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.241.158.27 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1435929373.A.5F4.html
azureblaze: 不要理他啦這串好不容易沉了 07/03 21:33
noonOut: 給推 不要讓亂版的讓大家不敢討論 07/03 21:48
lachtchlee: 你這 P I E 還 A+ 呢 一定不是啥好學校 07/03 22:15
截錄自 https://www.ptt.cc/bbs/Civil/M.1354714372.A.735.html (Wed Dec 5 2012)
lachtchlee:會不會寫程式對土木人而言不是很重要 Fortran C++忘 12/05 22:14
你不是已經忘記C++了...怎麼還突然口沫橫飛了@@? 拎北113啦~不用說A+啦~OOP還幾霸昏嘞~~~ヽ( ・∀・)ノ 自己都幾歲了,戰學校不無聊嗎?
conanist: 別戰學校拉,五隻手指都不見的一樣長何況是學校 07/03 22:21
※ 編輯: Hazukashiine (111.241.158.27), 07/03/2015 22:27:15
rupcj8: 戰學校的是學生還是生命中最值得說嘴成就的是學歷?? 07/03 22:36
jackylu63: 為什麼只有PIE A(抽象)跑到哪去了? 07/03 22:59
jackylu63: 個人認為是 APIE, A是最重要的一個原則 07/03 23:01
jackylu63: OO要學好, 經驗很重要 OO過與不及都不是好事 07/03 23:05
jackylu63: 我倒覺得C++看書就好了 07/03 23:07
cha122977: Java不是閹割版的C++ 應該說C++有繼承C所以不完全OO 07/03 23:26
noonOut: c++ 是真的很難,oo 也很難,但我覺得兩個是不同方向的難 07/04 00:27
noonOut: c++ 和 java 應該是沒有誰是誰的閹割 07/04 00:28
謝謝,小弟沒有深入研究過JAVA,但是JAVA語言的特性應該比C++再少一些... WIKIPEDIA: Java程式語言的風格十分接近C++語言。繼承了C++語言物件導向技術的核心,Java捨棄了 C++語言中容易引起錯誤的指標,改以參照取代,同時移除原C++與原來運算子多载,也移 除多重繼承特性,改用介面取代,增加垃圾回收器功能。 照這樣看起來,應該是簡化版的C++,再額外增加介面與垃圾回收器的樣子...XD 不是很確定...XD ※ 編輯: Hazukashiine (36.230.110.229), 07/04/2015 00:50:52
deray: 很好呀 誰沒事會覆寫「+」這樣的運算子 07/04 00:53
string append 很方便哩...
GoalBased: 如果要看危機百科才知道這個語言特性.... 07/04 00:54
沒學過的也只能以管窺天了啊 XD ※ 編輯: Hazukashiine (36.230.110.229), 07/04/2015 00:58:54
dream1124: PIE 以外還有一項.... hashCode 07/04 01:09
lovdkkkk: 反正...用得順手就用用不順手就不要用 @@ 07/04 04:05
lovdkkkk: 什麼語言倒是跟 OOP 與否關係不大, 想用的沒有就自己包 07/04 04:07
lovdkkkk: 頂多自己包的語法比較不漂亮而已 07/04 04:08
gname: 為了用而用,是很多程式人的通病 07/04 12:11
lachtchlee: 原po 你是112的 再來用這種口氣跟我說話 沒見過世面 ! 07/04 14:52
112 CE v.s. 113 CS 領域不同,學校不同,八竿子打不著,敢問要怎麼比? 臺灣會淪落至此,有很大一部份就是因為學歷至上, 不願相信專攻領域,只在乎學校名稱,這實在很可悲... 以日本為例: 「一橋大學」在商管領域方面首屈一指, 「東京醫科牙科大學」為齒科方面的翹楚, 「慶應義塾大學」專攻文史學,研究成果卓越, 「早稻田大學」在政治以及經濟領域也十分著名。 每個大學本應注重在不同的領域發展,有其強項,也有其弱項,不能以一蓋全。 臺灣大學肯定是一個著名的綜合研究型大學,但並不代表在各個領域都有執牛耳的地位。 哈佛大學敢說他的電腦科學領域贏過麻省理工學院嗎? 自己好好想想吧...
goldflower: 樓上好像有點可憐…… 07/04 15:25
我也覺得他好可憐 @@ ※ 編輯: Hazukashiine (118.165.146.41), 07/04/2015 16:22:59
dreamnook: @deray: +很好用呀 其實很多operator有定義好就很好用 07/04 16:13
lovdkkkk: 只能推了 「男塾」專出男子漢 07/04 16:31
lachtchlee: 可憐的是這種 P I E 的觀念 還出自major in CS 113 07/04 17:04
我不是在出書,也不是在編講義... 我當然可以可以講解得盡善盡美,但是,這壓根不是這帖子的用意! 請閣下是否能開一個帖子並用相同或更少的字數,更清晰地闡述 PIE 的觀念。 你可以針對我本人,但是不允許你侮辱交大資工系。 ※ 編輯: Hazukashiine (118.165.146.41), 07/04/2015 17:53:32
lachtchlee: 能講得盡善盡美 那很好 交大資工其實是台灣的希望 ! 07/04 18:03
nenpow: 為什麼要把這無聊的討論串拉回來… 07/04 19:03
deanh: 污辱交大資工系的應該是連Abstract都不知道的學生吧 07/04 19:53
deanh: 隨便GOOGLE查一下...幾乎沒有在忽略A的 07/04 19:56
search "OOP" "PIE": 387,000 results https://www.google.com.tw/?gws_rd=ssl#q=%22OOP%22+%22PIE%22 search "OOP" "APIE": 424,000 results https://www.google.com.tw/?gws_rd=ssl#q=%22OOP%22+%22APIE%22 差不到 10% ※ 編輯: Hazukashiine (118.165.146.41), 07/04/2015 20:43:22
cha122977: 大概都在寫C++ 所以沒不太有abstract的概念…吧? 07/04 22:51
cha122977: 常用virtual的話應該會了解? 07/04 22:51
我們老師的投影片也沒有 Abstract 啊... (笑 ※ 編輯: Hazukashiine (118.165.146.41), 07/05/2015 01:22:03
snaketsai: 平心而論你說PIE是對的,其他不予置評 07/05 09:32
snaketsai: 然後建議可以去看一些Design Pattern的書 07/05 09:33
snaketsai: 以及C++ Object Model。C++很深可以非常深,螞蟻書僅是 07/05 09:34
snaketsai: 導覽用。C++很多tricky的東西沒辦法塞進去。 07/05 09:35
snaketsai: 最後老生常談:人要活的謙卑,不然哪天走在路上小心被 07/05 09:35
snaketsai: 怎麼捅的都不知道。 07/05 09:35
snaketsai: 啊忘記說,C++有多重繼承,但JAVA沒有,所以解釋會不同 07/05 09:39
snaketsai: BTW,我是不知道你OOP修誰的啦,如果是YYP的話是恭喜你 07/05 09:41
snaketsai: 可以活過老師的摧殘,但後面的路還很長,加油。 07/05 09:41
謝謝學長給我一點方向... 在打上面一些東東的時候理智線斷了... 我修的是 YYP,老師人很好,只是作業有點多...XD ※ 編輯: Hazukashiine (111.243.62.32), 07/05/2015 10:36:28
csfgsj: 智者複雜的事物簡化,X者將簡單的東西複雜化 07/05 22:05
goldflower: 比如可以把文章塞在一篇就好 結果偏偏要分很多篇嗎? 07/05 23:15
lovdkkkk: 簡化個人覺得有很多角度 07/06 00:17
lovdkkkk: 某個角度的簡化可能是另一個角度的複雜化 07/06 00:17
lovdkkkk: 簡稱 複雜度不滅定律 XDD 07/06 00:17
lovdkkkk: 最終則是看 哪一個角度跟你的腦子比較合拍 07/06 00:18
lovdkkkk: 一樣東西會風行, 最少表示它跟相當數量的人的腦子合拍 07/06 00:18
lovdkkkk: 這些人是智者或 X者 其實無所謂 07/06 00:19
lovdkkkk: 對他們來說,用得順手、能把事做好、有效率,就是好 07/06 00:20
lovdkkkk: 說起來其實沒有對錯,其優劣也是 by 個人或各別團隊的 07/06 00:20
csfgsj: 為什麼一個程式語言需要學五年? 07/06 12:07
csfgsj: 為什麼一個程式會越寫越去模組化?後面越來越難改? 07/06 12:08
csfgsj: 「上輩子做壞事,這輩子做電視」那一家公司的程式 07/06 12:11
csfgsj: 已經快要做不去了,接手的人現在痛苦不堪,偉大的C++ Code 07/06 12:11
csfgsj: 我只要一個功能,可是Class, Framework將十幾個Sku的code 07/06 12:15
csfgsj: 通通包在一起 07/06 12:15
csfgsj: 通通包在一起,要做一個小小的移植都大有問題 07/06 12:16
csfgsj: 現在客戶有特別需求,沒有人敢給Schedule 07/06 12:17
csfgsj: 接手的人看到這一堆滿出馬桶大便不知如何清理 07/06 12:19
csfgsj: 聰明的人看看就跑了,剩下的菜鳥只能靠么上輩子做了壞事 07/06 12:20
csfgsj: 高層還在考慮是不是要將整個產品線幹掉 07/06 12:21
csfgsj: 各位大哥,看了那麼多年,不是在無的放矢 07/06 12:23
csfgsj: 現在只能勉強站著大便,不要沾到自己的屁股就好 07/06 12:27
csfgsj: 然後再堆高另一層大便,不知道什麼時候會垮掉 07/06 12:28
csfgsj: 重構!那可是將煙火彈放在馬桶裡引爆,將老闆嚇得尿褲子 07/06 12:35
csfgsj: 的行為 07/06 12:35
csfgsj: 行行好,家裡還有老婆孩子要養 07/06 12:35
csfgsj: 混口飯吃就好,不要弄得砸飯碗 07/06 12:36