面向对象程序设计_面向对象程序设计(OOP)

概念:

面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。

104633f93a995b825e4df3d7a582fb04.png

面向对象设计三大特性:

1、封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

例如类的设计, new Class();

2、继承

提高代码复用性;继承是多态的前提。

例如:php中用extends关键词

3、多态(两种说法,表达同个意思)

(1)父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

(2)多 态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论 中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。

比较难理解的是多态的实现;

php语言的实现案例:

abstract class animal{    abstract function cry();}class cat extends animal{    function cry(){        echo "miao~ 
"; }}class dog extends animal{ function cry(){ echo "wang ~
"; }}function tocry($obj){ if($obj instanceof animal){//通过instanceof来判断是其子类 $obj -> cry(); }else{ echo "no function"; }}tocry(new dog()); tocry(new cat());
interface animal{      public function cry();  }  class cat implements animal{      public function cry(){          echo "miao~ 
"; } } class dog implements animal{ public function cry(){ echo "wang ~
"; } } function tocry(animal $obj){ //通过定义类型判断是其子类,更能体现多态 $obj->cry(); } tocry(new dog()); tocry(new cat());

输出:

wang ~   miao~      

上个例子中体现了多态的两个特征

  • 子类重写父类方法
  • 父类指向子类

抽象类的实现: 上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,说明子类对象是父类的一个实例,从而达到了多态的功能。

其实php的抽象类(abstract)和接口类(interface),都是多态的体现。虽然不如java,go等强类型语言那么明显。但是也是多态。

五大基本原则:

1、单一职责原则SRP(Single Responsibility Principle) 类的功能要单一,不能包罗万象,跟杂货铺似的。

2、开放封闭原则OCP(Open-Close Principle) 一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。

3、里式替换原则LSP(the Liskov Substitution Principle LSP) 子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。哈哈~~

4、依赖倒置原则DIP(the Dependency Inversion Principle DIP) 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的是抽象的中国人,而不是你是xx村的。

5、接口分离原则ISP(the Interface Segregation Principle ISP) 设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值