文档详情

OOP 面向对象编程.pptx

发布:2016-08-20约7.19千字共66页下载文档
文本预览下载声明
OOP AIA 什么是面向对象? Object??? Oriendted?????? Programming 对象??? ? 以…为导向的 ? ?程序设计 面向对象就是使用对象进行程序设计,简写成OOP 面向过程? (SP) 面向对象(OOP) 设计思路 自顶向下、层次化、分解 自底向上、对象化、综合 程序单元 函数模块 对象 设计方法 程序 = 算法 + 数据结构 程序 = 对象 = 数据 + 方法 优点 相互独立,代码共享 接近人的思维方式 模拟客观世界 缺点 数据与程序不一致 维护困难 客观世界的无序性 概念不成熟 SP和OOP对比 一个示例 示例场景:   我们需要设计一个人事管理系统,其中的一个功能是对各种不同类型的员工,计算其当月的工资——不同类型的员工,拥有不同的薪金计算制度。 结构化做法 结构化做法 1.获得人事系统中所有可能的员工类型 ?2.根据不同的员工类型所对应的不同的薪金制度,计算其工资? enum EmployeeType { Engineer; Sales; Manager; … } // 计算工资程序 if ( type == EmployeeType.Engineer) {……} else if (type == Employeetype.Sales) {……} 面向对象设计 1.根据不同的员工类型设计不同的类,并使这些类继承自一个Employee抽象类,其中有一个抽象方法GetSalary。 ?2.在各个不同的员工类中,根据自己的薪金制度,重写(override)GetSalary方法。 abstract class Employee {…public abstract int GetSalary();} class Engineer: Employee {… public override int GetSalary(){…} } class Sales: Employee {… public override int GetSalary(){…} } // 显示工资程序 Employee e = emFactory.GetEmployee(id); MessageBox.Show( e.GetSalary()); 示例场景: 现在需求改变了……随着客户公司业务规模的拓展,又出现了更多类型的员工,比如钟点工、计件工……等等,这对人事管理系统提出了挑战——原有的程序必须改变。 结构化做法 几乎所有涉及到员工类型的地方(当然包括“计算工资程序”)都需要做改变……这些代码都需要重新编译,重新部署……. 面向对象做法 只需要在新的文件里增添新的员工类,让其继承自Employee抽象类,并重写GetSalary()方法,然后在 EmployeeFactory.GetEmployee方法中根据相关条件,产生新的员工类型就可以了。其他地方(显示工资程序、Engineer类、 Sales类等)则不需要做任何改变。 重新认识面向对象   对于前面的例子,从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。 对象 ?对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为; ?对象其实就是“数据”和“函数”的封装体,其中: 数据表示自身的状态,也称作“属性”或“成员数据”; 函数表示自身的功能,也称作“方法”或“成员函数”。 类 人们为了更好地认识世界,将现实生活中的事物(对象)划分成类; 同一类中的事物总是具有一些共性。 类和对象的关系 类是用来描述实体的“模板”或“原型”; 对象是实际的实体,每一个对象都是类的一个具体实例。 Java OOP三大思想 封装 继承 多态 封装 隐藏实现细节,对外提供公共的访问接口,增强代码的可维护性 具体实现方式:属性私有化、添加公有的setter,getter方法 继承 多态 增强代码的可扩展性、维护性 同一个实现接口,使用不同的实例而执行不同操作。通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类来定义不同的操作 静态的多态就是只函数的重载,动态的多态就是方法的覆写 原则:“左声明右实现” 这个原则可以在任何地方使用,包括在接口和抽象类中,软件初学者可以以这个原则来理解面向父类的编程方法。 父类 /***坦克类,它是所有坦克的父类*/ class Tank { public void printTank() { System.out.println(This is Tank); } } /***M1坦克类,它继承了坦克父类*/ class M1Tank extends Tank { //该方法重写了父
显示全部
相似文档