结对项目之四则运算
四.
隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候。
隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等。
例如:把具体调用的数字信息隐藏起来,写入一个常量中,如果需要更改常量的值,只需要改动一处即可。
2.接口部件设计
对接口编程,减少了程序报错的可能性,可以更好地对内容进行扩展。
3.松散耦合
松散耦合是指使用另一个组件提供服务的一个组件对前者的依赖性不强:它是语言独立的、平台独立的事务。
4.关于计算模块的设计和实现过程。
详情请见代码部分。
五.
六.
七.
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)存在不适合人群。有些人觉得,自己编程起来更舒服,有些人觉得,结对或者团队在一起编程更融洽,人人都有自己不同的想法,以及水平,所有,结对编程不一定是适合所有人的。