`

OO设计中的一点心得

阅读更多

一个良好的OO设计必须具备可复用性、可扩展性、可维护性。

 

什么样的设计才是一个可复用性比较高的设计?

高内聚。我们把散落到各地的重复代码,都扫到一起,把他封装起来,通过职责的划分,将他们归类。单一职责的设计原则是实现高内聚的方法之一。

 

什么样的设计才是一个可扩展性比较高的设计?

低耦合。依赖接口不要依赖实现,依赖抽象不要依赖具体,最少依赖原则(只依赖第三者)等设计原则都是实现解耦的方法。

什么是解耦:调用者调用服务提供商的服务,我们说调用者与服务提供商是一种紧耦合关系。他们无法适应变化,如果今后更换了服务提供商,我们甚至需要来更改这部分代码。我们说过依赖接口不要依赖实现,依赖抽象不要依赖具体,这两个设计原则是实现解耦的方法。如果我们把服务抽象出来,让我们的调用者仅仅依赖高层的抽象,以后即使服务提供商有更换也无妨,因为我们的调用者根本不用关心服务的具体实现是谁,只要他们提供给我们服务的接口不变,调用者永远都不需要关心谁是最终的服务提供商,这就是解耦。

 

什么样的设计才是一个可维护性比较高的设计?

实现了可复用性与可扩展性的设计就是一个可维护性高的设计。

 

如何设计一个良好的OO设计?有哪些方法?

1、学习了解OO的基础。封装、继承、多态;

2、学习常用的设计模式;

3、学习了解常用的设计原则。


OO设计的精髓:将不变的抽象化,将变化的具体化

 

OO中实现复用的方法有哪些?他们各自的优缺点是什么以及他们各自适合的使用场景。

1、继承

通过直接继承一个类,我们的子类可以直接继承自父类的很多已经实现了的职责与方法,因此通过继承,我们能达到复用父类这部分代码的目的。

优点:继承可以很清晰的很真实的映射出现实生活中对象与对象的这种父子关系。

缺点:

a、JAVA语言不支持多继承(这应该不算是继承的一个缺点,继承不应该拘泥与编程语言,充其量只能说是JAVA当中继承的一个约束而已,至于是不是缺点,仁者见仁);

b、继承是一种编译期的行为,一旦编译过后就无法改变,我们在运行时无法更改其从父类中继承而来的行为;

c、子类一旦继承父类,就被迫接受父类中所有能够被继承的方法,而不论子类是不是想要继承的方法。(某些场景下,这应该算是继承的一个优点,但更多的时候看到的却是不好的一面,有人说可以通过覆盖父类中的方法来避免一些行为,如果是这样就不要使用继承,继承是为了实现重用的而非是为了覆盖,之后会专门讨论这个话题)

 

2、组合

我们把职责独立出专门的类族,外部对象通过引用最高层的抽象接口来实现复用。当我们需要复用这部分功能时,只需要委派我们引用接口的具体对象来完成调用即可。

优点:对于外部引用者来说,他们不需要关心也不知道具体执行者是谁,从而达到解耦的目的,方便今后扩展以适应更多的变化。同时组合可以在运行时灵活的变更其运行时的行为,通过setter方法,注入不同的实现类可完成并适应此类需求,而继承在运行时却是无法做到的。

缺点:可能会额外引入更多的类(关键是看我们对外的API接口是否有增加其复杂性和实用性,否则系统内部的话,引入额外的类问题不是很大,只要他们本身是合理的)。

 

组合是一种“HAS A”的关系,继承是一种“IS A”的关系。多用组合少用继承是设计原则之一。继承的目的也是为了组合。

 

OO中实现扩展的方法有哪些?

1、实现接口,继承父类。

2、委派、代理、装饰——可以参考代理模式和装饰者模式

分享到:
评论

相关推荐

    OO设计原则 -- OO设计的 DIP依赖倒置原则

    ### OO设计原则 -- OO设计的 DIP依赖倒置原则 #### 概述 在软件工程领域,特别是面向对象设计中,依赖倒置原则(Dependency Inversion Principle, DIP)是六大设计原则之一,由著名软件架构师Robert C. Martin提出...

    OO设计原则总结

    ### OO设计原则总结 #### 什么是设计原则? 设计原则是一系列指导软件开发的基本准则,遵循这些原则可以帮助开发者构建出更加灵活、易于维护和扩展的软件系统。这些原则旨在解决常见的软件设计问题,如耦合度高、...

    OO设计原则-里氏替换原则

    ### OO设计原则——里氏替换原则详解 #### 一、引言 面向对象设计原则(Object-Oriented Design Principles)是一套指导软件开发者如何更好地设计类、接口等面向对象元素的原则集合,旨在提高代码的可复用性、可...

    OO中对于23种设计模式的整理

    OO 中的 23 种设计模式的整理 在面向对象编程(Object-Oriented Programming,OO)中,设计模式(Design Pattern)是指在软件设计中普遍存在的问题和解决方案的总结。OO 中的 23 种设计模式是指 GoF(Gang of Four...

    设计模式——可复用的OO软件

    设计模式——可复用的OO软件

    OOALV常用功能完整简例

    整体来说,OOALV的使用涉及到SAP ABAP中的一些高级编程概念,包括面向对象编程、动态程序设计、数据表的定义和查询等。在实际应用中,掌握这些知识点对于开发高效、用户友好的报表系统至关重要。OOALV的完整使用还...

    OO设计五个原则.pdf

    《OO设计五个原则》深入探讨了面向对象设计(Object-Oriented Design,简称OO设计)中的五大核心原则,这些原则是软件工程领域公认的基石,旨在提高软件系统的稳定性、可维护性和可扩展性。本文将详细解析这五大原则...

    面向对象编程,OO设计的五大原则

    在本文中,我们将详细探讨OOP设计中的五大原则:单一职责原则(Single Responsibility Principle,简称 SRP)、开放封闭原则(Open-Closed Principle,简称 OCP)、里氏替换原则(Liskov Substitution Principle,...

    23种设计模式,OO思想

    标题和描述中提到的“23种设计模式,OO思想”,是软件工程领域的一个核心概念,尤其是对于面向对象编程(Object-Oriented Programming,简称OO)的深入理解和实践至关重要。设计模式是由Erich Gamma、Richard Helm、...

    OO设计原则总结.doc

    ### OO设计原则精要解析 #### 封装变化:Encapsulate what varies 在软件设计中,变化是不可避免的。封装变化原则强调将系统中易变的部分与不变的部分分离,通过封装变动点,使得系统其他部分不受其影响,从而保持...

    实战OO的pdf自留备份

    它是OO设计中可视化代码结构的重要工具。而"软件设计模式"则是经过反复验证并广泛接受的解决特定设计问题的模板,如单例模式、工厂模式、观察者模式等,它们为软件设计提供了可复用的解决方案。 综上所述,《实战OO...

    KWIC oo设计java源码

    "KWIC oo设计java源码" 这个标题表明我们要讨论的是一个使用面向对象(OO)设计原则来解决“关键词上下文”(KEY WORD IN CONTEXT,简称KWIC)问题的Java源代码项目。KWIC是一种文本处理技术,常用于信息检索、文本...

    OO4O简介以及其在VC++中的应用

    ### OO4O简介及其在VC++中的应用 #### 摘要 OO4O(Oracle Objects for OLE)是Oracle公司推出的一种高级底层接口,专为基于Oracle数据库的应用程序开发而设计。它提供了快速访问Oracle数据库的能力,并且兼容微软...

    OO与设计模式

    软件工程软考认证,Java与设计模式,下午必考题,24种设计模式

    《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导

    第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...

    通用分页实现及其OO设计探讨(2)

    本话题将深入探讨“通用分页实现及其OO设计”,结合给定的“Paginaction.jsp”文件,我们可以进一步了解在Java Web开发中如何有效地实现分页功能。 首先,我们需要理解分页的基本概念。分页是将大量数据分割成多个...

    ABAP OOALV学习文档

    ### ABAP OOALV 学习文档详析 #### 一、ABAP OOALV 概述 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种用于SAP系统的高级...在未来的工作中,这些知识将帮助开发者更高效地完成报表设计任务。

    面向对象需求分析(OO RES)

    在数据模型设计中,OO RES 方法被用来设计钻前基本信息、钻前工程工作内容、钻杆排运行记录等数据模型。这些数据模型将被用于存储和管理钻前工程系统的数据。 在业务流程设计中,OO RES 方法被用来设计钻前工程系统...

    java oo 设计原则

    Java面向对象设计原则是软件开发中的基石,它们指导着我们编写出高质量、可维护和可扩展的代码。这些原则包括单一职责原则(SRP)、不要重复代码原则(DRY)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)以及...

Global site tag (gtag.js) - Google Analytics