结对编程作业

目录

一、团队成员

二、结对编程介绍

三、Java实现简易自动售卖机(界面显示)

(一)、分析

(二)、代码实现

2.硬币(Coin)类

3.饮料(Drink)类

3.界面设计AutoBoothView

 四、实现

五、总结


一、团队成员

姓名学号
袁茹飞202205010305
霍亚彬202205010318

二、结对编程介绍

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。

在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。

三、Java实现简易自动售卖机(界面显示)

(一)、分析

自动饮料售卖机我们需要三个类,分别是自动饮料售卖机(AutoBooth)、硬币(Coin)、饮料(Drink)这三个类,以及界面设计AutoBoothView。

自动饮料售卖机(AutoBooth)类中我们我们定义count和Charge两个属性、以及SellDrik和returnCharge两个主要方法。

硬币(Coin)类中我们我们定义value一个属性、以及getvalue一个主要方法。

饮料(Drink)类中我们我们定义type一个属性、以及gettype一个主要方法。

(二)、代码实现

1.自动饮料售卖机(AutoBooth)类

package autoboothdemo;

import java.lang.reflect.Type;

public class AutoBooth {
    private int count;
    private Coin Charge;

    public AutoBooth(int count) {
        this.count=count;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public Coin getCharge() {
        return Charge;
    }

    public Drink sellDrink(Coin coin,String type)
    {
        Charge=null;
        if(coin.getValue()==10)
        {
            Charge = returnCharge(coin);
            if(Charge == coin)
            {
                return null;
            }else {
                return new Drink(type);
            }
        }else {
            count++;
            return new Drink(type);
        }
    }

    private Coin returnCharge(Coin coin)
    {
        if(count>0)
        {
            count--;
            return new Coin(5);
        }else
        {
            return coin;
        }
    }
}

2.硬币(Coin)类

package autoboothdemo;

public class Coin {

    private int value;

    public Coin(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

3.饮料(Drink)类

package autoboothdemo;

public class Drink {

    private String type;

    public Drink(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }
}

3.界面设计AutoBoothView

package autoboothdemo;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.file.attribute.UserPrincipalLookupService;

public class AutoBoothView {
    private JPanel panel;
    private JPanel panel1;
    private JPanel panel2;
    private JButton OrangeButton;
    private JButton BeerButton;
    private JButton v5Button;
    private JButton v10Button;
    private JLabel labelCount;
    private JLabel labelCharge;
    private JLabel labelDrink;
    private AutoBooth autoBooth;
    private Coin coin;
    private String type;


    public AutoBoothView() {
        autoBooth=new AutoBooth(5);
        labelCount.setText(String.valueOf(autoBooth.getCount()));
        OrangeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                type="Orange";
            }
        });
        BeerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                type="Beer";
            }
        });
        v5Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                coin=new Coin(5);
                startSell(coin,type);
            }
        });
        v10Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                coin=new Coin(10);
                startSell(coin,type);
            }
        });
    }

    private void startSell(Coin coin,String type)
    {
        Drink drink=autoBooth.sellDrink(coin,type);
        if(drink!=null) labelDrink.setText(drink.getType());
        else labelDrink.setText("无饮料");
        labelCount.setText(String.valueOf(autoBooth.getCount()));
         if(autoBooth.getCharge()!=null) labelCharge.setText(String.valueOf(autoBooth.getCharge().getValue()));
         else labelCharge.setText("无零钱");
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("AutoBoothView");
        frame.setContentPane(new AutoBoothView().panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


    }
}

 四、实现

我们通过编程、测试最后实现了实现简易自动售卖机(界面显示)。操作说明由于本程序是简易版的,所以我们只能有啤酒和橙汁两种饮料,而对于钱只接受1块钱和5角钱。原始售卖机里面有5个零钱,点击啤酒或橙汁,然后点击5毛或者一块代表投入售卖机的钱。然后会显示售卖机的零钱数、找的零钱数以及饮料类型。

原始数据

选择橙汁和投入1快钱后的情况

五、总结

本次结对编程霍亚彬充当驾驶员、袁茹飞充当观察员,我们共同完成编写,作为观察员的作用可谓非常大,他不仅帮我观察我写代码时出现的错误,而且对于很多的细节设计都是观察员的功劳。

结对编程做起来很简单也很有趣,找个水平差的不太远的程序员和自己配成一对。只用一台计算机,大家选一个人坐在键盘前面负责输入,另一个人坐在后面口述。两个人要不断的交流,频率不应低于一分钟一次。整个的设计思想由后面只动口不动手的人主导,而由操键盘的人做实现。由于人的思维速度是快于输入代码的速度的。那么观看的人可以有空闲的时间做额外的思考,观察代码写的有没有问题,结构有没有问题。

如果程序员的经验积累足够,是很容易看出存在潜在问题的代码的,即表面上实现了功能,但实际上是一种糟糕的做法。这在XP(eXtreme Programming 极限编程)中被称为代码坏味道,在 Martin Fowler的《重构》一书中有详细的介绍。两个有经验的程序员同时在一起工作,看起来好像浪费了一个人的时间:但实际上的效果确实完成了更高质量的代码。程序编的不那么容易出BUG,而且代码也写得更为优雅和紧凑。

关于结对编程,发现了一些新的受益之处。首先,它可以促进参与项目的程序员自身的提高,一对程序员工作的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,学到一些新的东西。而水平高的一方同样因为不断地把自己的想法说出来而整理了自己的思路。

其次,一定时间周期地打乱配对,让参与项目的人员相互转换位置,使得维护繁杂的文档变得不那么重要。大家分组打乱后,口头的交流很容易让所有人都熟悉每个模块,这样对于公司也很有好处,项目中万一有人离开,也不至于影响到整个项目。最后,开发过程变得更为有趣,任何人的交流变得很多,大家关系更为融洽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值