1.面向過程的程式設計與物件導向的程式設計的區別就在於類的出現.
2.類就相當與一個模組,其中包括私人方法,公有方法,屬性和成員資料等資訊;
下面一個例子可以很清晰的說明物件導向的設計思想:
假設我們將一場遊泳比賽的結果儲存在一個文本資料檔案中,我們要執行的操作就是需要從文字檔中取出每一行的資料,並輸出每個人的成績.
設計思路:
1.設計一個組織運動員資料的類,通過該類可以得出運動員的幾個屬性(針對名稱,年齡,俱樂部,時間這些屬性,我們必須要將其封裝到一個類中去,稱為Swimmer.cs).
2.在擷取這些屬性時,需要考慮到每行記錄中空格問題,時間的轉換問題,字串分割問題(針對每一個問題我們都要考慮封裝到一個類中,稱為StringTokenizer.cs).
3.在開啟檔案時需要進行開啟讀取操作和一次讀取一行操作(針對這個問題又應該封裝到一個類中對檔案進行操作,稱為csFile.cs);
csFile.cs類的代碼:
using System;
using System.IO ;
namespace SwimmerTokenizer
{
/// <summary>
/// A simple interface to file IO methods
/// </summary>
public class csFile {
private File fl;
private StreamReader ts;
public csFile(string filename)
{
ts = File.OpenText (filename);
}
public string readLine() {
return ts.ReadLine ();
}
public void close() {
ts.Close ();
}
}
}
Simmer.cs類的代碼:
using System;
using CsharpPats;
namespace SwimmerTokenizer
{
/// <summary>
/// Summary description for Swimmer.
/// </summary>
public class Swimmer
{
private string frName, lName;
private string club;
private int Age;
private int place;
private FormatTime tms;
//-----------
public Swimmer(String dataLine) {
StringTokenizer tok = new StringTokenizer (dataLine);
place = Convert.ToInt32 (tok.nextElement()); //指向下一個有效字元
frName = tok.nextElement ();
lName = tok.nextElement ();
string s = tok.nextElement ();
Age = Convert.ToInt32 (s);
club = tok.nextElement ();
tms = new FormatTime (tok.nextElement ());
}
//-----------
public string name {
get{
return frName+" "+lName;
}
}
//-----------
public string time {
get{
return tms.getTime();
}
set {
tms = new FormatTime (value);
}
}
//-------------------
//age property
public int age {
get {
return Age;
}
set {
Age = value;
}
}
}
}
StringTokenizer.cs的代碼:
using System;
namespace CsharpPats
{
//該類是用來處理字串操作的
//String Tokenizer class
public class StringTokenizer {
private string data, delimiter;
private string[] tokens;
private int index;
public StringTokenizer(string dataLine) {
init(dataLine, " ");
}
private void init(String dataLine, string delim) {
delimiter = delim;
data = dataLine;
tokens = data.Split (delimiter.ToCharArray() );
index = 0;
}
public StringTokenizer(string dataLine, string delim) {
init(dataLine, delim);
}
public bool hasMoreElements() {
return (index < (tokens.Length));
}
public string nextElement() {
string s = tokens[index++];
while((s.Length <=0) && (index<tokens.Length ))
s = tokens[index++];
return s;
}
}
}