zoukankan      html  css  js  c++  java
  • 201521123093 java 第五周学习总结

    1. 本周学习总结

    1.1 尝试使用思维导图总结有关多态与接口的知识点。

    1.2 可选:使用常规方法总结其他上课内容。

      答:接口:1、所有的默认方法都是public abstract;
                2、属性都是public static final;
                3、接口与继承的差别:接口是has-a关系,而继承是is-a关系
                4、接口不是类,不能使用new进行实例化,但是可以使用Comparable x = new Employee(···);
          比较:实现Comparable使用Arrays.sort[s]
          面向接口编程:代码与接口相关联的,不需要考虑具体的实现类
    

    2. 书面作业

    1. 代码阅读:Child压缩包内源代码

    • 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。##

            package com.parent;
                public class Child extends Parent{
                     public static void main(String[] args){
                         Parent p = new Parent();
                         Child c = new Child();
                         c.getParenti();
                         c.getParentj();
                         Other.showParentj(p);   
                     }
                     public void getParenti(){
                         System.out.println(i);
                     }
                     public void getParentj(){
                         System.out.println(super.j);
                         System.out.println(j);
                         System.out.println(geti());
                         System.out.println(super.geti());
                    }
               }
      
         答:编译不能通过,出错如下:
      


          将Parent中的```private int i=1```改成```protected int i=1```即可编译通过,private是私有的,其他不能调用它。
          编译结果如下:
    

    • 1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

          public class OutOfParentPackage{
         public static void showParentj(Parent p){
        System.out.println(p.j);
        System.out.println(p.geti());
        p.getj();
         }
          }
      
      答:错误如图:将parent中的protected定义改为public。
      

    2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码

    • 2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

          //改造前
          package cc.openhome;
          import java.util.Scanner;
          public class Guess {
              public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              int number = (int) (Math.random() * 10);      
              int guess;        
              do {         
                  System.out.print("猜数字(0 ~ 9):");     
                  guess = scanner.nextInt();      
              } while(guess != number);
              System.out.println("猜中了...XD");    
             }
          } 
      
      
         //改造后
         package cc.openhome;
         public abstract class GuessGame {
             public void go() {
                int number = (int) (Math.random() * 10); 
                int guess;       
                do { 
                   print("输入数字:"); 
                   guess = nextInt();        
                }while(guess != number); 
                println("猜中了");  
             }
             public abstract void print(String text);  
             public abstract void println(String text);
             public abstract int nextInt();
        }
      
      
         改造的好处:改造前只能控制台输出,改造后可以在控制台,也可以使用对话框图形界面等输入。
      
    • 2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

           答:百度了一下,但是好像也没看懂什么,大概就是导入一个包,包内有相应的功能,再设计一个界面,界面上有控件。
      
    • 2.3 结合该例子,你觉得什么时候应该使用abstract?

           答:在内含抽象方法的类时,要在class前标示abstract,表示这是一个定义不完整的抽象类。
               就是当一个类没有充分的表示,就要将其抽象化,再根据实际情况进行修改
      
    • 2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

           答:在这个例子中,变化的是输入的数字,生成的数字也是变化的并且是随机的。不变的是对数字的处理。
      

    3. Comparable与Comparator

    • 3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?

          答:Comparable接口实现它的每个类的对象进行整体排序,它有一个 compareTo方法进行比较。
              一个类如果实现了Comparable,就可以直接调用Arrays.sort,就是元素要使用arrays必须实现Comparable接口。
              Arrays.sort源代码中显示:sort将传入的参数强制转换为Comparable接口,且调用Comparable接口的compareTo方法对数组进行排序。
      
    • 3.2 有了Comparable接口为什么还需要Comparator接口呢?

          答:Comparable接口将比较代码嵌入自身类中,而Comparator在一个独立的类中实现比较。
              Comparable的方法参数只有一个,而Comparator的方法参数是两个,如果需要两个对象进行比较时就要使用Comparator接口。
              例如PTA实验的第二题是使用Comparator接口。
      

    [参考链接:](http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822251.html)

    4. 面向接口案例分析

    阅读Case-StudentDao.zip案例

    • 4.1 画出类关系图,描述每个类与接口的作用。

            student类:关于名字的属性的类,有setter(),getter(),toString()方法。
            StudentDao(interface): public boolean writeStudent(Student student);
                                 public Student readStudent(String name);
                                 public void diplayAllStudent();
      
            StudentDaoArrayImpl类:  构造数组students = new Student[size];
                                    输入学生的信息public boolean writeStudent(Student student)
                                    读取学生的名字public Student readStudent(String name)
                                    显示所有学生的信息public void diplayAllStudent()
            StudenDaoListImpl类:构建private List<Student> students = new ArrayList<Student>();
                                 与StudentDaoArrayImpl执行相同的功能,还有排序。
      

    • 4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

         答:StudentDaoArrayImpl使用的是数组,而StudenDaoListImpl使用的ArraysList。
      

    5. 什么是面向接口编程?面向接口编程的好处是什么?

    结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

                 package chpt06;
                 public class Test {
            /**
            * @param args
            */
               public static void main(String[] args) {
    	     Student[] students = new Student[3];
    	     students[0] = new Student("Tom");
    	     students[1]= new Student("Jerry");
    	     students[2] = new Student("Sophia");
    	     StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
    	     //StudentDao sdm = new StudenDaoListImpl();//使用列表实现		
    	    //往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
    	    //因为这里是面向StudentDao接口
    	    System.out.println("===========写入学生========");
    	    for(Student e:students){
    		 if (!sdm.writeStudent(e)){
    			System.out.println("添加学生失败");
    		 }else{
    			System.out.println("插入成功!!");
    		 }
    	    }
    	    System.out.println("===========显示所有学生========");
    	    sdm.diplayAllStudent();
    	    System.out.println("===========查询学生========");
    	    Student temp = sdm.readStudent("Tom") ;
    	    if(temp == null){
    		 System.out.println("查无此人");
    	    }
                    else{
    		 System.out.println(temp);
    	    }
           }
            }
    
    
          答:该代码中StudentDao 是接口,student是所有学生信息的存取,StudentDaoArrayImpl是实现接口的数组类,StudenDaoListImpl
              是实现接口的列表类。在同一个接口下的不同实现类可以没有相关联,只需要拥有接口实现的共同行为即可。
              接口就是将没有关系的两个对象联系在一起。
              面向接口编程是面向对象编程的一部分,看了百度,我的理解是系统中层次与层次之间的关系不是直接的,而是间接的。
              就比如买家与卖家之间有个中介。
              好处就是卖家想要修改要卖的东西,只要中介所执行的功能没有改变,买家就不会受到影响,也不需要更改条件。
              面向接口可以将接口与实现相分离,从而大大提高程序的灵活性。
    

    [百度参考](http://www.cnblogs.com/leoo2sk/archive/2008/04/10/1146447.html)

    6.结对编程:面向对象设计(大作业2-非常重要)

    内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
    写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
    形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
    注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。
    选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。

    • 6.1
    学生A 项目代码地址
    [博客地址](http://www.cnblogs.com/zhaoMing3/) http://git.oschina.net/zm3377/java201521123093zm)
    • 6.2常用功能描述框架图

    • 6.3关键代码

      待定,目前真写不出来

    3. 码云上代码提交记录及PTA实验总结

    题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

    • 3.1. 码云代码提交记录
      在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

    • 3.2. PTA实验

        答:5-1:在实验课上大概懂了一些方法,后面又参照之前写的一些代码,大致把实验写出来了。但是接口还有Comparable的使用一直出错,后面才知道自己把
                 Comparable和Comparator搞混了,翻了书才知道。终于知道了Arrays.sort的使用了。。。。好像懂得太晚了。
            5-2:和第一题差不多,但第二题使用的是Comparator。
  • 相关阅读:
    第07组 Beta冲刺 总结
    第07组 Beta冲刺 (5/5)
    第07组 Beta冲刺 (4/5)
    第07组 Beta冲刺 (3/5)
    第07组 Beta冲刺 (2/5)
    第07组 Beta冲刺 (1/5)
    软工实践个人总结
    第03组 Beta冲刺(5/5)
    第03组 Beta冲刺(4/5)
    第03组 Beta冲刺(3/5)
  • 原文地址:https://www.cnblogs.com/zhaoMing3/p/6601570.html
Copyright © 2011-2022 走看看