面向对象的思想初步了解

面向对象和之前学的面向过程是2种不同的编程思想,两者的思维有较大的区别,下面将举例初步表现这两种思想的差异性

设计一个程序去统计字符串"want you to know one thing"中字母 o和n出现的次数


//实现对字符串中出现字符次数的统计


public class SplitTest{
	public static void main(String[]args){
		String str="want you to know one thing";
		int oCount=0;//记录o出现的次数
		int nCount=0;//记录n出现的次数
		String []result=str.split("");//按字符拆分
		for(String str1:result){
			if("o".equalsIgnoreCase(str1))
				oCount++;
			if("n".equalsIgnoreCase(str1))
				nCount++;
		}
		System.out.println("o出现的次数为"+oCount+"  n出现的次数为"+nCount);
	}
}
output:
o出现的次数为4  n出现的次数为4

自顶向下,逐渐细化,我们按着我们罗列的步骤去解决问题

举例说明2种思想
假如你是一个老板,有一天你要向属下指导工作,如果用面向过程的思想,你要指导属性先做什么 再做什么,然后又做什么,要告诉他解决问题的每一个步骤。但如果是面向对象的思维,首先万物皆是对象,属下肯定也是一个对象,然后分析这个对象(属性)具备的属性和行为。然后你发现有做这件事的能力就ok了。你不必去关系他具体怎么做,只用关系他有没有这个能力(行为)
其实这更符合现实,如果现实中的老板都要一步一步的指导属下怎么做,老板早就累死了吧。

用面向对象的思维改写程序


//实现对字符串中出现字符次数的统计

class StringUtil{
	private String content;//字符串内容
	public StringUtil(String content){
		this.content=content;
	}
	public void setContent(String content){
		this.content=content;
	}
	public String getContent(){
		return this.content;
	}
}
//对以上功能的延续
class StringCount extends StringUtil{//实现统计
	private int oCount=0;//记录o出现的次数
	private int nCount=0;//记录n出现的次数
	public StringCount(String content){
		super(content);
		handleContent(content);
		toString();
	}
	public void handleContent(String content){
		String[]str=content.split("");
		for(String str1:str){
			if("o".equals(str1))
				this.oCount++;
			if("n".equals(str1))
				this.nCount++;
		}
	}
	public String toString(){
		return"”n“出现的次数为:"+this.nCount+"”o“出现的次数为:"+this.oCount;
	}
	
	
}




public class SplitTest{
	public static void main(String[]args){
		String str2="want you to know one thing";
		
	    StringUtil st=new StringCount(str2);
		System.out.println(st.toString());//向上调用子类覆写的方法
		
		
	}
}
output:
”n“出现的次数为:4”o“出现的次数为:4

我们看出,我们通过分析对象,设计出符合要求的对象,从而调用对象的行为实现功能,我们如果将这种功能设置在一个类里,会使得类的属性显得不伦不类,从现实中讲不通该类有这种属性,所有该处使用了继承,分成两种类

但可以发现如果采用面向对象的思想实现这个功能,代码量比面向功能相比长了很多,显得啰嗦,但他的结构很清晰

参考:编程思想:面向过程和面向对象

posted @ 2022-11-14 10:55  一往而深,  阅读(28)  评论(0编辑  收藏  举报