对象导论:
我们之所以将自然界分解,组成各种概念,并按其意义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,整个协定以语言的的形式固定下来.....除非赞成这个这个协定中规定的有关闭语言信息的组织和分类,否则我们根本无法交谈
抽象过程:
所有编程语言都提供抽象机制 就是将所有问题 在空间建模 将问题抽象到对象的类型和质量 我是做C#和Java出身的 没有对C语言以及汇编语言进行深入的学习
C#和Java的底层都是C/C++来编写的 也就是Java是C/C++的抽象 在Java中被屏蔽的安全问题空指针在C、C++就被处理了 增加了Java的安全性
早期的编程语言都是为了解决某些特定的问题 限制性很大 针对这个弊端 才慢慢衍生出面向对象的方式 提供便是问题空间的元素的工具 作为使用者 解决我们自己 问题 将不会受限于任何特定的问题,接下来的文字 说的通俗点就是说 每个问题的类型都是互不依赖的个体 是对现实世界中的问题的模拟 这样说起来 理解起来就 不那么抽象了
Alan Kay(ta 是美国计算机科学家 我也不认识 谁知道呢)率先总结出什么是面向对象
1、万物接对象 在自然界中一块石头 一棵树都有自己特征 有可以解决的问题属性 比如 石头 大树 小狗都可以作为解决问题的构件
2、程序是对象的集合 他们通过发送消息来告知彼此所要做的事 我们想要程序运行起来 就是一个类型的对象去调用另一个类型的对象的行为
3、每个对象都有自己的由其他对象所构成的存储 换句话说 就是 在我自己创建的对象中 也可以包含我错转的其他类型的对象 可以相互包含 作为组成部分
4、 每个对象又拥有其类型 这里真不知道怎么解释了 按照书上的通用说法:每个对象都是某个类(class)的实例 每个对象的类都有自己的class文件 在编译 时在内存中是独一份的 (想起来 武林外传中 钱掌柜定做月饼 跟李大嘴说 天下独一份的 结果就是个馒头 嘿嘿)
5、某一特定类型的所有对象都可以接受同样的消息 就是一个基类的所有子类 都可以使用父类中定义的非private修饰的变量 方法 同时 其他对象发送给父类的消息也就是调用父类的方法 如果子类重写(覆盖)了 那么就会调用子类的 也就是 子类也可以接收到发送给父类的消息
*******booch 对对象提出来更加简洁的描述 对象具有状态、行为和标识 这是说 每个类自己具有自己的属性和方法 想要调用这类里面的东西 就必须实例化这个类 的对象(instance)
(类是对象的模板 对象是类的具体实现)
每一个对象都有一个接口:
在这之前还没有接口的定义做过多的说明 这里先模糊的说一下 就是要对某一特定的行为作出规范化的定义 比如 在屏幕上画画 首先定义屏幕 在定义画笔 在进行一系列逻辑的编排 是得程序成功运行
书上定义的很抽象 :接口确定了对某一特定对象所能发出的请求 其实就是一个类中定义的属性和方法是为了某一个接口而定义的
public class Light {//灯泡类 private void on(){} //开灯的方法 private void off(){}//关闭的方法 private void brighten(){}//调亮 private void dim(){};//调暗 }
Light lt=new Light();对象 it就是 Light类的实例对象 只有lt知道 在接受的消息中 该去调用自己的哪个方法
每一个对象都提供服务:
这部分可以概括为 我们每次接手一个新的任务或者项目时 都先去想 在现实世界中如果要去完成这件事需要什么东西(对象) 这个东西有什么功能 可以提供给我什么样的解决方案 这样将每个问题的分解成多个对象的方法时 就会发现问题得以更容易的去解决(当然 这中思想对于初级开发者开说 还是比较困难 需要长时间的转换 开习惯这种思考模式 ) 这部分涉及到了设计模式 良好的面向对象设计能提高开发效率和代码的复用率