wordpress建站购买,哪个网站做任务给东西,乐清建站公司,网站专题模板下载2019独角兽企业重金招聘Python工程师标准 转载自#xff1a;http://my.oschina.net/brucelee80/blog 面向对象与面向过程的区别 面向过程就是分析出解决问题所需要的步骤#xff0c;然后用函数把这些步骤一步一步实现#xff0c;使用的时候一个一个依次调用就… 2019独角兽企业重金招聘Python工程师标准 转载自http://my.oschina.net/brucelee80/blog 面向对象与面向过程的区别 面向过程就是分析出解决问题所需要的步骤然后用函数把这些步骤一步一步实现使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象建立对象的目的不是为了完成一个步骤而是为了描叙某个事物在整个解决问题的步骤中的行为。 例如五子棋面向过程的设计思路就是首先分析问题的步骤 1、开始游戏 2、黑子先走 3、绘制画面 4、判断输赢 5、轮到白子 6、绘制画面 7、判断输赢 8、返回步骤2 9、输出最后结果。 把上面每个步骤用分别的函数来实现问题就解决了。 而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方这两方的行为是一模一样的 2、棋盘系统负责绘制画面 3、规则系统负责判定诸如犯规、输赢等。 第一类对象玩家对象负责接受用户输入并告知第二类对象棋盘对象棋子布局的变化棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化同时利用第三类对象规则系统来对棋局进行判定。 可以明显地看出面向对象是以功能来划分问题而不是步骤。同样是绘制棋局这样的行为在面向过程的设计中分散在了总多步骤中很可能出现不同的绘制版本因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中绘图只可能在棋盘对象中出现从而保证了绘图的统一。 功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能如果要改动面向过程的设计那么从输入到判断到显示这一连串的步骤都要改动甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话只用改动棋盘对象就行了棋盘系统保存了黑白双方的棋谱简单回溯就可以了而显示和规则判断则不用顾及同时整个对对象功能的调用顺序都没有变化改动只是局部的。 到这里就可以很明显的看出面向对象和面向过程的区别所在了。 基本概念 抽象、封装、对象、类 面向对象的思想来解决问题首先要做的是分析该问题包括哪些对象。问题中的实体和概念都可以抽象为对象来考虑。如上面例子中的黑白双方、棋盘系统和规则系统等。 对象具有属性、状态以及行为状态是属性的值行为是属性的逻辑操作。对象都属于某个类而每个对象都是某个类的实例。一个对象就是封装了数据及操作这些数据的逻辑代码的实例。 对具有相同属性和行为的一组对象进行抽象便成了类它是对象的模板而对象是类的实例化每个对象都对类的属性赋予不同的状态对象具有唯一性。 隐藏与访问控制 封装并不只是简单的属性和行为的集结更重要的是选择性隐藏与访问控制。隐藏和控制那些不想提供对外访问的属性和行为提供出去的便是这个对象的服务与功能。对使用者而言隐藏了对象具体的实现又提供了对象可控的行为。访问控制提高了安全性也使协作开发有章可循。 组合、继承 现实世界中类与类之间不是孤立的它们是有联系的。 组合是指一个类拥有另外一个类包含关系将一个类当做它自己的属性。比如班级类就可以组合学生、老师这两个类表示班级由学生和老师组成。 继承是指两个类具有父子关系父类也称为基类或超类子类也称为导出类、扩展类或派生类。比如动物类是父类而飞禽类和走兽类则属于子类表示分禽类和走兽类都是动物类。凡是父类能用在的地方都可以用子类来替代因为子类就是父类父类是子类的再抽象。比如说动物是生物当然可以替换成飞禽是生物。 父类的属性和行为子类可以原封不动的继承下来也可以重写以实现每个子类之间各自的新特性。 对象分析时组合和继承到底选哪一个是抽象分析和封装时需要考虑的他们各有优缺点。组合和继承提高了对象的可复用性。 接口、抽象类 接口规范了服务提供的约束。比如电脑USB插槽就约束了USB的各种规范各种厂商生产的带有USB外接功能的数据线都必须遵循这个接口约束规范。接口不可实例化只有实现了接口的类才可被实例化成对象。 抽象类则更像是一个半成品它只实现了部分功能而其他功能必须是它的子类去完成。比如公司下发一个申报流程必须先让部门经理签字再让部门HR签字这个流程是实现了的至于每个部门的经理和HR则要每个部门具体实施时才能确定。所以抽象类公司申报流程也不能直接实例化因为公司申报流程中根本没有具体的审批人只能是它的子类部门申报流程才能被实例化对象并可用。 转型 当类之间有继承关系时我们就说子类是父类这个过程其实就是将子类向上转型为父类从一个专有类转换成一个通用类这总是很安全的。相反如果将父类强制转换为子类称之为向下转型向下转型需要强制转型具有不安全性因为通用类无法访问专有类的专有行为。比如猫类是动物类的子类猫类可以抓老鼠但是向下转型成动物可以抓老鼠显然就说不通反之如果说猫类能行走那么向上转型为动物类能移动显然是安全的。 多态 多态也叫动态绑定或后期绑定。绑定是指方法调用和方法主体关联起来。前期绑定是指在编译时就可确定这种关联而后期绑定必须在程序处于运行态时才能确定。 在Java中方法调用的默认方式是前期绑定由编译器和连接程序实现当方法出现方法的重载和继承时行为的重写时那么编译期间就无法进行绑定这就需要动态绑定。动态绑定使得同样的一个方法可以有多种实现方式。 比如动物类可以进食当进食的是水时它就和进食的是固体所表现的行为就不一样了这种进食行为是动物类行为的重载是多态的表现。又比如动物类有移动的行为而子类飞禽类的移动是飞行子类走兽类的移动是地面上移动此时对于动物类的移动行为就是多态当动物是飞禽移动的行为就变成了飞行的行为如果是走兽这个行为又变成了地面上移动而这一切只有在运行期才知道因为只有真正运行起来程序才知道这个动物到底是飞禽还是走兽。 多态可以提供系统间的松耦合性。 转载自http://my.oschina.net/brucelee80/blog 转载于:https://my.oschina.net/brucelee80/blog/284245