面向对象的编程概念

问题:什么是对象?什么是? 什么是继承?什么是接口?什么是

理解对象(Object)的概念

对象是理解面向对象技术的关键。现在环顾四周,您会发现许多真实物体的示例:您的狗,书桌,电视机,自行车。

现实世界中的对象共有两个特征
它们都具有状态和行为。例如狗具有状态State(名称,颜色,品种,饥饿)和行为Behavior(吠叫,抓捕,摇尾巴)。自行车还具有状态(当前档位,当前踏板节奏,当前速度)和行为(换档,改变踏板节奏,施加制动)。识别现实世界对象的状态和行为是从面向对象编程的角度出发思考的一种好方法。

花一分钟时间观察您附近区域中的真实对象。对于您看到的每个对象,问自己两个问题:
“该对象可能处于什么状态?” 和“此对象可能执行什么行为?”。
确保写下您的观察结果。在执行操作时,您会注意到现实世界中对象的复杂性各不相同。
您的台式机灯可能只有两种可能的状态(打开和关闭)和两种可能的行为(打开,关闭),但是台式机收音机可能还有其他状态(打开,关闭,当前音量,当前电台)和行为(打开) ,关闭,增加音量,减少音量,搜索,扫描和调整)。
您可能还会注意到,某些对象也将包含其他对象。这些真实的观察结果都转化为面向对象编程的世界。

Methods:方法 Fields:领域
在这里插入图片描述
软件对象在概念上与现实世界中的对象相似:它们也由状态和相关行为组成。对象将其状态存储在字段中(某些编程语言中的变量),并通过方法(某些编程语言中的函数)公开其行为。方法在对象的内部状态上运行,并用作对象间通信的主要机制。隐藏内部状态并要求通过对象的方法执行所有交互被称为数据封装-面向对象编程的基本原理。

考虑一辆自行车,例如:
Change gears:挂挡
Brake:刹车
Change cadence:改变节奏
在Change里插入图片描述
通过归因于状态(当前速度,当前踏板踏频和当前档位)并提供更改状态的方法,对象可以控制外部世界如何使用它。例如,如果自行车只有6档,则更改齿轮的方法可能会拒绝任何小于1或大于6的值。

将代码捆绑到单个软件对象中可带来许多好处,包括:

模块化:
可以独立于其他对象的源代码编写和维护对象的源代码。创建对象后,可以轻松地在系统内部传递对象。

信息隐藏:
通过仅与对象的方法进行交互,其内部实现的细节仍对外界隐藏。

代码重用:如果某个对象已经存在(也许由其他软件开发人员编写),则可以在程序中使用该对象。这使专家可以实现/测试/调试特定于任务的复杂对象,然后您可以信任它们以自己的代码运行。

可插拔性和调试简便性:如果发现某个特定对象有问题,则只需将其从应用程序中删除,然后插入另一个对象作为替换对象即可。这类似于解决现实世界中的机械问题。如果螺栓断裂,请更换而不是整个机器。


理解类的概念

在现实世界中,您经常会发现许多同一种个体。可能还有成千上万的其他自行车,都具有相同的品牌和型号。每辆自行车都是根据相同的设计图制造的,因此包含相同的组件。用面向对象的术语来说,我们说您的自行车是称为自行车的一类对象的实例。一类是从中创建单个对象的蓝图。

以下 Bicycle类是自行车的一种可能实现:

class Bicycle{

//节奏= 0​​;
int cadence = 0;
//速度= 0;
int speed = 0;
//齿轮=1;
int gear = 1;

void changeCadence(int newValue) {
cadence = newValue;
}

void changeGear(int newValue) {
     gear = newValue;
}

void speedUp(int increment) {
     speed = speed + increment;   
}

void applyBrakes(int decrement) {
     speed = speed - decrement;
}

void printStates() {
     System.out.println("cadence:" +
         cadence + " speed:" + 
         speed + " gear:" + gear);
}

}

Java编程语言的语法对您来说似乎很新,但是此类的设计是基于先前对自行车对象的讨论。的字段cadence,speed和gear表示该对象的状态,并且这些方法(changeCadence,changeGear,speedUp等)定义其与外界交互。

您可能已经注意到,Bicycle该类不包含main方法。那是因为它不是一个完整的应用程序。它只是应用程序中可能使用的自行车的蓝图。创建和使用新Bicycle对象的责任属于应用程序中的其他一些类。

这是一个 BicycleDemo创建两个单独的Bicycle对象并调用它们的方法的类:
class BicycleDemo {
public void main(String [] args){

    //创建两个不同的 
    //自行车物体
    自行车bike1 =新的Bicycle();
    自行车bike2 =新的Bicycle();

    //在以下位置调用方法 
    //这些对象
    bike1.changeCadence(50);
    bike1.speedUp(10);
    bike1.changeGear(2);
    bike1.printStates();

    bike2.changeCadence(50);
    bike2.speedUp(10);
    bike2.changeGear(2);
    bike2.changeCadence(40);
    bike2.speedUp(10);
    bike2.changeGear(3);
    bike2.printStates();
}

}
此测试的输出显示两辆自行车的结束踏板节奏,速度和齿轮:

节奏:50速度:10齿轮:2
节奏:40速度:20齿轮:3


**

什么是继承?

不同种类的对象通常彼此之间有一定数量的共同点。例如,山地车,公路车和双人自行车都具有自行车的特征(当前速度,当前踏板节奏,当前档位)。然而,每个自行车还定义了使其与众不同的其他功能:双人自行车有两个座位和两组车把;公路自行车有下降的车把;一些山地自行车带有附加的链环,从而降低了齿轮比。

面向对象的编程允许类从其他类继承常用的状态和行为。在这个例子中,Bicycle现在变成了父的MountainBike,RoadBike和TandemBike。在Java编程语言中,每个类都可以具有一个直接超类,并且每个超类都有无限数量的子类的可能:

在这里插入图片描述
自行车课程的层次结构。

创建子类的语法很简单。在类声明的开头,使用extends关键字,后跟要从其继承的类的名称:
class MountainBike extends Bicycle {

// //定义
//山地自行车的新字段和方法

}
这提供MountainBike了与相同的所有字段和方法Bicycle,但允许其代码仅专注于使其独特的功能。这使子类的代码易于阅读。但是,您必须注意正确记录每个超类定义的状态和行为,因为该代码不会出现在每个子类的源文件中。


什么是接口(Interface)?

如您所知,对象通过其公开的方法定义了它们与外界的交互。方法形成对象与外界的接口;例如,电视机正面的按钮是您与塑料外壳另一侧的电线之间的接口。您按下“电源”按钮可以打开和关闭电视。

在最常见的形式中,接口是一组具有空主体的相关方法。如果将自行车的行为指定为接口,则可能如下所示:

interface Bicycle {

//车轮每分钟转数
void changeCadence(int newValue);

void changeGear(int newValue);

void speedUp(int increment);

void applyBrakes(int decrement);

}
要实现此接口,您的类的名称将更改(例如,更改为特定品牌的自行车,例如ACMEBicycle),然后implements在类声明中使用关键字:

ACMEBicycle implements Bicycle {

int cadence = 0;
int speed = 0;
int gear = 1;

void changeCadence(int newValue) {
     cadence = newValue;
}

void changeGear(int newValue) {
     gear = newValue;
}

void speedUp(int increment) {
     speed = speed + increment;   
}

void applyBrakes(int decrement) {
     speed = speed - decrement;
}

void printStates() {
     System.out.println("cadence:" +
         cadence + " speed:" + 
         speed + " gear:" + gear);
}

}
实现接口可以使类对其承诺提供的行为更加正式。接口在类和外部世界之间形成契约,并且该契约在编译时由编译器强制执行。如果您的类声称要实现一个接口,则在成功编译该类之前,该接口定义的所有方法都必须出现在其源代码中。


什么是包(Package)?

程序包是一个命名空间,用于组织一组相关的类和接口。从概念上讲,您可以将软件包视为类似于计算机上的不同文件夹。您可以将HTML页面保留在一个文件夹中,将图像保留在另一个文件夹中,并将脚本或应用程序保留在另一个文件夹中。因为用Java编程语言编写的软件可以由成百上千个单独的类组成,所以通过将相关的类和接口放入包中来使事情井井有条是很有意义的。

Java平台提供了适合在您自己的应用程序中使用的庞大的类库(一组软件包)。该库称为“应用程序编程接口”或简称“ API”。它的程序包代表与通用编程最常关联的任务。例如,一个String对象包含字符串的状态和行为。一个File对象允许程序员轻松地创建,删除,检查,比较,或修改文件系统中的文件; 一种Socket对象允许创建和使用网络套接字;各种GUI对象控制按钮和复选框,以及与图形用户界面有关的其他任何内容。从字面上看,有数千种课程可供选择。程序员,这使您可以专注于特定应用程序的设计,而不是使其工作所需的基础结构。

在 Java平台API规范包含了所有的包,接口,类,字段和Java SE平台提供的方法完整列表。在浏览器中加载页面并将其添加为书签。作为程序员,它将成为您最重要的参考文档。

猜你喜欢

转载自blog.csdn.net/chaihaiqiang/article/details/112766842