《精编》产品库存管理系统的对象设计

情境3产品库存管理系统面向对象设计 学习情境描述 要求根据第一个情境的需求分析结果 学生成立项目开发小组 划分角色 推选项目经理和CTO 首席技术师 程序员 经过讨论给出产品库存管理系统中的实体类 入库单 出库单 库存和用户类和控制类接口的详细设计 利用情境2搭建好的环境 对每个类予以编程实现 所需知识 类的定义与对象的创建构造方法的作用及应用面向对象三大特征 封装性 继承性和多态性的Java语言实现抽象类与接口的应用包的创建与使用访问控制符的应用异常处理 重点及难点 构造方法的作用及应用面向对象三大特征 封装性 继承性和多态性的Java语言实现抽象类与接口的应用异常处理 能力目标 培养学生面向对象的编程能力培养学生良好的团队合作意识及沟通协调能力 接收新知识的能力培养学生分析问题 解决问题的能力 创新能力以及逻辑思维能力 任务一 用Java语言描述现实世界中的Person 学生讨论确定Person的特征譬如 name 姓名 age 表示年龄 sex 表示性别等 确定Person相关的行为譬如 吃饭 睡觉等 用Java语言实现Person类 复习引入 面向对象与面向过程的区别 面向对象编程 面向对象编程是软件设计与实现的有效方法 它将客观世界中存在的事物看作对象 每个客观事物都有自己的特征和行为 对象的基本概念 变量 方法 客观世界的实体 程序中对象 对象具有两方面的含义 考虑从哪些方面描述对象 面向对象的基本概念 类是抽象的 对象是具体的 具有相同特征和行为的对象被抽象为类 类是对象的模板 包括一个对象的所有数据和代码 类的示例 形状类 动物类 汽车类 对象 对象是存在的具体实体 具有明确定义的状态和行为 对象的示例 收银员对象 顾客对象 顾客姓名 朱丽叶年龄 28体重 52千克操作 购买商品 状态 姓名 布兰尼职衔 收银员年龄 35体重 60千克操作 收款打印帐单 行为 消息传递 消息指一个对象为执行某项特定操作而向另一个对象发送的请求 类和对象的示例 雇员 收银员 系统管理员 仓库管理员 面向对象技术的实现 对象 类和实体的关系 类是创建对象的模板 对象是类的实例 类的基本概念 现实生活中的对象 classCar intcolor intname intspeed voidbrake voidspeedUp voidslowDown 抽象数据类型 程序中的对象 映射 描述 实现 类定义 类定义中必须要写类名 应该使用Java语言合法的标识符来命名类名不能与java中已定义好的类名相同 格式 修饰符 class类名 extends父类名 implements接口名表 成员变量声明方法成员声明 其中class extends和implements都是Java的关键字 类中的方法6 1 方法的名称 参数列表 方法的主体 方法返回的对象类型或原始类型 方法体 若局部变量与类的成员变量同名 则类的成员变量被隐藏 方法体是对方法的实现 它包括局部变量的声明以及所有合法的Java指令 方法体中声明的局部变量的作用域在该方法内部 类的定义举例 classCar intcolor intname intspeed voidbrake voidspeedUp voidslowDown 类的实现 任务一实现 classPerson Stringname intage Stringsex publicvoideat System out println It sdelicious 实战 定义一个名为Rectangle表示长方形的类 它包含double类型的长length和宽width两个数据成员和设置长方形长宽值的方法setDim 计算长方形面积的方法area 类的实现 对象的创建 声明 类名对象名 声明并不为对象分配内存空间 而只是分配一个引用空间 实例化 类名对象名 new类名 例 Personp newPerson 运算符new为对象分配内存空间 它调用对象的构造方法 返回引用 初始化 另外执行构造方法 可进行初始化 当一个变量被创建时 会对其中各种类型的成员变量自动按下表进行初始化赋值 对象的使用 访问对象成员的一般形式为 对象名 成员变量名对象名 成员方法名 运算符 在这里称为成员运算符 创建对象举例 classTestPerson publicstaticvoidmain String args Personp1 newPerson p1 name Tom p1 age 12 p1 sex male p1 eat 按照前面设计Person类来充当生产车间 创建Person对象 任务二 通过构造方法 初始化Person类的实例 为其成员变量赋初值 构造方法 在Java中 任何变量在被使用前都必须先设置初值 Java提供了为类的成员变量赋初值的专门功能 构造方法 构造方法的特点 构造方法名与类名相同 构造方法不返回任何值 也没有返回类型 每一个类可以有零个或多个重载的构造方法 若没有为一个类显式的定义构造方法 则当创建类对象时 编译器将自动为它创建一个没有参数的默认构造方法 构造方法只能在创建对象时通过new关键字来自动调用 注意 一旦我们自己定义了构造方法 系统将不再为我们提供默认的不带参数的构造方法 classPerson Stringname intage Stringsex publicPerson Strings1 name s1 publicPerson Strings1 intx name s1 age x 任务二实现 publicPerson Strings1 intx Strings2 name s1 age x sex s2 publicvoideat System out println It sdelicious classTestPerson publicstaticvoidmain String args Personp1 newPerson Tom Personp2 newPerson John 20 Personp3 newPerson Bob 22 male System out println p1 name p1 age p1 sex System out println p2 name p2 age p2 sex System out println p3 name p3 age p3 sex 通过构造方法赋初值 This引用句柄 构造方法的形式参数与类的成员变量名相同在构造方法中调用其他重载的构造方法 用this 参数列表 的形式 自主学习内部类的定义和使用 面向对象的基本特征 封装性 继承性 多态性是面向对象的三个主要特性 封装性的引入 classPerson Stringname intage Stringsex publicvoideat System out println It sdelicious classTestPerson publicstaticvoidmain String args Personp1 newPerson p1 name Tom p1 age 12 非法的值p1 sex male System out println p1的年龄是 p1 age 通过实例启发学生思考为什么引入封装性 封装性的实现 外部世界 所谓封装 就是信息隐藏 隐藏对象的实现细节 不让用户看到 封装的示例3 1 接口 采购经理 罗杰斯先生 法拉力公司 迪斯尼汽车公司 市场经理 雪莉女士 要求 封装的示例3 2 有选择地提供数据 法拉力公司 迪斯尼汽车公司 封装的示例3 3 实体法拉力公司 实体迪斯尼汽车公司 AutiLtd ButoLtd 设置器和访问器方法 封装举例 classPerson privateintage publicvoidsetAge inti if i130 return age i publicintgetAge returnage 将其设为私有的 方法设为公有 封装的好处 任务三 定义Person类的子类Student类 继承性 类继承是指一个类可以继承其他类的非私有成员 实现代码复用 被继承的类称为父类 继承父类后产生的类称为子类 继承 父类 子类 继承的实现 classSubClassextendsSuperClass Java中的继承是通过extends关键字来实现的 关键字 任务三实现 classStudentextendsPerson Stringschool publicvoidstudy System out println Studding publicstaticvoidmain String args Personp newPerson p name Tom p age 30 p getInfo Students newStudent s name John s age 16 s school 清华大学 s getInfo s study 继承的特点 注意 在Java语言中 只允许单继承 继承的优点 构造方法的继承 构造方法不能继承 但子类在创建对象时要对继承来自父类的成员进行初始化 因此 在创建子类时除了执行子类的构造方法外 还需要调用父类的构造方法 具体遵循原则如下 当子类未定义构造方法时 创建对象时将无条件地调用父类的无参构造方法 对于父类的含参数构造方法 子类可以在自己构造方法中使用super调用它 但super调用语句必须是子类构造方法中的第一个可执行语句 子类在自己的构造方法中如果没有用super明确调用父类的构造方法 则在创建对象时 将自动先执行父类的无参构造方法 然后再执行自己定义的构造方法 任务四 对上例中Student类继承了父类的所有非私有方法进行重写 多态性 方法重写实现的动态多态性 运行时多态 方法重载实现的静态多态性 编译时多态 多态性 方法重写 classRectangle intlength intwidth Rectangle intlen intwid length len width wid 计算矩形的周长 voidgetPerimeter System out println 矩形的周长为 2 length width 方法重写 classSquareextendsRectangle Square intlen length len 计算周长 voidgetPerimeter System out println 正方形的周长为 4 length publicstaticvoidmain String arg RectanglerectObj newRectangle 10 15 rectObj getPerimeter RectanglesqObj newSquare 15 sqObj getPerimeter 调用父类方法 调用子类方法 任务四实现 classPerson publicStringname publicintage publicvoidgetInfo System out println name System out println age publicvoideat System out println It sdelicious classStudentextendsPerson Stringschool publicvoidstudy System out println Studding publicvoidgetInfo System out println name System out println age System out println school publicstaticvoidmain String args Personp newPerson p name Tom p age 30 p getInfo Students newStudent s name John s age 16 s school 塔山小学 s getInfo s s