※ 引述《[email protected] (10/100天自我觀察)》之銘言:
> 1.指導小弟的人說,合作做系統開發是要用分層的架構
> ====================================
> 其實,我也是第一次開發這種大程式的
> 我作東西是與人有分層,而層與層之間是使用callback機制
> 而callback機制的實用是用傳統的方式
> 就是 concrete class 去繼承一個原本已經談好的abstract class
> 而下層要將資料傳到上層的時候
> 下層的人只要去呼叫 the pointer to object of abstrct class
> 上的pure virtual function 即可
一般而言都是這樣做。
> 而concrete class 則是由上層的人來實現。
> 這concrete class 與 abstract class是分別定義在不同的 .h檔裡的
> 而concrete class的實作 本身就要使用到 非常多的 .h檔
> 這些.h檔含有很多class,但是這些class彼此之間又很頻繁的要去使用到
> 別個.h檔 的class 作P 或者 像 P* 之類的指標參數
讀過 design pattern 的人應該要有一個基本 sense:
「要針對介面寫程式,不是針對實作寫程式。」
^^^^ ^^^^
(abstract) (concreate)
因為這裡是講 C++,
所以我是拿 C++ 的術語來跟你解讀那句話,
也請學 Java 的人請勿吐槽。
換言之你應該讓你的 concrete class 盡可能與 abstract class 相依,
而不是讓 concrete class 跟 concrete class 相依,
否則很容易就會出現你那種 header files 要交互 include,
然後在那邊困擾半天 forward declarations 要怎麼擺,
header guards 怎樣放的情形。
> 這些是我還沒使用 template的。
雖然 template 是一種解決 header files 交互參照問題的方法之一,
但通常會是用來解 abstract classes 之間的交互參照問題,
而通常出現這類情形表示有 generalize (一般化/泛化) abstract class 的需求,
並非單純只是拿來當作通過編譯的骯髒手段而已。
> ====================================================================
> 3.如果說把全部的程式碼都全寫在一個檔案下我懂,但許多檔案時便知自己沒概念
> =======================================================================
> 我總是對於這種牽址到要跨資料夾的,很理不出頭緒
> 而我對編譯的概念一直不是很搞的清楚,有時候自己只會知道,這邊如果沒宣告會錯
> 這邊如果沒有include會錯,但是就是不能曉得說,是編譯跟連結間,他們的原理是怎樣
> ,因此我們才知道 什麼時候 要include ,什麼時候要 宣告。
上面一篇回給你了,
C++ 爸爸的 The C++ Programming Language 這本書,
大概第十章左右會講到多檔編譯的原理,
我也建議你去翻翻這一章,
因為我不可能在這全部都講給你聽。
> 然後像別人如果又來搞個全域變數的東西時,可能又變成說摸索怎樣去compile
> 才把這全域變數用進來。這樣都是一直try and try的
這種東西絕對不可以用 try 的,
你一天不搞清楚通則,
你就沒辦法成為獨當一面的 programmer。
這東西是基本觀念問題,
會就是會,
不會就是不會,
就是亂來,
不可以這樣。
連通過 compile 和 link 都要用 try 的才行的話,
是不可以寫程式的。
> 但是不是說如果有聽編譯器的課,可能就會比較清楚知道,什麼時候自己要幹嘛
其實特定語言的 programming design (程式設計,非「程式語言」) 教科書,
應該會先幫讀者複習一下計概 (尤其是記憶體位址、編譯/連結原理),
才開始教你寫 hello world,
稍微注意一下 C 程式設計的原文書,
第一章常常會是介紹類似計概的東西,
一堆老師不上跳掉,
學生自己也不看,
這樣子是不可以的。
> 就不用一直不斷的try了呢? 因為指導的人本身沒有許多檔案下的開發經驗,
> 所以我一直在研究怎樣才能夠順利的在多檔案下開發,
> 也許就是因為沒概念又經驗不夠,所以開發的動點總是變成在處理這一堆檔案。
如果你還是學生的話,
而且是大學生的話,
而且是資訊相關科系的話,
去把教你程式設計的老師抓來問,
他當初就有責任該把你和你同學教會,
如果他當初真的連提都沒提過,
你個性夠激進的話可以叫他退你學分費。
程式設計課通常開在大一,
這真的不是學生不看書學生不用功就能推卸掉責任的,
「實務經驗的傳承」本身就是實務課程教師應該傳授的東西,
這真的真的真的是你應當擁有的權益,
所以就算是你已經畢業了,
你都有資格抓他來問清楚。
我說這些話不是指你程度不好或不用功,
你顯然是很願意上進的人,
只是現在就算是台灣的前三所學校,
也有老師在隨便亂教,
我對這種狀況真的是很不滿而已,
當然也許你碰到的是好老師只是你當時沒注意聽,
導致你一失足成千古恨,
也許你根本就是非資訊科系的,
所以上面找老師問清楚之類的話也都只是我的假設性建議而已,
倒不是什麼猜測跟評論,
不需要太過於在意。
--
Name: Tseng, Ling-hua E-mail Address: [email protected]
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.252 > ╰─╮
╚╦═╦╝ ╰ * From:61-230-218-171.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎