Skip to content

Summary of OOP

从面向过程到面向对象

有了AbstractionLanguage的概念,再来阅读Thinking-in-java中OO理论的说明就非常容易了。

我们使用语言来描述这个世界,面向过程语言如c,使用一个一个过程。面向对象语言更加expressive,能够更好地描述抽象概念,类的继承关系和概念之间的关系。更加易于理解。

从programming language发展史来看,语言越来越容易理解,越来越expressive。

对问题的描述(使用class来描述concept),对问题的求解(一个一个的object之间的交互)。

将对象看做是一个computer、service provider、一个独立的个体,则整个使用OO实现的就是多个object之间的交互了。

我们使用class来描述概念,对象是运行时的概念,运行时才会创建对象。

Python VS c++ 面向对象的实现

参见Programming language implementation

Python中一切皆对象,它的class是由对象来进行描述。Python中面向对象特性的实现:attribute lookup,__dict__。Python program会被翻译为byte code由interpreter来执行。

Python statement与bytecode之间的对应关系。

c++的面向对象由compile理解,最终都是要翻译为instruction的。

c++中的对象本质上是一片内存区域,在进行programming的时候,可以通过成员方法来操作这片内存区域,this指针指向这片内存区域。

c++并非一切皆对象。

run model都是:user-defined action是subroutine,使用self、this来指向object。

从type system来看,class就是一种type,是一种概念,一种抽象。

我们使用语言来描述世界,OO是一种更加强大的描述方式,但是使用OO编写的program的run model是一致的。

pcmag object-oriented programming

OOP Traditional Programming
class define data + processing
object data + processing
attribute data (a field)
method function
message function call
instantiate allocate a structure