从这章开始,就是面向对象的程序开发 ,是开发的核心。也是我们重点掌握的内容
我们解决问题(事情)的时候,可以采用2种思维方式去解决问题
第1种就是面向过程:
我们之前学的程序,都是面向过程,也就是说我们写的一行一行的代码都是过程化
代码。 关注的是细节。关注的是具体的措施。关注的是具体的语句代码(比如说到底用循环,还是if等)
例子:李明去取1000元。目的是生活费
按照面向过程的思维方式 应该是:
第1步:李明把存折或卡拿好
第2步:到某某银行
第3步:排队
第4步:取钱,输入密码
第5步:银行职员 要验证密码,正确,然后查看是否有这么多钱
if 没有 就退卡
If 有,就给钱,刷卡
第6步:回去。
如果要做一个项目,这个项目有100多个功能。如果采用面向过程
面向过程有什么缺点:
很繁琐!考虑的细节很多。注定会丢失大的方向,使软件不可控制!
就好比写文章,先把段落写好。然后每个段落凑在一起。这很有可能偏离中心思想!
第2种就是面向对象:
面向对象 是我们生活中主要的思维方式,能够决定我们的事情方向。比如说
我们都有计划,无论是学习计划,还是创业计划,计划都是笼统的。概括的!
都不会设计到每个细节。也就是说面向对象,关注的是整体,是对象。关注的是大概方向。
然后每个整体,再去考虑细节。
就好比
写文章。先定 中心思想。然后考虑分为几段。
然后每个段落 再去面向过程
举例:李明去取钱
面向对象的话
关注的是 对象 李明
按照面向对象的方式
就一步:李明 这个对象 有取钱的行为
然后,取钱的行为 具体怎么样 就是面向过程了
就可以按照上面的第一步到第6步去做!
从现实中的例子,或问题 中可以发现,面向对象与面向过程都是不可缺少的。都是紧密联系在一起的。面向对象 决定方向,面向过程 决定细节。
一:怎么样才能够培养面向对象的思维方式(怎样去在问题找对象,找类)
1:要从问题中或事情中 找到对象。然后找到对象的特征,无论是静态特征还是动态特征,都要发现出来。
怎么去找对象呢,实际上就是找名词!
比如说李明这个对象 有静态的特征 比如 身高,体重,年龄,姓名等
动态特征 比如玩,学习,取钱
跟sql 相比,表名就是对象。属性(字段名) 就是静态特征
2:从对象中 抽象出 类
如果有很多相同的对象,比如李明,王五,张三等等这些对象。那么这些有些什么共同的地方呢?就是静态特征与动态特征的名字都一样。也就是说属性名一样。但是属性值不同而已 这就可以抽象出类
所以,抓住2点,1是对象,2是类!
对象 静态特征 动态特征
轿车 颜色名:黑色 启动,刹车,跑(玩耍)
长度:1*1*1
品牌名:BYD
卡车 颜色名:黄色 启动,刹车,跑(载重)
长度:3*2*4
品牌名:东风
公交车 颜色名:绿色 启动,刹车,跑(载人)
长度:4*2*3
品牌名:大巴
这3个对象 可以抽象出 类 因为这3个对象的 属性名一样。也就是静态特征名一样(颜色名,长度,品牌名)。值不同。动态特征 也一样,就是里面的细节不一样
汽车类 静态特征 动态特征
颜色名,长度,品牌名 启动,刹车,跑
上面的例子可以发现 类的静态特征是没有值的。对象的静态特征是有具体的值
对象(object):万事万物都是对象。一般都是可以看到的。感觉到得实体
当然也可以是想象的
对象 由 静态特征 和动态特征组成
静态特征:就是描述对象的一些属性,也就是一些名词,特征越多,对象越清晰
动态特征:就是对象的一些行为。动词
类(class):是具有相同属性名(静态特征)与(动态特征)行为名的一组对象的集合
前面讲的:就是怎么从问题中找对象,然后找类,一般有对象就有类。无论这个对象是一个还是几个。
二:怎么把问题中的找到的对象与类写在java代码中呢?
1:先写类,后去创建对象
2:类的一般java语法(不是很详细)怎么写
class 类名{
属性定义;//静态特征定义 具体就是 变量的定义 String name; int age;
方法定义;//动态特征定义 具体就是 方法定义 void print(){}
}
//class 表示定义类
//Student 表示类名为学生类
//public 表示公共的类,能够被其他所有类所看到
publicclass Student {
//学生类可以认为是学生对象的抽象
//学生类的静态特征为姓名,年龄,地址,学号等等
// 这个特征怎么写 通过变量定义来完成 可以赋值也可以不赋值
String xuehao;
//年龄这个特征
intage;
String address;
String name;
//动态特征 就是方法有哪些 玩,学习
//玩的方法(函数)怎么写
publicvoid wan(){ //void 表示不存在返回值
System.out.println(name+"玩");//
}
publicvoid xuexi(){
System.out.println(name+"学习");
}
//main 也是一个动态特征因为它也是一个方法
//是一个跟学生无关的方法,但是必不可少
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
package test;//package 关键字,用来定义包的
//public 关键字,表示公共的。意味着其他类都可以访问这个类
//class 关键字,表示类
//Student 类名,类名首字母一般大写,如果类名有多个单词,每个单词的首字母大写
publicclass Student {
//静态的特征
//有姓名,性别,年龄,地址等这些特征去描述学生
//这些特征通过变量的定义去描述
String name;
String sex;
intage;
String address;
//动态的特征行为有哪些?玩,学习
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid xuexi(){
System.out.println(name+"学习");
}
//main方法也是一种动态的特征,只不过时特殊的。
//可以帮助我们进入程序,也就是程序入口
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
publicclass Teacher {
String name;
intage;
String address;
publicvoid jiaoshu(){
System.out.println(name+"教书");
}
publicvoid wan(){
System.out.println(name+"玩");
}
}
package test;
publicclass Teacher {
String name;
String sex;
intage;
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid jiaoshu(){
System.out.println(name+"教书");
}
}
3:创建对象
a、对象声明 :类名 对象名; //跟以前学的 int a; //声明就是告诉内存,要预留空间
b、对象创建(为对象分配内存空间)
– 对象名 = new 类名();
– //准确表述应为:对象名 = new 构造方法名;
– 以上两部分可以写
– 类名 对象名 = new 类名();//意思就是创建关于类的一个对象为对象名
访问对象的属性和方法语法
– 对象名.属性名;
– 对象名.方法名();
//产生一个学生类的对象
Student stu=new Student();
stu.name="张三";
stu.age=20;
stu.xuehao="t301";
stu.address="长沙市";
stu.wan();
stu.xuexi();
//再产生一个学生
Student stu2=new Student();
stu2.name="李四";
stu2.age=20;
stu2.xuehao="t301";
stu2.address="长沙市";
stu2.wan();
stu2.xuexi();
说明:对象是类的具体化(实例化) 说白了就是说类的属性名赋值了!
比如stu.name=”张三” 属性名为name 值为张三
类 是对象的抽象化(模糊化) 说白了就是类的属性名没有赋值没有赋值
也就意味着可以为任意值
类可以创建任意个对象
一个类可以产生任意个对象。每一个对象都要占用内存,每一个对象都是不同的
4:以下的例子有个问题:如果想要输出每个属性的内容值,有什么方法吗?
有2种方法
第一种:在类中添加如下方法
publicvoid print(){
System.out.println("姓名="+name+",性别="+sex+",年龄="+age+",地址="+address);
}
然后在main方法中添加
stu1.print();//输出stu1对象的信息
第二种:可以在任意类中添加如下方法(推荐使用)
//public String toString() 这是固定写法
//toString()方法是属于Object类。任意类都可以写这个方法
//方法的作用就是格式化输出属性信息
public String toString(){
return"姓名="+name+",性别="+sex+",年龄="+age+",地址="+address;
}
然后在main方法添加如下代码
System.out.println(stu1);
package test;//package 关键字,用来定义包的
//public 关键字,表示公共的。意味着其他类都可以访问这个类
//class 关键字,表示类
//Student 类名,类名首字母一般大写,如果类名有多个单词,每个单词的首字母大写
publicclass Student {
//静态的特征
//有姓名,性别,年龄,地址等这些特征去描述学生
//这些特征通过变量的定义去描述
String name;
String sex;
intage;
String address;
//动态的特征行为有哪些?玩,学习
publicvoid wan(){
System.out.println(name+"玩");
}
publicvoid xuexi(){
System.out.println(name+"学习");
}
//main方法也是一种动态的特征,只不过时特殊的。
//可以帮助我们进入程序,也就是程序入口
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
//产生2个学生,一个是张三,另外一个是李四
Student stu1=new Student();
//给对象名stu1的每一个属性赋值
stu1.name="张三";
stu1.age=20;
stu1.address="长沙市";
stu1.sex="男";
//对象名stu1 去调用方法
stu1.wan();
stu1.xuexi();
Student stu2=new Student();
//给对象名stu2的每一个属性赋值
stu2.name="李四";
stu2.age=20;
stu2.address="长沙市";
stu2.sex="男";
//对象名stu1 去调用方法
stu2.wan();
stu2.xuexi();
}
}
posted on 2010-06-04 15:11
gjy 阅读(91)
评论(0) 编辑 收藏