最早在学习面向对象的分析与设计时,也研究了很多的教材,有讲OO 基本概念
的,如什么是类,面向对象的基本特点等;也有讲面向对象的设计原则
的,比如单一职责,开放封闭,接口隔离... ....;当然不可能不去学习设计模式
啦。但最终理论学了一大堆,在实践时,还是觉得不知从何下手,有点雾里看花的感觉。
(这里讲到了学习OO 的最好路线,先学概念,再学设计原则,最后才是设计模式)
后来我突然意识到,做系统设计虽然可以理解为艺术,但根本上它不过是个技术活,没那么玄乎的。而技术活是一定要去实践的,不能被概念吓到,相信熟能生巧。
我写这篇文章是希望帮那些刚开始学习OO 的人早点下手,少走弯路,大牛请华丽地飘过。
首先讲讲分析和设计的区别,简单的讲,分析是针对问题域的,设计是针对解域的,也就是说分析是为了更好地理解需求和待解决的问题,而设计才是解决方案。这个不是重点,Pass.
那怎样面向对象设计呢?
其实,下手很简单,掌握以下两个中心就好了,面向对象的设计的核心不过是:
- 识别类
- 分配职责
还是很抽象?别急,听我慢慢解释,
怎样识别类呢,类有三种,实体类,边界类和控制类。
实体类是指需要长时间保留下来的信息,通常会做持久化处理,一般来讲,用例中的名词都可以被识别为实体类(或者实体类属性)。
边界类负责处理Actor/System 之间的交互,通常是输入/输出等。
控制类负责处理一些复杂的运算和算法等,一些较为复杂的处理都可以识别为控制类,同时,控制类还需要协调(控制)其他的类一起工作。
分配职责又是怎么回事呢?
所谓的职责,就是系统需要完成的事情。具体来讲,用例中系统要处理的步骤就是系统的职责,比如常见的CRUD 操作。这些操作都要适当的分配给上面找出来的类。
以上讲的可能还是很抽象,怎么办呢。很简单,我是莽汉我怕谁,不知道就硬上了,哈哈。管它三七二十一,先按照自己的理解识别一堆类,写一堆的方法实现了用例再说。
你可能会说,这样不好吧。可不好的标准是什么呢,就是不符合前面说到的设计原则
。不好怎么办呢,按照设计原则
或者是使用适当的设计模式重构
啊。
对于设计来说,没有最好,只有更好。还有,只要你敢干,啥事儿也不难。
最后,谈谈我对面向对象的理解。
对于任何的新概念或是方法论,我们首先要把握住其根本的价值所在,其次是了解实现这个价值而需要遵循的原则和策略,最后才是手段。
面向对象的分析和设计也是一样,
- 根本的价值在于提高软件的复用性,可维护性和可扩展性,更好的适应业务的变化。
- 为了实现这个目标,设计时就必须遵循相关的设计原则,比如单一职责,开放封闭,接口隔离,里氏替换,依赖倒置... ...
- 最后才是设计模式,这些模式都是符合设计原则的最佳实践了。
所以才会推荐上面提到的学习顺序,先原则,后模式,否则可能就是本末倒置,甚至落入为了模式而模式的怪圈,效果可能就不好了。
PS:推荐两本书给大家
《UML 和模式应用》
《系统分析与设计方法》
分享到:
相关推荐
在软件开发过程中,需求分析是至关重要的第一步,它直接影响到软件设计的合理性和开发的可行性。为了更准确地捕捉和描述软件的需求,统一建模语言(UML)提供了一系列的模型图,其中用例图是最为基础和直观的一种。...
本书很可能是面向初学者的入门书籍,旨在帮助读者迈出使用Flex进行开发的第一步。Flex 2是Flex平台的一个主要版本,它的出现意味着开发者可以创建更为复杂和功能丰富的交互式应用。基于ActionScript 3.0的Flex 2应用...
面向对象编程(OOP)是Python的一大亮点。你将了解到类和对象的概念,以及如何通过继承、封装和多态来设计和实现复杂的程序结构。 在实际项目中,数据分析和科学计算也经常使用Python。Python提供了丰富的库,如...
- **未知恐惧**:对未来的不确定性也是导致很多人无法迈出第一步的重要原因。 - **担心拒绝**:面对可能的拒绝,人们往往会退缩。 **2. 积极心态的重要性** - **自信与沉着**:拥有积极的心态可以帮助我们在约会...
安装Python是开始使用这门语言的第一步。一般来说,Python可以跨平台运行在Windows、Mac OS X和Linux等操作系统上。Python的官方网站提供了不同版本的安装包,允许用户根据自己的操作系统下载并安装适当的版本。 ...
它是学习任何编程语言时迈出的第一步,帮助初学者理解如何将代码与实际运行的应用关联起来。 综上所述,这些源代码涵盖了C#语言的学习过程,从基础语法到实践应用,包括了编程的基本元素、控制结构、面向对象编程的...
总之,通过这个DELPHI初学入门教程及小技巧应用的资源,你可以逐步建立自己的DELPHI编程基础,从而在软件开发领域中迈出坚实的第一步。记得持续学习和实践,DELPHI的强大功能将为你打开新的开发视野。
在C++语言的学习旅程中,吕凤翥编著的《C++语言基础教程课后答案》为广大学子提供了一套完备的...通过对这些习题的解答和练习,学习者可以在编程领域迈出坚实的第一步,并为进一步深入学习和实际开发打下坚实的基础。
【标题】"代码_soapyv7_python_facinggkc_" 暗示了这是一个与Python编程相关的项目,可能是一个教学实例...对于初学者,理解Python的基础知识和实践应用是关键,这将有助于他们在计算机科学的道路上迈出坚实的第一步。
”程序,我们迈出了学习Python的第一步。但这只是开始,Python的世界非常广阔。它有着丰富的第三方库,覆盖了从网络编程到数据分析的各个方面。例如,NumPy和Pandas库为数据科学提供了强大支持,Django和Flask框架则...
" 是一个经典的入门示例,它标志着新手程序员向编程迈出的第一步。这个"编程语言中的Hello World数据集.zip"很可能是为了教学或研究目的而设计的一个集合,包含了多种编程语言实现的"Hello, World!"程序。数据集的...
这款小游戏的创建,无疑是制作者在编程世界迈出的第一步,体现了其对编程学习的热情与探索精神。 Scratch编程语言使用积木式的编程块,通过拖拽、组合这些块,用户可以构建出各种指令和函数,实现程序的运行。在...
完成Hello World程序标志着你已经迈出了使用Titanium Mobile开发的第一步。接下来可以探索更多高级功能,如网络请求、数据存储、动画效果等。 #### Titanium Studio工作环境 Titanium Studio不仅是一个集成开发...
这个"java初学者学习源码"压缩包提供了一套宝贵的资源,帮助新手在Java编程的道路上迈出坚实的第一步。下面将详细介绍Java学习的一些核心知识点,以及如何利用这些源码进行有效的学习。 1. **基础语法**:Java的...
《Android程序员入门开发宝典》是一本专门为初学者设计的指南,旨在帮助那些对...阅读“Android程序员入门.pdf”和“资料说明.txt”,结合“Readme-说明.htm”的指导,相信你将在Android开发领域迈出坚实的第一步。
通过对Java的介绍,您将迈出软件开发事业的第一步,这是最热门的编程语言之一,也是Android操作系统的基础。 专为初学者设计的本专业课程将教您核心编程概念,并使您能够编写解决复杂问题的程序。 此外,您还将获得...
### 关于Anaconda与Python安装入门 #### 引言 Python作为近十年来最流行的...希望这些信息能帮助您在学习Python的道路上迈出坚实的第一步。如果您在学习过程中遇到任何问题,都可以借助强大的Python社区资源来解决。
### 对Java语言入门初学者的一些建议 ...通过以上步骤,你已经成功迈出了学习Java的第一步。接下来的关键在于持续学习和实践。记住,编程是一个不断学习和迭代的过程,随着经验的积累,你会越来越熟练。
《自己动手编游戏》是由张瑞琪和卿文模共同创作的一本面向初学者的游戏编程图书,旨在引导读者通过实际操作来...通过这本书,读者不仅可以学到编程技能,还能了解到游戏开发的全貌,从而迈出成为游戏开发者的第一步。
**:这段话明确指出本书将指导读者如何迈出创建Xbox 30和Windows游戏的第一步,强调了书籍的实际应用价值。 #### 关键知识点详解 1. **XNA框架简介**: - XNA是一套由微软提供的跨平台游戏开发工具,主要用于开发...