第三次OO总结】的更多相关文章

OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作. 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些.(点击就送指导书~) 类图 程序的大致结构如下: 代码分析 可以看出,整体的功能还是相对零散的,耦合状况也基本还可以.然而类似Main.main.Polynomial.Polynomial两个函数的复杂度仍有点高.笔者后来查阅了阿里Java开发规范手册,发现两个问题: 单个方法的长度不宜过长,入口点方法(Main.main)也是一样 不宜在构造函数中携带过多…
I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believing that it is a plot designed to destroy joy. Eric Allman 一.基于度量来分析程序结构 总体: 第一次作业:在两个类中处理了所有多项式的求导,一个主函数控制输入并且处理字符串,格式不正确时报错:另外一个处理多项式并且求导. 第二次作业:在第一次作…
规格化设计历史 规格化设计的历史目前网上的资料并不多,百度谷歌必应也表示无能为力...... 在这里结合现实情况讲一讲自己对程序规格化的理解,首先代码规格化对代码的影响是间接的,或许它不能让你代码里面的bug直接消失,或许它也不能让电梯之间不相互阻塞,但是它能让OO实验拿到更多分啊//笑.玩笑归玩笑,下面具体分析一下规格化设计(JSF为例)的作用: 在代码实现过程中,人们往往不能从一开始对整个项目的每个细节都面面俱到地思考一遍,规格化设计在开发初期可以将项目中的细节隐去,工程师只需要考虑类or包…
基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此花费了一些时间了解,并在这里总结. Complexity Metrics(复杂度分析) 这部分我们需要使用的主要是方法和类的复杂度分析. 方法的复杂度分析主要基于循环复杂度的计算.循环复杂度是一种表示程序复杂度的软件度量,由程序流程图中的"基础路径"数量得来. ev(G):即Essenta…
一.作业总结 前三次的任务都是表达式求导.这是我在高中就思考过的问题,但是很久都没有付诸实践,直到学习了"类"这个强大的工具.还有正则表达式,如果能适当使用,则不失为一个字符串格式检查的利器.真觉得有点编译原理的词法分析的赶脚. 从结果来看,不甚满意,尤其是第二次作业,由于一些不可预测的原因而没有做足够的测试,从而在强测阶段爆掉.这是个惨痛教训,争取以后的作业中不要再出现这种问题,把失掉的分弥补回来. 前两次作业,几乎没有面向对象的身影,而主要是锻炼程序的鲁棒性.格式识别中种种要求应接…
规格化设计的调研 随着50年代高级语言的出现,编译技术不断完善,涌现出多种流派的语言,其中就有里程碑式的Pascal语言:进入70年代,由于众多语言造成的不可移植.难于维护,Ada程序设计语言诞生了,强调大型系统可读性胜于可写性,Ada程序自成清晰的文档:经过80年代计算机硬件和操作系统的改善,程序设计重点从算法和数据结构实现技术向规模说明方向转移.从空间的角度观察, 广义上来说, 软件规格说明描述的是整个软件系统:狭义来说, 软件规格说明描述的是软件系统的组成部件.从时间的角度来观察, 广义来…
1. 规格设计的发展历史 规格设计用于对程序设提供分解,抽象等的手段.在撰写代码规格的时候,需要对组成部件进行抽象. 在1960s,软件设计出现危机,例如Dijkstra提出了goto语句的种种危害,引发了软件开发领域长期的论战,并且在这时候产生了结构化程序设计方法,例如Pascal语言在1970s占据有统治地位. 之后,随着计算机软件规模日渐庞大,结构化程序设计方法开始无法满足用户的需求,面向对象程序设计(OOP)应运而生.面向对象程序设计是一场重大的革命,提高了开发人员的效率,有效的控制了软…
第三单元OO总结博客 1 梳理JML语言的理论基础.应用工具链情况 由于篇幅原因,这里只梳理几个在本单元常用的 注释结构 行注释://@annotation 块注释:/* @ annotation @*/ 例如:纯粹查询方法/*@ pure @ */,即方法的执行不会有任何副作用 JML表达式 原子表达式 \result:表示一个非 void 类型的方法执行所获得的结果,即方法执行后的返回值 \old(expr): 用来表示一个表达式 expr 在相应方法执行前的取值.作为一般规则,任何情况下,…
这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发过程中很多基本的知识确实没有熟烂于心导致开发的时候只有基本的内容.我所在的项目就是代码接口各种乱,可读性和可维护性特别差:当然自己在开发的时候也都没有做到,在后面的工作中尽量避免 前面发表了5篇OO设计原则的文章,在这里我将这个5个原则如何在我们设计过程进行应用进行一下总结, 这是我通过阅读和学习很…
面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会:在软件开发过程中,使用者会不断地提出各种更改要求,即使在软件投入使用后,也常常需要对其做出修改,在用结构化开发的程序中,这种修改往往是很 困难的,而且还会因为计划或考虑不周,不但旧错误没有得到彻底改正,又引入了新的错误:另一方面,在过去的程序开发中,代码的重用率很低,使得程序员的效 率并不高,为提高…
“OOP永远是我的好朋友爸爸!” ——来自某无能狂怒的菜鸡 身处在OO的第一个摸鱼黄金周中的我,感觉到了巨大的满足感.如果写博客这种充满意义的事情可以代替我们亲爱的作业,那么我提议每周来两个:)下面开始正经分析~ Homework 1  简单多项式求导 Part1 程序架构分析 面对人生的第一次面向对象程序,没有学过java的我认认真真思考了整个代码框架,最后通过不懈努力,完完全全写成了面向过程(毕竟我又没得对象). 在这次作业中使用了三个类:PolyDerivation.Poly.Term.程…
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一人) 二.基于度量分析程序结构 (1)第一次作业 类图: 分析:第一次我写了三个类,Derivation类是负责构建一个整体的流程框架,输入.处理.求导.输出.Term类管理表达式的项,主要包含系数coe和指数index两个属性,Dealstr主要负责字符串合法性的判断和进行求导前一些简单的处理.此…
第一次作业——多项式计算 1.自我程序分析 第一次作业是多项式计算,只使用了一个多项式类.第一次接触面向对象的程序,还比较生疏,不是很能理解面向对象的思想.将读入,处理,计算,都放到了main函数中,结果main函数写的过于冗余. 这是第一次作业的度量分析,分析发现第一次作业的main函数,写的过于复杂,没有体现出面向对象高内聚,低耦合的思想. 我在第一次作业中建立了两个对象,polyNow和polyAns,每次将新的多项式 polyNow 通过poly类的add或者sub方法加或者减到 pol…
概述 经历了三次oo作业的洗礼,让我对java语言的强大以及面向对象编程有了初步的理解(当然,我是小白).本文接下来就将对自己这三次作业的代码进行分析以及分享自己的心路历程. 基础知识点考核 针对前三次作业,我列出了这其中涉及到的主要的知识点: java基础语法 java正则表达式(注意不要爆栈) 对java封装.继承.多态.接口的理解 程序的构思能力 当然,还有最重要的还是阅读和理解指导书的能力,能够在较短的时间内准确无误的理解指导书的意图也是必需的能力之一. 程序结构分析 作业一:多项式计算…
  一.      测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开发中分别能够帮助我们检测代码.测试代码,最终起到对工程正确性进行检测的功能. 这二者就好比一个是完成前的完整性检查,一个是完成后的正确性测试.当然了,理论上来说,这两者之一都可以帮助我们避免代码中问题的出现,但是更保险一点又有谁会反对呢? 先说说junit单元测试.这个相比jsf论述语言,应该是我们…
一.OO  CSS 的概念解读 (一)众多开发者忽视了CSS的表现,认为其太过简单,是一种机械的工作,而把更多关注在JS的性能或者其他方面. (二)OO CSS 将页面可重用元素抽象成一个类,用class 加以描述,而与其对应的html 即可看成是此类的一个实例. 二.OO CSS 的作用 (一)加强代码复用以便方面维护. (二)减少 CSS 体积(用父类的即可). (三)提升渲染效率. (四)组件库思想.栅格布局可共同.减少选择器.方面扩展. 三.OO CSS 的注意事项(使用高效CSS时需要…
一.简单原型机制介绍 继承是OO语言的标配,基本所有的语言都有继承的功能,使用继承方便对象的一些属性和方法的共享,Javascript也从其他OO语言上借鉴了这种思想,当一个函数通过"new"创建出一个实例后,那么这个实例就拥有这个函数的prototype对象所有的属性和方法,从而实现所有的实例都能共享一组实例和方法,Javascript所谓的类就行通过修改这个prototype对象实现的,以区别其他的原生对象,及自定义类 <script> function A(){} A…
目录 前言 一.第一次作业分析 1. UML及复杂度分析 二.第二次作业分析 1. UML及复杂度分析 2. 性能优化 2.1 楼层类的实现 2.2 调度算法 3. bug分析 三.第三次作业分析 1. UML及复杂度分析 2. Bug分析 四.评测机的搭建 1. 整体框架 2. 正确性检测 五.多线程的调试   前言 这三周以来的OO多线程 + OS实验关键期 + OS理论课期中考试 + 每周一次去学院路的答辩 + 每周日一上午的行进管乐团训练 + 每周日一晚上的交响乐团排练 + 其它各种琐事…
本单元的OO作业相比以前的,实在可以以和蔼来形容.但是和蔼并不意味着什么都不做,这单元的两次作业,特点在于每种查询难度不大,但是有很多需要商榷的细节点和查询种类比较多.由于UML图和java8之间,存在着不少的差异,所以为了厘清这些差异,也花费了不少时间,也给代码编写和测试产生了不少歧义. 第一次作业 对于类图的查询,即需要对于输入的信息,进行一定的分析和构图:输入为"类"则构建类对象,输入为"继承"则修改类对象的"父"变量,输入为"属…
什么是UML: UML是统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言. UML为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言. 统一建模语言 (UML)是非专利的第三代建模和规约语言. UML是在开发阶段,说明,可视化,构建和书写一个面向对象软件密集系统的制品的开放方法. UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效. UML可…
说到Java的IDE,似乎eclipse和Idea是目前的主流.然而,OO的课程组却一直在推荐使用eclipse,于是很多人就这样错过了Idea这样强大的IDE工具.本文将会对于Idea和Idea的一些常见(实际上,很多是Jetbrain系列IDE的代表性操作)操作进行一些介绍. Jetbrain & Idea Jetbrain Jetbrain是捷克的一家企业(Jetbrain官网),目前其主打产品是各个现代主流语言的IDE,包含Python.Ruby.PHP.SQL等语言(对于企业用户还提供…
嘛..不知不觉这门课程要结束了,那么就再说点啥以示庆祝呗. 测试vs正确性论证 说到这个,相比很多人对此其实很有疑惑,请让我慢慢分析. 逻辑概览 首先我们来看看两种方式各自的做法和流程是什么样的: 单元测试 在测试中,我们是这样的一个流程 此外,为了保证测试能覆盖到工程代码的每一个区域,需要保证测试的覆盖率. 正确性证明 在证明中,我们是这样的一个流程 在这一过程中 基于行为分析的repOk永真性证明依赖于JSF中的modifies项 方法正确性将基于JSF中所描述的effects和requir…
四周之前,我不懂面向对象是什么:四周之后,我依然不懂面向对象是什么. 一.第一次作业 (1)实现 说起来,本次作业是最惨烈的一次. 虽然它很简单,但由于未熟悉正则表达式的应用,导致判断wrong format使用了枚举法(即将表达式看成以合法字符组成的字符串,类似于自动机的手动判断某个字符接上某个字符是不合法的),着实耗费时间太久,而且在随后的互测中,因为未注意到指数部分的带符号整数的符号与数字间不能有空格,被狼人疯狂刀了十几下(讲真一个bug盯着咬也是醉了). 而其实通过一个简易的正则表达式,…
BUAA-OO第一单元博客总结 第一次作业总结 (1)类关系图 第一次作业类图关系简单,仅有一个Poly封装类以及一个Main主类调用Poly,Poly封装类内部完成了包括对象构造,求导,生成字符串的一系列函数. (2)作业设计思路: 由于刚刚开始接触面向对象编程,对面向对象的概念仅简单的理解为对象封装,因此第一次作业构造的程序其实仅仅只是面向过程思想的一个变形.第一次作业由于不想写又大又长的正则表达式,同时也想使自己的程序便于后续的debug,因此构造了状态机的方式来进行字符串验证与处理.处理…
UML是什么 Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置. 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物.它不仅统一了Booch.Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所…
一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性, 来认识.理解.刻划客观世界和设计.构建相应的软件系统.面向对象的特征:虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持, 即 “抽象.封装.继承.多态” : – 抽象,先不考虑细节 – 封装,隐藏内部实现 – 继承,复用现有代码 – 多态,改写对象行为面向对象设计模式:是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变…
BUAA_OO_博客作业一 (一)程序结构分析 1.代码统计 第一次作业 第二次作业 第三次作业 代码复杂度展示第三次作业的 method ev(G) iv(G) v(G) Constant.Constant(BigInteger) 1.0 1.0 1.0 Constant.derv() 1.0 1.0 1.0 Constant.mul(ArrayList) 4.0 5.0 5.0 Constant.mul(BigInteger) 1.0 1.0 1.0 Constant.mul(Constan…
Part 0: 前言 令人闻风丧胆的OO还是来了.并没有像名字的外表一样可爱,简直就是恶魔. 疯狂压榨OS的时间,周末无法休息,互测狼人机制 虽然网上骂声很多,就算改进到9012年还是有很多不足的地方,但和往年相比,已经有很大进步,也更加人性化了,我们并不能力求在我们这一届做到完美,这毕竟是一个长期长期长期长期又漫长的过程.既来之,则安之,既然无法改变规则,就让自己适应规则吧. Part 1: 量度分析 接下来将细分开每一个板块来对我自己的三次作业来进行分析 DesigniteJava Desi…
[head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继承此超类. 若此时我们有了一个新的需求,我们需要鸭子会飞,那么我们该如何修改代码呢? 最初,我们想在基类上加上fly方法,使得所有子类鸭子都拥有相应的fly方法.但这样错误产生了,即使是本不该会飞的橡皮鸭子也拥有了fly方法. 或许我们可以把橡皮鸭中的fly方法覆盖掉,但这样每次新加入的不会飞的新鸭…