`
zhanghonglun
  • 浏览: 92486 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

面向对象分析与设计(如何迈出第一步)

    博客分类:
  • OOAD
阅读更多

最早在学习面向对象的分析与设计时,也研究了很多的教材,有讲OO 基本概念 的,如什么是类,面向对象的基本特点等;也有讲面向对象的设计原则 的,比如单一职责,开放封闭,接口隔离... ....;当然不可能不去学习设计模式 啦。但最终理论学了一大堆,在实践时,还是觉得不知从何下手,有点雾里看花的感觉。

(这里讲到了学习OO 的最好路线,先学概念,再学设计原则,最后才是设计模式)

后来我突然意识到,做系统设计虽然可以理解为艺术,但根本上它不过是个技术活,没那么玄乎的。而技术活是一定要去实践的,不能被概念吓到,相信熟能生巧。

我写这篇文章是希望帮那些刚开始学习OO 的人早点下手,少走弯路,大牛请华丽地飘过。

首先讲讲分析和设计的区别,简单的讲,分析是针对问题域的,设计是针对解域的,也就是说分析是为了更好地理解需求和待解决的问题,而设计才是解决方案。这个不是重点,Pass.

那怎样面向对象设计呢?

其实,下手很简单,掌握以下两个中心就好了,面向对象的设计的核心不过是:

  1. 识别类
  2. 分配职责

还是很抽象?别急,听我慢慢解释,

怎样识别类呢,类有三种,实体类,边界类和控制类。

实体类是指需要长时间保留下来的信息,通常会做持久化处理,一般来讲,用例中的名词都可以被识别为实体类(或者实体类属性)。

边界类负责处理Actor/System 之间的交互,通常是输入/输出等。

控制类负责处理一些复杂的运算和算法等,一些较为复杂的处理都可以识别为控制类,同时,控制类还需要协调(控制)其他的类一起工作。

分配职责又是怎么回事呢?

所谓的职责,就是系统需要完成的事情。具体来讲,用例中系统要处理的步骤就是系统的职责,比如常见的CRUD 操作。这些操作都要适当的分配给上面找出来的类。

 

以上讲的可能还是很抽象,怎么办呢。很简单,我是莽汉我怕谁,不知道就硬上了,哈哈。管它三七二十一,先按照自己的理解识别一堆类,写一堆的方法实现了用例再说。

你可能会说,这样不好吧。可不好的标准是什么呢,就是不符合前面说到的设计原则 。不好怎么办呢,按照设计原则 或者是使用适当的设计模式重构 啊。

对于设计来说,没有最好,只有更好。还有,只要你敢干,啥事儿也不难。

 

最后,谈谈我对面向对象的理解。

对于任何的新概念或是方法论,我们首先要把握住其根本的价值所在,其次是了解实现这个价值而需要遵循的原则和策略,最后才是手段。

面向对象的分析和设计也是一样,

  • 根本的价值在于提高软件的复用性,可维护性和可扩展性,更好的适应业务的变化。
  • 为了实现这个目标,设计时就必须遵循相关的设计原则,比如单一职责,开放封闭,接口隔离,里氏替换,依赖倒置... ...
  • 最后才是设计模式,这些模式都是符合设计原则的最佳实践了。

所以才会推荐上面提到的学习顺序,先原则,后模式,否则可能就是本末倒置,甚至落入为了模式而模式的怪圈,效果可能就不好了。

 

PS:推荐两本书给大家

《UML 和模式应用》

《系统分析与设计方法》

3
1
分享到:
评论
2 楼 lishuaibt 2009-06-22  
不错的!
1 楼 biaofengwolf 2009-05-27  
引用
学习OO,先学OO 概念,再学OO 设计原则,最后才是设计模式

相关推荐

    UML面向对象设计与分析基础教程课件第二章

    在软件开发过程中,需求分析是至关重要的第一步,它直接影响到软件设计的合理性和开发的可行性。为了更准确地捕捉和描述软件的需求,统一建模语言(UML)提供了一系列的模型图,其中用例图是最为基础和直观的一种。...

    Flex第一步

    本书很可能是面向初学者的入门书籍,旨在帮助读者迈出使用Flex进行开发的第一步。Flex 2是Flex平台的一个主要版本,它的出现意味着开发者可以创建更为复杂和功能丰富的交互式应用。基于ActionScript 3.0的Flex 2应用...

    mslearn-firststepsPython:作为Microsoft学习的一部分编写的代码学习“使用Python迈出第一步”学习路径

    面向对象编程(OOP)是Python的一大亮点。你将了解到类和对象的概念,以及如何通过继承、封装和多态来设计和实现复杂的程序结构。 在实际项目中,数据分析和科学计算也经常使用Python。Python提供了丰富的库,如...

    设计模式——约会版

    - **未知恐惧**:对未来的不确定性也是导致很多人无法迈出第一步的重要原因。 - **担心拒绝**:面对可能的拒绝,人们往往会退缩。 **2. 积极心态的重要性** - **自信与沉着**:拥有积极的心态可以帮助我们在约会...

    简明Python教程

    安装Python是开始使用这门语言的第一步。一般来说,Python可以跨平台运行在Windows、Mac OS X和Linux等操作系统上。Python的官方网站提供了不同版本的安装包,允许用户根据自己的操作系统下载并安装适当的版本。 ...

    C#程序源代码

    它是学习任何编程语言时迈出的第一步,帮助初学者理解如何将代码与实际运行的应用关联起来。 综上所述,这些源代码涵盖了C#语言的学习过程,从基础语法到实践应用,包括了编程的基本元素、控制结构、面向对象编程的...

    DELPHI初学入门教程及小技巧应用

    总之,通过这个DELPHI初学入门教程及小技巧应用的资源,你可以逐步建立自己的DELPHI编程基础,从而在软件开发领域中迈出坚实的第一步。记得持续学习和实践,DELPHI的强大功能将为你打开新的开发视野。

    C++语言基础教程课后答案 吕凤翥著

    在C++语言的学习旅程中,吕凤翥编著的《C++语言基础教程课后答案》为广大学子提供了一套完备的...通过对这些习题的解答和练习,学习者可以在编程领域迈出坚实的第一步,并为进一步深入学习和实际开发打下坚实的基础。

    代码_soapyv7_python_facinggkc_

    【标题】"代码_soapyv7_python_facinggkc_" 暗示了这是一个与Python编程相关的项目,可能是一个教学实例...对于初学者,理解Python的基础知识和实践应用是关键,这将有助于他们在计算机科学的道路上迈出坚实的第一步。

    跟我一起学python-all1

    ”程序,我们迈出了学习Python的第一步。但这只是开始,Python的世界非常广阔。它有着丰富的第三方库,覆盖了从网络编程到数据分析的各个方面。例如,NumPy和Pandas库为数据科学提供了强大支持,Django和Flask框架则...

    编程语言中的Hello World数据集.zip

    " 是一个经典的入门示例,它标志着新手程序员向编程迈出的第一步。这个"编程语言中的Hello World数据集.zip"很可能是为了教学或研究目的而设计的一个集合,包含了多种编程语言实现的"Hello, World!"程序。数据集的...

    小猫大战V3.0_小猫大战_scratch_

    这款小游戏的创建,无疑是制作者在编程世界迈出的第一步,体现了其对编程学习的热情与探索精神。 Scratch编程语言使用积木式的编程块,通过拖拽、组合这些块,用户可以构建出各种指令和函数,实现程序的运行。在...

    TitaniumMobile开发跨平台iOS和Android应用

    完成Hello World程序标志着你已经迈出了使用Titanium Mobile开发的第一步。接下来可以探索更多高级功能,如网络请求、数据存储、动画效果等。 #### Titanium Studio工作环境 Titanium Studio不仅是一个集成开发...

    java初学者学习源码

    这个"java初学者学习源码"压缩包提供了一套宝贵的资源,帮助新手在Java编程的道路上迈出坚实的第一步。下面将详细介绍Java学习的一些核心知识点,以及如何利用这些源码进行有效的学习。 1. **基础语法**:Java的...

    Android程序员入门开发宝典

    《Android程序员入门开发宝典》是一本专门为初学者设计的指南,旨在帮助那些对...阅读“Android程序员入门.pdf”和“资料说明.txt”,结合“Readme-说明.htm”的指导,相信你将在Android开发领域迈出坚实的第一步。

    --Courses--:该存储库包含我在编程过程中修读的所有课程的所有工作。 这些课程和问题来自我的学习机构,所有解决方案都是我的!

    通过对Java的介绍,您将迈出软件开发事业的第一步,这是最热门的编程语言之一,也是Android操作系统的基础。 专为初学者设计的本专业课程将教您核心编程概念,并使您能够编写解决复杂问题的程序。 此外,您还将获得...

    Introduction-to-Anaconda-and-Python-Installation-a.pdf

    ### 关于Anaconda与Python安装入门 #### 引言 Python作为近十年来最流行的...希望这些信息能帮助您在学习Python的道路上迈出坚实的第一步。如果您在学习过程中遇到任何问题,都可以借助强大的Python社区资源来解决。

    对Java语言入门初学者的一些建议

    ### 对Java语言入门初学者的一些建议 ...通过以上步骤,你已经成功迈出了学习Java的第一步。接下来的关键在于持续学习和实践。记住,编程是一个不断学习和迭代的过程,随着经验的积累,你会越来越熟练。

    [自己动手编游戏].张瑞琪.卿文模

    《自己动手编游戏》是由张瑞琪和卿文模共同创作的一本面向初学者的游戏编程图书,旨在引导读者通过实际操作来...通过这本书,读者不仅可以学到编程技能,还能了解到游戏开发的全貌,从而迈出成为游戏开发者的第一步。

    Beginning.XNA.2.0.Game.Programming

    **:这段话明确指出本书将指导读者如何迈出创建Xbox 30和Windows游戏的第一步,强调了书籍的实际应用价值。 #### 关键知识点详解 1. **XNA框架简介**: - XNA是一套由微软提供的跨平台游戏开发工具,主要用于开发...

Global site tag (gtag.js) - Google Analytics