结对项目之四则运算

Coding.Net项目地址:https://git.coding.net/cuixh998/homework2.git

一.写在前面

     说句实话,这两周,在结对项目面前,一直压抑着心里的压力度日。

     书到用时方恨少,自己的java水平和项目经验如何,自己心里是最清楚的。结对项目怎么办?废寝忘食去学java,看慕课,熬夜,通宵,一起一落的去敲代码,认为总能搞定的,信心满满,不是啥难事。然而,deadline快到了,项目依旧只成了个大概的模样。在这个过程中,问我有没有收获,肯定是有的,重拾了课本,和队友一起的努力至少有了些结果,并不是一事无成。需要交代的是,这次的结对作业,是三个起步很晚又缺乏经验的人慢慢摸索着完成的,为什么结对项目多了一个人?由于舍友结对过晚,喊人结对也没有回应,而我与另外一个队友对于这个项目也是毫无头绪,头大如牛,干脆就把他也拉了进来,多加了一个人,觉得人多力量大,但结果却不尽如人意,必须承认的是,我们的技术太糟糕了,说实话只是做出来了个大概,但还是要发出来一下,不求分数高低,但求对自己有个交代吧。

二.PSP展示

三.作品展示

1.做题过程——主页面

2.结算提示

3.答案文档打印

四.计算模块接口的设计与实现过程

1.Information Hiding:信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。信息隐藏的发展历史可以一直追溯到"匿形术(Steganography)"的使用。"匿形术"一词来源于古希腊文中"隐藏的"和"图形"两个词语的组合。虽然"匿形术"与"密码术(Cryptography)"都是致力于信息的保密技术,但是,两者的设计思想却完全不同。"密码术"主要通过设计加密技术,使保密信息不可读,但是对于非授权者来讲,虽然他无法获知保密信息的具体内容,却能意识到保密信息的存在。而"匿形术"则致力于通过设计精妙的方法,使得非授权者根本无从得知保密信息的存在与否。相对于现代密码学来讲,信息隐藏的最大优势在于它并不限制对主信号的存取和访问,而是致力于签字信号的安全保密性。

 为什么要隐藏?

 隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候。

隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等。

例如:把具体调用的数字信息隐藏起来,写入一个常量中,如果需要更改常量的值,只需要改动一处即可。

2.接口部件设计

对接口编程,减少了程序报错的可能性,可以更好地对内容进行扩展。

3.松散耦合

松散耦合是指使用另一个组件提供服务的一个组件对前者的依赖性不强:它是语言独立的、平台独立的事务。

4.关于计算模块的设计和实现过程。

详情请见代码部分。

五.计算模块部分单元测试展示

六.计算模块部分异常处理说明

1.未验证在文本框中的答案是否合法。

2.做完题他会提示你做对了几道题,我们没有加限制,如果如果再点确认并提交题目,他就会报数组越界的错误。

七.界面模块的详细设计过程

代码如下:

 1 import java.awt.Color;
 2 import java.awt.Font;
 3 import java.awt.event.ActionEvent;
 4 import java.awt.event.ActionListener;
 5 import java.io.PrintStream;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8 import java.util.Scanner;
 9 
10 import javax.swing.JButton;
11 import javax.swing.JFrame;
12 import javax.swing.JLabel;
13 import javax.swing.JOptionPane;
14 import javax.swing.JPanel;
15 import javax.swing.JTextArea;
16 import javax.swing.JTextField;
17 
18 public  class Main {
19     int grade=0;
20     int number=1;
21     int all;
22     JFrame jf =new JFrame();
23     JPanel jp=new JPanel();
24     JLabel jl=new JLabel();
25     JLabel jl1=new JLabel("请输入答案");
26     JTextArea jt=new JTextArea();
27     JTextField jtf=new JTextField();
28     JButton jb=new JButton("确定并提交");
29     Font f=new Font("黑体", Font.BOLD, 30 );
30     List< String> list1=new ArrayList<>();//存放题目
31     List< String> list2=new ArrayList<>();//存放对应的答案
32     public Main(){
33         f1();
34         jp.setLayout(null);
35         jl.setText("第"+number+"题");
36         jf.setVisible(true);
37         jf.setResizable(false);
38         jf.setBounds(400, 200, 600, 600);
39         jl.setBounds(0, 0, 600, 60);
40         jt.setBounds(0, 60, 600, 300);
41         jt.setText(list1.get(number-1));
42         jl1.setBounds(0, 370, 600, 50);
43         jtf.setBounds(0, 430, 600, 50);
44         jb.addActionListener(new ActionListener() {
45             @Override
46             public void actionPerformed(ActionEvent e) {
47                 // TODO Auto-generated method stub
48                 number++;
49                 jl.setText("第"+number+"题");
50                 System.out.println(list1.get(number-1));
51                 jt.setText(list1.get(number-1));
52                 if(jtf.getText().equals(list2.get(number-1))){
53                     grade++;
54                 }
55                 if(number==all){
56                     JOptionPane.showMessageDialog(null, "你做对了"+grade+"道题");
57                 }
58                     
59             }
60         });
61         jb.setBounds(240, 500, 100, 30);
62         jp.add(jtf);
63         jp.add(jl1);
64         jp.add(jl);
65         jp.add(jt);
66         jp.add(jb);
67         jl.setFont(f);
68         jt.setFont(f);
69         jtf.setFont(f);
70         jl1.setFont(f);
71         jl.setForeground(Color.GREEN);
72         jf.add(jp);
73         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
74     }

八.界面模块与计算模块的对接

见三.作品展示已截图实现的功能。

九.结对过程

附图:

地点是夜晚的宿舍。

对于自己和队友的优缺点,个人感觉如下:

崔啸寒:优点:积极的态度,认真钻研的劲,对目标有清楚的认知。缺点:项目经验不足,编码能力不足。

李浩涌:优点:刻苦认真、乐于助人、坚持不懈的毅力。缺点:钻牛角尖。

王涛:优点:态度认真,执着,善于发现问题。缺点:编码能力不足。

对于结对编程的优缺点,如下,参考自https://kb.cnblogs.com/page/58732/博客园知识库:

优点:

(1)程序员互相帮助,互相教对方,可能得到能力上的互补。

(2)可以让编程环境有效地贯彻Design。

(3)增强代码和产品质量,并有效的减少BUG。

(4)降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。

(5)在编程中,相互讨论,可能更快更有效地解决问题。

缺点:

(1)对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。

(2)有时候,程序员们会对一个问题各执己见(代码风格可能会是引发技术人员口水战的地方),争吵不休,反而产生重大内耗。

(3)两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下。

(4)结对编程可能让程序员们相互学习得更快。有些时候,学习对方的长处,可能会和程序员们在起滋生不良气氛一样快。比如,合伙应付工作,敷衍项目。

(5)面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。

(6)新手在面对有经验的老手时会显得非常的紧张和不安,甚至出现害怕焦虑的的精神状态,从而总是出现低级错误,而老手站在他们后面不停地指责他们导致他们更加紧张,出现恶性循环。最终导致项目进展效率低下,并且团队貌合神离。

(7)有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用。

在本次结对项目的过程中,个人针对结对编程的优缺点的感想如下:

优点:  (1)取长补短。交流是进步的一个便捷高效的方式,结对过程中,交流必不可少,大家擅长的方面各有不同,取长补短可以实现共赢。

             (2)效率很高。相对于自己做个人项目,结对编程能够有效的发挥每个人的优势,共同推进项目进行。

             (3)2>1。相比一个团队的头脑风暴,结对编程的人相互交流自己的想法和观点能够获得1+1大于2的收获。

缺点:   (1)需要适应。由于结对的人员水平大多数情况下是不同的,需要相互配合与相互包容。

              (2)容易引发矛盾冲突。看法观点一旦不同,就会引发争执,随即而来的或是忍耐,然后一次次积累之后的爆发;或是包容,然后一次次积累之后的默契。

              (3)存在不适合人群。有些人觉得,自己编程起来更舒服,有些人觉得,结对或者团队在一起编程更融洽,人人都有自己不同的想法,以及水平,所有,结对编程不一定是适合所有人的。

原文地址:https://www.cnblogs.com/cuixh998/p/8762036.html