1、对象
理解面向对象技术的关键,真实世界中的对象有2个共同的特征:它们都有行为和状态。识别真实世界的状态和行为是从面向对象思维的一个好方法。
软件对象在概念上类似于现实世界对象:它们包括状态和行为。一个对象在字段来存储它的状态并通过方法暴露它的行为。方法操作一个对象的内部状态和对象通讯的主要机制。隐藏内部状态 和 要求所有的相互作用是通过对象的方法被执行 被称为 数据封装,属于面向对象编程的一个基本原则。
考虑自行车建模为一个软件对象:
通过描述状态(当前齿轮、当前踏板节奏、当前速度) 和 提供一些方法来改变状态,对象控制着外部世界如何被允许使用它。如:自行车仅有6个齿轮,改变齿轮的方法能够拒绝任何小于1or大于6的值。
捆绑代码到单个软件对象,提供很多优点,如:
a、模块化:一个对象的源代码的编写/维护可以和其他对象保持独立。一旦创建,一个对象可以很容易的在系统内部传递。
b、信息隐藏:通过一个对象的方法与外部相互作用,其内部的实现细节保持隐藏
c、代码重用:如果一个对象已经存在,你可以在你的应用中使用它
d、易于插件化和调试:如果一个特定的对象原来是有问题,你可以方便的将它移除并插入一个不同的对象作为它的替代。
2、类
在真实的世界中,你通常会发现许多不同的对象是属于同一种。有可能存在成千上万自行车,在所有相同的品牌和型号,每一辆自行车都根据相同的蓝图建造,因此都具有相同的组件。用面向对象的术语,你的自行车被称为自行车类的一个实例,A类则是单个对象创建的蓝图。
下面Bicycle类是自行车的一个可能的实现:
class 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);
}
}
字段cadence、 speed、 gear代表对象的状态, 方法changeCadence、 changeGear定义了该对象与外部世界的交互。
你可能注意到Bicycle类无main方法,这是因为它不是一个完整的应用;它仅仅是自行车的一个蓝图,可能在应用中被使用。创建和使用新的Bicycle对象的职责属于应用中的其它的类。下面使用一个例子:
class BicycleDemo {
public static void main(String[] args) {
// Create two different
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();
// Invoke methods on
// those objects
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();
}
}
3、继承
不同种类的对象往往有着一定的共同之处。山地自行车、公路自行车和双人自行车,都具有自行车的特点(当前齿轮、当前踏板节奏、当前速度),然而,它们定义不同的功能:双人自行车有2个座位和2套把手,公路自行车有下降把手,山地自行车有额外的链条。OOP允许类从其它类继承常用的状态和行为。
来源:oschina
链接:https://my.oschina.net/u/235969/blog/221050