Presentation is loading. Please wait.

Presentation is loading. Please wait.

方林博士 fanglin1970@gmail.com http://www.popframework.net 面向对象的程序设计 方林博士 fanglin1970@gmail.com http://www.popframework.net.

Similar presentations


Presentation on theme: "方林博士 fanglin1970@gmail.com http://www.popframework.net 面向对象的程序设计 方林博士 fanglin1970@gmail.com http://www.popframework.net."— Presentation transcript:

1 方林博士 fanglin1970@gmail.com http://www.popframework.net
面向对象的程序设计 方林博士

2 Java面向对象的概念和机制 封装(Encapsulation) 继承(Inheritance) 引用(Reference)
重定义(Override) 接口 重载(Overload)

3 封装 public class Student { String name; String gender; int age;
public void setName(String name) { this.name = name; } public void addAge() { age++;

4 继承 public class CollegeStudent extends Student { String major;
public void setMajor(String name) { this.name = name; }

5 成员函数和成员变量(域)的区别 子类可以重定义父类的成员函数,不可以重定义父类的成员变量 成员函数可以是抽象的,成员变量不可以
抽象的成员函数可以出现在接口中,成员变量不可以

6 成员(函数和变量)与继承的实质区别 成员定义了对象之间的引用 (Reference)关系 继承定义了类之间的关系,而不是对象之间的关系。

7 接口(Interface) 接口的实质是一些函数声明(即函数头、抽象函数)的集合。 类实现一个接口意味着为接口中的函数定义函数体。
接口可以多继承(多实现),原因在于接口中的函数都是抽象的,没有函数体。一个类实现多个接口意味着为所有接口中的所有函数定义函数体。

8 善用以下机制表达你的思想 封装(Encapsulation) 继承(Inheritance) 引用(Reference)
重定义(Override) 接口 重载(Overload)

9 第一个例子:舞会问题 男孩和女孩们要到一个舞场跳舞,舞场的规定是: 只有配对的男孩和女孩才能进入舞场 一个男孩只能与一个女孩配对,反之亦然
没有配对的男孩/女孩必须在门口等待直到有一个女孩/男孩出现

10 舞会问题的同步解 Boy Girl Dance

11 Dance的设计 public class Dance { // 所有男孩都应该调用这个函数。这个函数
// 将返回与男孩配对的女孩。如果没有女孩与之配对, // 这个函数将阻塞到有一个女孩到来为止 public Girl dance(Boy boy) { } // 所有女孩都应该调用这个函数。这个函数 // 将返回与女孩配对的男孩。如果没有男孩与之配对, // 这个函数将阻塞到有一个男孩到来为止 public Boy dance(Girl boy) {

12 第二个例子:舞会问题的异步解 Dance一旦发现有男孩女孩可以配对就向二者分别发送通知

13 类关系图 Boy DanceMatchListener Girl Dance DanceMatchEvent

14 异步Dance类的设计 public class Dance { // 男孩调用这个方法进行注册
public void registerBoy(Object boy, DanceMatchListener listener) { } // 女孩调用这个方法进行注册 public void registerGirl(Object girl, DanceMatchListener listener) {

15 DanceMatchListener public interface DanceMatchListener{
void match(DanceMatchEvent evt); }

16 DanceMatchEvent public class DanceMatchEvent extends java.util.EventObject { Object getBoy(); // 获取配对的男孩 Object getGirl(); // 获取配对的女孩 Dance getDance(); // 获取舞场 }

17 Boy和Girl的设计 public class Boy implements DanceMatchListener {…} public class Girl implements DanceMatchListener {…}

18 异步Dance的算法 Dance内部为男孩女孩分别准备一个队列 Dance内部有一个线程对上述两个队列进行监控
监控线程一般情况下处于睡眠状态,一旦有男孩或女孩来注册就会被激活 监控线程被激活后就检查两个队列,男孩女孩可以匹配的话就发送通知。如果没有发现匹配就重新进入休眠

19 异步Dance的实现(略)

20 第三个例子:Java的Thread和Runnable
实现类还可以实现其他接口 可以在其他线程中使用同一个Runnable 对象 Thread

21 Thread和Runnable 的设计 public class Thread implements Runnable { public Thread() { …… } public Thread(Runnable runnable} { …… public void run() { …… } } public interface Runnable { void run();

22 第四个例子:分形图的绘制 Graph Picture Draw in Draw Element Line Recurse

23 谢谢大家 方林 fanglin1970@gmail.com 本文下载地址:http://www.popframework.net


Download ppt "方林博士 fanglin1970@gmail.com http://www.popframework.net 面向对象的程序设计 方林博士 fanglin1970@gmail.com http://www.popframework.net."

Similar presentations


Ads by Google