結構化方法與面對對象方法之比較

    從總體上來講,結構化方法,是針對數據流創建數據模型,功能模型和行爲模型,結構化設計也就是基於數據流的設計方法。而面向對象方法,則是儘量的模擬人類習慣的思惟方式,使開發軟件的方法與過程儘量的接近人類認識世界解決問題的方法與過程,使描述問題的問題空間與實現解法的解空間在結構上儘量一致。將數據與施加在該數據之上的操做封裝成類來模擬現實生活中的「對象」。程序員

       接下來咱們進一步瞭解一些結構化方法和麪對對象方法的實質是什麼,從它們的分析方法中瞭解到它們各自的優點與劣勢。算法

      結構化方法是什麼?數據庫

    結構化方法是強調開發方法的結構合理性以及所開發軟件的結構合理性的軟件開發方法。結構是指系統內各個組成要素之間的相互聯繫、相互做用的框架。結構化開發方法提出了一組提升軟件結構合理性的準則,如分解與抽象、模塊獨立性、信息隱蔽等。針對軟件生存週期各個不一樣的階段,它有結構化分析(SA)、結構化設計(SD)和結構化程序設計(SP)等方法。編程

 

   結構化分析的經常使用手段:數據結構

 

       一:數據流圖:框架

    數據流圖是SA方法中用於表示邏輯系統模型的一種工具,它從數據傳遞和加工的角度,以圖形的方式來刻畫數據流從輸入到輸出的變換過程。模塊化

 

        二:數據字典函數

         數據字典是關於數據的信息的集合,也就是對數據流圖中包含的全部元素定義的集合。數據字典是結構方法的核心。數據字典有如下幾個條目:數據項條目、數據流條目、文件條目和加工條目。工具

        三:結構化語言單元測試

         採用一種介於天然語言和形式化語言之間的結構化語言來描述加工邏輯,既能夠像天然語言那樣最方便,也能夠像形式化語言同樣可以精確描述事物,且被計算機易於處理。

         四:斷定表

         有些加工的邏輯用語形式不容易表達清楚,而用表的形式則一目瞭然。若是一個加工邏輯有多個條件、多個操做,而且在不一樣的條件組合下執行不一樣的操做,就可使用斷定表來描述。

 

         五:斷定樹

          斷定樹和斷定表沒有本質的區別,能夠用斷定表表示的加工邏輯均可以用斷定樹來表示。

 結構化分析的步驟:

       ①分析當前的狀況,作出反映當前物理模型的DFD

   ②推導出等價的邏輯模型的DFD

   ③設計新的邏輯系統,生成數據字典和基元描述;

   ④創建人機接口,提出可供選擇的目標系統物理模型的DFD

   ⑤肯定各類方案的成本和風險等級,據此對各類方案進行分析;

   ⑥選擇一種方案;

   ⑦創建完整的需求規約。

   結構化方法的特色:

      ①把一個複雜過程用多個單個小過程來實現;

      ②用數據流圖,能夠完成整個分解過程;

      ③結果的惟一性,同一個問題,不一樣的人分解出來的結果基本是同樣的。也即,用結構化方法,基本上是有標準答案的;

      ④較適合初學者學習,一個連續的處理過程。

     面對對象方法是什麼?

     面向對象方法(Object-Oriented Method)是一種把面向對象的思想應用於軟件開發過程當中,指導開發活動的系統方法,簡稱OOObject-Oriented)方法,是創建在對象概念基礎上的方法學。對象是由數據和允許的操做組成的封裝體,與客觀實體有直接對應關係,一個對象類定義了具備類似性質的一組對象。而每繼承性是對具備層次關係的類的屬性和操做進行共享的一種方式。所謂面向對象就是基於對象概念,以對象爲中心,以類和繼承爲構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟件系統。

   面對對象方法的基本概念:

        一:對象

        對象是要研究的任何事物。它能表示有形的實體,也能表示無抽象的規則、計劃或事件。對象由數據(描述事物的屬性)和做用於數據的操做(體現事物的行爲)構成一獨立總體。從程序設計者來看,對象是一個程序模塊,從用戶來看,對象爲他們提供所但願的行爲。在對內的操做一般稱爲方法。

 

        二:類

        類是對象的模板。即類是對一組有相同數據和相同操做的對象的定義,一個類所包含的方法和數據描述一組對象的共同行爲和屬性。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,造成類層次結構。

        三:繼承

    繼承性(Inheritance)是指,在某種狀況下,一個類會有「子類」。子類比本來的類(稱爲父類)要更加具體化。

         四:封裝性

    封裝是經過限制只有特定類的對象能夠訪問這一特定類的成員,而它們一般利用接口實現消息的傳入傳出。具有封裝性(Encapsulation)的面向對象程序設計隱藏了某一方法的具體執行步驟,取而代之的是經過消息傳遞機制傳送消息給它。

         五:多態

    多態(Polymorphism)是指由繼承而產生的相關的不一樣的類,其對象對同一消息會作出不一樣的響應。

        六:抽象性

    抽象(Abstraction)是簡化複雜的現實問題的途徑,它能夠爲具體問題找到最恰當的類定義,而且能夠在最恰當的繼承級別解釋問題。

  面對對象方法的基本步驟:

    (1)分析肯定在問題空間和解空間出現的所有對象及其屬性;
    (2)肯定應施加於每一個對象的操做,即對象固有的處理能力;
    (3)分析對象間的聯繫,肯定對象彼此間傳遞的消息;
    (4)設計對象的消息模式,消息模式和處理能力共同構成對象的外部特性;
    (5)分析各個對象的外部特性,將具備相同外部特性的對象歸爲一類,從而肯定所須要的類;
    (6)肯定類間的繼承關係,將各對象的公共性質放在較上層的類中描述,經過繼承來共享對公共性質的描述;
    (7)設計每一個類關於對象外部特性的描述;
    (8)設計每一個類的內部實現(數據結構和方法);
     (9)建立所需的對象(類的實例),實現對象間應有的聯繫(發消息)。

       面向對象的特色:

        ①基於映射:把現實世界的工做過程或系統,用代碼系統中的相對應的元素模擬出來,就完成了軟件的設計和開發;

        ②事物→對象;事物的特徵→對象的屬性;事物的行爲→對象的方法;事物之間的信息交換與協同→類方法調用;

        ③因爲現實事物的複雜性,爲了要更好地完成上面的模擬/映射,須要從多個角度描述系統或過程;

        ④靜態關係:多態、繼承、聚合、狀態轉換;

        ⑤動態關係:用例、活動、序列、協做。

        ⑥結果的惟一性,同一個問題,有經驗的人和沒有經驗的人,進行面向對象設計時,結果可能會判別很大;

        ⑦適用範圍:設計複雜系統、設計高質量系統、設計與現實世界對應程度比較大的系統。

 

      結構化方法與面對對象方法比較

      基本思想的區別: 

   結構化思想和麪向對象思想雖都產生於20世紀60年代,但它們卻存在根本差異。

   結構化方法承襲了傳統的編程思想與編程方法,以計算機的計算功能爲前提。編寫程序的主要目的是數值計算、問題求解。模塊是結構化編程的基本單位,但計算方法(簡稱爲算法)是程序的核心。結構化方法只是對傳統程序結構的改進,用三種基本結構來組織程序,使程序結構更爲清晰,程序開發更有序、更容易。 結構化方法中模塊只是程序一個功能(機械)部件,在程序中完成特定功能或解決特定問題。所以程序中模塊一般用函數(function)來實現,完成對輸人數據的加工和計算。

   面向對象思想以計算機信息處理和信息管理的功能爲前提,模擬客觀世界的事物及事物之間的聯繫。對象技術的關鍵概念是對象、消息、類,關鍵機制包括封裝、多態和繼承。與結構化方法相比,對象是軟件模塊化的一種新的單位,它代替了基於功能分解方法中的所謂「模塊」等傳統的技術。面向對象技術是經過對對象的管理(建立、運行、消亡)以及對象之間的通信來實現程序功能。面向對象中的對象則是一個活體(生命體),它將數據和過程封裝在一塊兒,這同傳統的方法中將數據和過程分別對待和處理造成了鮮明的對比。對象表明現實世界中真實對象的結構和交互做用,在程序運行期間有它的生命週期,並經過消息相互通訊協同完成程序功能。

   分析方法的區別:

    結構化分析方法的核心思想是:自頂向下,逐層分解,逐步求精。結構化分析方法體如今數據流圖和系統結構圖的分解過程當中。數據流圖的分解從頂層圖開始,按照每一個加工對應一個子圖的分解原則,逐層分解爲0層圖、1層圖等。系統結構圖則是從主模塊開始,逐層分解爲算法更爲簡單、更加容易管理和實現的子模塊。        結構化分析方法承襲了傳統數學問題求解的思想,採用了逐步求精的數學演繹方法,有利於數據的加工、計算等問題的解決。但逐步求精的方法不能提供解決一個具體問題的系統的策略或方法。有時,對於某些問題不存在一個自頂向下的方法。結構化程序分析方法對小規模的程序是一種有效的方法,但將它推廣至大規模的系統開發中每每會失效,開發人員沒法使用這一方法來很方便地重用之前程序的可重用成份。

 

   面向對象分析則是採用了另外一種自底向上的化解複雜性的方法:抽象。經過抽象,獲得系統的一個簡化模型,其中強調系統中某屬性細節,而忽略其它的屬性。面向對象分析存在三個層次的抽象:第一,識別對象及其屬性和方法,這是客觀世界事物的抽象;第二,對對象進行層層歸類,對客觀事物相互關係的抽象,如把類似對象歸爲一類,或把子類歸到父類,或把局部類歸總體類;第三,將對象和類進一步抽象歸到某個主題,便於對類和對象的定義和管理。

      面向對象方法的抽象機制提供了爲複雜的軟件系統建模更爲天然的方法,特別是能很好地把握對象之間複雜的相互關係,所以面向對象分析技術更加適用於複雜的軟件系統的分析。

      程序設計方法的區別:

       結構化程序設計方法與分析方法思路相反,採用了自底向上的設計思想。首先設計底層模塊,肯定模塊內部算法,設計模塊內部程序,並進行單元測試。模塊完成以後,再進行模塊之間的組裝,進行集成測試。待模塊集成測試完成以後,進行確認測試和系統測試,完成設計和調試任務。

      結構化方法的實質是問題求解,即結構化程序是由算法決定的,而算法是程序員分析設計的。所以結構化方法中,程序的執行過程主要是由程序員控制,而不是由用戶控制。該方法比較適合大型工程計算、實時數據的跟蹤處理、各類自動控制系統等等。

      面向對象程序設計方法採用了自頂向下的設計思想,先設計父類,再設計子類,並繼承父類屬性和方法。對象是最後在程序運行過程當中動態生成。在設計類的同時,另外一任務是消息的設計。並將消息與類中的方法有機聯繫起來,以便對象在運行過程當中能相互通訊,共同實現軟件設定的功能。消息相似於傳統程序設計語言中的函數調用,兩者的主要區別是函數調用中所執行的函數是一個單1、公共的實現,而對消息的響應能夠不一樣回答,這要根據具體對象的方法來肯定。這就是面向對象程序設計思想的多態機制。

     面向對象方法中,程序員設計的是對象屬性及操做方法,但在什麼時間、使用什麼方式操做對象則是徹底由用戶交互控制。在互聯網時代,計算機已經由一個生產工具逐步演變成一個生活工具,出現了許多徹底由用戶控制程序執行過程的應用軟件,好比大型遊戲軟件以及各種管理信息系統軟件。這些軟件中各類關係比較複雜,適宜使用面向對象的方法來開發。

    

      舉個例子,要發廣告郵件,廣告郵件列表存在數據庫裏面。

      假若用C來寫的話,通常會這樣思考,先把郵件內容讀入,而後鏈接數據庫,循環取郵件地址,調用本機的qmail的sendmail命令發送。

       若是考慮面向對象方法來作,就不能什麼代碼都塞到main過程裏面,假設咱們設計三個類:

                   一個類是負責讀取數據庫,取郵件地址,調用qmail的sendmail命令發送;

                   一個類是讀郵件內容,MIME編碼成HTML格式的,再加上郵件頭;

                   一個主類負責從命令讀參數,處理命令行參數,調用發email的類。

                    把一件工做按照功能劃分爲3個模塊分別處理,每一個類完成一件模塊任務。

   總而言之,開發者在開發實踐中, 從實際出發, 考慮執行效率、開發者的技術水平、系統規模、是否爲易需求變化的系統等因素, 儘可能利用 它們各自的優勢, 避免他們的缺點。如對於開發一些小型嵌入式實時監 控系統或同等穩定小系統, 可用結構化方法;對於開發入門者, 使用結 構化方法和麪向對象方法相結合;對於大型系統或者需求易變系統, 使用面向對象方法。根據實際出發, 選取合適的軟件開發方法, 達到最佳的開發效益定義和管理。

相關文章
相關標籤/搜索