java難易度 - 自上而下和自下而上的編程




java vs python (6)

為什麼我們說像C這樣的語言是自上而下的,而像Java或C ++這樣的OOP語言是自下而上的? 這種分類在軟件開發中是否有任何重要性?


“自上而下”方法對問題進行了高級定義,並將其細分為子問題,然後您可以遞歸執行這些問題,直到您看到明顯且易於編碼的部分。 這通常與編程的“功能分解”風格有關,但不一定如此。

在“自下而上”編程中,您可以識別可以組成的較低級別的工具,以成為更大的程序。

實際上,幾乎所有編程都是通過多種方法完成的。 在面向對象編程中,您通常通過識別域對象(這是一個自上而下的步驟)來細分問題,然後對其進行細化,然後將這些對象重新組合到最終程序中 - 自下而上的步驟。


C是結構化語言,程序序列從上到下。 從主要方法開始。

而OOP取決於類和對象的數量。 程序流程在OOP中不是自上而下的方法


在自上而下的開發中,您可以從主要功能開始,然後考慮需要採取的主要步驟,然後將每個步驟分解為子部分,依此類推。

在自下而上編程中,您可以考慮基本功能以及您將需要的部件並進行構建。 你開發了演員和他們的方法,然後你把它們綁在一起,形成一個連貫的整體。

當您開發對象時,OOP自然傾向於自下而上,而當您開始使用一個函數並慢慢添加時,程序編程傾向於自上而下。


它更多地是關於範式(面向對象,命令式,函數式等)而不是語法。

來自dept-info.labri.fr

自下而上的編程與自上而下的編程相反。 它指的是一種編程風格,其中應用程序是從編程語言的現有原語開始構建的,並逐漸構建越來越複雜的特性,直到編寫完所有應用程序。

後來在同一篇文章中:

在諸如C或Java之類的語言中,自下而上編程採用從語言原語或現有抽像數據類型構造抽像數據類型的形式。


我從未聽過以這種方式使用的“自上而下”和“自下而上”的用語。

這些術語通常用於描述人們如何設計和實現軟件系統,因此適用於任何語言或編程範例。

在“On LISP”中,Paul Graham使用術語“自下而上”略有不同意味著不斷將共同功能提取到共享功能中,這樣您最終可以創建一種新的,更高級別的LISP方言,讓您根據應用程序進行編程域。 這不是該術語的常見用法。 這些天我們稱之為“重構”和“特定領域的嵌入式語言”(舊的LISP程序員會嘲笑LISP自20世紀50年代以來就能做到這一點)。


我確實認為自頂向下方法和自下而上方法之間的區別在於自頂向下方法將問題引入並進入可管理步驟,自下而上方法實際上詳細說明了這些步驟。







design