(Development)Software Engineering:Theory and Practice

(Development)Software Engineering:Theory and Practice

 

看來我很容易忘記面向對象中的很多概念.參看很多概念書,規範一些概念的定義.
在《Software Engineering:Theory and Practice》一書中摘出標識的概念,它是指將數據組織爲離散的,可區分的實體,稱爲對象.
行爲是一個對象執行(或作用於該對象)的動作或轉換.
關於靜態視圖包括對對象,屬性,行爲的描述以及對象之間關係的描述.動態視圖描述通訊,控制/計時和狀態以及狀態改變.限制描述關於結構(如屬性值和基數)和動態行爲的約束.
時序圖說明消息是如何從一個對象流向另一個對象的,它形式化地描述需求中的非形式化的事件.協作圖使用對象和時序信息來說明對象之間的事件流.
包圖說明如何將邏輯地劃分爲模塊.構件圖通常和包圖一樣但是它們反映的實際的,最終的系統模塊.因爲最終的系統通常是較大的網絡中的一部分,所以部署圖說明要構造的應用中的網絡鏈接.
而參看我國教材,統一定義了部分概念
對象具有狀態和行爲,而對象及其操作就是對象的行爲.
區分對象,對象具有有形實體,作用,事件,性能說明.並且對象的唯一性,每個對象都有自身唯一的標識.
而具有相同或相似性質的對象的抽象就是類,對象的抽象就是類.類的具體化就是對象.
類是具有屬性和操作的.
類的結構又分爲一般和整體.
而類又有爲抽象類,子類和父類,超類,派生類,包括接口
由於類的概念繁雜,不好統一,其實很多概念就是一個概念,比如說父類就是超類,而子類就是派生類.
而抽象類與接口之間的聯繫,因爲抽象類的提出,使得面向對象的特性之一封裝性,變得不是很正確,顯然它並不能起到預期的效果,對於信息的隱蔽性,並不是密不透風,顯然他對於抽象類說是透明或者說是半透明的.
而模塊於模塊之間,存在消息的傳遞(消息包括對象名,方法),而在抽象類可以定義不存在的接口,打亂原本密不透風的模塊.
而隨後提出的概念更叫人讓人匪夷所思.
關聯和鏈.
鏈表示對象間的物理與概念聯結.(組合)
關聯表示類之間的一種關係(弱關聯)
受限關聯顯然是受限制的關聯關係.(強關聯)
聚集關係式一種"整體-局部"關係.
一般化關係是在保留對象差異的同時共享對象相似性的一種高度抽象方式.
因爲UML中概念相當多,今天只記了一部分.這些概念相當的麻煩和包好理解.
前幾天,我談及軟件工程的部分概念,他確實是一個比較讓人頭疼的問題:
Software Enginering提出了UML,構建框架,是在已知框架上搭建的,對於那些軟件構架師來說:這是非常具有挑戰性的工
作.
不過還好!因爲提出的軟件構架還比較成熟.和完善的
但仍然避免不了軟件危機的本身.
特別是當今流行的面對對象的語言的轉型.比如說Java一個純面向對象的語言
有種類圖:(取自2007年11月份程序員考試下午題)

[Java
    Triangle tr = new Triangle();
    Square sq = new Square();
    Shape  sh = tr;
[ 關於上述Java代碼中sh 和 tr的以下敘述中,哪兩個是正確的(寫出編號)。
         ① sh 和 tr分別引用同一個對象;
         ② sh 和 tr分別引用同一類型的不同的對象;
         ③ sh 和 tr分別引用不同類型的不同對象;
         ④ sh 和 tr分別引用同一個對象的不同拷貝;
         ⑤ sh 和 tr所引用的內存空間是相同的。
[ 寫出下面消息對應的方法編號(如果該消息錯誤或者沒有對應的方法調用,請填寫“無”)。
         tr.height()        (1)    
         sh.perimeter()     (2)    
         sq.height()        (3)    
         sq.perimeter()     (4)    
         sh.height()        (5)    
         tr.perimeter()     (6)    
[ 下列賦值語句中哪兩個是合法的(寫出合法賦值語句的編號)。
     ① sq = sh;  ② sh = tr;  ③ tr = sq;  ④ sq = tr;  ⑤ sh = sq;
考慮哈!顯然這是UML文檔中的類圖模式,最頂上的是Shape是個超類,而最底下的Square是個派生類,他是繼承超類中所具有的共享屬性,而我要說的是類的覆蓋的概念,類能被覆蓋,但是是有條件的,被覆蓋的類,必須是覆蓋它類的超類(父類),簡單的說,被覆蓋的類是超類,而覆蓋他的類是派生類.但是超類可以被多次嵌套繼承,這跟多繼承還是有很大的區別,因爲多繼承是多個子類繼承父類的屬性和方法,再說java是不支持多繼承,C++存在多繼承和聯編的概念,而嵌套繼承是,是子類的子類,字面都能理解,就是相對於爺爺和孫子的關係,但他們之間仍然有關係,而且繼承了爺爺和孫子都共有的特點,這在程序裏表現的不是很明顯,但是在基類中卻表現了他的不凡,這裏此時Shape是爺爺,Square是孫子而他們共有的特性是perimeter.所以在繼承的時候,他們都可以提出Perimeter這個方法.就好比Map,和Hashtable是屬於Map類,Map就是基類,他們就是一個對象,並且繼承他的中所有特性,故我們可以寫成Map hashtable=new Hashtable();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章