课程设计报告一:面向抽象编程基础

一、课程设计目的

  1. 掌握类和对象的设计
  2. 掌握面向对象程序设计的基本方法
  3. 掌握面向抽象编程的原则

二、课程设计内容

1、概念理解

面向抽象编程,顾名思义,是对抽象类(abstract)进行一系列操作的编程。也就是说 当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即 设计类中的重要数据 是 抽象类的对象 ,不是具体类声明的对象。

简单一点理解,就是定义了一个abstract类和一个abstract方法,再定义一个或几个abstract类的子类,在子类中重写abstract类中的abstract方法(子类中重写的方法不再是abstract方法),然后就可以只声明一个abstract类,再利用 上转型对象 对其重写的方法进行调用。这样就可以实现声明的一个变量可以应对多种不同的变化。 

2、编程题

有一个Circle类(圆类),该类创建的对象circle调用getArea()方法可以计算圆的面积。Circle类的代码如下:

public class Circle {

    double r;

    Circle(double r){

        this.r=r;

    }

    public double getArea() {

        return(3.14*r*r);

    }

}

现在要设计一个Pillar类(柱类),该类的对象调用getVolume()方法可以计算柱体的体积。Pillar类的代码如下:

public class Pillar {

    Circle bottom;    //bottom是用具体类Circle声明的对象

    double height;

    Pillar (Circle bottom,double height){

        this.bottom=bottom;

        this.height=height;

    }

    public double getVolume() {

        return bottom.getArea()*height;

    }

}

补充main函数,完成圆柱体的体积计算有一些提示性语句

3、编程题

上述Pillar类中,bottom是用具体类Circle声明的对象,如果不涉及用户需求的变化,上面Pillar类的设计没有什么不妥,但是在某个时候,用户希望Pillar类能创建出底是三角形或者长方形的柱体。显然上述Pillar类无法创建出这样的柱体,即上述设计的Pillar类不能应对用户的这种需求(软件设计面临的最大问题是用户需求的变化)。

利用面向抽象编程原则实现柱体体积的计算。程序参考如下:

public abstract class Geometry {
    public abstract double getArea();//单纯的构造abstract方法。
}

class Circle extends Geometry{
    double r;
    Circle(double r){//构造函数
        this.r = r;
    }
    public double getArea() {   / /方法的重写
        return r * r * 3.14;
    }
}

public class Pillar {

    Geometry bottom;//声明Geometry对象(抽象对象)
    double hight;
    Pillar(Geometry bottom,double h){//构造函数,获取值
        this.bottom = bottom;
        this.hight = h;
    }
    
    public double getVolume(){//返回体积值
        if(bottom == null){
            System.out.println("没有底,无法计算面积");
            return 0;
        }
        return bottom.getArea()*hight;//这里的调用的getArea()函数根据对bottom的上转型对象来确定。
    }
}

public class Application {

    public static void main(String[] args) {
        Pillar pillar;
        Geometry bottom;
        
        bottom = null;
        pillar = new Pillar(bottom,5);
        System.out.println("体积:" + pillar.getVolume());
        
        bottom = ***************;//上转型对象
        pillar = ****************;//传入实参对象
        System.out.println("体积:" + pillar.getVolume());//调用的是Circle里面的getVolume()。
    }
}

若有学有余力的同学,请增加底面积是三角形和长方形的柱体体积的计算。

三、代码清单与实验结果截图

1.编程题一代码和实验结果截图

public class Main {
    public static void main(String[] args) {
        // 创建一个Circle对象,半径为5
        Circle circle = new Circle(5);
        // 创建Pillar对象,高度为10
        Pillar pillar = new Pillar(circle, 10);
        // 输出圆柱体的体积
        System.out.println("圆柱体的体积是: " + pillar.getVolume());
    }
}

2.编程题二代码和实验结果截图

运行结果:

  • 课程设计小结

(1)在本次设计中,通过对 Circle 类和 Pillar 类的实现,深入理解了类与对象的基本概念和设计方法。类是对现实世界对象的抽象,而对象是类的具体实例。在 Circle 类中,我们使用了类成员变量 r 来表示圆的半径,并通过 getArea() 方法计算圆的面积。在 Pillar 类中,我们将 Circle 作为底面,实现了柱体的体积计算。通过这一过程,掌握了如何设计类、如何定义类的属性和方法,以及如何通过对象来调用这些方法。

(2)在设计 Pillar 类时,通过引入构造函数、成员变量以及方法,实现了面向对象编程的基本思想。面向对象的核心思想是将数据和操作封装在对象中,并通过对象之间的交互来实现程序功能。在此过程中,理解了如何通过构造函数初始化对象、如何通过成员方法操作对象的属性,以及如何通过对象的方法调用实现特定功能。同时,通过继承、封装和多态等特性,进一步加深了对面向对象编程的理解。

(3)在编写支持多种底面形状的 Pillar 类时,通过引入了抽象类 Geometry,实现了面向抽象的编程。通过面向抽象编程,我们可以将设计中的类及其重要数据类型抽象为接口或抽象类,而具体的实现则交由各个子类来完成。这样一来,程序可以针对抽象类型进行操作,而不局限于某个具体类型,例如不再局限于 Circle 类,而是可以扩展支持 Triangle 类或 Rectangle 类。这种设计使得系统更具扩展性和灵活性,能够应对用户需求的变化,符合面向对象编程中“开闭原则”(对扩展开放,对修改关闭)的设计理念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值