面向对象的关键要素就是类和消息,类是结构,消息是行为,举个例子:
public class MyClass { public void MyFunction(){} } public class Program { public static void Main() { MyClass myClass=new MyClass(); myClass.MyFunction();//此处就是通过MyFunction给MyClass发送消息。 } }
消息就是对象方法的一次调用。我觉得用消息不太贴切,会让人产生困惑。
可心理解为方法的调用吧
消息是要包含接收和发送方信息的,一般事件触发是发送消息,对象行为执行就是方法调用。
各有各的理解 我的理解是:消息就是在对象之间传递的信息
面向对象是一种模拟的态度
所以与语言无关, 不要把一切都扔到具体实现上。
具体来说, 编程其实和写历史是一样的。
唯一的不同是历史写的是过去, 程序写的是未来。
历史书早期有编年体, 我们知道, 编年体的特点就是:对时间掌握的非常好
我们可以很轻易的知道先发生什么, 后发生什么, 等等。
慢慢的, 随着历史舞台登场的人物太多, 同一年有过多的事情发生, 而很多事情要跨越很多年才能看出影响。
所以慢慢的, 纪传体就流行了。他们主要记录每一个人的一生。 读者只要不断的读一个个人物的传记, 慢慢就理解了整个历史。
这样有几个好处:
1 读者可以在没有彻底读完整本书的情况下, 慢慢的一点一点理解整本书的内容。
2 如果作者后来发现有写错的地方, 比如有一天发现历史资料里忽然多了一段故事, 只要将某个人的记录更新下即可。 而不用动整本书。
具体到编程上, 纪传体就是面向过程。 当项目庞大的时候, 读起来麻烦, 有问题的时候维护起来麻烦。
而面向对象就是纪传体。
那么纪传体里面就会有人物, 有人物的相互影响对不对?
这个就是所谓的对象和消息。
比如诸葛亮对王朗说: 我x你大爷
王朗死了。
那么诸葛亮说的这段话就是一个消息。
消息如何传递, 怎么实现这都不重要。 但是有了消息之后, 对象将不再是孤立的对象。
因为孤立的对象是不可能影响历史的。
具体来说, 每个类上都有Method, 那么Method算不算消息呢?
可算也可不算。 这取决与是什么Method
比如:
诸葛亮.骂(王朗);
这个骂的操作会对王朗产生影响。 所以你就可以认为是消息。
反过来
王朗.卒();
这个就很难说是消息。 比如卒这个函数就相当于析构函数。 析构函数怎么说都不算消息对不对?
不过反过来说面向对象这是个理论上的东西, 所以也不用纠结的太死。
不能因为“面向对象”就一点“面向过程”都没有。 实际上只是描述方式不同而已。
计算机还是一个指令一个指令的跑的。
就像世纪, 我们说它是纪传体, 本纪世家列传各篇里面哪个不是按时间顺序跑下来的?
只不过第一顺序是人, 第二顺序是时间而已。
反过来说C语言, 难道里面就没对象了么?
其实每个struct你说他是对象一点都没错啊!
以上是个人理解, 如果错误(例如与xx教材观点不一致)大家千万不要喷我啊。。。。