(JAVA)产品库存管理系统面向对象设计(145)页

上传人:xx****x 文档编号:242882867 上传时间:2024-09-10 格式:PPT 页数:145 大小:1.93MB
返回 下载 相关 举报
(JAVA)产品库存管理系统面向对象设计(145)页_第1页
第1页 / 共145页
(JAVA)产品库存管理系统面向对象设计(145)页_第2页
第2页 / 共145页
(JAVA)产品库存管理系统面向对象设计(145)页_第3页
第3页 / 共145页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,威 海 职 业 学 院,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,情境,3,产品库存管理系统面向对象设计,学习情境描述,要求根据第一个情境的需求分析结果,学生成立项目开发小组,划分角色,推选项目经理和,CTO,(首席技术师),程序员。经过讨论给出产品库存管理系统中的实体类:入库单、出库单、库存和用户类和控制类接口的详细设计;利用情境,2,搭建好的环境,对每个类予以编程实现。,所需知识,类的定义与对象的创建,构造方法的作用及应用,面向对象三大特征:封装性、继承性和多态性的,Java,语言实现,抽象类与接口的应用,包的创建与使用,访问控制符的应用,异常处理,重点及难点,构造方法的作用及应用,面向对象三大特征:封装性、继承性和多态性的,Java,语言实现,抽象类与接口的应用,异常处理,能力目标,培养学生面向对象的编程能力,培养学生良好的团队合作意识及沟通协调能力、接收新知识的能力,培养学生分析问题、解决问题的能力、创新能力以及逻辑思维能力,任务一,用,Java,语言描述现实世界中的,Person,。,学生讨论确定,Person,的特征,譬如:,name-,姓名,,age-,表示年龄,,sex-,表示性别等。,确定,Person,相关的行为,譬如:吃饭、睡觉等。,用,Java,语言实现,Person,类,复习引入,面向对象与面向过程的区别?,面向对象编程,面向对象编程是软件设计与实现的有效方法,它将客观世界中存在的事物看作对象,每个客观事物都有自己的特征和行为。,对象的基本概念,变量,方法,在现实生活中,在计算机程序中,客观世界的实体,程序中对象,对象具有两方面的含义(考虑从哪些方面描述对象),面向对象的基本概念,类是抽象的,对象是具体的,具有相同特征和行为的对象被抽象为类。,类是对象的模板,包括一个对象的所有数据和代码。,类的示例,形状类,动物类,汽车类,对象,对,象,面向对象编程的核心,为计算机应用程序提供实用基础,完成特定任务,表示现实世界中的实体,“,对象是存在的具体实体,具有明确定义的状态和行为。”,对象的示例,收银员对象,顾客对象,顾客,姓名:朱丽叶,年龄:,28,体重:,52,千克,操作:,购买商品,状态,姓名:布兰尼,职衔:收银员,年龄:,35,体重:,60,千克,操作:,收款,打印帐单,行为,消息传递,“,消息指一个对象为执行某项特定操作而向另一个,对象发送的请求”,消息传递,当需要执行一项特定操作时,通过向已为其定义此项操作的对象发送消息来请求,对象之间通过传递消息,实现相互通信,类和对象的示例,雇员,收银员,系统管理员,仓库管理员,促销员,采购经理,面向对象技术的实现,对象,类,实例化,抽象,计算机世界,实体,抽象数据类型,现实世界,抽象,映射,计算机逻辑的实现,对象、类和实体的关系,类是创建对象的模板,对象是类的实例,类的基本概念,现实生活中的对象,class Car ,int color;,int name;,int speed;,void brake() ,void speedUp() ,void slowDown() ,抽象数据类型,程序中的对象,映,射,描述,实,现,类定义,类定义中必须要写类名,应该使用,Java,语言合法的标识符来命名,类名不能与,java,中已定义好的类名相同,格式,:,修饰符,class,类名,extends,父类名,implements,接口名表, ,成员变量声明,方法成员声明,其中,class,、,extends,和,implements,都是,Java,的关键字。,类的声明,类体,类中的方法,6-1,方法的定义,方法的名称,参数列表,方法的主体,方法返回的对象类,型或原始类型,方法体,若局部变量与类的成员变量同名,,则类的成员变量被隐藏。,方法体是对方法的实现,它包括局部变量的声明以及所有合法的,Java,指令。方法体中声明的局部变量的作用域在该方法内部,。,类的定义举例,class Car ,int color;,int name;,int speed;,void brake() ,void speedUp() ,void slowDown() ,类的实现,任务一实现,class Person,String name;,int age;,String sex;,public void eat(),System.out.println(Its delicious!);,【,实战,】,:定义一个名为,Rectangle,表示长方形的类,它包含,double,类型的长,length,和宽,width,两个数据成员和设置长方形长宽值的方法,setDim(),、计算长方形面积的方法,area(),。,类的实现,对象的创建,声明,类名 对象名;,声明并不为对象分配内存空间,而,只是分配一个引用空间,实例化,类名 对象名,= new,类名,(),例:,Person p=new Person();,运算符,new,为对象分配内存空间,它调用对象的构造方法,返回引用,初始化,另外执行构造方法,可进行初始化,当一个变量被创建时,会对其中各种类型的成员变量自动按下表进行初始化赋值,。,对象的使用,访问对象成员的一般形式为:,对象名,.,成员变量名,对象名,.,成员方法名,(),运算符”,.”,在这里称为成员运算符,创建对象举例,class TestPerson,public static void main(String args),Person p1=new Person();,p1.name=Tom;,p1.age=12;,p1.sex=male;,p1.eat();,按照前面设计,Person,类来充当生产车间,创建,Person,对象,任务二,通过构造方法,初始化,Person,类的实例,为其成员变量赋初值。,构造方法,在,Java,中,任何变量在被使用前都必须先设置初值。,Java,提供了为类的成员变量赋初值的专门功能:,构造方法,。,构造方法的特点,构造方法名与类名相同。,构造方法不返回任何值,也没有返回类型。,每一个类可以有零个或多个重载的构造方法。若没有为一个类显式的定义构造方法,则当创建类对象时,编译器将自动为它创建一个没有参数的默认构造方法,.,构造方法只能在创建对象时通过,new,关键字来自动调用,。,注意:,一旦我们自己定义了构造方法,系统将不再为我们提供默认的不带参数的构造方法 。,class Person,String name;,int age;,String sex;,public Person(String s1),name = s1;,public Person(String s1,int x),name = s1;,age = x;,任务二实现,public Person(String s1,int x,String s2),name= s1;,age = x;,sex = s2;,public void eat(),System.out.println(Its delicious!);,class TestPerson,public static void main(String args),Person p1=new Person(Tom);,Person p2=new Person(John,20);,Person p3=new Person(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,关键字实现子类继承父类的所有非私有成员,多态性,通过方法重载和方法重写 实现方法的多态性,封装性的引入,class Person,String name;,int age;,String sex;,public void eat(),System.out.println(Its delicious!);,class TestPerson,public static void main(String args),Person p1=new Person();,p1.name=Tom;,p1.age=-12;/,非法的值,p1.sex=male;System.out.println(“p1,的年龄是:”,+p1.age);,通过实例启发学生思考为什么引入封装性?,封装性的实现,私有数据,公有方法,外部世界,所谓封装,就是信息隐藏,隐藏对象的实现细节,,不让用户看到,封装的示例,3-1,接口,采购经理,罗杰斯,先生,法拉力公司,.,迪斯尼汽车公司,.,市场经理,雪莉女士,要求,封装的示例,3-2,有选择地提供数据,法拉力公司,迪斯尼汽车公司,公共,电话号码,电子邮箱,产品种类,私有,备件的制造方法,备件库存,备件的制造成本,公共,电话号码,电子邮箱,汽车种类,私有,汽车的组装方法,汽车库存,汽车的组装成本,封装的示例,3-3,实体,法拉力公司,实体,迪斯尼汽车公司,Auti Ltd,.,Buto Ltd,.,属性,电话号码,电子邮箱,产品种类,现有存货数量,雇员详情,所需物料详情,属性,电话号码,电子邮箱,汽车种类,汽车规格,雇员详情,库存详情,经销商详情,方法,接收订单,备件的制造方法,计算备件的制造成本,计算利润率,方法,发出订单,汽车的组装方法,计算汽车的组装成本,计算工资,发出订单,编制必要报告,设置器和访问器方法,设置私有成员变量值的方法称为设置器方法,通常为:,public void setX (,类型,x),this.x=x;,访问私有成员变量值的方法称为访问器方法,通常为:,public,类型,getX(), return x;,封装举例,class Person,private,int age;,public void setAge(int i),if(i130),return;,age = i;,public int getAge(), return age;,将其设为私有的,方法设为公有,封装的好处,封装的优点,可进行数据检查,便于修改,增强代码的可维护性,隐藏类的实现细节,任务三,定义,Person,类的子类,Student,类,继承性,类继承是指一个类可以继承其他类的非私有成员,实现代码复用。,被继承的类称为父类,继承父类后产生的类称为子类。,继承,父 类,子类,父类,/,子类是相对的,Cow,类,Lion,类,Tiger,类,Animals,类,Carnivorous,类,Herbivorous,类,Coat,类,继承的实现,class SubClass extends SuperClass,Java,中的继承是通过,extends,关键字来实现的。,关键字,任务三实现,class Student extends Person,String school;,public void study(),System.out.println(Studding);,public static void main(String args),Person p=new Person();,p.name=Tom;,p.age=30;,p.getInfo();,Student s=new Student();,s.name=John;,s.age=16;,s.school=“,清华大学”,;,s.getInfo();,s.study(); ,继承的特点,继承的特点,具有层次结构,子类继承了父类的非私有属性和方法,Object,是所有类的超类,注意,:,在,Java,语言中,只允许单继承。,继承的优点,继承的优点,代码的可重用性,父类的属性和方法可用于子类,设计应用程序变得更加简单,可以轻松地自定义子类,构造方法的继承,构造方法不能继承,但子类在创建对象时要对继承来自父类的成员进行初始化,因此,在创建子类时除了执行子类的构造方法外,还需要调用父类的构造方法,具体遵循原则如下,:,当子类未定义构造方法时,创建对象时将无条件地调用父类的无参构造方法;,对于父类的含参数构造方法,子类可以在自己构造方法中使用,super,调用它,但,super,调用语句必须是子类构造方法中的第一个可执行语句;,子类在自己的构造方法中如果没有用,super,明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。,任务四,对上例中,Student,类继承了父类的所有非私有方法进行重写,多态性,方法重写实现的,动态多态性,(运行时多态),方法重载实现,的静态多态性,(编译时多态),多态性,方法重写,方法重写,子类和父类的方法具有相同的名称和类型,用子类对象调用子类中的重写方法,super.methodname(),用于调用父类中的方法,class Rectangle ,int length;,int width;,Rectangle(int len , int wid) ,length = len;,width = wid;,/*,计算矩形的周长,.*/,void getPerimeter() ,System.out.println(“,矩形的周长为,+ (2 * (length + width);,方法重写,class Square,extends Rectangle,Square(int len) ,length = len;,/*,计算周长,.*/,void getPerimeter() ,System.out.println(“,正方形的周长为, + (4 * length);,public static void main(String arg) ,Rectangle rectObj = new Rectangle(10, 15);,rectObj.getPerimeter();,Rectangle sqObj= new Square(15);,sqObj.getPerimeter();,调用父类方法,调用子类方法,任务四实现,class Person,public String name;,public int age;,public void getInfo(),System.out.println(name);,System.out.println(age);,public void eat(),System.out.println(Its delicious!);,class Student extends Person,String school;,public void study(),System.out.println(Studding);,public void getInfo(),System.out.println(name);,System.out.println(age);,System.out.println(school);,public static void main(String args),Person p=new Person();,p.name=Tom;,p.age=30;,p.getInfo();,Student s=new Student();,s.name=John;,s.age=16;,s.school=,塔山小学,;,s.getInfo();,s.study(); ,多态性,【,实战,】,:通过分析,编程实现上图,成员方法覆盖应注意的问题,覆盖方法的方法名、返回类型和参数列表必须与它所覆盖的方法相同,覆盖方法不能比它所覆盖的方法访问性更低,覆盖方法不能比它所覆盖的方法抛出更多的异常,成员变量的覆盖,若子类声明了与父类同名的变量,则父类的变量被隐藏起来,直接使用的是子类的变量,但父类的变量仍占据空间,可通过,super,或父类名来访问。,程序运行结果:,Subclass : 200,Superclass : 100,成员变量的覆盖,class A,int x = 100;,class B extends A,int x = 200;,void print(),System.out.println(Subclass:+ x);,System.out.println(Superclass:+ super.x);,public static void main(String args),(new B().print();,成员变量的覆盖,类对象之间的类型转换,父类对象和子类对象的转换需要注意以下原则:,子类对象可以被视为是其父类的一个对象,反之则不可。,若一个方法的形式参数定义的是父类的对象,则调用该方法的实际参数可以使用子类对象。,若父类对象引用指向的实际是一个子类对象,则这个父类对象的引用可以用强制类型转换转化成子类对象的引用。,类变量, static,修饰符,我们在,Person,类中增加一个成员变量国籍,,并假设所有的人都来自中国,该如何实现?,思考?,类变量,country=China,name=“John”,age=15,name=“rose”,age=14,name=“Tom”,age=16,static,静态变量或类变量,静态变量的访问:,类名,.,变量名,类变量的应用,class Count,public static void main(String args),User u1=new User();,u1.login();,User u2=new User();,u2.login();,class User,static int count=0;,void login(),count+;System.out.println(,你是第,+count+,位访问者,);,类方法,static修饰符,static,修饰符修饰的方法叫静态方法,目的,:,使方法独立于类的实例,使用类去访问,类方法,规 则,可以调用其他静态方法,必须访问静态数据,不能使用,super,或,this,关键字,调用静态方法的语法为:,cl,assname.methodname( );,类方法的应用,public class IsPrime,public static boolean prime(int x),for(int k=2;k=Math.sqrt(x);k+),if(x%k=0),return false;,return true;,Class TestIsPrime,public static void main(String args),for(int m=10;m name.indexOf(),) ,System.out.println(“,该电子邮件地址有效,);, else ,System.out.println(“,该电子邮件地址无效,);,提取字符串方法,方法,说明,public char charAt(int index),此方法用于从指定位置提取单个字符,该位置由索引指定,索引中的值必须为非负,public String substring(int index),此方法用于提取从位置索引开始的字符串部分,public String substring(int beginindex, int endindex),此方法用于提取,beginindex 和 endindex 位置之间的字符串部分,public String concat(String str),此方法用于连接两个字符串,并新建一个包含调用字符串的字符串对象,public String replace(char old, char new),此方法用于将调用字符串中出现某个字符的所有位置都替换为另一个字符,public String trim(),此方法用于返回一个前后不含任何空格的调用字符串的副本,提取字符串,方法,说明,public char charAt(int index),此方法用于从指定位置提取单个字符,该位置由索引指定,索引中的值必须为非负。,public String substring(int index),此方法用于提取从位置索引开始的字符串部分。,public String substring(int beginindex, int endindex),此方法用于提取,beginindex 和 endindex 位置之间的字符串部分。,public String concat(String str),此方法用于连接两个字符串,并新建一个包含调用字符串的,String,对象。,public String replace(char old, char new),此方法用于将调用字符串中出现某个字符的所有位置都替换为另一个字符。,public String trim(),此方法用于返回一个前后不含任何空格的调用字符串的副本。,.,char ch;,ch = orange.charAt(3);,.,它将从,index(3) 中提取单个字符串,“n”并将其存储在变量 ch 中,提取字符串举例,public class StringMethods ,public static void main(String args) ,String s = Java is a + platform independent language;,String s1 = Hello world ;,String s2 = Hello;,System.out.println(s);,System.out.println(index of t = + s.indexOf(t);,System.out.println(last index of t = +s.lastIndexOf(t);,System.out.println(index of(t, 10) = +s.indexOf(t, 10);,System.out.println(s1.substring(3, 8);,System.out.println(s2.concat(World);,System.out.println(s2.replace(l, w);,System.out.println(s1.trim();,任务七实现,public class Get,private String fullPath;,private final char pathSepatator=;,public Get(String fname),fullPath=fname;,public String getName(),int pos=fullPath.lastIndexOf(pathSepatator);,if(pos=-1),return fullPath;,else,return fullPath.substring(pos+1);,public String getPath(),int pos=fullPath.lastIndexOf(pathSepatator);,if(pos=-1),return fullPath;,else,return fullPath.substring(0,pos);,public static void main(String args),Get fn=new Get(F:avamyexamplea.java);,System.out.println(fn.getName();,System.out.println(fn.getPath();,更改字符大小写方法,Hello,使用,toUpperCase( ),方法,HELLO,HELLO,使用,toLowerCase( ),方法,hello,语法,public String toUpperCase();,语法,Public String toLowerCase();,更改字符大小写方法举例,public class StringTest ,public static void main(String args) ,String name = new String(George);,System.out.println(“,姓名是, + name);,int length =,name.length(),;,System.out.println(“,姓名的长度为 ”,+ length + “,个字符,);,System.out.println(“,姓名用大写形式表示为,: );,String nameUppercase =,name.toUpperCase(),;,System.out.println(nameUppercase);,任务八,判断一个字符串是否为回文,即将一个字符串进行反转,得到的字符串与源串相同:例如原始字符串为“,aba”,逆转后的字符串也为“,aba”,。,StringBuffer,类,构造方法,说明,public StringBuffer(),保留,16,个字符的空间,public StringBuffer (int length),设置缓存器大小,p,ublic,StringBuffer(Stringvalue),接收字符串参数,用来设置初始内容,,并在不重新分配的情况下保留,16,个字符,的空间,StringBuffer,用于表示可以修改的字符串,使用连接运算符,(+),的字符串会自动创建字符串缓冲对象,StringBuffer,类的方法,方法,说明,StringBuffer insert(String s),在指定位置插入指定的字符串,int length( ),确定,StringBuffer,对象的长度,int capacity(),返回当前容量,void setCharAt(int pos, char ch),使用,ch,指定的新值设置,pos,指定的位置上的字符,String toString( ),转换为字符串形式,StringBuffer reverse(),将此字符序列用其反转形式取代,StringBuffer delete(int start, int end),删除调用对象中从,start,位置开始直到,end,指定的索引, 1,位置的字符序列,StringBuffer deleteCharAt(int pos),删除,pos,指定的索引处的字符,StringBuffer replace(int start, int end, String s),使用一组字符替换另一组字符。将用替换字符串从,start,指定的位置开始替换,直到,end,指定的位置结束,不变性,String,类,创建后,直接修改,不变性的概念,解决方法,StringBuffer,类,String 的对等类,表示可增加和可编,写字符的可变序列,将字符插入到字符串中间,或附加到字符串末尾,不变性举例,public class StringBuf ,public static void main(String args) ,StringBuffer buf = new StringBuffer(Java);,buf.append(“ Guide Ver1/”);,buf.append(3);,int index = 5;,buf.insert(index, Student );,index = 23;,buf.setCharAt(index, .);,int start = 24;,int end = 25;,buf.replace(start, end, 4);,String s = buf.toString();,/,转换为字符串,System.out.println(s);,任务八实现,public class StringReverse,public static void main(String args),String s=I am a Chinese;,int len=s.length();,StringBuffer dest=new StringBuffer(len);,for(int i=len-1;i=0;i-),dest.append(s.charAt(i);,System.out.println(dest.toString();,main,方法的参数,main,方法的形参为,String,类的数组参数,args,,,args,可以用来接收,Java,命令行传送给,Java,应用程序的数据。例如:,java HelloEcho How are you? 123,若要将包含多个空格的单词作为一个字符串,可用引号括起来。例如:,java HelloEcho How are you? 123,main,方法的参数举例,class CommandLine ,public static void main(String args) ,for(int i=0; iargs.length; i+),System.out.println(args + i + : + argsi);,显示所有命令行参数,Java,异常处理,任务九,public class ExceptionRaised ,public ExceptionRaised() ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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