您的位置:首页 > 编程语言 > Java开发

我的第一个java项目——面向对象设计。

2015-09-21 20:09 489 查看
1. 需求(转化成用户故事

想象一下,经常有新闻/视频+留言版这种常见的网页形式,现在我们用控制台(console)来模拟这种网页,在console中,首先2名足球明星、2名篮球明星、1名游泳明星登场,然后明星展示才艺,最后粉丝表达感情。

要求用面向对象的思想来实现这一功能。

2. 思路(转化成backlog)

(1)各位明星都是各领域的运动员,他们都属于运动员,而运动员又是人类,那么我们设计的时候,设计两次继承,人类->运动员->各领域运动员。

(2)不同领域的运动员,他们所从事的项目有其特别性,比如足球篮球以进球为胜负标准,田径一般以时间、长度或高度为胜负标准,因此他们的行为也各不相同,比如足球篮球有射门或投篮的行为,田径运动员有强力冲刺、跳跃的行为,但相似的项目又有类似的行为,因此,我们用接口来模拟这种行为的多样性。

(3) 粉丝继承于人类,他们对喜欢的明星很喜爱,对不喜欢的明星黑得体无完肤。

3. 类的设计(转化成具体的Process)(类图可以手画)

由于时间原因,类的设计较好的体现了继承和多态的思想,但没有很好的体现封装,同学们可以在设计的时候补齐这一块。

代码文件解释:

(1)Person:人类,抽象类
(2)Athlete:运动员类,继承自Person
(3)GoalAthlete:接口,具备得分行为的运动员,体现多态的思想
(4)SportsFan:粉丝类,继承自Person
(5)SoccerAthlete:足球运动员,继承自Athlete,实现GoalAthlete接口
BasketBallAthlete:篮球运动员,继承自Athlete,实现GoalAthlete接口
Swimmer:游泳运动员,继承自Athlete
图注:实线箭头是继承关系,虚线箭头是接口实现,斜体的是抽象对象或抽象方法。

附:代码导入方法:

1. 新建java工程,在src上右键,选择import;

2. 选择File System,选择代码所在的目录,选中左侧的文件夹,确保所有.java文件被选中,点finish。

1.package intermediateDemo_OOP;

public class Athlete extends Person {

private String value;//身价

private String specialTechnique;//特别的技能

public Athlete(String myValue, String mySpecialTechnique,String myName, int myAge, char myGender){

super(myName, myAge, myGender);//显示调用父类的构造函数

value=myValue;

specialTechnique=mySpecialTechnique;

}

@Override

//重写父类的getName方法

public String getName(){

return super.getName();

}

//获取特殊技能

public String getSpecialTechnique(){

return this.specialTechnique;

}

@Override

//重写父类的抽象方法

public void think() {

System.out.println("竞技就是我的灵魂,永远追求更完美的自己!");

}

//问好

public void sayHello(String specialHello){

System.out.println(specialHello);

}

//秀一下

public void showOff(String specialShowOff){

System.out.println("容我上场之前亮个相:"+specialShowOff);

}

}

2.

package intermediateDemo_OOP;

public class BasketBallAthlete extends Athlete implements GoalAthlete {

private String strongHand;//惯用手

private String club;//所在俱乐部

//构造函数

public BasketBallAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){

super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数

strongHand=myHeavyFoot;

club=myclub;

}

@Override

//重写分类方法

public String getName(){

return super.getName();

}

@Override

//重写接口GoalAthlete的方法

public void shoot() {

System.out.println(this.getName()+"出手投篮!");

}

@Override

//重写接口GoalAthlete的方法

public void goal() {

//定义一个随机数,根据随机数的值,来决定是否得分

int random=new java.util.Random().nextInt(3);

if(random==0){

System.out.println(this.getName()+"三不沾,空气在叹息!");

}else if (random==1){

System.out.println(this.getName()+"打铁!");

}else if(random==2){

System.out.println(this.getName()+"2分入账!");

}else {

System.out.println(this.getName()+"3分远投命中!");

}

}

}

3.
package intermediateDemo_OOP;

public interface GoalAthlete {

public void shoot();

public void goal();

}

4.
package intermediateDemo_OOP;
public abstract class Person {

private String name;

private int age;

private char gender;

//构造函数

public Person(String myName, int myAge, char myGender){

name=myName;

age=myAge;

gender=myGender;

}

//获取名字

public String getName(){

return this.name;

}

//行走,子类可以不重写

public void walk(){

System.out.println("走两步!");

}

//笑,子类可以不重写

public void smile(){

System.out.print("来自抽象人类的呵呵~");

}

//思考,抽象方法,子类必须对其进行重写

public abstract void think();

}

5.
package intermediateDemo_OOP;

import java.util.concurrent.ThreadLocalRandom;

public class PersonTest {

public static void main(String[] args){

/*

* 1. 实例化C罗,梅西,科比,詹姆斯和宁泽涛几位运动员

* 2. 实例化小C,小梅,小科,小詹,小红几位粉丝

* 3. 各位体育明星展现才能

* 4. 粉丝表达情感

* */

//1. 实例化4个运动员

SoccerAthlete CR7=new SoccerAthlete("右脚", "皇家马德里","8000万英镑", "跳水,电梯球", "C罗", 30, '男');

SoccerAthlete Messi=new SoccerAthlete("左脚", "巴塞罗那","未知", "踢球迷,盘带", "梅西", 28, '男');

BasketBallAthlete Kobe=new BasketBallAthlete("右手", "湖人","3000万美元", "体味凌晨四点的洛杉矶", "科比", 37, '男');

BasketBallAthlete James=new BasketBallAthlete("右手", "骑士","5000万美元", "走步上篮", "詹姆斯", 31, '男');

Swimmer Ning=new Swimmer("自由泳", "中国", "500万人民币", "帅", "宁泽涛", 22, '男');

//2. 实例化4个粉丝

SportsFan littleC=new SportsFan("足球", "C罗", "梅西","小C", 28, '男');

SportsFan littleMei=new SportsFan("足球", "梅西", "C罗","小梅", 26, '男');

SportsFan littleKe=new SportsFan("篮球", "科比", "詹姆斯","小科", 30, '男');

SportsFan littleZhan=new SportsFan("篮球", "詹姆斯", "科比","小詹", 26, '男');

SportsFan littleHong=new SportsFan("无", "宁泽涛", "澳洲小鲜肉","小红", 21, '女');

//3. 明星展现才能

//各位明星走一个

System.out.println("请各位明星给大家问个好~");

System.out.println("-------------------------");

CR7.sayHello(CR7.getName()+":我用清扬,没有头屑!我最擅长"+CR7.getSpecialTechnique());

Messi.sayHello(Messi.getName()+":求别黑我大红蓝巴萨!我最擅长"+Messi.getSpecialTechnique());

Kobe.sayHello(Kobe.getName()+":你见过凌晨四点的洛杉矶吗?我最擅长"+Kobe.getSpecialTechnique());

James.sayHello(James.getName()+":OOOOOOOOO~我最擅长"+James.getSpecialTechnique());

Ning.sayHello(Ning.getName()+":大家好,我是"+Ning.getName()+"我最大的特点是:"+Ning.getSpecialTechnique());

System.out.println("----------割--------------");

//明星展示才艺

System.out.println("请各位明星秀一下~");

System.out.println("-------------------------");

System.out.println(CR7.getName()+"来了");

CR7.showOff("看我发型!");

CR7.shoot();

CR7.goal();

System.out.println("\n"+Messi.getName()+"来了");

Messi.showOff("看台那球迷,你别动!");

Messi.shoot();

Messi.goal();

System.out.println("\n"+Kobe.getName()+"来了");

Kobe.showOff("看我手型");

Kobe.shoot();

Kobe.goal();

System.out.println("\n"+James.getName()+"来了");

James.showOff("爱卿们平身");

James.shoot();

James.goal();

System.out.println("\n"+Ning.getName()+"来了");

Ning.breastStroke();

Ning.butterflyStroke();

System.out.println("----------割--------------");

//4. 粉丝们表达感情

System.out.println("粉丝们表达一下感情");

System.out.println("-------------------------");

System.out.println("C罗球迷走一个");

littleC.think();

littleC.love();

littleC.hate();

System.out.println("\n梅西球迷走一个");

littleMei.think();

littleMei.love();

littleMei.hate();

System.out.println("\n科密走一个");

littleKe.think();

littleKe.love();

littleKe.hate();

System.out.println("\n詹姆斯球迷走一个");

littleZhan.think();

littleZhan.love();

littleZhan.hate();

System.out.println("\n宁泽涛粉丝走一个");

littleHong.think();

littleHong.love();

littleHong.hate();

}

}

6.
package intermediateDemo_OOP;

public class SoccerAthlete extends Athlete implements GoalAthlete {

private String heavyFoot;//惯用脚

private String club;//所在俱乐部

//构造函数

public SoccerAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){

super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类的构造函数

heavyFoot=myHeavyFoot;

club=myclub;

}

@Override

//重写父类的方法

public String getName(){

return super.getName();

}

@Override

//实现接口GoalAthlete的方法

public void shoot() {

System.out.println(this.getName()+"起脚射门!");

}

@Override

//实现接口GoalAthlete的方法

public void goal() {

//定义一个随机数,根据随机数的值,来决定是否得分

int random=new java.util.Random().nextInt(2);

if(random==0){

System.out.println(this.getName()+"打了飞机,球飞向宇宙!");

}else if (random==1){

System.out.println(this.getName()+"击中门框,很遗憾!");

}else{

System.out.println(this.getName()+"GOOOOOOOOOOOL!");

}

}

}

7.
package intermediateDemo_OOP;

public class SportsFan extends Person {

private String favoriteSports;

private String favoriteStar;

private String hatedStar;

public SportsFan(String myFavoriteSports, String myFavoriteStar,String myHatedStar,String myName, int myAge, char myGender){

super(myName, myAge, myGender);//显示调用父类的构造函数

favoriteSports=myFavoriteSports;

favoriteStar=myFavoriteStar;

hatedStar=myHatedStar;

}

@Override

//重写父类的抽象方法,粉丝的思维逻辑

public void think() {

System.out.println("爱就爱的深沉,恨就恨得彻底!"+this.favoriteStar+"加油");

}

//粉丝的爱

public void love(){

int saySomething=new java.util.Random().nextInt(2);

//用switch语句对随机数进行判断,然后输出话语

switch(saySomething){

case 0:

System.out.println("对"+this.favoriteStar+"爱得深沉!");

break;

case 1:

System.out.println("最爱"+this.favoriteStar);

break;

case 2:

System.out.println(this.favoriteStar+"么么哒");

default:

System.out.println(this.favoriteStar+" best");

}

}

//粉丝的恨

public void hate(){

int saySomething=new java.util.Random().nextInt(2);

//用if语句对随机数进行判断,然后输出话语

if(saySomething==0){

System.out.println("恨"+this.hatedStar+"入骨!");

}else if(saySomething==1){

System.out.println(favoriteStar+"最棒,"+hatedStar+"算个啥");

}

else {

System.out.println(hatedStar+",呵呵");

}

}

}

8.
package intermediateDemo_OOP;

public class Swimmer extends Athlete {

private String skilledType;//最擅长的泳姿

private String country;//所在国家

//构造函数

public Swimmer(String mySkilledType, String myCountry,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){

super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数

skilledType=mySkilledType;

country=myCountry;

}

@Override

//重写父类方法

public String getName(){

return super.getName();

}

//蝶泳

public int butterflyStroke(){

//定义随机数,输出蝶泳游出多少米

int random=new java.util.Random().nextInt(500);

System.out.println(this.getName()+"蝶泳泳姿已游出"+random+"米");

return random;

}

//蛙泳

public int breastStroke(){

//定义随机数,输出蛙泳游出多少米

int random=new java.util.Random().nextInt(1500);

System.out.println(this.getName()+"蛙泳泳姿已游出"+random+"米");

return random;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: