威海职业学院产品库存管理系统面向对象设计学习情境描述要求根据第一个情境的需求分析结果,学生成立项目开发小组,划分角色,推选项目经理和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(参数列表)的形式自主学习内部类的定义和使用。面向对象的基本特征封装性、继承性、多态性是面向对象的三个主要特性。特征描述封装性通过提供一个或多个公有(public)方法,实现对该类的私有成员变量的访问和修改继承性通过extends关键字实现子类继承父类的所有非私有成员多态性通过方法重载和方法重写实现方法的多态性封装性的引入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.属性电话号码电子邮箱产品种类现有存货数量雇员详情所需物料详情属性电话号码电子邮箱汽车种类汽车规格雇员详情库存详情经销商详情方法接收订单备件的制造方法计算备件的制造成本计算利润率方法发出订单汽车的组装方法计算汽车的组装成本计算工资发出订单编制必要报告设置器和访问器方法设置私有成员变量值的方法称为设置器方法,通常为:publicvoidsetX(类型x){this.x=x;}访问私有成员变量值的方法称为访问器方法,通常为:public类型getX(){returnx;}封装举例classPerson{privateintage;publicvoidsetAge(inti){if(i0||i130)return;age=i;}publicintgetAge(){returnage;}}将其设为私有的方法设为公有封装的好处封装的优点可进行数据检查便于修改,增强代码的可维护性隐藏类的实现细节任务三定义Person类的子类Student类继承性类继承是指一个类可以继承其他类的非私有成员,实现代码复用。被继承的类称为父类,继承父类后产生的类称为子类。继承父类子类父类/子类是相对的Cow类Lion类Tiger类Animals类Carnivorous类Herbivorous类Coat类继承的实现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();}}继承的特点继承的特点具有层次结构子类继承了父类的非私有属性和方法Object是所有类的超类注意:在Java语言中,只允许单继承。继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类构造方法的继承构造方法不能继承,但子类在创建对象时要对继承来自父类的成员进行初始化,因此,在创建子类时除了执行子类的构造方法外,还需要调用父类的构造方法,具体遵循原则如下:当子类未定义构造方法时,创建对象时将无条件地调用父类的无参构造方法;对于父类的含参数构造方法,子类可以在自己构造方法中使用super调用它,但super调用语句必须是子类构造方法中的第一个可执行语句;子类在自己的构造方法中如果没有用super明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。任务四对上例中Student类继承了父类的所有非私有方法进行重写多态性方法重写实现的动态多态性(运行时多态)方法重载实现的静态多态性(编译时多态)多态性方法重写方法重写子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname()用于调用父类中的方法classRectangle