//編程不僅是一門技術,更是一門藝術
//實例化的工廠,實例出合適的對象,多態的應用
//----------對象的返回--
//同一類的屬性,方法可以隨便調用
//不能只滿足於寫完代碼運行結果正確就完事,時常
//考慮如何讓代碼更加簡煉,更加容易維護,容易擴展和復用,只有這樣才可以是真的提高。寫出優雅的代碼真的是一種很爽的事情
//抽象模型
// 抽象模型之間的關系
// 界面邏輯
//--------------------------
// Operation oper;
// oper = OperationFactory.createOperate("+");
//方法的調用-----有返回值----返回對象使用方法
// oper.NumberA = 1;
// oper.NumberB = 2;
// double result = oper.GetResult();
//面向對象的編程,並不是類越多越好,類的划分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的對象的抽象集合才是類
//需求的變更是必然!所以開發者應該的是考慮如何讓自己的程序更能適應變化
//面對算法的時常變動,應該有更好的辦法。
// “你問我?你說呢?”大鳥笑道,“商場收銀時如何促銷,用打折還是返利,其實都是一些算法,用工廠來生成
//算法對象,感覺是不是很怪?而最重要的是這些算法是隨時都可能互相替換的,這就是變化點,而封裝變化點是我們
//面向對象的一種很重要的思維方式。”
// 環境(Context)角色:持有一個 Strategy類的引用。
//抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的
//接口。
//具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為
//我們可以在實例化的時候,再給計算機一個類的名稱字符串,來讓計算機知道應該實例化哪一個類。”
// 所以我們要考慮的就是可不可以不在程序里寫明‘如果是打折就去實例化 CashRebate 類,如
//果是返利就去實例化 CashReturn 類’這樣的語句,而是在當用戶做了下拉選擇后,再根據用戶的選擇去某個地方找應
//該要實例化的類是哪一個。這樣,我們的 switch 就可以對它說再見了。
//編程方式----反射
// 我們還可以用反射的辦法得到這個實例
//7using System.Reflection;//先引用 System.Reflection
//8//假設當前程序集是 AnimalSystem,名稱空間也是 AnimalSystem
//9Animal animal = (Animal)Assembly.Load("AnimalSystem").CreateInstance("AnimalSystem.Cat");
//其中關鍵是
//Assembly.Load("程序集名稱").CreateInstance("名稱空間.類名稱")
//那也就是說,我們可以在實例化的時候,再給計算機一個類的名稱字符串,來讓計算機知道應該實例化哪一個類
//單一職責原則:,就是指就一個類而言,應該僅有一個引起它變化的原因,就剛才修電腦的事,顯然內存壞了,不應該成為更換 CPU 的理由
//開放—封閉原則:是說對擴展開發,對修改關閉,通俗的講,就是我們在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展
//依賴倒轉原則:原話解釋是抽象不應該依賴細節,細節應該依賴於抽象,就是要針對接口編程,不要對實現編程
//界面層UI:用來界面顯示和處理的,對的,它們可以看作是一層
// 業務邏輯層(Business Logic Layer):根據業務規則來開發軟件提供服務的-------------zhongjian
//數據訪問層(Data Access Layer)或簡稱 DAL:訪問配置文件或處理數據庫就是數據層
// ‘迪米特法則(LoD)’ 也叫最少知識原則,
//簡單的說,就是如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中一個類需要調
//用另一個類的某一個方法的話,可以通過第三者轉發這個調用。
// 門面模式要求一個子系統的外部與其內部的通信必須通過一個統一的門面(Facade)對象進行。門面模式提供一個高層次
//的接口,使得子系統更易於使用
//生活中去體會面向對象
//1.實例化對象-------簡單工廠
// 2.策略模式------解決基本的變化問題(代碼不斷增加的問題,算法是隨時都可能互相替換的,這就是變化點,而封裝變化點是我們面向對象的一種很重要的思維方式。”策略模式只適用於客戶端知道所有的算法或行為的情況-----界面模式:職責太重)
// 3.反射-------解決計算機知道應該實例化哪一個類(在當用戶做了下拉選擇后,再根據用戶的選擇去某個地方找應該要實例化的類是哪一個)
// -----------通過基本變量可以解決變化更改問題-----------解決了界面負擔太重問題--------XML配置文件-----維護與擴展
// 4.不變的基本代碼------應用三層架構基本的東西區分開來
//5.迪米特法則(LoD)層次之間的溝通
// 6.門面模式提供接口--------代表
//--------------------------------------------目的:提高應變性
1.基本原則:
-------可維護、可復用、可擴展、靈活性好
-------代碼要規范
-------從計算機的角度去理解
--屬性是類了解的事情而方法是類完成的事情;
--系統應由對象來創建對象擁有數據和功能屬性定義數據而方法定義功能;
--抽象的過程就是定義類了解和要完成的事情的過程(數學模型);
--對一個事物進行怎樣的抽象將依據你要設計的程序而定
--封裝解決如何為系統功能建模的問題,在面向對象的世界中,俺們要把系統建模成類,類也要建模為屬性和方法,設計類將如何完成這些事情的過程就被稱為封裝
----繼承:
----在面向對象語言中,接口的多種不同的實現方式即為多態
----多態性使得能夠利用同一類(基類)類型的指針來引用不同類的對象,以及根據所引用對象的不同,以不同的方式執行相同的操作
一個是以對象為基本單元,用對像的使用來完成程序功能
而面向結構化則只是寫你操作賽車是要進行的動作
所以說結構化就是細化為幾個部分,分別完成后,在進行組裝
面向對像則是將整個內容分析清楚,封裝成一個完整的東西后,你在進行內部細化
面向過程的思維方式是分析綜合。面向對象的思維方式是構造。
面向對象也可以說是從宏觀方面思考問題,而面向過程可以說是從細節處思考問題。在面向對象中,也存在面向過程。
從微觀角度說,對象有着堅硬的外殼,從外部看來,除了它用來與外界交互的消息通道之外,對象內部就是一個黑匣子,什么也看不到,這稱為封裝;對象可以結合在一起形成新的對象,結合后的對象具有前兩者特性的總和,這稱為聚合;對象可以繁育,產下的孩子將擁有父輩全部的本領,這稱為繼承;對象都是多面派,它會根據不同的要求展現其中的一個面,這就是接口;多個對象可能長着相同的臉,而這張臉背后卻有着不同的行為,這就是多態……
實現繼承是指使用基類的屬性和方法而無需額外編碼的能力;
接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;
可視繼承是指子窗體(類)使用基窗體(類)的外觀和實現代碼的能力。
--------------------------------------
面向對象程序設計語言
面向對象技術並不是某個特定語言的特權。如同結構化程序設計一樣,OOP概念可以在很多語言比如C和Pascal中實現。但是,當程序越來越大時,程序設計工作會變得拙劣而混亂。而一個支持OOP概念的程序設計語言則可以讓一切變得簡單。
一個語言必須支持幾個主要的OOP概念才能稱其是面向對象的。根據所支持的OOP特性,語言可以分為以下兩類:
1、基於對象的程序設計語言;
2、面向對象的程序設計語言。
基於對象的程序設計語言僅支持封裝和對象辨識。
一個面向對象的程序設計語言所要支持的重要特性如下:
·數據封裝
·數據隱藏和訪問機制
·對象的自動初始化和清除
·操作符重載
支持對象風格程序設計的語言稱為基於對象的程序設計語言。它們不支持繼承和動態綁定。
Ada就是一個典型的基於對象的程序設計語言。
面向對象的程序設計不僅僅包含基於對象程序設計的特性,還支持繼承和動態綁定。
OOP的應用
OOP最有前途的應用領域如下:
1、實時系統;
2、仿真和建模;
3、面相對象數據庫;
4、超文本、超媒體和擴展文本;
5、AI和專家系統;
6、神經網絡和並行程序設計;
7、決策支持和辦公自動化系統;
8、CIM/CAM/CAD系統。
面向對象是在面向過程基礎上.也就是說面向對象編程實際上是把過程命令放在指定的對象中,對象所完成的動作是由過程命令來決定的.
