当前位置:文档之家› 需求分析与系统设计重点

需求分析与系统设计重点

一名词解释IS(information system):信息系统ERP(enterprise resource planning):企业资源规划CRM(customer relationship management):客户关系管理SCM(supply chain management):供应链管理RUP(rational unified process):Rational统一过程XP(extreme programming):敏捷开发/敏捷编程CMM(capability maturity model):能力成熟度模型OCP:开放封闭原则LSP:里氏代换原则DIP:依赖倒转原则SRP:单一职责原则ISP:接口隔离原则CRP:合成复用原则LOD:迪米特法则CASE(computer-assisted software endineering):计算机辅助软件工程UML(unified modeling language):统一建模语言XML():可扩展标记语言URM:统一资源监控API(application programming interface):数据库或应用程序接口BPR(business progress re-engineering):业务过程重组ISA(information system architecture):信息系统体系结构OLTP(online transaction processing):联机事务处理OLAP(online analytical processing):联机分析处理DSS:决策支持系统MIS:信息管理系统GUI(graphical user interface):图形用户界面DLL(dynamic link library):动态链接库RPC(remote procedure calls):远程过程调用RMI:远程方法调用AOP(aspect-oriented programming):面向方面的软件开发JAD(join application development):联合应用开发RAD(rapid application development):快速应用开发MVC:模型-视图-控制器CRC:类-职责-写作者ORM:对象-关系映射DDP:向下依赖原则UNP:向上通知原则NCP:相邻通信原则PCBMER的原则EAP:显示关联原则CEP:循环去除原则CNP:类命名原则APP:相识包原则二:1实现继承(特化继承)的缺点,在系统设计时如何避免实现继承?提示:通常用接口继承打破了封装,因为基类向子类暴露了实现细节白盒重用,因为基类的内部细节通常对子类是可见的当父类的实现改变时可能要相应的对子类做出改变不能在运行时改变由父类继承来的实现2 接口与实现相分离(PLD)2.1 什么叫接口与实现相分离2.2 在程序设计中为什么要依赖抽象类?2.3比较JA V A的抽象类与接口3 观察者模式3.1 什么是观察者模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己3.2 画出观察者模式的类图3.3 说明观察者模式与好莱坞法则的关系4 回调4.1 什么是回调,主要应用场景举例一个回调函数/方法(简称回调/ callback)是上层模块定义的,将被下层模块(反过来)调用的方法。

下层模块Server不知道上层定义的接口也不应该直接调用上层接口。

回调函数,就是你自己写的。

你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。

这样,系统在必要时,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。

模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A做出相应的反应。

那么我们就把foo称为回调函数。

举例:上层模块Client调用了下层Server的copy()方法。

假设上层需要更新进度条——显示复制任务完成的进度,显然上层并不清楚复制的进度而只有下层的Server才知道。

这时下层模块如何将进度数据传递给上层的Client呢?4.2 以JA V A语言为例说明回调的实现方式,画出类图,写出包的名称回调方法是某个上层模块定义的功能接口,但是所有上层模块都不会直接调用它,而设计它的目的就是为了下层模块的反向调用。

注意:通常公共模块、上层模块和下层模块均有自己的包。

在实践中,3个模块通常由不同的程序员编写。

公共模块IXxx公共模块IXxx定义回调的接口。

参数为底层上传的数据。

public interface IXxx{public void callback(int i);// 参数为底层上传的数据}上层调用者Client ://上层模块public class Client implements IXxx{public void call() {new Server(this).copy();//传递this}//下层调用时传回一些数据。

//实现接口IXxx以提供回调callback(int)的方法体;传递this作为回调的接受者。

@Override public void callback(int i) {System.out.println(i+"0%");} }下层被调用者Server:public class Server{private IXxx whoCallMe; //一个IXxx的引用public Server(IXxx listener) {whoCallMe = listener;}public void copy() {for(int i=0;i<100;i++){if (i/10 == 0) {//在适当的时机调用回调whoCallMe.callback(i);} }System.out.println("copy() over");} }TestCallback :package API.event;public class TestCallback{public static void test(){new Client().call(); }public static void foo(){(){new Server(new Client()).copy();} }4.3 用JA V A代码演示好莱坞法则(重点在注册方法)我们站在下层模块的角度重新考虑回调。

增添一点变化——多个Client对下层Server2对象的某种状态变化感兴趣。

一些男女演员们(Client)都对某导演(Server2)是否拍新片子感兴趣。

好莱坞法则:"Don't call me; I'll call you."。

下层模块Server2的角度,需要一个List<IXxx>作为电话簿;提供一个register(IXxx listener)用于登记,参数为感兴趣者或监听者/器;极其重要的一个细节:Client与Server2之间没有依赖关系。

public class Server2{private List<IXxx> listeners = new ArrayList<IXxx>();//电话簿public void register(IXxx listener) {//监听器注册listeners.add(listener);}public void sthHappened(){//某种状态发生改变for(IXxx x: listeners) {x.callback(10);// 通知所有已登记的演员}} }测试:package API.event;class TestCallback2{public static void test(){Server2 s =new Server2();s.register( new Client());s.register( new Client());s.sthHappened();//这里由上层模块触发事件的发生} }下层模块状态发生某些变化时——某些事件发生时,可以找到上层模块相应的处理代码(回调函数)。

而这一点正是Java委托事件模型的核心。

此题20分5 结合实践介绍一种设计模式(ppt中23种之一),说明基本思想,使用场景(老师说要写很多字,说明清楚)策略模式:思想:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。

策略模式让算法独立于使用它的客户而独立变化。

策略模式用于算法的自由切换和扩展,它是应用较为广泛的设计模式之一。

策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法来解决某一问题,同时可以方便地更换算法或者增加新的算法。

只要涉及到算法的封装、复用和切换都可以考虑使用策略模式。

在以下情况下可以考虑使用策略模式:(1) 一个系统需要动态地在几种算法中选择一种,那么可以将这些算法封装到一个个的具体算法类中,而这些具体算法类都是一个抽象算法类的子类。

换言之,这些具体算法类均有统一的接口,根据“里氏代换原则”和面向对象的多态性,客户端可以选择使用任何一个具体算法类,并只需要维持一个数据类型是抽象算法类的对象。

(2) 一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重条件选择语句来实现。

此时,使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句。

(3) 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法与相关的数据结构,可以提高算法的保密性与安全性。

策略模式将行为和环境隔离开来,环境角色类负责维持和查询行为的类,各种类似的逻辑算法都在各个具体的策略类中进行实现,由于环境和行为隔离开来,所以行为的逻辑变更不会影响到环境和客户端。

如果要使用策略类,则必须先抽象出需要包装的逻辑算法,试图从环境中分隔开来。

策略模式一般都是将一个系列的逻辑算法包装到一些列的策略类中,来作为一个抽象策略类的子类。

策略模式涉及到三个角色:∙环境角色∙抽象策略角色∙具体策略角色举一个简单的例子。

假设现在在开发一个养殖管理系统。

该系统用来对养殖过程中的整个流程进行管理。

其中的一个模块是关于禽类的喂养管理等。

一个养殖专业户喂养了多种禽类(如兔子,鸡,猪),养殖人员每天都需要给他们喂食物。

由于不同的禽类都吃不一样的东西,在这里,对于喂养(feed)这个动作,这个就是一个策略。

相关主题