面向对象编程(OOP)的理解

Java是面向对象的编程,刚开始还有点不太习惯。记得在lab2中,老师给的test检查的是两个集合类及其中元素,我的代码却是新建了相同内容的元素并添加到新集和中,导致怎样都无法通过test。现在想想真蠢啊。
相关内容:java编程思想第1、2、5章
本节开头有句话:“所有编程语言都提供抽象机制,可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型和质量。”这里的类型是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象,C语言(命令式语言)是对汇编语言的抽象。这些语言所作的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决的问题的结构来考虑。这样的话,建立机器模型和问题模型的花费很大。
面向对象这种编程方式使我们收到的限制更少了。我们将问题空间中的元素及其在解空间中的表示称为对象。这种思想的实质是 :“程序可以通过添加新类型的对象使自身适用于某个特定问题。”
Alan Kay曾总结了Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象编程:

  1. 万物皆为对象。理论上讲,可以抽取待解问题的任何概念化构件并将其表示为程序中的对象。
  2. 程序是对象的集和,他们通过发送消息来联系。
  3. 每个对象都有自己的由其他对象所构成的存储。
  4. 每个对象都拥有其类型。即每个对象都是某个类的一个实例。
  5. 某一特定类型的所有对象都可以接受同样的消息。(可替代性)

Booch对对象更简洁的描述:对象具有状态、行为和标识。这意味着每个对象都可以拥有内部数据(状态)、方法(产生行为),并且都可以唯一地与其他对象区分开来。
所有对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分。
对象被new出来之后,有五个地方可以存储数据:

  1. 寄存器。对程序员透明(在程序中感觉不到它的存在),运行最快但数量有限,按需分配,不能直接控制。
  2. 堆栈。位于通用RAM中。对象的引用一般放这,但对象不存储在这。
  3. 堆。通用的内存池,也在RAM中。存放所有的java对象。
  4. 常量存储。常量值通常直接放在代码内部。
  5. 非RAM存储。数据活在程序外面。

特例:基本类型,直接放在堆栈中,更高效。
此外,java有垃圾回收器,监视new出来的所有对象,并辨别那些不会再被引用的对象,随后释放这些对象的内存空间。这样可以防止“内存泄漏”。
Java中this表示对“调用方法的对象”的引用,若在方法内部调用同一个类的另一个方法,无需使用this。此外,要返回对当前对象的引用时,可以直接return this。
当你为一个类写了多个构造器并想在一个构造器中调用另一个时,可以用this实现。
java还有个关键字static,很好用。但有观点认为static不是面向对象的,因为他们有全局函数的语义。

你可能感兴趣的:(软件构造)