ACCP6.0 S2 使用Java实现面向对象编程 第一章 下载本文

内容发布更新时间 : 2024/11/2 20:20:36星期一 下面是文章的全部内容请认真阅读。

1.1用面向对象设计电子宠物系统 1.1.1 为什么使用面向对象

现实世界就是“面向对象的”。现实世界中的任何事物都可以看作是“对象”,比如人、建筑、交通工具、学习用品等。而事物都有自己的属性和行为。比如人,它具有各种属性:姓名、性别、身高、体重、籍贯等,还可以做很多事情:吃饭、睡觉、劳动、锻炼等。各个事物之间还会发生各种联系,人用木材可以做成一套家具,人用笔可以写出文章等。

面向对象就是采用“现实模拟”的方法设计和开发程序。计算机软件开发规模越来越大,解决的问题也越来越复杂,导致软件开发时间、软件开发成本、软件维护费用甚至软件开发质量等日益难以控制。而面向对象技术利用“面向对象的思想”去描述“面向对象的世界”,实现了虚拟世界和现实世界的一致性,符合人们的思维习惯,使得客户和软件设计开发人员之间、软件设计开发人员内部交流更加顺畅,同时还带来了代码重用性高、可靠性高等优点,大大提高了软件尤其是大型软件的设计和开发效率。

问答

问题:面向过程和面向对象有什么区别?

解答:我们要举办一次北大青鸟的联欢晚会。如果采用面向过程的话,就是全体人员合唱青鸟之歌→主持人宣布晚会开始→领导讲话→主持人过场→演员一表演→主持人过场→演员二表演??→最后一位演员表演→主持人宣布晚会结束,即从头至尾、自上而下的实现功能。而如果采用面向对象实现的话,首先分析晚会需要哪些类:领导、主持人和演员。然后分析各种类的行为:主持人有宣布晚会开始、过场、宣布晚会结束,当然也有唱青鸟之歌。领导有讲话、唱青鸟之歌。演员主要就是表演节目,也有唱青鸟之歌。然后就利用设计好的类创建对应对象,调用相应的方法(行为)来逐步进行晚会。

面向过程的核心概念是函数,以功能为中心,实现了函数级别的代码重用。面向对象的核心概念是封装了属性和方法(行为)的类,以数据为中心,实现了类级别的代码重用。面向对象因为采用了类,具有继承和多态特性,可以进一步重用代码和简化编程,而面向过程中没有继承和多态特性。

1.1.2 使用面向对象进行设计

下面就开始电子宠物系统的设计和开发之路吧,这一章的任务是用类来描述宠物,然后实现领养宠物功能。首先需要根据需求进行面向对象的设计。

问题:

我们要设计一个电子宠物系统,其中领养宠物功能的详细需求如下。 根据控制台提示,输入领养宠物的昵称。

根据控制台提示,选择领养宠物的类型,有两种选择:狗狗和企鹅。 如果类型选择狗狗,要选择狗狗的品种,有两种选择:“聪明的拉布拉多犬”或者“酷酷的雪纳瑞”。

如果类型选择企鹅,要选择企鹅的性别:“Q仔”或“Q妹”。 所领养宠物的健康值默认是100,表示非常健康。

所领养宠物和主人的亲密度默认是0,表示和主人还不熟悉。

在控制台打印出宠物信息,包括昵称、健康值、亲密度、品种或性别,表示领养成功。

如何依据需求,使用面向对象思想来设计我们的电子宠物系统呢?

分析

面向对象设计的过程就是抽象的过程,我们分三步来完成。 第一步:发现类。

第二步:发现类的属性。 第三步:发现类的方法。

面向对象设计的过程就是抽象的过程,根据业务需求,关注与业务相关的属性和行为,忽略不必要的属性和行为,由现实世界中“对象”抽象出软件开发中的“对象”,如图1.2所示。

图1.2 面向对象设计的过程就是抽象的过程

接下来我们就按照发现类、发现类的属性和发现类的方法的步骤完成设计。 我们可以通过在需求中找出名词的方式确定类的属性,找出动词的方式确定方法。并根据需求实现业务的相关程度进行筛选。

第一步:发现类。

需求中名词有控制台、宠物、昵称、狗狗、企鹅、类型、品种、聪明的拉布拉多犬、酷酷的雪纳瑞、性别、Q仔、Q妹、健康值、亲密度和主人等。

根据仔细筛选,发现可以作为类的名词有宠物、狗狗、企鹅和主人。本章要实现领养宠物功能,主要用到两个类:狗狗(Dog)和企鹅(Penguin)。宠物和主人在完善设计和增加功能时再使用。

第二步:发现类的属性。

需求中动词主要有输入、选择、领养、打印等。某些明显与设计无关、不重要的词语可以直接忽略。

通过仔细筛选,发现可作为属性的名词有昵称、健康值、亲密度品种和性别,还有一些名词是作为属性值存在的,例如聪明的拉布拉多犬、酷酷的雪纳瑞是品种的属性值,Q仔和Q妹是性别的属性值。

根据需求,定义狗狗类的属性有昵称(name)、健康值(health)、亲密度(love)和品种(strain)。企鹅类的属性有昵称(name)、健康值(health)、亲密度(love)和性别(sex)。狗狗和企鹅的某些属性,例如年龄、体重、颜色等与领养业务需求无关,不予设置。

第三步:发现类的方法。 通过仔细筛选,发现类的方法主要是打印宠物信息。狗狗和企鹅的方法主要就是打印出自己的信息,取名为print()。至于狗狗睡觉、洗澡等行为,企鹅吃饭、游泳等行为,与领养业务需求无关,现在先不为其设定方法,在后续业务中若有需求再添加。

设计是一个逐步调整、完善的过程,类图是面向对象设计的“图纸”,使用“图纸”进行设计方便沟通和修改。将设计的结果通过类图来表示,如图1.3和图1.4所示。

图1.3 Dog类图 图1.4 Penguin类图 小结

抽象时遵循的原则。

属性、方法的设置是为了解决业务问题的。 关注主要属性、方法。

如没有必要,无增加额外的类、属性与方法。

1.2 通过创建对象实现领养宠物功能 1.2.1 创建类的对象

已经设计出了类及其属性和方法,下面需要把类图表示的内容转变为Java的类代码。 狗狗类的代码如示例1所示。 示例1 /**

*宠物狗狗类。 *@author 北大青鸟 */

public class Dog{

String name = “无名氏”; //昵称,默认值是“无名氏” int health = 100; //健康值,默认值是100 int love = 0; //亲密度

String strain = “聪明的拉布拉多犬”; //品种 /**

*输出狗狗信息 */

public void print(){ System.out.println(“宠物的自白:\\n 我的名字叫” + this.name + ”,健康值” + this.health + “,和主人的亲密度是” + this.love + “,我是一只 ” + this.strain + “。”);

} }

企鹅类的代码如示例2所示。 示例2 /**

*宠物企鹅

* @author 北大青鸟 */

public class Penguin{

String name = “无名氏”; //昵称 int health = 100; //健康值 int love = 0; //亲密度

String sex = “Q仔”; //性别 /**

*输出企鹅信息 */

public void print(){

System.out.println(“宠物的自白:\\n 我的名字叫” + this.name + ”,健康值” + this.health + “,和主人的亲密度是” + this.love + “,性别是 ” + this.sex + “。”);

} }

从示例1和示例2中我们学习了类的基本结构,其主要由属性和行为组成,成为类的成员变量(或者成员属性)和成员方法,同成为类的成员(除此之外,类的成员还包括构造方法、代码块等)。

问题

已经有了狗狗和企鹅类,如何领养宠物呢?

分析

领养宠物的步骤如下

根据控制台提示输入宠物的类型、昵称等内容。 根据输入内容创建相应的宠物对象。 打印出宠物信息表,示领养成功。

通过测试类来创建具体的宠物对象并输出信息,如示例3所示。 示例3

import java.util.Scanner; /**

*领养宠物

* @author 北大青鸟 */

public class Text{

public static void main(String[] args){

Scanner input = new Scanner(System.in); System.out.println(“欢迎您来到宠物店!”); //1.输入宠物名称

System.out.println(“请输入要领养宠物的名字:”); String name = input.next(); //2.选择宠物

System.out.println(“请选择要领养的宠物类型:(1.狗狗 2.企鹅)”); switch(input.nextInt()){ case 1:

// 2.1 如果是狗狗

//2.1.1 选择狗狗的品种 System.out.println(“请选择狗狗的品种:(1.聪明的拉布拉多犬” + “ 2.酷酷的雪纳瑞)”);

String strain = null; if(input.nextInt() == 1){ strain = ”聪明的拉布拉多犬”;

} else {

strain = “酷酷的雪纳瑞”; }

// 2.1.2 创建狗狗对象并赋值

Dog dog = new Dog(); dog.name = name; dog.strain = strain; // 2.1.3 输入狗狗信息 dog.print(); break; case 2: //2.2 如果是企鹅 //2.2.1 选择企鹅性别

System.out.println(“请选择企鹅的性别:(1.Q仔 2.Q妹)”); String sex = null;

if(input.nextInt() == 1) sex = ” Q仔”; else

sex = “Q妹”

//2.2.2 创建企鹅对象并赋值 Penguin pgn = new Penguin(); pgn.name = name; pgn.sex = sex;

//2.2.3 输出企鹅信息 pgn.print(); } }

}

运行结果如图1.5 和图1.6所示。

图1.5 领养狗狗运行结果

图1.6 领养企鹅运行结果