人们所能够解决的问题的复杂性直接取决于抽象的类型和质量
抽象类型:把问题抽象成了什么(元素)
抽象质量:元素的层次与关系(关联)
传统编程语言的缺点:
依赖解空间域的环境(计算机),基于计算机结构,不是基于问题的结构。
必须在解空间(机器模型)与问题空间(问题模型)之间建立起映射关系。
有部分语言是专门对问题空间进行建模而设计。但专业领域依赖性太强,无法通用。所抽象的类型过于局限性。
面向对象的优点:
不受限于特定类型。通用性更强。
对象:具有状态,行为,标识
状态:对象在任何时刻都存在自己特定形态(对象本身就是一个数据和行为的携带者)
行为:对象都有改变自己的形态和为其它对象提供服务的操作行为(对象都自己的能力都非常了解)
标识:对象在其所在的世界或领域内都是唯一被标识的
万物皆对象:OO将所有存的事物(实体或概念)都当作一个特定的对象。
程序是对象的集合:OOP将对象按某种关系组合在一起,形成一个具有一定逻辑和存储数据的代码集合体。
每个对象都有自己的由其他对象所构成的存储:一个对象可能是其他的对象的组合。就像生物是由细胞组成,而细胞是包含细胞核一样。这样
包含对象能够使用被包含对象的所有数据和行为。
每个对象都有其类型:每一个对象都对映着一个实体。而每个实体都存在一个概念上的描述。这个描述就是对象的类型。根据描述环境和角度的不同,多个不同可能相似的对象可以拥有相同的描述,即多个对象属于同一个类型。根据这个类型,可以创建该类型的特定对象。对象拥有其所对象类型所描述的行为和数据。
某一个特定类型的所有对象都可以接收同样的消息:对于由同一个类型所创建的所有特定对象,都拥有类型所描述的相同行为。
对象接收消息的理解:除了改变自己状态以外,对象存在的价值就是为其它对象提供服务。提供服务体现在对象所具体的行为上。一个对象A为另外一个对象B提供服务时,我们可以认为B在向A请求提供服务的消息,而A在接收B所请求的服务的消息。