`
遛遛遛
  • 浏览: 52428 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

面向对象设计(一)

    博客分类:
  • java
 
阅读更多

 

前不久参加了一个公司的面试,然后面试官问到了一个问题:如何理解java中的面向对象思想?

当时突然有点紧张,因为确实答不出来,就直接用Java中的集合框架拿出来展开了。因为框架的设计的很多,体现了面向对象编程的一面。

 

 

当时核心的问题问到了,为什么要采用面向接口编程这种模式? 因为其他的集合实现类都是继承自一个Collection借口,此借口中有一个方法叫做iterator(),返回一个Iterator对象,使用对象的hasNext() , next()方法来遍历集合中的元素,所有实现类都实现了这个方法。

 

下面来看2个程序的区别,这里就不用集合类来演示了。

 

程序一:

 

package com.OOD;

public class OOD {
	public static void main(String[] args) {
		toCall(new A());
		toCall(new B());
		toCall(new C());
	}
	
	
	public static void toCall(Object o) {
		if(o instanceof A) {
			A a = new A();
			a = (A)o;
			a.call();
		}else if(o instanceof B) {
			B b = new B();
			b = (B)o;
			b.call();
		}else if(o instanceof C) {
			C c = new C();
			c = (C)o;
			c.call();	
		}
		
	}
}

class A {
	public void call() {
		System.out.println("Call A");
	}
}

class B {
	public void call() {
		System.out.println("Call B");
	}
}

class C {
	public void call() {
		System.out.println("Call C");
	}
}
 

该程序有3个类:A,B,C

他们内部都有自己的call()方法,而这3个类没有一点联系,除了他们都继承自Object类。

 

在OOD类里面有一个方法,是用统一的一个toCall方法,调用传入的参数自己的call方法。

由于这3个类的联系仅仅只是都继承了Object,所以参数可以设置为一个Object类型,来接收不一样类型的对象。

当接受到一个对象时,首先先要判断这个对象是哪个类的实例,然后强制转换之后,才能正确的调用call方法(因为Object没有call这个方法,o是一个Object的引用)。虽然可以暂时解决问题,但是从设计的角度上来说,如果有新的类加入了,比如D类,那么需要在OOD的toCall方法中加以修改才能正确运行。

 

再看另一种方法,这些类都实现一个接口。

 

package com.OOD;

public class OOD {
	public static void main(String[] args) {
		toCall(new A());
		toCall(new B());
		toCall(new C());
	}

	public static void toCall(Father f) {
		f.call();
	}
}

class A implements Father {
	public void call() {
		System.out.println("Call A");
	}
}

class B implements Father {
	public void call() {
		System.out.println("Call B");
	}
}

class C implements Father {
	public void call() {
		System.out.println("Call C");
	}
}

interface Father {
	public void call();
}
 

这些类现在的共同点是都实现了一个叫做Father的接口,并且重写了call方法。

现在看看toCall方法,参数由原来的Object类型变成了Father类型,传进来的都是一个Father引用,我不用关心这个实例具体指的是哪个对象,他是一种Father,他就带有一个call方法。所以直接在代码里面写上f.call()方法 就可以达到要求了。而当有新的类来时,只要实现Father接口,重写call方法,toCall方法的代码就不需要改了。这样的设计,比起上面的例子,是不是好了很多呢?

分享到:
评论

相关推荐

    面向对象分析与设计1

    国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...

    Javascript面向对象设计一 工厂模式.docx

    Javascript面向对象设计一 工厂模式.docx

    用面向对象设计的方法,设计一个圆的类

    用面向对象设计的方法,设计一个圆的类,包括计算圆的直径、圆的周长和圆的面积的方法。 【问题描述】 用面向对象设计的方法,设计一个圆的类,包括计算圆的直径、圆的周长和圆的面积的方法。 【基本要求】 采用...

    面向对象分析与设计

    《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的...

    C#面向对象设计模式纵横谈 12种设计模式

    C#面向对象设计模式纵横谈 12种设计模式 一本不可多得的详解设计模式书籍。

    面向对象系统设计面向对象系统设计面向对象系统设计

    作为一名软件开发人员,我深刻地体会到面向对象系统设计带来的种种便 : 1、 良好的可复用性。开发同类项目的次数与开发新项目的时间成反 比,谁也不愿做重复劳动吧 J 。 2、 易维护。基本上不用花太大的精力跟...

    面向对象软件架构设计

    面向对象设计的基本原则 132 第三单元:用UML辅助系统分析与设计 177 UML简介及常见疑难问题辨析 178 借鉴RUP的UML建模与分析 213 第四单元:设计模式与软件设计思想 267 设计模式 268 常用的软件架构风格及适用情况...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    《C#面向对象程序设计》源代码(CS)

    《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线...全书提供了丰富的示例代码和课后习题,并通过一个贯穿全书的“旅行社管理系统”案例展现了如何运用C#语言和面向对象技术来进行实际软件系统开发。

    Python实验一 面向对象程序设计实验.doc

    Python实验一 面向对象程序设计实验

    《面向对象程序设计JAVA语言程序设计》

    《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》《面向对象程序设计JAVA语言程序设计》

    C++面向对象程序设计课后答案

    面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...

    面向对象设计程序员必读

    面向对象设计程序员必读,c++初学者适合一看,各有启迪

    面向对象程序设计C++期末考试题及答案

    很好的一套面向对象程序设计C++期末考试,适合于大学程序设计的各种考试复习

    面向对象程序设计课程设计java设计一个计算器.pdf

    面向对象程序设计课程设计java设计一个计算器.pdf面向对象程序设计课程设计java设计一个计算器.pdf面向对象程序设计课程设计java设计一个计算器.pdf面向对象程序设计课程设计java设计一个计算器.pdf面向对象程序设计...

    面向对象程序设计第一次离线作业作业.doc

    北交大面向对象设计第一次离线作业下载

    面向对象程序设计课程设计java设计一个计算器.docx

    面向对象程序设计课程设计java设计一个计算器.docx面向对象程序设计课程设计java设计一个计算器.docx面向对象程序设计课程设计java设计一个计算器.docx面向对象程序设计课程设计java设计一个计算器.docx面向对象程序...

    面向对象程序设计课程设计——学生成绩管理系统

    全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法。正确理解掌握C++面向对象程序设计的基本特性:类、对象、继承与派生、多态、虚函数、模板、流类库等。遵循软件过程的各个环节进行系统分析、设计、...

    Java与UML面向对象程序设计.pdf

    《Java与UML面向对象程序设计》旨在介绍使用Java和UML开发面向对象的软件所必需的知识,并将伴您走上使用Java进行真正面向对象软件开发的道路。《Java与UML面向对象程序设计》共分12章。《Java与UML面向对象程序设计...

    面向对象程序设计形成性考核册答案

    面向对象程序设计形成性考核册答案

Global site tag (gtag.js) - Google Analytics