面向对象设计是一种软体设计方法,是一种工程化规範。面向对象设计模式解决的是“类与相互通信的对象之间的组织关係,包括它们的角色、职责、协作方式几个方面。
面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变化,提高复用”的设计。
基本介绍
- 中文名:面向对象设计
- 解决问题:对象之间的组织关係
- 包括:角色、职责、协作方式
- 领域:计算机语言
概念
面向对象设计模式描述的是软体设计,因此它是独立于程式语言的,但是面向对象设计模式的最终实现仍然要使用面向对象程式语言来表达,如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();
}
}