面向对象第三阶段学习总结

关于规格化的发展

  其实在第一次布置关于规格的做业时,我就尝试以规格,面向对象方法规格,java编程规格等多个关键词在中文互联网上搜索过,试图对规格和规格的发展得到更多的了解,但获得的有用信息寥寥无几.因此直到如今我还一直好奇,若是说注重编程注释的质量已是共识的话,为何规格却没有得到更多的注意呢?(规格指狭义的布尔表达式等,这是个人猜想,我没有参加过真正的工程开发,因此对业界认知不足.可是确实公开的资料寥寥).若是说没有获得你们的承认的话,说明多是存在某些不足,咱们为何要坚持以一种反人类的布尔表达式的JSF来代替天然语言的注释呢?这只是我一家之言,可能老师有更多别的方面的考虑,好比可以经过工具检测,更加规范等等,这些都是我考虑不到的.java

规格化编程的发展历史

  按照个人理解,规格化设计实际上是和面对对象的编程思想,以及软件工程这门科学一块儿发展起来的,三者是相辅相成的.程序员

  在计算机发展的最初,从汇编语言一直到面向过程语言,像BASIC和C语言的流行,是没有规格这个说法的.人们经过辛苦地编程和debug完成工做,每每程序中充满了goto这种天马行空的作法,编程变得magic.通过科技的发展,程序变得愈来愈多样化和功能愈来愈强大,代码的数量也愈来愈长.为了让代码正常工做,程序员只好放弃goto这种很差的特性,经过结构化设计让程序更加规范和容易维护.编程

  可是很快代码超过了一个小团队可以完成的上限,须要几十几百我的协同完成.这个时候,人们发现让程序运行起来变得愈来愈困难,de掉100个bug会出现200个新的bug.无可奈何之下,人们只好寻求另外的编程思想,那就是面向对象的思想.将大的工程分工,分红一个个小的模块,模块再细分,直到变成重复使用的数据结构和针对数据结构的操做方法,就是对象和方法.为了更好的描述对象的范围和特性,为了明示方法的操做方法,要求,和对数据形成的结果,产生了不一样的规格化语言.咱们接触的JSF算是其中一种.数据结构

三次做业的规格化bug

  除了第二次有几个类由于完成的比较晚,没有来得及写repOK方法以外,互测者并无报告更多的关于我规格方面的bug,固然,这是由于测试者的善良,个人规格化仍是有不少不足和改进空间的.多线程

/**
     * 
     *@REQUIRES: none
     *@MODIFIES: System.in and System.out;this.requestItems;
     *@EFFECTS: while System.in has a line ,a line will be consumed;
     *some information will be written in System.out;
     *if the line can construct a Request,a new RequestItem will be added to the list;
     *if the line is a command line, call the command function 
     */
    public void run()
    {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            String inputString = scanner.nextLine();
            if(InputHandler.isLoadRequest(inputString))
            {
                String[] strings = inputString.split(" ",-1);
                SysMain.load(strings[1]);
            }
            else if(inputHandler.isRoadChange(inputString))
            {
                SysMain.setRoad(inputString);
            }
            else if(inputHandler.isLegal(inputString))
            {
                Request request = new Request(inputString);
                synchronized (requestList)
                {
                    requestList.add(new RequestItem(request));
                    requestList.notifyAll();
                }
            }
            else
            {
                System.out.println("##illegal request");
            }
        }
        scanner.close();
    }

第一是类的功能不明确致使的方法的复杂,以致于只能用天然语言描述,这个问题出如今InputThread的run方法中,咱们能够改正这个方法工具

public void run()
{
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) 
        {
            String inputString = scanner.nextLine();
            inputHandler.handle(inputString);
        
        }
     
scanner.close();
} 

这样就能够保证关于输入的操做由InputHandler负责,而Thread只负责运行.测试

第二是方法的复杂程度过高,不得不使用天然语言.此处其实例子不少,就不赘述了.this

第三则是对布尔语言的掌握程度不高致使的错误,这些虽然可能测试者看在写的颇有诚意的份上放过了,可是实际上是可以改正的.spa

结言

  其实这三次做业仍是特别锻炼能力的,由于三次是创建在统一基础上的,涉及到多线程,继承,GUI等问题,数次重构也让我对有关知识了解的更深入.线程

相关文章
相关标签/搜索