OOAD面对象分析和设计初步认识
1、简单描述什么是面向对象及面向对象的特点。ntttorientation->定向,面向对象:Object Orientation 简称OOnttt1.1 是一种系统建模技术,即编程思想nttt(OO:是一套集编程思想,方法,原则,模式,解决方案为一体的编程模式nttt这种思想贯穿于软件开发的整个过程。比如需求分析,设计,编程,测试升级等。)nttt1.2 面向对象编程oop:按照OO的方法学来开发程序的编程方式nttt1.3 面向对象分析OOAnttttt分析阶段所要解决的问题如下:nttttt1.3.1:建立针对业务[问题域]的清晰视图;nttttt1.3.2:列出系统必须要完成的核心任务;nttttt1.3.3:针对问题域建立公共词汇表;nttttt1.3.4:列出针对此问题域的最佳解决方案;ntttttntttt注:此阶段要解决的问题是"what to do"nttt1.4 面向对象设计 OODnttttt设计阶段所需要解决的问题是:nttttt1.4.1:如何解决具体的业务问题nttttt1.4.2:引入系统工作所需要的各方面支持工具nttttt1.4.3:定义系统的实现策略:偏重安全还是性能ntttt此阶段解决的问题是"how to do "ntttnttt特点:抽象,封装,继承,多态ntttttn2、对象之间的关系有哪几种,分别代表着什么,用实例说明。ntttt1.1继承关系 is a 单继承ntttt1.2依赖关系 类A对象并不需要存在有类B类型对象的属性,而在使用的时候,直接在方法中实例化B(new B),来调用相关的业务方法来完成整个业务操作ntttt1.3关联关系t对象之间交互时的一种引用方式,当一个对象通过另一个对象的引用去使用另一个 对象的操作或服务的时候,两个对象之间便产生了关联ntttt1.4聚合关系tntttttt1.4.1也称为has a关系 什么拥有什么关系ntttttt1.4.2表示事物的整体或部分关系 的较弱情况ntttttt1.4.3代表部分事物(B)可以属于多个聚合对象(A)ntttttttt可以为多个聚合对象共享,而且可以随时改变它所从属的聚合对象。ntttttttt代表部分事物的对象和代表聚合事物对象的生存期无关,一但删除ntttttttt了它的一个聚合对象,不一定也就随即删除代表部分事物的对象nttttttttttntttt1.5组合关系 contains -- a t代表整体事物(人)的对象负责创建和删除代表部分事物(头、脚、手)的对象ntttt1.6映射关系tt一对一 一对多 多对一 多对多n3、用实例说明抽象类和接口各自的特点?ntttt 4.1:语法角度:ntInterface:ntt属性:public static finalntt方法:只能是抽象方法ntt注意: 可以没有任何方法ntt作用: 被类实现nntabstract classntt属性:正常属性ntt方法:可以是普通方法,也可以是抽象方法ntt注意: 可以没有任何抽象方法ntt作用: 被类继承nn 4.2:设计角度:ntt一个类可以实现多个接口但是一个类只能继承一个父类。ntt接口和抽象类的设计,都是在有意识的规避java不能多继承的操作ntt接口是抽象类的极致的抽象。nn 4.3:思想角度:ntt1.类进行抽象的时候是否关注属性-->抽象类nttt抽象类:有正常属性nttt接口: static final --> 被赋值以后不能修改ntt2.尽量让问题域独立存在,跟据操作选择合适的抽象类或接口.nnn 4.4:eg:一个关于门的设计问题nnn 4.4.1:需求:ntt1,门都有俩个基本的行为 open closentt2,将来系统中会出现很多种门(不同的类)nttt MyDoor1 MyDoor2 MyDoor3 MyDoor4ntt3,这些门(类)都具备open close的行为,但是具体实现又不一样.ntt4,后期改动需求:高档门需要警报功能 alarmn 4.4.2:如何选择:nt 尝试一:ntt1.抽象出一个抽象类,类中俩个抽象方法open close ntttnttpublic abstract door{ntttpublic abstract open();nntttpublic abstract close();nntttpublic abstract alarm();ntt}ntt//具体实现类ntt//挫门nttpublic class MyDoor1 extends door{nttt//自己的门自己开nttt//关ntttalarm(){ntttnttt}ntt}ntt//高门--->alarmnttpublic class MyDoor2 extends door{nttt//自己的门自己开nttt//关ntttpublic void alarm(){ntttt响nttt}tntt}nnt 尝试二:ntt2.抽象出一个接口,接口中俩个抽象方法open closenttntt//接口:door{ntttopen();ntttclose();ntt}ntt//接口: alarm{ntttalarm();ntt}nntt//挫门nttclass MyDoor1 implements door{ntttntt}ntt//好 门--> alarmnttclass MyDoor2 implements door,alarm{ntttntt}nnt 改动需求:高档门需要警报功能 alarmnttnt 尝试一:ntt1,抽象出一个抽象类,类中俩个抽象方法open close ntt11,由于抽象类有普通属性,可以定义一个属性alarmnt 尝试二:ntt2,抽象出一个接口,接口中俩个抽象方法open closentt22,多了一个功能,再把alarm定义为一个接口,不同的门实现alarm接口重写警报方法nt nt 尝试三:ntt单继承:open closentttnttt门ntntt多实现:ntntt//利用单继承表示 不同种类门的身份nttabstract door{ntttopen();ntttclose();ntt}ntt//需要拓展的功能ntt//接口: alarm {ntttalarm();ntt}nttpublic class MyDoor1 extends door implements alarm{nttt//自己的门自己开nttt//关ntttpublic void alarm(){ntttt响nttt}tntt}n4、简单描述面向对象的设计原则有哪些。ntttt5.4.1:单一职责原则(Single Responsibility Principle,SRP)ntt类的职责要单一,不能将太多职责放在同一个类中.nttntt我{nttt拿起锤子();nttt上课();nttt我也想拯救世界();ntt}nnnt5.4.2:开闭原则(Open-Closed Principle, OCP)nttntt对扩展开放,对修改关闭。finalnntt软件设计应该尽可能的使架构稳定而且又容易满足不同的需求,提高代码可重用性。ntt理论上希望能达到不修改源代码的前提下扩展功能。nnnt5.4.3:里氏代换原则(Liskov Substitution Principle,LSP)ntt在系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。nttntt基类:超类:父类 父接口nnt5.4.4:依赖倒转原则(Dependency Inversion Principle,DIP)nt 要针对抽象编程,而不是针对具体类编程.ntt面向接口编程nnntt门:ntttest{ntt main(){ntt tDoor d1 = new Mydoor1();ntttd1.open();ntt }tntt}nttnnt5.4.5:接口隔离原则(Interface Segregation Principle,ISP)nt 使用多个专门的接口来取代一个统一的接口.nttntt门:ntt接口: door{ntttopen();ntttclose();ntttalarm();ntt}nnnt5.4.6:合成复用原则((Composition/Aggregate Reuse Principle,CARP)nt ntt系统中尽量使用组合和聚合的关系,ntt而尽量少用甚至不用继承关系。nnnt5.4.7:迪米特法则(Law of Demeter, LoD)(最少知道原则)nt 一个软件实体应当尽量少的与其他实体发生相互作用.ntt又叫做最少知道原则。也就是说一个对象应当对其他对象要尽可能少的了解,[不要和陌生人说话]。