從程式設計語言直覺了解面向對象
各種面向對象程式設計語言互相有别,但都能看到它們對面向對象三大機制的支援,即: “封裝、繼承、多态”
封裝,隐藏内部實作
繼承,複用現有代碼
多态,改寫對象行為
使用面向對象程式設計語言(如C#),可以推動程式員以面向對象的思維來思考軟體設計結構,進而強化面向對象的程式設計範式。
C#是一門支援面向對象程式設計的優秀語言,包括:各種級别的封裝支援;單實作繼承+多接口實作;抽象方法與虛方法重寫。
執行個體分析:
一、封裝:面向對象設計是一種設計方法,是一種工程化規範。這是毫無疑問的。面向對象設計的主要工作包括:
需要的類;
給每個類提供一組完整的;
概括地說,面向對象設計就是“根據需求決定所需的類、類的操作,以及類之間關聯的過程”。
需要的類
我要定義一個資料庫操作的類
給每個類提供一組完整的
我要一組完整的操作,比如資料庫查詢,資料的插入,更新,删除等,
用C#來描述這一個概念
//定義了一個類,這個類是用來操作資料庫的。
public class do_database
{
public static string connstr =
ConfigurationSettings.AppSettings["DBConnectionString"];
///<summary>
///執行查詢語句,傳回DataSet
///</summary>
///<param
name="SQLString">查詢語句</param>
///<returns>DataSet</returns>
public static DataSet Query(string
SQLString)
{
using
(SqlConnection connection = new SqlConnection(connstr))
{
DataSet ds = new DataSet();
try
connection.Open();
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (System.Data.SqlClient.SqlException ex)
throw new Exception(ex.Message);
return ds;
}
///<summary>
///執行查詢語句,傳回SqlDataReader
name="strSQL">查詢語句</param>
///<returns>SqlDataReader</returns>
public static SqlDataReader
ExecuteReader(string strSQL)
SqlConnection
connection = new SqlConnection(connstr);
SqlCommand cmd
= new SqlCommand(strSQL, connection);
try
SqlDataReader myReader = cmd.ExecuteReader();
return myReader;
catch
(System.Data.SqlClient.SqlException e)
throw new Exception(e.Message);
}
///執行SQL語句,傳回影響的記錄數
name="SQLString">SQL語句</param>
///<returns>影響的記錄數</returns>
public static int ExecuteSql(string
(SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
int rows = cmd.ExecuteNonQuery();
return rows;
catch (System.Data.SqlClient.SqlException E)
connection.Close();
throw new Exception(E.Message);
這些操作全部封裝在do_database類中,這就是封裝,隐藏内部實作。比如我要進行查詢,結果放在一個DataSet的資料集中,我們就可以這樣子操作:
DataSet myds =
do_database.Query(“查詢語句”);至于查詢語句如何一步一步執行,我們已經在do_databse封裝好了。
二、繼承:如果用UML的語言講,繼承就是類與類之間的關系是"is a".
上述資料庫的操作的類,其實是針對SqlServer資料庫的,實際上,我們在軟體設計很多時候,要抛開資料庫,也就是不管什麼樣子的資料庫,都要能夠很快的進行切換。
實際上,不管什麼類型的資料庫,操作都差不錯,無非就是資料庫的打開,查詢,插入、更新、删除、關閉等。是以這一些是共性,但是每種資料庫都有他自己的特性,是以共同的屬性和操作我們可以用繼承來實作。為了簡單起見,我舉一個很簡單的例子來說明繼承這一概念。
1、
首先定義一個水果類;
2、
定義一個橙子類,繼承了水果類;
3、
定義一個蘋果類,繼承了水果類
publicclassFruit
publicDouble重量;
publicString顔色;
privateString私有屬性;
publicvoid進貨();
publicvoid銷售();
publicclassOrange :
Fruit
Public void Orange()
Console.WriteLine("An orange is
got!");
}
publicclassApple :
Public void Apple()
Console.WriteLine("An apple is
這樣子定義的Orange類一樣的有 重量、顔色的屬性(注意私有屬性在Orange中沒有),也有進貨,銷售的操作;但是Orange有了一個Orange()的操作,而這個操作在Fruit中是沒有的。這就是繼承。
三、多态,多态的含義就是C#中允許多個方法的方法名相同,隻要它們的方法簽名不同就可以。如果簡單一點講,就是我定義了兩個名字一樣的方法,但是兩個方法的參數不同,我們在調用的時候,程式會根據不同的參數調用不同的方法,這就是多态。當然這是比較通俗的了解,專業描述多态的概念是:當不同的接受到相同的消息名(或者說當不同的對象調用相同的名稱的成員函數)時,可能引起不同的行為(執行不同的的代碼)。這種現象稱為多态性。
publicclassTest
{
publicstaticvoid
Print(string str)
{
Console.WriteLine(str);
}
publicstaticvoid Print(int i)
Console.WriteLine(i.ToString());//調用ToString方法把整型轉換為string類型。
Print(bool b)
if (b == true)//判斷後輸出結果。
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
Print(paramsstring[] str)
//這個方法實作了對未知數量的參數的輸出。使用params關鍵字。
for (int i =
0; i < str.Length; ++i)
Console.WriteLine(str[i]);
下面進行這些函數的調用
publicclassMainClass
publicstaticvoid Main()
bool a = false;
Test.Print("david","jack","mike");
Test.Print(5);
Test.Print(true);
Test.Print(a);
Test.Print("successful!");
長期的面向對象程式設計,我們隐約可以發現,好像很多東西,基本原理都是一樣的,但是程式設計的工作量并沒有因為程式設計的熟練度而減低,這個時候,我們可以考慮模式程式設計了。
模
式是實踐經驗的總結,也是一種設計思想的表述形式。在對待模式的态度上,我認為我們不應該抱着學習的态度,而應該抱着“了解”的态度。因為它是經驗的總
結,不是靠讀書學習就能得到的東西。“在做軟體設計的時候,每個人都想使用某種模式來提高軟體的韌度,卻不是每個人都知道,在他的設計中,已經采用了這種
模式”,談不談模式其實都無所謂,隻要你能說出你所設計的系統到底好在什麼地方。
設計模式簡介
每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。
設計模式描述了軟體設計過程中某一類常見問題的一般性的解決方案。面向對象設計模式描述了面向對象設計過程中、特定場景下、類與互相通信的對象之間常見的組織關系。
設計模式與面向對象
面向對象設計模式解決的是“類與互相通信的對象之間的組織關系,包括它們的角色、職責、協作方式幾個方面。面向對象設計模式是“好的面向對象設計”,所謂“好的面向對象設計”是那些可以滿足“應對變化,提高複用”的設計。面向對象設計模式描述的是軟體設計,是以它是獨立于程式設計語言的,但是面向對象設計模式的最終實作仍然要使用面向對象程式設計語言來表達,本課程基于C#語言,但實際上它适用于支援.NET架構的所有.NET語言,如Visual
Basic.NET、C++/CLI等。面向對象設計模式不像算法技巧,可以照搬照用,它是建立在對“面向對象”純熟、深入的了解的基礎上的經驗性認識。掌握面向對象設計模式的前提是首先掌握“面向對象”!是以如果要想總結一些設計模式出來,必須精通面向對象的思想,因為這是一種思想,不是一種技術,需要一定的經驗,一定的嘗試,一定的運用實踐才可以悟出來的。
目前我比較數量掌握的是工廠模式,有關詳細的說明,可以看看我在廣鐵科技2007年第四期發表的一篇文章。這裡不做詳細闡述。