面对过程编程(Procedure Oriented Programming)和面向对象编程OOP(Object Oriented Programming)的区别

面向过程就是分析出解决问题所需的步骤,然后用函数将这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象就是把构成问题的事务分解成各个对象,建立对象的目的地不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

面向过程

        优点:性能比面向对象高,因为类调用时需要实例化,开销大,比较耗资源。

        缺点:没有面向对象易维护,易复用,易扩展。

面向对象

         优点:易维护,易复用,易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

         缺点:性能比面向过程低。

面向对象的三大基本特征:

封装:把客观事物封装成抽象的类,隐藏属性和方法的实现细节,仅对外公开接口。

继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。

多态:接口的多种不同的实现方式即多态。同一操作作用于不同的对象,产生不同的执行结果。在运行时,通过指向基类的指针或引用来调用派生类中的虚函数来实现多态。

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的类。它们的目的都是为了代码重用。而多态则是为了实现接口重用。

 

抽象指仅表现核心的特性而不描述背景细节的行为。

抽取待求解问题的任何概念化构件,将其表示为程序中的对象。 

对象是类的实例(instance),而类是所有具有某一相同特征的对象的模板或集合。

对象具有状态,行为和标识,即每一个对象都可以拥有内部数据和方法,并且每一个对象都可以唯一地与其他对象区分开来,具体说来,就是每一个对象在内存中都有一个唯一的地址。

所有的对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分。

在程序执行期间具有不同的状态而其他方面都类似的对象会被分组到对象的类中。

每一个对象都属于定义了特性和行为的某个特定的类。

类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以类实际上就是一个数据类型

java用三个关键字在类的内部设定边界:public、private、protected。public表示紧随其后的元素对任何人都是可用的,而private表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素,protected与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。

新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。在使用现有的类合成新的类,所以这种概念被称为组合,也称聚合。

基类,超类或父类         导出类,继承类或子类

类型不仅仅只是描述了作用域一个对象集合上的约束条件,同时还有与其他类型之间的关系。两个类型可以有相同的特性和行为,但是其中一个类型使用基类型和导出类型的概念表示了这种类型之间的相似性。一个基类型包含其所有导出类型所共享的特性和行为。可以创建一个基类型来表示系统中某些对象的核心概念,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。

判断是否继承,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。

新类型具有旧类型的接口,但是它还包含其他方法。基类无法访问新添加的方法,这种情况可以描述为is-like-a(像是一个)关系。

     有两种方法可以使基类和导出类的行为不一致。第一种方法:直接在导出类中添加新的方法。第二种方法:改变现有基类的方法的行为(覆盖)。

 

has-a,is-a和is-like-a的关系

has-a:拥有关系。

is-a:继承过程中,子类仅仅是覆盖父类中的方法,则子类和父类的关系为is-a。

is-like-a:继承过程中,子类有新增的方法,则子类和父类的关系为is-like-a。

对象的创建和生命期

第一种:通过将对象置于堆栈(它们有时被称为自动变量(automatic variable)或限域变量(scoped variable))或静态存储区域内来实现。这种方式将存储空间分配和释放置于优先考                  虑的位置,某些情况下这样控制非常有价值。但是,也牺牲了灵活性,因为必须在编写程序时知道对象确切的数量、生命周期和类型。

第二种:在被称为堆(heap)的内存池中动态地创建对象。直到运行时,才知道对象的数量、生命周期和具体类型。因为存储空间是在运行时被动态管理的,所以需要大量的时间                   在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间。在堆栈中创建存储空间和释放存储空间通常各需要一条汇编指令即可,分别对应将堆栈指针向下移            动和将栈顶指针向上移动。

Java完全采用了动态内存分配方式。

Java的垃圾回收器被设计用来处理内存释放问题(尽管它不包括清理对象的其他方面)。垃圾回收器知道对象何时不再使用,并自动释放对象占用的内存。

创建堆存储空间的时间依赖于存储机制的设计。

 posted on 2018-04-02 21:38  会飞的金鱼  阅读(107)  评论(0)    收藏  举报