1、2022-11-271第二章 2022-11-272软件开发的阶段面向对象的分析和设计简介类和对象构造方法对象的创建和使用信息的封装和隐藏Java API2022-11-273需求分析系统设计编码实现测试阶段系统维护2022-11-274分析、设计及编码阶段分析、设计及编码阶段 分析阶段:分析并确定用户需求,用采用适当的模型规范地表述这一需求,形成分析模型,为要处理的现实世界中的事物建立抽象建模。设计阶段:确定系统如何实现所需的功能-采用适当的数据结构+控制逻辑,将分析模型细化。编码实现:选定一种适当的编程语言,编码实现上述的设计,并在开发过程中引入测试,完善整个解决方案。2022-11-27
2、5面向对象的思想概述面向对象的思想概述面向对象的编程思想力图使对计算机语言中对事物的的描述与现实世界中该事物的本来面目尽可能的一致。类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。2022-11-276类和对象举例类和对象举例/定义一个类class Person int age;int getAge()return age;void setAge(int i)age=i;/声明并创建一个Person类的对象,将该对象命名为a Person a=new Person(
3、);/调用对象a中的方法 a.setAge(36);2022-11-277声明类声明类语法格式:class 举例:public class Person private int age;public void showAge(int i)age=i;2022-11-278声明属性声明属性语法格式:type =defaultValue;举例:public class Person private int age;public String name=“Lila”;2022-11-279声明方法声明方法语法格式:()举例:public class Person private int age;pu
4、blic int getAge()return age;public void setAge(int i)age=i;2022-11-2710对象的创建和使用对象的创建和使用使用new+构造方法创建一个新的对象;使用“对象名.对象成员”的方式访问对象成员(包括属性和方法);Example:public class Test public static void main(String args)Person d=new Person();d.setAge(42);System.out.println(本人年龄:+d.getAge();2022-11-2711Ex2-1分析并编译、运行下面的源文
5、件,体会类的定义、对象的创建、对象成员方法的调用、类的定义和应用程序在源文件结构上的不同;/源文件A.javapublic class A public void m1()System.out.println(hi);/源文件Test.javapublic class Test public static void main(String args)A hello=new A();hello.m1();2022-11-2712面向对象的应用举例面向对象的应用举例(1)程序BirthDate.java:/定义类BirthDatepublic class BirthDate private int
6、 day;private int month;public int year;public void setDay(int d)day=d;public void setMonth(int m)month=m;public void setYear(int y)year=y;public int getDay()return day;public int getMonth()return month;public int getYear()return year;public void show()System.out.println(day+-+month+-+year);2022-11-2
7、713面向对象的应用举例面向对象的应用举例(2)程序ObjectOperating.java:/定义类ObjectOperatingpublic class ObjectOperating public static void main(String args)BirthDate b=new BirthDate();b.setDay(25);b.setMonth(12);b.setYear(2003);b.day=2;/不合法,无权访问该私有属性 b.year=2003;b.show();2022-11-2714Ex2-2vBirthDate.javavObjectOperating.java
8、2022-11-2715信息的封装和隐藏信息的封装和隐藏(1)使用者对类内部定义的数据(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。public class Person public int age;public class Test public static void main(String args)Person b=new Person();b.age=-3;2022-11-2716信息的封装和隐藏信息的封装和隐藏(2)Java中通过将数据封装、声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,以实现下述目的:隐藏一个类的
9、实现细节;使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;2022-11-2717信息的封装和隐藏信息的封装和隐藏(3)class Personprivate int age;public void setAge(int i)if(i130)return;age=i;public int getAge()return age;public class Testpublic static void main(String args)Person b=new Person();b.setAge(3);b.setAge(300)
10、;System.out.println(b.getAge();2022-11-2718Ex2-3vTest.java2022-11-2719构造方法构造方法功能:创建其所属类型的一个新的对象。语法格式:()举例:public class Person private int age;public Person()age=18;public Person(int i)age=i;public void setAge(int i)age=i;2022-11-2720默认的构造方法默认的构造方法Java语言中,每个类都至少有一个构造方法;如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默
11、认的构造方法:默认构造方法没有参数 默认构造方法没有方法体Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;2022-11-2721默认的构造方法默认的构造方法类的定义:public class Person private int age;public void setAge(int w)age=w;等价于:public class Person private int age public Person()public void setAge(int w)age=w;应用举例:public class Test public static void m
12、ain(String args)Person d=new Person();d.setAge(120);2022-11-2722测试构造方法测试构造方法vTest_constructor.javav结论:2022-11-2723package语句为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。java io lang System String Object2022-11-2724package语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为
13、:package pkg1.pkg2.pkg3;举例:Test.javapackage p1;public class Test public void display()System.out.println(in method display();Java编译器把包对应于文件系统的目录管理,package语句中,用.来指明包(目录)的层次;2022-11-2725编译和生成包编译和生成包如果在程序Test.java中已定义了包p1,编译时采用如下方式:vjavac Test.java 则编译器会在当前目录下生成Test.class文件,再在适合位置(destpath目录)手动创建一个名为p1
14、的子目录,将Test.class复制到该p1目录下。vjavac-d destpath Test.java则编译器会自动在destpath目录下建立一个子目录p1,并将生成的.class文件都放到destpath/p1下。2022-11-2726import语句语句为使用定义在不同包中的Java类,需用import语句来引入所需要的类。语法格式:import package1.package2.(classname|*);应用举例:import p1.Test;/import p1.*;public class TestPackagepublic static void main(String
15、 args)Test t=new Test();/Test类在p1包中定义 t.display();2022-11-2727import 语句分析对于 import java.awt.*;将按照路径:CLASSPATH javaawt 来查找所需的外部类。环境变量CLASSPATH是用来指示Java程序所引用的外部类所在的一系列相对路径2022-11-2728 Ex1 在练习Ex2-1的类定义文件A.java中增加包声名语句,指定其所在包为mypack,并对应用程序文件Test.java做相应修改(添加import语句),实现同样的功能。提示:Test.java,A.java,Test.cla
16、ss保存在当前目录(如“c:myexex02”);而A.class保存在当前目录下的与声明的包名同名的子目录中(如“c:myexex02mypack”)2022-11-2729JDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。java.awt-包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。java.applet-包含applet运行所需的一些类。-包含执行与网络相关的操作的类。java.io-包含
17、能提供多种输入/输出功能的类。java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。2022-11-2730Java API 文档API-Application Programming InterfaceJava API文档是一组超文本文件,提供关于Java 类(API)的说明信息:类层次类的功能性描述成员变量列表及详细介绍构造方法列表及详细介绍其它方法列表及详细介绍从父类中继承来的属性及方法列表Java API文档按包组织,在某个类的API文档中还提供了指向关联类的API文档的链接;2022-11-2731Java API 文档页面举例文档页面举例 2022-11-2732练练 习习Ex2-4将Ex2-1中类A的定义加入到应用程序文件 Test.java 中分析并解决出现的编译错误,运行实现同样的功能。