(翻译)《一》面向对象编程思想

原文 链接:http://docs.oracle.com/javase/tutorial/java/concepts/package.html

前言

如果你还没有接触过面向对象编程,在你动手敲代码之前需要学习一些基本的概念。本节会为你介绍对象、类、继承、接口和包。每一部分的讨论集中在这些概念是如何联系现实世界的。与此同时,还介绍一下java的语法。

什么是对象?

对象表示软件中一系列相关的状态和行为。软件对象被常常用来对日常生活中的真实世界的对象建模。本节将讲解如何在对象中表示状态和行为,介绍数据封装的概念,并解释用这些方法设计你的软件的好处。

什么是类?

类是创建对象的蓝图或原型。本节定义一个类模拟真实世界中对象的状态和行为。这个类着重基础,展示一个简单的类如何清晰的对状态和行为建模。

什么是继承?

继承提供了强大并且自然的机制来组织和构造你的软件。本节解释了类如何从他们的父类中继承状态和行为,以及使用java如何继承一个类。

什么是接口?

接口是一个类与外界的协议。如果一个类实现了一个接口,它必须提供由接口对外发布的行为。本节定义了一个简单的接口,解释一个类要实现它所做的必要修改。

什么是包?

包是逻辑上组织类和接口的命名空间。把代码放入包中使大型软件易于管理。本节解释为什么使用包有好处,并为你介绍java平台提供的api。

正文

1,什么是对象?

对象是理解面向对象技术的关键。看看周围,你会发现很多对象在真实世界中的例子:你的狗、你的桌子、你的电视机、你的自行车。

真实世界中的对象共有两个特性:他们的状态和行为。狗有状态(名字、颜色、品种、饿否)和行为(叫、抓、摇尾巴)。自行车有状态(当前档位、当前踩踏节奏、当前速率)和行为(换挡、改变踩踏节奏、踩刹车)。辨别真实世界中对象的状态和行为是开始思考面向对象编程的一个非常有效的方法。

现在花一分钟观察你周围真实世界中的对象。对你看到的每个对象问两个问题:这个对象可能处于一个什么状态?和这个对象可能会有什么行为?务必写下你的观察结果。随之,你会发现真实世界中的对象变化无常。你的笔记本电脑可能有两个状态(开机和关机状态)和两个行为(打开电脑、关闭电脑),而你的收音机可能多一些的状态(开、关、音量、频道)和行为(打开、关闭、调大、调小、搜索频道、扫描频道)。你同时还会发现一些对象还包含其他的对象。而面向对象编程就是对这些真实世界中的对象进行解释。

软件中的对象在概念上近似真实世界中的对象:他们都有状态和相关的行为。对象将状态保存在域中(也是软件中的变量),并通过方法暴露其行为。方法操作对象内部的状态并作为服务于对象之间通信的主要机制。隐藏对象内部的状态并要求对象间所有的交互都通过方法执行被称为数据的封装,这也是面向对象编程的基本原则。

比如把自行车作为一个对象:

通过属性状态(当前速度、当前踏频、当前档位)和改变这些状态的方法,外界按照真实世界的方式控制着这些对象。好像自行车一共有6档,改变档位的方法就会拒绝其他的档位。

将代码约束成一个个软件对象会提供如下好处:

1,模块化:根据对象编写的代码可以保持编写和维护的独立。一旦创建,很容易在系统内部传递。

2,隐藏不必要的信息:通过对象的方法对外交互,对外隐藏内部的实现细节。

3,代码复用:如果一个对象已经存在(被其他开发者开发),你可以直接使用。这样专家开发、测试、调试一些复杂、功能化的对象后,你可以在你的代码中直接调用。

4,可插拔和易于调试:如果一个对象出现了问题,你可以简单的移除它并插入一个可以替代的对象。这是模拟解决真实世界中机械方面的问题。如果一个螺丝坏了,你可以替换它,而不是替换整个机器。

2,什么是类?

在真实的世界中,你会发现很多个体属于同一个类型。会有另外一千辆自行车存在,都是使用同样的制作方式和同样的模型。每一辆自行车都是根据相同的蓝图制造,因此有相同的部件。根据面向对象的说法,你的自行车就是自行车这个对象类的一个实例。一个类就是一个蓝图,根据这个蓝图创建每一个个体。

下面这个自行车类就是自行车的一个实现:

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);
    }
}

java编程语言的语法看来也许有点陌生,但是自行车这个类的设计是基于之前讨论的自行车对象。域:cadence、speed、gear代表自行车的状态,方法(changeSpeed、changeGear等)定义了与外部世界的交互。

你也许注意到自行车类没有包含main方法。因为它并不是一个完整的类。它仅仅是一个应用中可能用到的自行车的设计蓝图。你需要在应用中其他的类中创建和使用一个新的自行车对象。

下面是BicycleDemo类创建两个自行车对象并调用其方法。

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,什么是继承?

即使不同类型的对象常常也有一些共性。比如山地自行车、公路自行车、双人自行车统统都有自行车的特征(当前速度、当前档位、当前踏频)。同时又拥有自己的特点:双人自行车有两个座位和两个手把,公路自行车有下沉的手把,山地自行车有额外的链条可以调更低的档位。

面向对象编程允许各个类继承一个类中公共使用的状态和行为。本例中,自行车是山地、公路、双人自行车的父类。在java中,每个类都允许有一个直接父类,而每一个父类不限制有多少个子类。

创建子类的语法很简单。在类的声明中使用extends关键字,后跟父类的名称。

class MountainBike extends Bicycle {

    // new fields and methods defining
    // a mountain bike would go here

}这使得MountainBike拥有与Bicycle相同的域和方法,就可以让MountainBike关注于其他的特性使它与众不同。这让你的子类易于维护。但是,你要注意注释父类的属性和方法,因为子类是没有显示这些的。

 4,什么是接口?

就像你已经学到的,对象通过他们暴露的方法定义他们与外界交互的方式。方法对外界构成对象的接口。比如电视机前面的按钮,就是连接你和电视机的接口。你按下开关就会打开或关闭电视机。

通常,接口定义一组相关的方法。如果一个自行车的行为定义成一个接口,应该像下面的样子:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

为了实现这个接口,你要起一个类名(比如一个品牌的自行车,JantBicycle),然后声明类时使用implements关键字。

class ACMEBicycle implements Bicycle {

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

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.

    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);
    }
}

实现一个接口让类需要提供的行为看起来更正规。接口在类和外界之间形成协议,而这个协议在编译器工作时会强制执行。如果你的类实现了一个接口,这个接口定义的所有方法必须出现在你的类中,才能让这个类成功编译。

 5,什么是包?

包是组织一系列相关的类和接口的命名空间。理论上,你可以把包当作电脑上一个个文件夹。你会把html文件保存在一个目录,图片一个目录,脚本或应用一个目录。因为一个java编写的软件可能有成百上千个类组成,所以为了便于管理,将相关的类和接口放入对应包中。

java平台提供了大量的库类套件让你在应用中使用,这些库类称为api。他们的包完成了平日编程中绝大部分公共的任务。比如一个String对象包含字符串的状态和行为,一个文件对象让程序员很容易创建、删除、检查、比较、修改文件系统中的文件,一个socket对象可以创建和使用网络套接字,大量的gui对象控制着按钮、勾选框和其他一些图形用户接口。简直有上千的类可以选择。这就让你可以关注于你的应用,而不是一些底层的基础建设。

时间: 2024-08-11 01:35:55

(翻译)《一》面向对象编程思想的相关文章

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想的哲学起源(转载)

http://www.xuebuyuan.com/566309.html 本来想象着写一整篇「面向对象编程思想的哲学起源」这样的题目,笔走纸上,方才发现这样的题目足够出本书,知识不够,写不动.但心里还是想写点自己的所思所想. 全篇就拿JAVA来举例了.众所周知,面向对象的四大基本要素:抽象(Abstract).封装(Encapsulation).继承(Inheritance).多态(Polymorphism). 很多人坚持<逻辑学>是唯物哲学的基础,不懂,姑且不论.哲学就是对自然学科的抽象,看

面向对象编程思想(前传)--你必须知道的javascript(转载)

原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录 什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 call apply band js中的闭包 什么是高阶函数 在写面向对象编程思想-设计模式中的js部分的时候发现很多基础知识不了解的话,是很难真正理解和读懂js面向对象的代码.为此,在这里先快速补上.然后继续我们的面向对象编程思想-设计模式. 什么是鸭子类型 javascript是一门典型的动态类型语

面向对象编程思想 - 月亮晶石的日志 - 网易博客

面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统).这可以使系统直接地映射问题域,保

[Javascript] 面向对象编程思想

1.创建对象 1.1 new 用new进行创建对象: var user = new Object(); user.age = 12;//同时为对象添加属性 user.name = 'ajun'; 1.2{} 用{}创建对象,如: var user = { 'name':'ajun, 'age':12 } 这里同时候为user添加了两个属性分别为:name,age 在以上代码稍加改造,你还可以为一个对象添加一个方法,如: var user = { 'name':'ajun', 'age':12 '

第三章面向对象编程思想

""" 编码规范: 类名首字母应以大写字母开头 类的成员/属性: 成员属性 实例化对象的属性: self.name=name 可以被访问,也可以在类的外部被修改 私有属性 实例化对象的私有属性: self.__age=age 属性名前加两下划线 外部无法被访问, 也不能被修改,只能内部访问和修改 想要在外部访问只能自定义一个方法了 强制访问 私有属性: p._People__age 对象名._类名__私有属性 公共属性: 类的属性,也叫静态属性,他是在类的内部定义的 clas

面向对象编程思想(OOP)(转发)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想2s

面向对象编程思想 抽象 封装和数据隐藏 多态 继承 代码的可复用性 面向对象分析 五个层次.五个活动组成 目的 1.获得系统的对象个体.个体内部的状态.个体与个体间的交互 活动 1.建模系统功能 2.发现并且确定业务对象 3.组织对象并确定其关系 抽象 舍弃个别的.非本质的特征,抽取共同的.本质的特征 ss 原文地址:https://www.cnblogs.com/cnblogzaizai/p/12028791.html