面向對象設計

面向對象設計

面向對象設計是一種軟體設計方法,是一種工程化規範。面向對象設計模式解決的是“類與相互通信的對象之間的組織關係,包括它們的角色、職責、協作方式幾個方面。

面向對象設計模式是“好的面向對象設計”,所謂“好的面向對象設計”是那些可以滿足“應對變化,提高復用”的設計。

基本介紹

  • 中文名:面向對象設計
  • 解決問題:對象之間的組織關係
  • 包括:角色、職責、協作方式
  • 領域:計算機語言
概念,三大機制,實例,

概念

面向對象設計模式描述的是軟體設計,因此它是獨立於程式語言的,但是面向對象設計模式的最終實現仍然要使用面向對象程式語言來表達,如Visual Basic、.NET、C++/CLI等。
面向對象設計模式不像算法技巧,可以照搬照用,它是建立在對“面向對象”純熟、深入的理解的基礎上的經驗性認識。掌握面向對象設計模式的前提是首先掌握“面向對象”!

三大機制

OOPL的三大機制
從程式語言直觀了解面向對象
各種面向對象程式語言相互有別,但都能看到它們對面向對象三大機制的支持,即: “封裝、繼承、多態
– 封裝,隱藏內部實現
– 繼承,復用現有代碼
– 多態,改寫對象行為
使用面向對象程式語言(如C#),可以推動程式設計師以面向對象的思維來思考軟體設計結構,從而強化面向對象的編程範式。
C#是一門支持面向對象編程的優秀語言,包括:各種級別的封裝支持;單實現繼承+多接口實現;抽象方法與虛方法重寫。
但OOPL並非面向對象的全部
通過面向對象程式語言(OOPL)認識到的面向對象,並不是面向對象的全部,甚至只是淺陋的面向對象。
OOPL的三大機制“封裝、繼承、多態” 可以表達面向對象的所有概念,但這三大機制本身並沒有刻畫出面向對象的核心精神。換言之,既可以用這三大機製做出“好的面向對象設計”,也可以用這三大機制 做出“差的面向對象設計”。不是使用了面向對象的語言(例如C#),就實現了面向對象的設計與開發!因此我們不能依賴程式語言的面向對象機制,來掌握面向對象。
OOPL沒有回答面向對象的根本性問題——我們為什麼要使用面向對象?我們應該怎樣使用三大機制來實現“好的面向對象”? 我們應該遵循什麼樣的面向對象原則?
任何一個嚴肅的面向對象程式設計師(例如C#程式設計師),都需要系統地學習面向對象的知識,單純從程式語言上獲得的面向對象知識,不能夠勝任面向對象設計與開發。

實例

PHP面向對象實例
class MySql {
var $user,$pass,$host,$db;
var $id,$data,$fields,$row,$row_num,$insertid,$version,$query_num=0;
function __construct($host,$user,$pass,$db)
{
$this->host = $host;
$this->pass = $pass;
$this->user = $user;
$this->db = $db;
$this->dbconnect($this->host, $this->user, $this->pass);
$this->selectdb($this->db);
if($this->version() >'4.1')
mysql_query("SET NAMES utf8");
}
function dbconnect($host,$user,$pass)
{
$this->id = @ mysql_connect($host,$user,$pass) OR
sysMsg("連線資料庫失敗,可能是mysql資料庫用戶名或密碼錯誤");
}
function selectdb($db)
{
@ mysql_select_db($db,$this->id) OR die("未找到指定資料庫");
}
function query($sql)
{
$query = @ mysql_query($sql,$this->id) OR die("SQL語句執行錯誤:$sql <br />".$this->geterror());
$this->query_num();
return $query;
}
function fetch_array($query)
{
$this->data = @mysql_fetch_array($query);
return $this->data;
}
function query_num()
{
$this->query_num++;
}
function num_fields($query)
{
$this->fields = @mysql_num_fields($query);
return $this->fields;
}
function fetch_row($query)
{
$this->row = @mysql_fetch_row($query);
return $this->row;
}
function num_rows($query)
{
$this->row_num = @mysql_num_rows($query);
return $this->row_num;
}
function insert_id()
{
$this->insertid = mysql_insert_id();
return $this->insertid;
}
function version()
{
$this->version = mysql_get_server_info();
return $this->version;
}
function fetch_one_array($sql)
{
$query = $this->query($sql);
$this->data = $this->fetch_array($query);
return $this->data;
}
function geterror()
{
return mysql_error();
}
}

相關詞條

熱門詞條

聯絡我們