2012-01-24 53 views
0

使用的編程模板,我用C++面向對象編程的學生,慢慢地我在學習新的東西。 作爲我的課程演示文稿的一部分,我被要求在一份聲明中發表聲明:大規模系統

「是否正在使用編程模板開發大型系統是合理的?」

我給出下面的文章來研究關於大型軟件系統的軟件架構:

http://www.crystalclearsoftware.com/publications/2001/RepresentingLargeScaleArchitecture.pdf

但看完後我不能決定是否模板應採用同時發展這樣的系統或應該避免。

我熟悉基本概念和使用模板運行時和編譯時的場景,但對於更大的系統是否有任何的複雜性,使用模板或使用模板是在大型系統的開發航行安全?

請突出任何一種方式的原因模板是否應該被用來免掉。

+1

本文似乎對更高級別進行操作,不管這些實現細節如模板。這與你的主題有什麼關係? –

+0

本文只是告訴我有關大系統的體系結構,我認爲在閱讀它之後,我必須決定如何編寫這樣的系統,我們是否應該使用模板。在關於模板的文章中沒有寫出單個詞,因爲這個原因,我們很難決定是否使用模板 –

+0

冒着問明顯的風險,並且由於「使用編程模板」這個術語很好奇,您是否當然,問題是關於具體C++泛型編程結構意義上的模板問題,而不是某種標準化起點的更普遍意義上的問題? –

回答

1

我不會告訴你答案,但我給你這個提示。

問問你自己這樣的:

什麼令人信服的理由使用模板,以及令人信服的理由不使用模板(如編譯時間)?

然後問自己爲什麼。如果這些原因都在大規模系統的有用或有害?

讓我們看看在大型系統。是什麼讓他們變大?這可能是很多東西,如:

  • 的代碼量
  • 用戶數量
  • 規模部署的
  • 地理
  • 發展
  • 成本
  • maintennance

    成本

    等。

現在考慮一些事情,模板是很好的

  • resuabilty和算法

組件化等

怎麼辦這兩援助上面?

  • 金額代碼:很好resuabilty將有助於減少代碼量,以保持
  • 成本的發展:resuabilty將有助於這也是因爲有較少的發展,但它可能會增加成本,如果開發者需要更加熟練。於是一把雙刃劍,有維護
  • 費用:resuabilty將幫助這裏有較少的測試和維護

如果你回答第一個,後者變得更加容易。

沒有正確或錯誤的答案,而是每個系統的設計將根據所討論的系統的實際問題進行分析和決定。

+0

您還必須考慮權衡更高的編譯時間。 –

+0

Well Preet模板既有優點也有缺點,它們可能會導致系統的可移植性差,維護困難,代碼膨脹以及類似問題,但同一方面它們也可以提供很多優點。我是一名學生,我還沒有軟件行業標準,這就是爲什麼我問這個問題。如果我有足夠的知識/經驗,那麼我會決定自己,並沒有要求在這裏給你困擾的人。希望你能理解。 –

+0

沒有問題艾倫 - 我已經添加到答案。 –

3

答案是可能的決定。嚴重的是,它取決於 模板的用途。模板在增加複雜性和耦合性方面具有顯着的成本。替代品也可能有 顯着的成本,然而—當替代品的成本是 高於模板的成本時,則使用模板。 (不管這是 真正的應用程序的大小當然的。但是事情 一樣增加了複雜性和耦合往往有 大項目有更大的影響。)

解決問題之前,您有什麼區別在使用 模板和定義模板之間。 肯定不會使用標準庫中定義的模板,例如: 任何增加的成本都由庫的開發人員支付,而不是由您的 支付,所以這都是好處。類似的論點適用於第三方庫。但是,對於自己定義的模板,必須考慮 對模板定義的修改具有 構建時間的影響。定義幾乎所有的模板是而不是 一個好主意。另一方面,您可能能夠隔離某些功能,並將它們視爲您自己開發的第三方庫,但在極端情況下不會進行修改。有趣的是,模板不會導致問題(低級別,非常穩定的元素)通常是最有用的地方。對於 「應用程序級別」模塊,它們處理實際的 應用程序特定的代碼,反正模板通常並不太有用;繼承更有用。另一方面,對於低層組件,沿着std::vector的 行,它們非常有用; 但是這樣的組件通常與本申請的其餘部分 獨立開發,無論如何必須非常穩定。

+0

非常感謝詹姆斯,這樣一個具體而清晰的答案。 非常感謝。 =) –

1

您的問題非常主觀,我的印象是您不會得出滿足所有大型系統開發人員甚至所有教師的答案。就我個人而言,我會採取更簡單的方式來做某些事情,有時這意味着不能使用模板,有時也意味着讓模板複製這種代碼。編譯時間總是可以用PIMPL或明確的實例化進行防火牆,但是避免使用模板的情況下,它們的使用只會是自然的,可能會導致更多的膨脹,運行時錯誤和性能下降。

我對你的家庭作業的建議:提出所有有利於和反對使用模板的論點,並且不要以肯定或否定的答案結束,而應該在兩者之間做出結論;-)。並且不要讓軟件方法論的狂熱者從你身上獲得編碼的樂趣。

+0

洛爾 是的,我的思想也給了我一個混合的答案「是和不是」。 我懷疑找到這個問題的答案就像參加一場永不會結束的比賽。 –