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


    关于规格化的发展

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

    规格化编程的发展历史

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

      在计算机发展的最初,从汇编语言一直到面向过程语言,像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只负责运行.

    第二是方法的复杂程度太高,不得不使用自然语言.此处其实例子很多,就不赘述了.

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

    结言

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

  • 相关阅读:
    vb动态创建控件
    100多个很有用的JavaScript函数以及基础写法汇总
    CodeFile与CodeBehind的区别
    asp.net防sql注入问题
    .NET创建目录和文件
    Asp.Net判断字符是否是数字
    Asp.Net随机中文汉字验证码
    禁用表单自动提示complete
    如何隐藏vs2005的起始页
    Asp.Net enableEventValidation
  • 原文地址:https://www.cnblogs.com/hanxiaobing/p/9112755.html
Copyright © 2020-2023  润新知