精華區beta Programming 關於我們 聯絡資訊
※ 引述《[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"的狂狷不馴;屬於年少的輕狂色彩