Java编程思想的学习(一)

对象导论

1、每个对象都是一个接口

  * 所有对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分,程序中使用基本关键字class来引入新的类型。

  * 在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中,这就是关键字class的由来。

  * 银行出纳问题中,出纳、客户、账户、交易都可以在计算机程序中被表示成为一的实体。这些实体就是对象,每个对象都属于定义了特性和行为的某个特定的类。

  * 我们在面向对象程序设计中实际上进行的是创建新的数据类型,但事实上所有的对象程序设计语言都使用class这个关键字来表示数据类型。当看到类型一词时,可将其作为类来考虑,反之亦然。

  * 任何程序都是你所设计的系统的一种仿真,面向对象技术的应用确实可以将大量问题很容易的降解为一个简单的解决方案。

  * 某些对象都只能满足某些请求,这些请求是有对象的借口所决定的。

  * 接口确定了对某一特定对象所发出的请求。

2、每个对象都提供服务

   * 在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象成“服务提供者”。

  * 程序本身将向用户提供服务,他将通过调用其他对象提供的服务来实现这一目的。

  * 将对象看作一个服务提供者,有助于提高对象的内聚性。

  * 高内聚 是软件设计的基本质量要求之一,这意味着一个软件构件(例如一个对象,,也有可能是指一个方法或一个对象库)的各个方面“组合”得很好。

3、被隐藏的具体实现

  * 程序开发人员按照角色分为类创建者客户端程序员

  * 客户端程序猿的目的是收集各种用来实现快速应用开发的类。类创建者的目标是构建类。这种类只向客户端程序猿暴露必须的部分,而隐藏其他部分。

      原因在于隐藏的部分通常代表对象对象内部脆弱的部分,他们很容易被粗心的或不知情的客户端程序猿所毁坏,因此将实现隐藏起来可以减少程序bug。

  * 访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。

4、复用具体实现

  * 最简单的复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象至于新的类中。

  * 在使用现有的类和成新的类,这种概念被称为组合。如果组合是动态发生的,那么它常被称为聚合。

  * 组合被视为“has-a”(拥有)关系。

5、继承

  * 继承的效果就是,以现有的类为基础,复制它,然后通过添加和修改这个副本来创建新类。

  * 当源类(基类、超类、父类)发生变动时,被修改的“副本”(导出类、继承类,子类)也会反映出这个变动。

6、伴随多态的可互换对象

  * java多态的一个特性,把一个对象不当做它属的特定类型来看,而是把它看成一个基类的对象来看,使得我们写出不依赖特定类型的代码。

  * 我们并不想知道方法哪一段代码被执行,绘图方法等同地应用于三角形,四边形等对象,而且对象会已经自身的具体类型来执行恰当的代码。

  * 非面向对象编译器函数引用所谓的前期绑定意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被指定的代码的绝对地址。

  * 面向对象程序设计语言使用后期绑定的概念。当想对象发送请求时,对调用的代码直到执行时才能确定,编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查,但并不知道将被执行的确切代码。

package demo;

public class Shape {
    public void draw(){
        System.out.println("shape绘画");
    }
    public void wipe(){
        System.out.println("shape擦除");
    }
    public void dosomething(Shape shape){
        shape.draw();
        shape.wipe();
    }
}
public class rectangle extends Shape {
    public void draw(){
        System.out.println("rectangle绘画");
    }
    public void wipe(){
        System.out.println("rectangle擦除");
    }
}
public class TestShap {
    public static void main(String[] args) {
        rectangle rec=new rectangle();
        rec.dosomething(rec);   
    }
}

  输出结果:

rectangle绘画
rectangle擦除

 

posted @ 2018-11-12 12:10  console.log('宇航')  阅读(543)  评论(1编辑  收藏  举报