软件是通过用计算机处理现实世界的事情,如科学计算、信息管理等。现实世界是复杂而多变的,如何准确理解现实世界是比较困难的?而且软件设计和开发人员大多数不熟悉相关领域,主要是通过相关领域的专业人员描述获取的,这样又涉及到专业人员描述和软件设计人员的理解,实施过程中经常出现理解上的差异。而且任何领域的业务都是在不断变化的,这实际上决定了软件开发的复杂性。
针对软件设计和开发的特性,出现了很多软件设计的方法,如结构化设计和开发。但是结构化设计和开发主要是关注问题的逐级分解,并不能完全反映设计人员对现实世界的理解。这样出现了面向对象的设计和开发,将现实世界进行抽象和分层,人类同时能够处理的问题在7+2左右,通过分层结构可以将问题分解在容易处理的范围之内。抽象的概念接近人类对现实世界的理解,针对不同的用户提供了不同的视图,逻辑视图可以帮助工程师思考组件间的关系;物理视图可以帮助部署人员关注系统的部署。