您的位置:首页 > 编程语言 > Java开发

对象与类:打开java世界的大门

2020-07-03 23:08 197 查看

这一章我将介绍以下的内容:

  1. 对象与类关系的理解
  2. 对象和类的主要特性
  3. 引出三大特性和面向对象的软件开发的生命周期

类与对象的概念

什么是类?什么是对象

引用《Java核心思想》中的一句话:“类是构造对象的模板或蓝图。”
简单地说,类是一系列具有相同或相似特征的对象的一种抽象概括。我想用两个世界来描述:一是我们所处的真实的世界,一是面向对象的语言的世界。面向对象世界中对应的“类”的概念在真实世界中并没有具象的体现。而对象是有具象的体现的:你正在浏览的显示器,你的鼠标,甚至你自己都是对象。对象是现实生活中真实存在的个体。
而“类”则是一个模板,一个概念,是人类大脑进行抽象的结果。譬如:生活中有猫对象,鸟对象,狗对象,人类经过抽象的思考,发现他们都有一些共同的特征,比如都能对外界的反应做出移动,捕食其他生物等,我们把这些特征进行抽象总结,形成一个模板:称为“动物类”。

描述一下现实生活中软件开发的过程

  1. 程序员观察整个现实世界,在现实世界中寻找对象
  2. 在观察了n个对象之后,发现对象的共同特征
  3. 程序员在脑中形成一个【模板】——类
  4. java程序员通过java代码来描述一个类
  5. java中有了类,再用类来创建对象,我们把这个过程称为“创建类的实例(instance)”,也可以说通过类来实例化对象。
  6. 有了对象之后,让对象协作起来,形成一个系统。

类-------实例化------->对象
(对象又被称为Instance)
对象-------抽象-------->类

重点:类描述的是对象的共同特征,例如身高,体重,肺活量等。
而这个身高特征在被访问的时候,必须先创建对象,通过对象去访问这个特征。因为这个特征具体到某个对象上之后,值不同。有的对象升高1.80m,有的对象身高2.80m。而类是一个抽象的概念,是无法通过一个抽象的概念去访问一个具体的数据属性的。

一个类主要描述什么信息呢?
一个类主要描述:状态 + 行为

状态–>类的属性
行为–>类的方法

我们以学生类作为例子说明:
学生类是描述所有学生对象的共同特征。这些特征被划分为状态特征和行为特征。

学生对象有哪些状态信息?

  • 学号 int num
  • 姓名 String name
  • 年龄 int age
  • 住址 String address
  • ……

这些属性,即状态信息通常是以变量形式定义的。

学生对象有哪些行为信息?

  • 听课
  • 写作业
  • 吃饭
  • ……

这些行为信息,通常是以“方法”形式定义的(C语言选手可以暂时将“方法”理解为C中的函数的概念)

public class Student {

//状态信息【属性】——
int num;//学号
int age;//年龄
String address;//地址
String name;//姓名

//行为信息【方法】——
public void listen() {
System.out.println("我在听课!");
}
public void doHomework() {
System.out.println("我在写作业!");
}
public void eat() {
System.out.println("我在吃法!");
}

//此部分代码为构造器,后面会详细说明,暂且忽视
public Student() {

}

public Student(int num,int age,String address,String name) {
this.address=address;
this.age=age;
this.name=name;
this.num=num;
}
}
public class StudentTest {

public static void main(String[] args) {
Student Blanche=new Student(191601,19,"Mount_Huang","Blanche");
//我想要访问这个Blanche学生的姓名:
System.out.println(Blanche.name);
//我想要访问这个Blanche学生的年龄:
System.out.println(Blanche.age);
//上述的访问其实是不安全的,后续我们在讲解面向对象的“封装性”时,会详细讲解改进

//我想让Blanche同学吃饭:
Blanche.eat();
//我想让Blanche同学写作业:
Blanche.doHomework();

/*上述代码运行结果:
* 	Blanche
19
我在吃法!
我在写作业!
*/
}
}

总结起来,一个java中的一般的类(有特殊情况)通常以下面的形式呈现

[修饰符列表] class 类名{
属性// 描述对象的状态信息
方法// 描述对象的动作信息
}

正如上面的代码所展示的那样,java的代码都位于某个类的内部。而且标准的java库本身也为程序员提供了很多的类,日期类,数学工具类等,但鉴于具体的业务需要,很多的类我们还是要自己去编写,来描述所需要的对象。

从识别类开始,到面向对象开发的三个过程

面向对象开发的三个过程:

  1. OOA:面向对象分析法。
  2. OOD:面向对象设计。
  3. OOP:面向对象的编程。

OOA:A是Analysis的缩写,即面向对象的分析过程。面向对象的分析主要有这以下几个过程:

  1. 确定类和对象:

学过C语言的程序员一般写程序都是从main函数着手开始编写代码。而在OOP的开发过程中我们应该从类的设计开始编写代码,进而编写类所代表的的一类的对象的属性和方法。
识别类的简单的规则则是在解决问题的过程中寻找名词,而方法则对应着动词。
我们模拟这样一个过客用信用账户去某宝购买商品的情景;
在这个情景下出现了以下几个名词

  • 账户—(Account)
  • 顾客—(Customer)
  • 地址—(Address)
  • 商品—(Goods)
  • 购物车—(Shopping_Cart)
  • 商家—(Merchant)

这些名词则可能成为账户类,顾客类,地址类等;
而在这个情景中也会出现一些动词,比如顾客下单添加了商品进入购物车,商家划走了顾客账户上的对应金额,将货物打包送到对应的顾客的地址。
那么账户和购物车应该是顾客的一个属性,而顾客同时又购买的动作,或者说是方法。商家则会拥有购买商品的顾客的一些信息,比如顾客的地址等,商家会通过地址使用“发货”这一方法,或者说动作实现交付货物。
在这样一个过程中购买和发货这样的动词则成为顾客和商家的方法,或者说是动作信息。
当然具体的类的设置还是和具体的开发需要挂钩,并不只是“找动词,找名词”这样粗暴的过程。

  1. 确定类之间的关系
  • 关联关系:has a
  • 依赖关系: uses a
  • 继承关系: is a

① **关联关系(has-a):**在上面的情景的描述中,我们提到了账户,地址和顾客应该都是一类事物,即“类”;同时我们说“顾客”有一个(has a)“账户”,“顾客”有一个(has a)“地址”。
我们把这样的A类对象包含B类对象的关系成为“聚合”关系或者“关联”关系,很简单的可以用"has a"来理解:如果A has a B,那么A和B具有关联关系。
② **依赖关系(use-a):**还是上面购物的情景,我们知道商家要通过访问顾客的信息来得到顾客的地址,从而完成发货。如果一个类的方法操纵另一个类的对象,那么我们说这两个对象之间是一种“依赖关系”。
继承关系(is-a): 我们假设有洗护用品商品和零食商品,这两个商品对“商品类”来说都是商品类的子类,商品类则是他们的父类,构成“继承关系”(后面会详细说明继承)。

  1. 确定主题
    指事物的具体概貌和分析。
  2. 确定属性
    这里的属性只的就是对象具有的属性,比如顾客的姓名,地址,银行账号等,这行即是对象具有的属性,这些属性(状态信息)通常是以变量的形式定义的。后面我们将会详细介绍实例变量和静态变量等……
  3. 确定方法
    方法指得是对象具有的动作信息,可以是跟某一个对象息息相关,也可以是和某一个具体的对象无关,只和和类有关。后面的博客也将说明。

更新中……下一篇将说明对象的创建,面向对象的封装性等信息,从而把OOD和OOP慢慢串联上……

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: