ch1 对象入门:
面向对象是一种抽象的进步,使得我们编程时候更多的是考虑问题本身,而非计算机的结构。面向对象的思想中,万物皆对象,都封装着各自的属性和行为。每个程序都是一组对象的组合,他们之间可以相互调用对方的方法完成协作,进而组合出各种强大的功能。每个对象都属于一个类,并且每个对象都能够接受从父类类型继承过来的的所有方法调用。
有两方面的原因促使我们控制对成员的访问。第一个原因是防止程序员接触他们不该接触的东西—— 通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。我们 向用户提供的实际是一种服务,因为他们很容易就可看出哪些对自己非常重要,以及哪些可忽略不计。 进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。例如,我们最开始可能设计了一个形式简单的类,以便简化开发。以后又决定进行改写,使其更快地运行。若接口与实现方法早已隔离开,并分别受到保护,就可放心做到这一点,只要求用户重新链接一下即可。
编程中,应该尽量使用更加灵活的聚合关系而非继承关系,可以将成员对象设为私有的,这样就可以任意替换该成员变量,且对使用聚合后的对象的客户程序隐藏这个细节。
在继承关系中,子类既可以改善从父类得到的接口,这样就得到一种等价的关系:任何对父类的方法调用都同样适合于子类;也可以增添新的接口,这样就得到一种类似的关系:拥有父类类型的对象,并不能够调用子类新添加进去的接口,因为子类添加的接口并没有通知父类,仅仅是子类继承了父类,而非父类继承了子类。
我们可以把需要的功能作为接口添加到父类中,然后所有的子类对象都当作父类对象来处理。这样,我们就可以只与那一个父类对象打交道,统一了对所有子类对象的使用。这样,即使添加了新的子类,客户程序仍然可以以原来与父类打交道的方式继续正常运行,而不需要因为子类的变化而做修改访问接口,因而程序具有了更好的灵活性。这种子类当作父类来处理的方式称为“向上转型”。这时,当调用一个对象的方法时候,并不能够确定那个对象的准确类型,但是运行后却调用那个具体类型的方法,这就是多态。
设计程序的时候,也许我们仅仅想抽取出来一系列方法,但是把具体实现放到他的子类中,这样我们就可以抽象出来的方法放在用abstract或者interface修饰的父类或者接口中。
当我们遍历集合中的元素时候,可以使用iterator接口隐藏不同集合的实现细节,进而可以使不同集合灵活的替换。
面向对象的分析设计步骤:需求分析和约束制定;uml图设计出所有对象及他们的相互关系;编码;维护
版权声明:本文为博主原创文章,未经博主允许不得转载。