面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对计算机下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。
以上是维基百科给出的面向对象概念及与面向过程的差异。
面向对象四大特性:
封装、继承、多态、继承
1 封装
概念:封装指的是将隐匿某一方法执行步骤,取而代之的是消息传递机制发送消息给它。
//例子:唱歌 $singer = '杰伦';//歌手 $tone = '中音';//音调 $song = '面向对象';//歌曲 startSing(); class sing { private $singer; private $tone; private $song; public function getSinger(): string { return $this->singer; } public function setSinger(string $singer): string { $this->singer = $singer; } public function getTone(): string { return $this->tone; } public function setTone(string $tone): string { $this->tone = $tone; } public function getSong(): string { return $this->song; } public function setSong(string $Song): string { $this->singer = $Song; } public function startSing(): string { echo $this->getSinger() . ' 开始以 ' . $this->getTone() . ' 唱 ' . $this->getSong() . '这首歌'; } }
2 继承
概念:一个类有'子类',子类(派生类)对比父类(基类/超类)实现更加具体化。
class animal { protected $coatColor; protected $name; public function eat() { } } class rabbit extends animal { protected $coatColor = '白色'; protected $name = '兔子'; public function eat() { echo $this->name . '喜欢吃草'; } } class tiger extends animal { protected $coatColor = '咖色'; protected $name = '老虎'; public function eat() { echo $this->name . '喜欢吃肉'; } }
3 多态
概念:由继承产生的相关的不同的类,其对象对于同一方法做出不同的效应。
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
多态的优点
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
4 抽象
抽象 是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。举例说明,莱丝在大多数时候都被当作一条狗,但是如果想要让它做牧羊犬做的事,你完全可以调用牧羊犬的方法。如果狗这个类还有动物的父类,那么你完全可以视莱丝为一个动物 from 维基百科。
abstract class dog { public $coatColor;//毛色 public $length;//身长 abstract public function hunting();//狩猎 abstract public function run();//速度 } class jinmao extends dog { public $coatColor = '金色';//毛色 public $length = '一米+';//身长 public function hunting()//狩猎 { echo '可以抓小动物'; } public function run()//速度 { echo '40km/h'; } } class hashiqi extends dog { public $coatColor = '灰色';//毛色 public $length = '一米+';//身长 public function hunting()//狩猎 { echo '可以抓小动物'; } public function run()//速度 { echo '60km/h'; } }