Think in OO(1)
2014-12-28 18:55
148 查看
1.抛出问题:
”老张开车去东北“ 这句话用面向对象的思想来实现。
2.首先可以抽象出司机类(Driver),汽车类(Car)(ps:后面会进一步完善),目的地类(Address)。
3.考虑每个类中应该有哪些属性:
(1)Driver类应该包括name.
(2)Car类先不说了,想到了再说。
(3)Address类也应该有个name(目的地名)。
4.考虑每个类应该有哪些方法:
(1)Driver类应该有个driver方法。
(2)Car类应该有个go方法。
(3)Address类后面想到再说。
5.因为Driver类和Address类中的name都是private所有都默认有对应的get和set方法。
6.其中Driver类和Car类联系起来是靠driver(Car car)方法。另外Car类和Address类联系起来是靠go(Address dest)方 法。
7.分析完毕代码展示:
Driver类:
Address类:
8.进一步分析,如果老张坐飞机去东北呢?那我是不是还得修改Driver类中drive(Car c) 为drive(plane p).感觉有点麻烦,没有扩展性,能不能降低一下耦合度,可不可以不修改Driver类。
9.利用面向对象的多态来提高代码的扩展性。(个人觉得没有多态的继承是没有意义的)
另外定义一个交通工具类:
Car类继承这个类并实现这个接口。当让Driver类中的driver(Car c) 改为driver(vehicle v)。
这样一改的的话管老张选择什么交通工具,我只需要让新定义的类继承Vihecle类,实现go接口就可以了,不需要去修改Driver中driver方法的参数了,因为父类引用指向子类对象。
10.修改如下:
Driver类:
测试类:
11.总结面向对象方法步骤
(1)考虑类(名词)
(2)属性(不可脱离具体的应用环境)
(3)方法
(4)类之间的关系
(5)隐藏(封装,降低耦合度)
(6)继承
(7)多态
ok,今天就聊到这里吧。
”老张开车去东北“ 这句话用面向对象的思想来实现。
2.首先可以抽象出司机类(Driver),汽车类(Car)(ps:后面会进一步完善),目的地类(Address)。
3.考虑每个类中应该有哪些属性:
(1)Driver类应该包括name.
(2)Car类先不说了,想到了再说。
(3)Address类也应该有个name(目的地名)。
4.考虑每个类应该有哪些方法:
(1)Driver类应该有个driver方法。
(2)Car类应该有个go方法。
(3)Address类后面想到再说。
5.因为Driver类和Address类中的name都是private所有都默认有对应的get和set方法。
6.其中Driver类和Car类联系起来是靠driver(Car car)方法。另外Car类和Address类联系起来是靠go(Address dest)方 法。
7.分析完毕代码展示:
Driver类:
public class Driver { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void drive(Car c) { c.go(new Address("东北")); } }Car类:
public class Car{ public void go(Address dest) { System.out.println("一路哼着歌,冒着烟,去了" + dest.getName()); } }
Address类:
public class Address { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Address(String name) { super(); this.name = name; } }主测试类:
public class Test { public static void main(String[] args) { Driver d = new Driver(); d.setName("老张"); d.drive(new Car()); } }
8.进一步分析,如果老张坐飞机去东北呢?那我是不是还得修改Driver类中drive(Car c) 为drive(plane p).感觉有点麻烦,没有扩展性,能不能降低一下耦合度,可不可以不修改Driver类。
9.利用面向对象的多态来提高代码的扩展性。(个人觉得没有多态的继承是没有意义的)
另外定义一个交通工具类:
public abstract class Vihecle { public abstract void go(Address dest); }提供一个接口。
Car类继承这个类并实现这个接口。当让Driver类中的driver(Car c) 改为driver(vehicle v)。
这样一改的的话管老张选择什么交通工具,我只需要让新定义的类继承Vihecle类,实现go接口就可以了,不需要去修改Driver中driver方法的参数了,因为父类引用指向子类对象。
10.修改如下:
Driver类:
public class Driver { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void drive(Vihecle v) { v.go(new Address("东北")); } }Car类:
public class Car extends Vihecle{ public void go(Address dest) { System.out.println("一路哼着歌,冒着烟,去了" + dest.getName()); } }
测试类:
public class Test { public static void main(String[] args) { Driver d = new Driver(); d.setName("老张"); d.drive(new Car()); } }
11.总结面向对象方法步骤
(1)考虑类(名词)
(2)属性(不可脱离具体的应用环境)
(3)方法
(4)类之间的关系
(5)隐藏(封装,降低耦合度)
(6)继承
(7)多态
ok,今天就聊到这里吧。
相关文章推荐
- Think_in_OO基础
- Think In OO
- Think In OO
- 《Think in Java》(十一)持有对象
- 读"Think in Java"后笔记(1)
- think in java-对象导论
- Think in Java(Java编程思想)-第2章 一切都是对象
- Think in visual shader proramming
- [think in java]知识点学习
- java编程规则(摘自《think in java》)
- Think in SharePoint 2010 OOTB Project: Site Columns & Site Content Type
- Think & Design in CSS, 再谈web 2.0时代的网页设计
- think in java interview-高级开发人员面试宝典(二)
- think in java - concurrency - ThreadLocal
- JAVA 复习(Think In Java, 4th)-- Holding Your Object
- think in google--think in 互联网系列2
- [Think in java]初始化及类的加载——继承与初始化
- OO in C(2): C语言的多态实现
- [置顶] think in java interview-高级开发人员面试宝典(八)
- Think in java 答案_Chapter 2_Exercise 11