1.实验题目
请设计一个软件包。要求该软件包至少拥有三角形类、正方形类、圆类和正五边形类。每个类都要具有构造方法,而且可以构造任意的一般图形。例如:要求通过三角形类的构造方法可以创建在任意位置上的一般三角形。要求每个类都含有计算该图形的周长的成员方法和计算的面积的成员方法。然后编写一个程序,分别创建这些类的实例对像,并输出这些实例对像的周长和面积。在创建这些实例对象时,构造方法的调用参数值可以自行设计!
2.公式
三角,圆形,矩形什么的面积周长公式从小学就开始学了,我就不说了,重点说一下,正多边形的位置大小的确定和面积通式:
正多边形的外接圆圆心和正多边形的一个顶点可以唯一确定一个正多边形。
**
2.代码
///////////////////////////////////////
////以下每一块为一个文件
/////////////////////////////////////
///////////////////////////////////////
////所有类的接口
/////////////////////////////////////
package shape;
public interface J_Shape {
public abstract double getArea();//计算图形的面积
public abstract double getCircle();//计算图形的面积
}
///////////////////////////////////////
////正多边形的父类
/////////////////////////////////////
package shape;
import shape.J_Shape;
public class J_RegularPolygon implements J_Shape{
double x1,y1;//正多边形的一个顶点坐标
double x2,y2;//正多边形外接圆的圆心坐标
int n;//声明边数
private double r;
private double l;
public J_RegularPolygon() {}
public J_RegularPolygon(double x1 ,double y1, double x2, double y2, int n ) {
this.x1=x1;
this.x2=x2;
this.y1=y1;
this.y2=y2;
this.n=n;
r = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//外接圆的半径
l = 2*r*Math.sin(Math.PI/n);//正多边形的边长
}
public double getArea() {
return (n*l*r*Math.cos(Math.PI/n))/2.0;
}
public double getCircle() {
return n*l;
}
}
///////////////////////////////////////
////三角形
/////////////////////////////////////
package shape;
import shape.J_Shape;
public class J_Triangle implements J_Shape {
double x1,y1;//左底角点的坐标
double x2,y2;//右底角点的坐标
double x3,y3;//顶角角点的坐标
private double a;
private double b;
private double c;//注意不能在此时用表达式赋初值。
public J_Triangle() {}
public J_Triangle(double x1,double y1,double x2,double y2,double x3,double y3) {
this.x1=x1;
this.x2=x2;
this.x3=x3;
this.y1=y1;
this.y2=y2;
this.y3=y3;
a = Math.sqrt((y1 - y2)*(y1 - y2)+(x1 - x2)*(x1 - x2));
b = Math.sqrt((y3 - y2)*(y3 - y2)+(x3 - x2)*(x3 - x2));
c = Math.sqrt((y1 - y3)*(y1 - y3)+(x1 - x3)*(x1 - x3));
}
public double getArea()
{
return Math.sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4.0;
}
public double getCircle()
{
return a+b+c;
}
///////////////////////////////////////
////圆形
/////////////////////////////////////
package shape;
import shape.J_Shape;
public class J_Circle implements J_Shape{
double x,y;//圆心坐标
double r;//半径
public J_Circle(){}
public J_Circle(double x,double y,double r) {
this.x=x;
this.y=y;
this.r=r;
}
public double getArea() {
return(Math.PI*r*r);
}
public double getCircle() {
return(Math.PI*r*2);
}
}
///////////////////////////////////////
////矩形
/////////////////////////////////////
package shape;
import shape.J_Shape;
public class J_Rectangle implements J_Shape{
double x1, y1;
double x2, y2;
public J_Rectangle() {}
public J_Rectangle(double x1,double y1,double x2,double y2){
if(x1 < x2)
{
this.x1 = x1;
this.x2 = x2;
}
else
{
this.x1 = x2;
this.x2 = x1;
}
if(y1 < y2)
{
this.y1 = y1;
this.y2 = y2;
}
else
{
this.y1 = y2;
this.y2 = y1;
}
}
public double getArea(){
return (y2-y1)*(x2 - x1);
}
public double getCircle() {
return 2*(y2 - y1)+2*(x2 - x1);
}
}
///////////////////////////////////////
////正五边形
/////////////////////////////////////
package shape;
import shape.J_RegularPolygon;
public class J_Pentangon extends J_RegularPolygon {
public J_Pentangon(double x1,double y1,double x2,double y2) {
super(x1, y1, x2, y2, 5);
}
}
}
3.总结
①. 面向对象的设计方法。
- .分析问题,找出解决问题可能需要用到的客体,据此定义描述客体的对象。
- 抽出每一类对象的共性,定义类或者接口。
- 每一个解决问题的过程或者算法都定义为某个类的方法。
- 类的成员域一般是私有的或者默认的,成员方法一般是公有的
这里设计就先抽象出所有图形的接口,即所有图形都有面积和周长,然后再总结出正多边形的公共特性,这里因为有共同的成员域,所以使用类而不是接口。
②.在类一部分是成员域一部分是方法,在二者之外不能有别的语句单独出现,除非放到代码块里面。
eclipse项目文件
|