软件设计

实验二Java面向对象程序设计

扶醉桌前 提交于 2020-03-05 17:24:26
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:王国伊 学号:20135207 成绩: 指导教师:娄嘉鹏 实验日期:2015.5.8 实验密级:无 预习程度: 实验时间:15:30~18:00 仪器组次:07 必修/选修:选修 实验序号:02 实验名称: Java 面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和 TDD ; 2. 理解并掌握面向对象三要素:封装、继承、多态; 3. 初步掌握 UML 建模; 4. 熟悉 S.O.L.I.D 原则; 5. 了解设计模式。 实验仪器: 名称 型号 数量 PC机 Lenovo Z485 1 Linux虚拟机 Ubuntu(32bit) 1 实验步骤 一、单元测试 三种代码 编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。当我们想用程序解决问题时,要会写三种码: 伪代码 产品代码 测试代码 需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。 伪代码: 产品代码: 测试代码: 经过几次修改后得到可以通过自己测试的代码,即能够实现需求的代码。 这时测试都符合预期了,我们把MyUtil.java提供给别人使用时,他人可以按照要求实现需求。为保证单元测度是充分的,我们的一般要求是测试代码要比产品代码多。 2

软件设计模式学习(一)统一建模语言

久未见 提交于 2020-03-04 03:45:32
UML简介 统一建模语言(UML)是一种可视化的标准建模语言,通过UML可以构造软件系统的蓝图。在设计模式中,使用UML来分析和设计每一个模式的结构,描述每一个模式实例,帮助我们深入理解设计模式。比如要盖一栋房子,需要先设计图纸,设计图纸就是一种设计语言,也就是模型语言。在一个现代化工程中,人们要沟通和协作,就必须使用标准的工业化设计语言,通过建模进行描述,把所要设计的结构和系统的行为联系起来,对系统的结构进行可视化控制。 UML结构 UML是由图形符号表达的建模语言,其主要包括以下几个部分: 视图 使用不同的视图从不同角度来描述软件系统,包括:用户视图、结构视图、行为视图、实现视图、环境视图。 图 提供了十三种与上述五种视图相对 用例图对应用户视图。类图、对象图、包图、组合结构图对应结构视图。状态图、活动图、顺序图、通信图、定时图、交互概览图对应行为视图。组件图对应实现视图。部署图对应环境视图。 模型元素 模型元素包括事物以及事物之间的联系。 通信机制 为模型元素提供额外的注释、修饰和语义。 类图 类图是使用频率最高的UML图之一,在设计模式中,我们将使用类图来描述一个模式的结构,通过类图来分析每一个模式实例。 类与类图 类封装了数据和行为,是面向对象的重要组成部分。类图则用于描述系统中不同类以及它们之间的关系,表达系统的静态结构。 类之间的关系 在软件系统中,类不是孤立存在的

面向对象的程序员应该懂(学习)什么?

会有一股神秘感。 提交于 2020-03-01 13:49:20
首先,这里要把程序员的概念放宽一点,不管是分析的,还是搞设计的或者编码,测试的,都叫做程序员。也就是说,这里以程序员泛指所有软件实现过程中所涉及的所有人员。但是不包括如配置管理员,数据库管理员,测试工程师这样的职位。因为这里讨论的仅仅是软件的构建,与验证、管理等其它周边事务都无关。 第一个要考虑的就是并发编程。比如多线程,它是否真是程序员本应该涉及的领域。程序员是否真的应该费大量精力去研究它,以便然后才能在现实工作中正确地使用它? 这是形式语义学讨论的范围。形式语义学讨论的就是语言元素的语义。其实我觉得它应该讨论得更多一点,比如比语言层次更高一点的如库(Library),平台,操作系统服务,本地服务,协议等的语义。 程序员应该干什么?? 根据不重复发明轮子的原则,所有编程中的共性部分都不应该是程序员的职责。程序员只应该对商业逻辑负责。程序员当然还要负责这些逻辑的运行时实现效果。也就是说,程序员负责的部分包括两个: 1,程序的静态特性; 2,程序的动态特性。 简而言之,程序员应该是最终的产品责任人。这并不意味着程序员会负责整个系统所有的部件质量,也不意味着程序员只负责自己编写的程序部分。程序员对于因需要引入的任何系统构件都拥有责任。但这种责任是一种使用者责任,是区别于开发这些构件的生产者责任的。这就象我买了个手机,手机不是我生产的,但我仍然对它的质量负有责任:使用者责任

面向对象程序概述

时间秒杀一切 提交于 2020-03-01 06:07:30
面向对象程序概述 什么是程序? 程序就是可以被计算机执行的用于解决问题的的一系列计算机指令 在编程过程中,有 两种常见的编程思想 : 1、面向过程编程思想(代表语言:C) 面向过程是一种自上而下的设计方式,编程过程为: 1》获得用户输入的数据 2》对数据进行运算并做出某种决策 3》在屏幕显示计算结果 2、面向对象编程思想(C++、Java等等) 面向对象首先需要将问题分解成各个对象,从对象的属性和行为,以及对象之间的关系进行分析 **区别:**面向过程是一种按照编程语言的思路思考问题,而面向对象是一种抽象度比较高的编程方法,它的目标使模块的抽象度更高,可复用性好; 在面对对象编程中,有三大特征: 1》封装:把数据和操作数据的函数组织在一起,使得程序更加紧密,提高了类内部数据的安全性; 2》继承:增强了软件的可扩充性,以及代码的重用性; 3》多态:使得设计人员在设计程序过程中可以更好对问题进行更好的抽象,有利于代码的维护和可重用; 对象: 什么是对象呢,任意一个对象都包括属性和行为;其中属性用于描述客观事物的静态特征,名词,而行为表示事务的动态特征;eg:人*(person),他的属性就包括姓名、性别、身高、体重等,行为就包括走路、说话、打招呼、学习和工作等; 类: 类是对客观世界中具有相同属性和行为的一组对象的抽象,它为属于该类的全部对象提供了统一的抽象描述,其内容包括属性和行为

软件设计——模块管理

杀马特。学长 韩版系。学妹 提交于 2020-02-28 11:21:25
文章目录 模块管理,保障系统有序运行 管理参照系 设计思路 程序实现 引入模块标识 实现层与级的表达 系统状态和回调函数原型定义 模块注册 系统启动 系统关闭 module示例程序 小结 这篇文章内容采自李云大牛编写的著作《专业嵌入式软件开发 全面走向高质高效编程》一书中的第14章内容。我看后根据自己在实际项目中遇到的情况感觉这一章内容对于程序设计及开发尤其重要,并且对于软件后期的正规维护都有很重要的参考价值,所以特地摘抄记录下来以供大家参考。 该书籍的电子版已经上传CSDN资源,大家可以下载阅读。 https://download.csdn.net/my 模块管理,保障系统有序运行 采用模块化的方法设计软件,早已成为行业的共识。模块化除了反映在方法上,还在实现上得下足功夫,既凸显模块的概念又实现整个系统的有序运行。 管理参照系 当一个系统比较复杂,所包含的模块数量比较多时,不可避免地会产生模块间负责的依赖关系,且有可能出现“牵一发而动全身”这种情形。无论采用怎么样的方法管理模块,都应当先将系统中所有模块之间的依赖关系通过某种方式表达出来,就比如同下图的形式表示: 从上图中的各个模块之间的依赖关系可以看出,当系统进行初始化时堆管理模块应当最先被初始化,接着是紧跟其后的定时器管理模块和内存池管理模块,上图中所有模块的初始化顺序是从上到下的,且左右顺序并不重要。

软件设计笔记:开闭原则

走远了吗. 提交于 2020-02-26 23:39:26
开闭原则 软件实体(模块、类、函数等)应该对扩展是开发的,对修改是关闭的。 通俗的讲就是:软件功能是可以扩展的,但是软件实体是不可以被修改的。 当我们在代码中看到else 或者 switch/case 关键字的时候,基本可以判断违反开闭原则了。 策略模式、适配器模式、观察者模式、模板方法模式都可以实现开闭原则,可以在不同场景中解决 if/else 或 switch/case 问题。 来源: oschina 链接: https://my.oschina.net/u/939952/blog/3164958

软件设计笔记:依赖倒置原则

守給你的承諾、 提交于 2020-02-26 22:42:03
依赖倒置原则 高层模块不应该依赖底层模块,二者都应该依赖抽象。 抽象不应该依赖具体实现,具体实现应该依赖抽象。 例如:JDBC 我们在java开发中访问数据库,代码并不直接依赖数据库驱动,而是依赖JDBC,当应用程序需要更换数据库,不需要修改任何代码。这正是因为应用代码,高层模块,不依赖数据库驱动,而是依赖抽象JDBC,而数据库驱动,作为底层模块,也依赖JDBC。 日常开发中,service层依赖DAO层,并不是直接依赖DAO的具体实现,而是依赖DAO提供的抽象接口,但这并不是依赖倒置,依赖倒置中,除了具体实现要依赖抽象,最重要的是抽象是属于谁的抽象。 按照依赖倒置原则,接口的所有权是被倒置的,也就是说,接口被高层模块定义,高层模块拥有接口,底层模块实现接口。不是高层模块依赖底层模块的接口,而是底层模块依赖高层模块的接口,从而实现依赖关系的倒置。 在上面的依赖层次中,每一层的接口都被高层模块定义,由底层模块实现,高层模块完全不依赖底层模块,及时是底层模块的接口。这样,底层模块的改动不会影响高层模块,高层模块的复用也不会依赖底层模块。对于Service和DAO这个例子来说,就是Service定义接口,DAO实现接口,这样才符合依赖倒置原则。 所以依赖倒置原则也被称为好莱坞原则:Dont't call me, I will call you. 即不要来调用我,我会调用你。Tomcat

书评:软件设计精要与模式

不羁岁月 提交于 2020-02-26 02:27:23
书评:软件设计精要与模式 终于阅读完了张逸先生的《软件设计精要与模式》一书,掩卷沉思,书中对于软件设计这门学问的理解和阐述让我受益良多,潜移默化之中,我对于软件设计的过程以及模式的使用又有了新的认识。因此,我对此书的评价是一本不可多得的优秀书籍。 不能光说优秀,到底优秀在何处呢?个人感觉有以下几点: 首先,内容不浮躁。 放眼当今的图书市场,很多书都被冠以《**天精通***》《***入门到精通》等等很诱惑人的题目,具体的内容却让人不敢恭维,看完全书之后,学到的都是最基本的知识,能够跟着书上的例子做几个简单的程序,甚至于还学会了其中一些不好的编程习惯,就飘飘然以为自己是开发高手了。浮躁是作为程序员的人所应当避免的,但正式很多书内容的浮躁,导致了人的浮躁。 而张逸先生的这本书则有很大的不同,里面并没有通篇列举大量初级的代码,他在书中提出的代码都是经过深思熟虑的,非常具有代表性的代码。并且,即便是在实例的部分,也没有直接给出最终的代码,而是先给出有问题的写法,然后逐步重构、改进,这个过程中不断地将软件设计的思想潜移默化地传递给读者,让读者理解其中的奥秘。另外,书中更多的是张逸先生对于软件设计和模式应用的理解和经验之谈,这在国内的书中是不多见的,这样的无私共享,与张逸先生本身的做人态度是分不开的。 其次,内容不枯燥。 很多做技术的人写起书来都是满篇的计算机术语,让人看了之后昏昏欲睡

软件设计项目进展01 2019/8/19

假装没事ソ 提交于 2020-02-25 08:02:08
1.当天完成的工作: 在软件课程设计的第一天,仔细了解了软件开发实践课程的整体流程,为接下来一个月将要完成的事情搭起了整体框架。 主要完成了如下事情:1)组队:组名:fubuki 成员: 丁悦(我,组长),张玲瑀(组员),张楠(组员)。 2)选题完成:基于微信小程序的食堂订餐送餐系统设计与实现。 项目名称:懒人食堂 2.第二天的计划: 1)下载墨刀原型设计工具,仔细了解其功能和操作。 2)结合墨刀原型设计工具对微信小程序的需求功能进行合理的设计。 3.每日小结: 今天对一个软件开发的过程有了初步的认识,软件开发是一个并不容易的过程,需要较强的综合能力。然后经过考虑确认了项目的选择。相信自己经过一个月的坚持,学习与实践,能力将会有大的提升。 来源: https://www.cnblogs.com/dydy9999/p/11379184.html

2020荐书:软件设计的哲学

社会主义新天地 提交于 2020-02-15 07:48:46
2020年必读书籍推荐:软件设计的哲学(A Philosophy of Software Design),本书190多页,豆瓣的点评分在9分以上,目前只有英文版本,中文版还未上市,英文好的同学建议去直接阅读原版。 内容简介 书中讨论了软件设计的主题:如何将复杂的软件系统分解成可以相对独立实现的模块(如类和方法)。这本书首先介绍了软件设计的基本问题,即管理复杂性。然后讨论了如何处理软件设计过程的哲学问题,并提出了在软件设计过程中应用的一系列设计原则。该书还介绍了一系列标识设计问题的危险提示。你可以应用本书中的思想来最小化大型软件系统的复杂性,这样你就可以更快地编写软件。 作者简介 John Ousterhout是斯坦福大学计算机科学教授。他目前的研究重点是新的软件堆栈层,以允许数据中心应用程序利用具有微秒级延迟的通信和存储技术。Ousterhout之前曾在工业界工作过14年,他在那里创建了两家公司(Scriptics和Electric Cloud),之前在加州大学伯克利分校(uc Berkeley)担任了14年的计算机科学教授。他是Tcl脚本语言的创建者,并以在分布式操作系统和存储系统中的工作而闻名。Ousterhout获得了耶鲁大学物理学学士学位和卡内基梅隆大学计算机科学博士学位。他是美国国家工程院院士,曾获多个奖项,包括ACM软件系统奖、ACM Grace Murray