Java笔记11-软件开发流程设计原则

今天内容:

  • 1.常用的设计原则
  • 2.常用的设计模式
  • 3.常用的查找算法
  • 4.常用的排序算法

1.常用的设计原则(记住)

1.1软件的开发流程

软件开发授权-投标 -> 100万
1. 编写需求分析文档 => 
2. 概要设计文档(架构) => 
3. 详细设计文档(类图) => 
4. 编码(项目经理分具体任务)还要测试  (SVN/GIT)单元测试,模块测试(一般都是美女多一些,对于技术要求比较低) 黑盒测试 白盒测试
5. 安装和调试写使用说明文档
6. 维护和升级软件公司和客户协商(钱要到位)还有一锤子买卖的(就是不管维护那种)如果整个开发周期是半年(可能编码只占一个月的时间)
架构师把架构架构错了,那就都白干了,重新架构意味着要加班,这种情况不多,因为架构师至少要5年以上经验的
绝大多是是客户的需求问题,或者是客户要加功能.

1.2常用的设计原则

1. 开放封闭原则(Open Close Principe)

对于扩展开放,对于修改关闭,为了使程序的扩展性好,易于维护
如:

public  class  Person{private String name;private int age;private boolean gender;// ...
}

不,这样前面美女测试人呢的工作就白做了,所以应该这样

public  class  Person{private String name;private int age;// ...
}
public class SubPerson extends Person{private boolean gender;//...
}

2. 里氏代换原则(Liskov Substitution Principe)

  • 任何父类可以出现的地方,子类一定可以出现

  • 子类is a 父类

  • 在以后的开发中多使用继承和多态的理念

    多态的实际意义:
    屏蔽不同子类的差异性,实现通用的编程,产生不同的结果
    如:

public statie void draw(Shape s){s.show();
}
ShapeTest.draw(new Rect(1,2,3,4));
ShapeTest.draw(new Circle(5,6,7));
// 父类类型的引用能到的地方,子类的引用也能到

3.依赖倒转原则(Dependence Inversion Principle)

尽量多依赖于抽象类或接口而不是具体实现类,对子类具有强制性和规范性
如:

publice class Account{public double getLix(){// ...        }
}
publice class FixedAccount extends Account{//我这里想重写就重写,以为我的父类也不是抽象的 
}

要是这样,就符合了

publice abstract class Account{public abstract double getLix(){// ...        }
}
publice class FixedAccount extends Account{// 这回就不得不继承了@Overridepublic double getLixi(){} 
}

4.接口隔离原则(interface segregation principle)

  • 尽量依赖于小接口而不是大接口,避免接口的污染
  • 可以降低耦合度
  • 耦合主要指一个模块于其他模块之间的关联度.

如:

public interface Animal{public abstract void run();//描述奔跑 行为public abstract void fly(); //描述飞行行为
}public class Dog implements Animal{public abstract void run(){...};public abstract void fly(){
//        这个方法没法写了}
}

5.迪米特法则(最少知道原则) (Demeter Principe)

  • 一个实体应当尽量少于其他实体之间 发生相互作用
  • 低耦合,高内聚
  • 高内聚就是指将一个实体应当将该实体应该拥有的功能尽量聚集在该实体内部

6.合成复用原则(Composite Reuse Principe)

  • 尽量多使用合成的方式,而不是继承的方式.
    如:
public class A{public void show(){...}... ...
}
public class B extends A{public void test(){// 调用show方法show();}... ...// 这样不推荐,因为java只能单继承,或者说会影响调用show()方法时候的性能,因为继承会继承父类的所有方法
}

升级版

public class A{public void show(){...}... ...
}
public class B{private A a;public void test(){// 调用show方法a.show()}... ...// 这样不推荐,因为java只能单继承,或者说会影响调用show()方法时候的性能,因为继承会继承父类的所有方法
}

2常用设计模式

2.1 基本概念

  • 设计模式是一套被反复使用,多数人知晓的,经过分类编目的,设计经验的总结.
  • 设计模式就是一种用于固定场合的固定套路

2.2 常用设计模式
单例设计模式

模板设计模式

工厂方法模式:
当你需要大量创建对象的时候,你就需要创建一个工厂类,然后创建一个工程方法, 这样可以提高程序的可维护性和扩展性

抽象工厂模式

3.常用的查找算法()

  • 3.1线性查找算法(重中之重)

  • 3.2折半查找算法

4.常用的排序算法

冒泡排序算法

比较相邻位置的两个元素,若第一个元素比第二个元素大则交换;

从开始的第一对元素一直到结尾的最后一对元素,经过这一轮找到了最大值并放在了最后;

持续对越来越少的元素进行量量比较,直到所有元素不再发生交换为止;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

magnify.m —— 图像局部放大镜工具函数

magnify.m 函数下载地址:magnify - File Exchange - MATLAB Central; magnify.m 函数在执行时,是一种交互式处理。 简单演示如下: clear, clc% 加载图像到内存,如读取matlab自带的图像,并将其显示出来 I i…

【大数据系列】hadoop单节点安装官方文档翻译

Hadoop: Setting up a Single Node Cluster. HADOOP:建立单节点集群 PurposePrerequisites Supported PlatformsRequired SoftwareInstalling SoftwareDownloadPrepare to Start the Hadoop ClusterStandalone OperationPseudo-Distributed Operation Configuration…

qmlcanvas绘制3d图形_透视Matplotlib核心功能和工具包 - 绘制3D图形

关联知识MatplotlibPython线图在此,我们将学习如何创建3D线图。 它类似于2D等效折线图,并且2D折线图的许多属性都结转到3D。我们将在相同的轴上绘制凹凸曲线,并从不同角度查看它们,例如平行视图,顶视图以及围绕z轴的旋…

264 解码之 yuv

博客访问量日渐减少,于是我决定丢一点技术东东上去,吸引爬虫光顾一下。先谈谈 h.264 的编解码问题。个人建议做视频、音频的孩子们,一定要抓住 RFC 和 standard ,然后多看开源编解码程序。近来抽空看了两个 decoder ,一…

Java笔记12-函数式接口

主要内容 自定义函数式接口函数式编程常用函数式接口 第一章 函数式接口 概念 函数式接口在java中指的是:有且只有一个抽象方法的接口 函数式接口,即适用于函数式编程场景的接口.而java中共的函数式编程体现就是Lambda,所以函数式接口就是可以适用于lambda使用的接口.只有…

雷军晒3亿估值,意欲“收编”台湾硬件创业者?

1月13日,在台湾的CSMIC 2015移动互联网两岸年会上,雷军以猎豹移动董事长的身份做了《给年轻创业者的两大方向性建议》演讲。 演讲中雷军表示,“在未来5到10年,特别适合台湾年轻创业者做的两个方向,一个是移动互联网&am…

网页“console”输出图文信息

http://www.monmonkey.com/javascript/jiben2.html 参考以上链接中的转义字符使用。 http://www.cnblogs.com/Wayou/p/chrome_dev_tool_style_console.html https://segmentfault.com/a/1190000002511877 以上链接里有各种 console 输出 ASCII图文的实现方法。 ASCII图文动态效…

记事本安卓软件代码设计_用轻量级工具 Notepad3 替代 36 岁的微软记事本

一不小心,微软记事本发布 36 年了。虽然微软记事本自 1985 年 Windows 1.0 以来已包含在所有版本的 Microsoft Windows 中,但它太基础了,以至于几乎所有人都要替代它,比如轻量级的 Notepad3,支持代码高亮/折叠、括号匹…

H.264编码技术

H.264基本概况随着HDTV的兴起,H.264这个规范频频出现在我们眼前,HD-DVD和蓝光DVD均计划采用这一标准进行节目制作。而且自2005年下半年以来,无论是NVIDIA还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。H.264到底是何方“神…

Java笔记13-兄弟连在线考试系统

今天内容: 1.兄弟连在线考试系统 1.1 软件开发的流程 需求分析文档 > 概要设计文档 > 详细设计文档 > 编码和测试1.2 编写目的 (1)复习JavaSE所学的所有内容。 (2)锻炼基本的编程能力。 1.3 功能分析 考试系统:(1)学员系统a.修改密码b.开始…

macOS自带Python2.7删除之后的悲剧

2019独角兽企业重金招聘Python工程师标准>>> 起因 今天打开xcode想要开始继续写项目的时候悲剧了. Loading a plug-in failed. The plug-in or one of its prerequisite plug-ins may be missing or damaged and may need to be reinstalled. 尝试用终端打开看看报…

EasyUI 表格点击右键添加或刷新 绑定右键菜单

例1 在HTML页面中设置一个隐藏的菜单&#xff08;前提是已经使用封装的Easyui&#xff09; 代码&#xff1a; <div id"contextMenu_jygl" class"easyui-menu" style"width: 80px; display: none;"> <div …

python神奇的小海龟_Python笔记_第一篇_面向过程_第一部分_8.画图工具(小海龟turtle)...

turtle 是一个简单的绘图工具。提供一个小海龟&#xff0c;可以把它理解为一个机器人&#xff0c;只能听懂有限的命令&#xff0c;且绘图窗口的原点(0,0)在中间&#xff0c;默认海龟的方向是右侧海龟的命令包括三类&#xff1a;运动命令、笔画控制命令、其他命令。1. 运动命令…

jupyter浅析

一、jupyter 起步:简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;允许用户创建和共享包含代码、方程式、可视化和文本的文档。它的用途包括&#xff1a;数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。它具有以下优势&#xff1a; 可选择语言&a…

我在全球最大的同性社交平台那点事

本文作者&#xff1a;夏之冰雪&#xff0c;i春秋签约作家 《我在百度网盘上看到上万条车主个人信息,企业、政府高官信息、各种数据库和无穷无尽的盗版》&#xff0c;一时间&#xff0c;这篇文章就火了&#xff0c;火爆程度另百度猝不及防。 其实呢&#xff0c;这事真不能全怪百…

H.264的CAVLC(编码.解码)过程详解

看264也看到CAVLC来了&#xff0c;把这方面的资料贴在这里&#xff1a; 编码过程&#xff1a; 假设有一个4*4数据块 &#xff08;变化&#xff0c;量化后就送入熵编码&#xff09;{ 0 , 3 , -1 , 0, 0, -1 , 1, 0, 1 , 0 , 0 , 0, 0 , 0 , 0 , 0 } 数据重排列&a…

python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...

一、互斥锁进程之间数据隔离&#xff0c;但是共享一套文件系统&#xff0c;因而可以通过文件来实现进程直接的通信&#xff0c;但问题是必须自己加锁处理。注意&#xff1a;加锁的目的是为了保证多个进程修改同一块数据时&#xff0c;同一时间只能有一个修改&#xff0c;即串行…

Python实现修改图片尺寸

起步 很多小伙伴从网上找的图片可能图片尺寸与自己的需求不符合 今天小编就教大家使用python写一个简单脚本程序实现修改图片的尺寸 环境准备 首先我们需要python环境,它的安装可以参考:python安装以及版本检测 其次我们还需要安装一个python图形化的库PIL PIL的安装,这里…

数据集

https://zhuanlan.zhihu.com/p/25138563转载于:https://www.cnblogs.com/zhangbojiangfeng/p/7039725.html

常见的攻击手段及其防御方式

本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击)CSRF&#xff08;跨站请求伪造&#xff09;SQL注入DDOSXSS 概念 全称是跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;指攻击者在网页中嵌入恶意脚本程序。案列 比如说我写了一个博客网站…