1.1抽象的过程
为什么要抽象:提高开发效率,降低后期的修改维护成本,以人类的思维代替计算机思维去编程。
samalltalk 的五个基本特征
万物皆对象。 OOP
程序就是一组对象,对象间通过消息相互通知做什么。 接口
每个对象都有他自己的由其他对象构成的储存区。 继承 组合
每个对象都有一个类型。 这个类型就是未实例化的类。
一个特定类型的所有对象都能接受相同的消息。 因为拥有相同的接口,或者通过创建对象,或者通过继承。
1.2对象都有一个接口
类是描述了一类相同特征和相同行为的功能的对象。
例如
Class Person
{
Person
{
特征:四肢五官,生下来就有的。
}
行为1()
{
}
行为2()
{
}
listern(接口)// 语言等等
{
if()
//执行的行为1
elseif
//执行的行为2
...........................
}
};
Person men
Person women
这里面 实例的两个对象存在性别的差异,所以这里要 要用到多态(构造函数的参数类型不同 ,个数不同的同名函数)
首先这个类存在的合理性,有着相同的特征 和相同的行为,就像人都有四肢五官(此为特征),能哭能笑,能打能闹(即行为)。
对于接口 可以体现在语言,文字,肢体语言,一个正常的非文盲都能接收到这个接口传递过来的信息。
接口规定了我们能向特定的对象发出什么样的请求,就像人听不懂鸟语,猫叫一样。
1.3实现的隐藏
做为一个程序的设计者,只会提供接口给客户程序员,不会提供内部的实现细节和数据。
好处 作为客户程序员不需要了解内部细节,只需要知道接口如何应用即可,大大的降低客户程序员的开发难度,就像我们开发程序用C++,只要把iostream的头文件包含进来,就可用cout cin 一样,我们不需要知道cout是如何实现只要知道如何用就可以向屏幕输出文字,如果把实现暴露给我们,我们不小心外部操作改变了它的实现部分,以后我们再用这些函数 就有可能出现不可意料的事情。
1.4实现的重用
继承:不仅继承了父类的数据,也继承了父类的方法,如果想要子类有其他的特征,方法,在子类中添加相应的特征和方法就好,不必把父类实现的部分再写一遍。
1.5继承 接口重用
缺点是 如果父类做了修改,子类的行为 ,特征也发生了变化。
1.6 具有多态的可互换对象
覆盖和替换
父类和子类中都存在相同的行为, 子类实例化的对象调用这个行为的过程实际是调用了子类的行为,这个过程是替换。
如果父类声明这个行为是虚函数 ,子类实例化的对象调用这个行为的过程实际是调用了子类的行为,这个过程是覆盖。
1.7对象的创建和销毁
第一种实是栈上创建对象 ,编译器根据程序自动创建和销毁对象
第二种是在堆上创建对象,new 出来的对象 编译器不知道什么时候销毁,所以要程序眼显式的用delete 去销毁这个对象。