以下是面向过程的代码:
<?php
function getSound($animal){
if($animal=="dog"){
return "汪";
}
if($animal=="cat"){
return "喵";
}
if($animal=="cow"){
return "哞";
}
return "暂时听不懂该动物的声音,动物学家们正在研究";
}
echo getSound("dog");//汪
echo getSound("cat");//喵
echo getSound("cow");//哞
?>
以下是引入了面向对象的代码:
<?php
function getSound($animal){
if($animal instanceof Animal){
return $animal->showSound();
}
return "暂时听不懂该动物的声音,动物学家们正在研究";
}
class Animal{
function showSound(){
return "不同动物应该用不同声音";
}
}
class Dog extends Animal{
function showSound(){
return "汪";
}
}
class Cat extends Animal{
function showSound(){
return "喵";
}
}
class Cow extends Animal{
function showSound(){
return "哞";
}
}
$dog=new Dog();
echo getSound($dog);//汪
$cat=new Cat();
echo getSound($cat);//喵
$cow=new Cow();
echo getSound($cow);//哞
?>
问题:如果一种新的动物比如蜜蜂“嗡”被动物学家们研究后听懂,代码怎么变换?
以下是我们用文件的结构图的方式来表示:
|
|
面向过程中:
1、我们增加新的访问文件2.php
2、我们抛弃了原来的function.getSound.php,历史痕迹为“function.getSound.php.bak”,
我们必须改写function getSound()程序代码
这个是不好的,我们破坏了以前的结构或者文件
面向对象中:
1、我们增加新的访问文件2.php
2、我们增加了另外文件class.Bee.php,并没有破坏以前的代码
很明显我们看得出,
面向过程编程,对于新的需求,需要破坏以前的代码,
而面向对象编程,“不必破坏以前的代码”,可以写出“适应未来的代码”,这点非常让人激动。
转载至杨永喜老师的百度空间http://hi.baidu.com/%D1%EE%D3%C0%CF%B2/home