去年學校開了一門《面向對象程序設計》課,沒有好好聽,現在搞項目開發的時候突然感到了這門課程的重要性了,也就只好翻開去年的資料,重新開始學習了,下面是我的總結,與大家分享一下。有不對的地方,希望大家給我指出來。
面向對象分析設計系列文章:
面向對象分析設計-------01基礎
......
本文章的三大目標:
OO:建立對象的思維方式,對面向對象思想和理論有進一步的理解
UML:能夠熟練地使用UML表達面向對象的設計思想
Model:運用對象技術的一般原則和模式進行應用系統的分析和設計建模
目錄:
一、開篇亮劍:面向對象vs結構化
1、從設計設計思想的角度比較
2、(程序)實現角度比較
3、從建模的角度
二、了解對象技術(Object Technology)
定義
特點
Object Technology發展史
三、核心概念:對象與類
1、對象
2、類
3、對象與類的關系
四、對象技術相關原則
對象技術基本原則
對象技術相關機制
一、開篇亮劍:面向對象vs結構化
1、從設計設計思想的角度比較
結構化 | 面向對象 |
結構化思維用過程刻畫數據間關系 |
對象思維直接用類表達數據間關系 |
結構化中,數據是死的,全部依賴算法操作 |
數據是活的,“她”知道自己的信息(屬性),並能完成自己的工作(操作) |
結構化思維更像是一個人在解決所有問題 |
對象思維更像是一個團隊的分工協作 |
2、(程序)實現角度比較
結構化 | 面向對象 |
數據結構+算法=程序設計 |
以對象為中心組織數據與操作 |
數據 |
對象屬性 |
類型與變量 |
類與對象實例 |
函數(過程)調用 | 消息傳遞 |
類型與子類型 |
一般類與特殊類,繼承 |
構造類型 |
整體-部分結構,聚合 |
指針 |
關聯 |
3、從建模的角度
傳統結構化方法 |
面向對象方法(UML) |
|
需求模型 |
輸入I、處理P、輸出O的視角。 面向功能的文檔(用戶需求規格說明書)需求變化,其功能變化,所以系統的基礎不穩固 |
從用戶和整體角度出發。 使用系統抽象出用例圖、活動圖,獲取需求;如需求變化,對象的性質相對功能穩定,系統基礎穩定 |
分析模型 |
面向過程的數據流圖DFD、 實體—關系圖ERD、數據字典DD表示分析模型 功能分解,數據和功能/過程分開 |
把問題作為一組相互作用的實體,顯式表示實體間的關系 數據模型和功能模型,狀態、順序、通信、活動圖細化說明一致 類、對象圖表示分析模型 |
設計模型 |
功能模塊(SC圖),模塊之間的連接/調用是模塊的附屬形式 |
類和對象實現, 類/對象的關聯、聚集、繼承等連接、連接規范和約束作為顯式定義 |
實施模型 |
體系結構設計 |
構件圖,部署圖 |
測試模型 |
根據文檔進行單元測試,集成測試,確認測試 |
單元測試采用類圖,集成測試用實現圖和交互圖,確認測試采用用例圖 |
二、了解對象技術(Object Technology)
定義:A set of principles (abstraction, encapsulation, polymorphism, ..) guiding software construction, together with languages, databases, and other tools that support those principles.
特點:
1、模擬
可以順應人類思維習慣,讓軟件開發人員在解空間中直接模擬問題空間中的對象及其行為。
面向對象實例表示:
東北人都是活雷鋒 |
老張開車去東北…… 撞啦! |
class 人 { Region 籍貫; } class Region { } interface 雷鋒 { helpPeople(){ } } class 東北人 extends 人 implements 雷鋒 { 籍貫 = 東北; helpPeople(){ } } |
class Car{ DriveTo(Region) throws Exception (撞車){} 人 Driver; } Main Program { 人 老張; Car 夏利; 夏利.Driver = 老張; try { 夏利.DriveTo(東北); } catch (Exception) { } } |
2、穩定
較小的需求變化才不會導致系統結構大的改變。
所以,可以把交不穩定的數據和功能用較穩定的類包起來,是的設計更加健壯。
3、復用
代碼重用:類庫、框架等重用機制
通過繼承、關聯、封裝等手段
Object Technology發展史
三、核心概念:對象與類
1、對象
定義:
An object is an entity with a well-defined boundary and identity that encapsulates state and behavior.
State is represented by attributes and relationships.
Behavior is represented by operations, methods, and state machines.
每一個對象都有一個唯一的標識, 即使其狀態有可能與其它對象一樣
一個對象的狀態是它反映於現實世界的一系列屬性
對象的行為定義當其它對象發出請求時,該對象如何反應
在UML中的表示形式:
An object is represented as a rectangle with an underlined name.
2、類
定義:
A class is a description of a set of objects that share the same attributes, operations, relationships, and semantics.
An object is an instance of a class.
在UML中的表現形式:
A class is represented using a rectangle with compartments.
3、類和對象的關系
類是生成對象的模板:類的定義中包含有產生和刪除對象的操作。
每一個對象都是某一個類的實例。
每一個類在某一時刻都有零個或更多的實體
類是靜態的;它們的存在、語義和關系在執行前就已經定義好了
對象是動態的;它們在程序執行時可以被創建和刪除
四、對象技術相關原則
對象技術基本原則:
對象技術相關機制:
泛化(Generalization) | A relationship among classes where one class shares the structure and/or behavior of one or more classes. 什么是繼承 A subclass inherits its parent’s attributes, operations, and relationships .
單一繼承 多重繼承 |
多態(Polymorphism) | The ability to hide many different implementations behind a single interface. class abstract Shape { public abstract void draw(); } class Rectangle extends Shape { // 覆蓋(override)基類方法 public void draw() { ... } class Circle extends Shape { // 覆蓋(override)基類方法 public void draw() { … } 應用:1、假設我們有一個數組sharr,里面放着一排Shape,但是不知道哪些是Rectangle,哪些是Circle。利用多態性,我們可以: for (int i = 0; i < sharr.length; ++i) { Shape shape = (Shape)sharr[i]; shape.draw(); } 2、遍歷整個數組的過程中,各個Shape自己知道應當如何在畫布上繪制自己。shape.draw()這同一行代碼在shape指向不同的對象時表現出不同的行為,這就是所謂多態性。 |