面向对象编程.ppt

上传人:qwe****56 文档编号:70023537 上传时间:2023-01-14 格式:PPT 页数:55 大小:281.50KB
返回 下载 相关 举报
面向对象编程.ppt_第1页
第1页 / 共55页
面向对象编程.ppt_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《面向对象编程.ppt》由会员分享,可在线阅读,更多相关《面向对象编程.ppt(55页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、面向对象编程http:/PHPChina 工作室http:/Zend PHPChina Training内容简介p什么是对象p如何使用对象编程p面向对象思想的概念和关系pPHP5中面向对象部分的特性p以面向对象的思维设计程序p面向对象编程的优势和缺点p常用的设计模式pPHP5中的异常、反射与内建类和接口http:/Zend PHPChina Training什么是对象p什么是对象?q对象是包含了若干变量和函数的软件集合。p为什么要使用对象?q现实世界中处处都是对象。q软件对象用于模拟现实世界中的对象。q软件对象使用变量来维护它的状态。q软件对象使用相关子函数来实现它的功能。q软件对象抽象了业务

2、中的单元,使工作变得简单。http:/Zend PHPChina Trainingp 在教室内找出尽可能多的对象。p 对每一个对象从尽可能细致到尽可能抽象地描述它。http:/Zend PHPChina Training如何使用对象编程p在思维中模拟业务,并发现其中的基本单元。p根据业务大小和单元特征确定基本的对象。q基本单元应该能实现业务中的相应的子处理部分。q划分的对象应该具有典型性。q划分的对象中没有无意义的定义。p使用划分的对象在纸上描绘业务。p按照设计进行编程。http:/Zend PHPChina Trainingp 假设需要服务器A向服务器B发送某一条消息,然后由服务器B向服务器

3、A返回其回执。p尝试划分此业务中出现的对象。http:/Zend PHPChina Training面向对象思想的概念和关系p对象(Object)p类(Class)p原型(Prototype)p实体(Entity)p属性(Property)p方法(Method)http:/Zend PHPChina Training面向对象思想的概念和关系p结构体(Struct)p接口(Interface)p继承(Extends)p实现(Implements)http:/Zend PHPChina Trainingp 猫抓老鼠,狗拿耗子。p 尝试使用面向对象的思想来分析。p 如果强制规定必须使用接口,如何设计

4、接口。http:/Zend PHPChina TrainingPHP5中面向对象部分的特性p支持3P,更严格的可视设定。p支持抽象、最终和静态的修饰。p支持异常。p支持接口。p支持对象的迭代。p支持对象的克隆。p自动加载机制。p标准PHP库。http:/Zend PHPChina Training创建第一个类p类定义的语法class Person var$firstName;var$lastName;function Person($first,$last)$this-firstName=$first;$this-lastName =$last;function sayHelloWorld()

5、echo“$this-firstName$this-lastName:”.Hello World!;$jim=new Person(Jim,Green);$jim-sayHelloWorld();http:/Zend PHPChina Training修饰可视的3Pppublicq外部可见。pprotectedq内部可见。pprivateq仅自己可见。q后代继承类不可见。http:/Zend PHPChina TrainingPHP5新的写法习惯class Person public$firstName;public$lastName;public function _construct($f

6、irst,$last)$this-firstName=$first;$this-lastName =$last;public function sayHelloWorld()echo“$this-firstName$this-lastName:”.Hello World!;$jim=new Person(Jim,Green);$jim-sayHelloWorld();http:/Zend PHPChina Training抽象、最终和静态pabstractq类无法实例化,必须继承。q方法无法调用,必须在继承类中重载。pfinalq类无法继承。q方法无法重载。pstaticq属性为唯一的,所有实

7、例均指向同一数据。q方法无法在实例的上下文环境中调用。http:/Zend PHPChina Training中国人向世界问好abstract class Person /.protected$mWestern;public function _construct($first,$last)$this-firstName=$first;$this-lastName =$last;$this-mWestern =true;/.http:/Zend PHPChina Training中国人向世界问好class Chinese extends Person public function _cons

8、truct($last,$first)parent:_construct($first,$last);$this-mWestern=false;public function sayHelloWorld()echo“$this-lastName$this-firstName:”.世界你好!;$loong=new Chinese(李,小龙);$loong-sayHelloWorld();http:/Zend PHPChina Training中国人向世界问好class Chinese extends Person public function _construct($last,$first)p

9、arent:_construct($first,$last);$this-mWestern=false;static public function allSayHelloWorld()echo 全体中国人:世界你好!;Chinese:allSayHelloWorld();http:/Zend PHPChina TrainingPHP5支持类内部常量p格式qconst CONSTANT=Value;p用途q将无意义的值变为有意义的值。q便于阅读和维护。q便于调整和扩展。http:/Zend PHPChina Training使用类的内部常量abstract class Person const

10、 WESTERN=1;const EASTERN=2;/.class Chinese extends Person /.public function _construct($last,$first)/.$this-mWestern=self:EASTERN;/.http:/Zend PHPChina Trainingp 猫抓老鼠,狗拿耗子。p 使用父类继承的方式,编写相应的类。p 使用类的常量来声明对象特征:究竟是抓住老鼠的是猫还是狗。http:/Zend PHPChina Training创建第一个接口p接口定义的语法interface iAnimalAgainstMouse public

11、 function catchMouse(Mouse$mouse);class Cat implements iAnimalAgainstMouse /.public function catchMouse(Mouse$mouse)/./.http:/Zend PHPChina Training继承和实现的差异p如果需要继承,则有且仅有一个父类。p可以同时实现多个接口。class Child extends Father implements iFaceA,iFaceB,iFaceC /.http:/Zend PHPChina Training如何判断对象的原型p前面的例子qAnimal:CA

12、T=$animal-behaviorp使用原有的函数qCat=get_class($animal)qis_a($animal,Cat)p使用instanceof操作符q$animal instanceof Cathttp:/Zend PHPChina Training对象的引用、克隆和比较p对象的比较q等于(=)q原型一致,为同一个类的实体。q属性一致。q绝对等于(=)q为同一实体的不同引用。http:/Zend PHPChina Training对象的引用、克隆和比较p对象的引用qPHP4赋值默认为克隆而非引用。q$ref=&$objqPHP5赋值默认为引用。q$ref=$objhttp:/

13、Zend PHPChina Training对象的引用、克隆和比较p对象的简单克隆q$cln=$objq$cln=clone$objpPHP5中更灵活的克隆class Demo public$x;public function _construct($x)$this-x=$x;public function _clone()$this-x=100-$this-x;http:/Zend PHPChina Training对象的引用、克隆和比较pPHP5中更灵活的克隆qclone操作符会尝试调用原型类的_clone方法。q_clone方法无法被直接调用。q_clone方法执行于对象副本创建之后。h

14、ttp:/Zend PHPChina Trainingp 不管白猫黑猫,能抓老鼠就是好猫。p 只能定义猫一个类。p 使用类的内部常量区分颜色。p 默认创建为白猫,克隆后为黑猫。http:/Zend PHPChina Training自动加载机制p自动加载机制由以下两种途径实现q_autoload($class_name)q默认的自动加载函数qPHP发现类/接口的使用而非发现定义时自动调用qspl_autoload_register($autoload_function)qSPL库扩展了自动加载机制q如同include_path一样,允许多种机制同时运转q足够灵活,可以使用类(实体)的静态方法和

15、函数q足够智能,重复定义会自动分析q但是,使用此函数会默认使_autoload()函数失效http:/Zend PHPChina Training自动加载机制function _autoload($class_name)require_once$class_name.php;class Foo static function autoLoad2($class_name)function autoLoad3($class_name)$bar=new Foo();$a_defined=spl_autoload_functions();http:/Zend PHPChina Training自动加载

16、机制for($ii=0,$jj=count($a_defined);$ii mObservers=array();$this-mValue =$val;public function addObserver(Observer$ob)$this-mObservers=$ob;http:/Zend PHPChina Training观察者(Observer)模式 public function change($newVal)$this-mValue=$newVal;$this-notify();public function notify()for($ii=0,$jj=count($this-mO

17、bservers);$ii mObservers$ii-update($this,$this-mValue);http:/Zend PHPChina Training观察者(Observer)模式class Observer protected$mSubjects;public function _construct()$this-mSubjects=array();public function subscribe(Subject$sbj,$alias)$this-mSubjects$alias=$sbj;$sbj-addObserver($this);http:/Zend PHPChina

18、 Training观察者(Observer)模式 public function update(Subject$sbj,$val)reset($this-mSubjects);while(false!=(list($s_alias,)=each($this-mSubjects)if($sbj=$this-mSubjects$s_alias)echo Subject$s_alias changed its value to:.$val;return true;throw new Exception(The subject has not been subscribed.);http:/Zend

19、PHPChina Trainingp 假定某工厂想买进同一系列不同型号的电子仪器若干台,同时还需要买进与该系列配套的监控设备一台。但因为某些原因,想请你通过计算机程序预先模拟一下,如果可行,还将此程序用于员工培训。p 请根据此业务描述尝试编写该系统逻辑。p 请合理使用之前所述的设计模式。http:/Zend PHPChina TrainingPHP5的内建类和接口p内建类和接口基本都在PHP标准库(SPL,Standard PHP Library)中。p该库是PHP原有功能基于面向对象的实现。p推荐使用下图中版本的PHP官方手册。http:/Zend PHPChina TrainingPHP5

20、的异常p异常是用于统一处理错误的机制。p异常会在发生后按照调用的层次向上抛出,直至主程序层,然后由PHP解析引擎以错误方式显示。p使用trycatch结构可以在任何所需的地方截获并处理异常。ptry部分可以包含多行代码,然后在第一个异常发生处中止。pcatch部分可以出现多个,以处理不同的异常。http:/Zend PHPChina TrainingPHP5的异常class ExA extends Exception class ExB extends Exception class ExC extends ExA function FooA FooB();throw new ExA;func

21、tion FooB FooC();throw new ExB;function FooC throw new ExC;http:/Zend PHPChina TrainingPHP5的异常try FooA();catch(ExA$ex)catch(ExB$ex)catch(ExC$ex)catch(Exception$ex)http:/Zend PHPChina TrainingPHP5的异常p以下PHP5的标准扩展中,也定义了扩展的异常:qSQLiteqSOAPqPDOqDOMqSPLqMySQLihttp:/Zend PHPChina TrainingPHP5的反射p反射用于在程序运行时获

22、取相应的定义信息和即时信息。p反射更多应用在调试中。p反射偶尔会在正常思路无法实现的业务中被使用。p在正常的程序设计中不鼓励使用反射。http:/Zend PHPChina TrainingQ&Ahttp:/Zend PHPChina Trainingp 完善之前的那套设备模拟程序,考虑各种极限情况。要求程序不会因为错误而崩溃掉。p 监控机与设备无法通信。p 用户在设备上输入错误的信息。p 监控机能输出所有设备上所有用户的历史操作记录。http:/Zend PHPChina Trainingp 综合应用所有的面向对象的知识,模拟实现类似于PDO的数据库驱动。p 要求驱动程序尽可能的健壮。p 无需实现其内在的实际功能。http:/Zend PHPChina Trainingp 使用反射生成上述两套程序任意一套的文档手册。p 可选题。鼓励完成。http:/Zend PHPChina Training谢 谢http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com