Java基礎:第二十五講 軟體系統的對象與現實世界對象的關係

來源:互聯網
上載者:User

 

    本講介紹現實世界中的對象與軟體系統中的對象的區別,以及如何從現實世界中抽象出軟體系統中的對象。 1、現實世界中的對象並不一定是軟體系統中的對象。 公交系統中有大量的對象:汽車、乘客、司機、站牌、候車廳、道路、紅綠燈、調度室、刷卡機、投幣機、方向盤、車門、座位、車上的扶手、油箱、離合器、穿的衣服等等。列出的這些對象並不是所有的。 如果仔細看某個對象,還會有很多相關的對象。例如您仔細想十字路口,可能會想到紅綠燈、每個路口、攝像裝置、紅綠燈所依賴的電線杆等。想到電線杆,可能還會想上面的固定裝置,如螺絲釘等。如果繼續下去,可以想到系統中的更多個物件。 這麼多的對象在軟體系統中都需要嗎?肯定不是都需要。如果要在軟體系統中實現,一方面工作量太大,基本上沒有辦法實現。另一方面,也是最重要的一方面,是很多個物件不需要。如果這個對象是必須的,那麼不管多麼困難也要實現。既然有這麼多的對象,有的對象需要在軟體系統中實現,有的對象不需要在軟體系統中實現,那麼如何來選擇呢?每個系統都會有相應的目的,用於解決特定的問題。在考慮某個對象是否為軟體系統中的對象的時候,只需關心該對象是否與要解決的問題相關。如何確定哪些對象與系統相關呢?通常的做法,就是仔細分析使用者提供的需求文檔,這裡假設所獲得的需求文檔是完整的。因為對象都是名詞,所以可以從需求文檔中來尋找這些名詞,在擷取這些名詞的過程中最好不要加入自己的想法,不能因為感覺某個對象好就添加到系統中。 通過對需求文檔的分析可以得到很多名詞,但是並不是所有這些名詞都應該設計成對象。例如需求中可能有這樣一句話“乘客上車後,如果有座位就坐下”,這裡的名詞有“乘客”、“車”和“座位”。因為乘客有相關的屬性和行為,並且在系統中也非常重要,所以應該作為系統的對象。同樣,車也有相關的屬性和行為,並且也是系統的非常重要的組成部分,所以也應該作為系統的對象。但是,座位沒有自己的行為和屬性,因為在類比系統中,不會考慮座位的高度、長度、寬度、形狀等,本身也沒有什麼行為,所以座位就不應該作為系統的對象。【注意】這裡說“座位”不是對象,只是強調在當前的系統中不是對象。如果在另外一個軟體系統中,它可能就是對象了。比如汽車生產商,肯定會考慮座位的形狀、顏色、材料等。 2、從現實世界的對象抽象出軟體系統中的對象想一下軟體系統能夠幹什嗎?多數情況下,是對現實世界的類比,是對現實世界中的某些工作類比,由電腦來完成一些原來需要人工完成的任務。例如使用的ATM自動提款機,原來要取錢,需要到銀行去,由銀行的工作人員來辦理業務。現在如果取款不超過5000元,就可以在自動提款機上提取,並且現在很多銀行都要求客戶在ATM上取款,這種要求也許不合理,但是不可否認的是,ATM代替銀行的工作人員辦理了業務。如果要構造一個系統類比10路公交系統的運行情況,這時候需要在系統中構造汽車對象類比現實世界中的汽車。就像前面在介紹對象的屬性的時候,知道汽車有很多屬性,汽車的長寬高,重量,顏色,車牌號,投幣機,車門,廣播,車輪,發動機等等。在軟體系統中是否需要把這些屬性全部類比?汽車有這麼多屬性,首先必須肯定的是無法把這些屬性描述出來,這也是能力所不允許的。既然要類比汽車,又不能把所有的屬性全部類比出來,那麼應該描述哪些屬性呢?這就是一個抽象的過程,從現實世界中的具體對象抽象出軟體系統中的抽象對象。抽象的過程實際上就是選擇屬性和行為的過程,要哪些屬性,不要哪些屬性,取決於這些屬性是否對要構建的系統有用。下面通過分析汽車的幾個屬性來介紹如何選擇屬性。n         車牌號。汽車有車牌號,車牌號對軟體系統有用,可以把所有汽車區分開,系統需要根據車牌號來調度汽車。所以需要車牌號。n         車的位置資訊。要類比10路公交系統的運行情況,需要知道在某個時刻,某輛汽車的位置,所以也是需要的。n         車的運行方向。知道車的方向,才可以根據運行方向和車的當前位置決定下一個時刻汽車的位置,所以也是需要的。n         汽車的長度。汽車的長度是6米還是5米,對類比系統來說沒有太大的影響,所以在這個系統中不需要考慮汽車的長度。這個抽象的過程可以根據類比系統的功能來進行,功能涉及哪些屬性,就對哪些屬性進行分析。這個過程實際上就是對系統所需要的所有對象進行分析,提取有用的屬性和行為。【注意】同樣一個對象在不同的軟體系統中的抽象結構是不一樣的。同樣是汽車,如果不是在10路公交系統中,相關屬性的選擇就不同了。如果是公交公司的資產管理系統,這時候對汽車對象的抽象結果就不一樣了,可能需要考慮汽車的出廠日期、汽車價格、上次維修時間、出車次數、責任人等。     上一次: 第二十四講類與對象的關係    下一次:  Java基礎:第二十六講 從對象抽象出類    李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher    如果想和我交流,或者和我成為朋友,請點擊:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.