zoukankan      html  css  js  c++  java
  • [转]什么是面向对象编程?转自IBM技术网站来自爱尔兰的工程师,简单,透彻

    面向对象编程(Object-Oriented Programming,OOP)是一个软件开发范式,它基于称为 “对象” 的数据结构的定义,由数据属性和函数组成。这些属性(成员变量)和函数(或方法)定义软件与那个对象可能进行的交互。OOP 的主要好处是,简化您的代码结构,有助于代码重用和维护。

    “面向对象” 基础知识

    面向对象编程的基本前提是:在您的软件中创建一些对象,这些对象定义一系列应用于该对象的属性和一系列能够检索或修改该对象的属性的方法或函数。car 可能是一个简单的对象示例。与一个 car 关联的数据属性可能包括它的 manufacturermodel numberregistration numbercolorcubic capacity,等等。一个 car 对象提供的方法可能包括 acceleratebrakechange gearturnstop 等等。在 OOP 中,理念是您定义对所有汽车都通用的基本属性和方法,每辆汽车都将采用那个定义的形式,尽管每辆汽车都采用不同的值。本文稍后将介绍,软件开发中有不同的面向对象途径。

    回页首

    常用 OOP 术语

    为最大限度地利用本文,您至少应该熟悉面向对象编程及其概念。下面简要描述讨论面向对象开发时使用的一些常用术语。需要说明的是,并非所有 OOP 类型都包含每个概念;例如,基于原型的对象语言(比如 JavaScript)中就没有 “类”。

    在基于类的面向对象开发中,一个类定义组成一个对象的不同属性和函数。类定义用于生成对象的模板,因此它们应该定义这些对象能够遵守的公共属性和动作。类通常由成员变量和方法构成。

    成员变量

    对象的成员变量就是该对象的属性。在前面提到的汽车示例中,这些属性包括该汽车的 manufacturer modelcolorcubic capacity,等等。

    方法

    方法是对象能够执行的动作。例如,一辆汽车能够 acceleratebraketurn,等等。通常,方法将修改成员变量的值。例如,当一个 car 对象使用 accelerate 方法加速时,它的当前速度属性将增加。许多对象都有一个称为 constructor 的方法,该方法在对象创建后立即被调用。

    实例或对象

    实例或对象即实际对象本身,而不是用于定义对象的模板。例如,您可能有一个名为 myCar 的对象,它拥有一个汽车模板的属性和方法。在一个对象的实例中,属性将实际拥有值。例如,myCar 可能拥有一个值为 silver 的 color 属性,一个值为 2500 的 cubic capacity 属性。一个对象的属性的当前值称为该对象的状态,该状态可以在该对象的整个生命周期内变化。

    继承性

    在基于类的 OOP 中,继承性是这样一个过程:子类继承其父类的成员变量和方法。除了继承这些属性和动作之外,子类可以定义自己的成员变量和方法,并提供父类的属性的默认值。例如,您可能有一个 FourByFour 类,它是 Car 类的一个子类。这个子类可以将其父类的 drivetrain 属性的默认值设置为 4WD(四轮驱动)。另外,它可以定义另一个名为 transfer case 的属性,该属性仅适用 4x4 汽车;并定义一个方法,该方法允许您更改其他普通车辆上没有的低速档(low range gear)。

    封装

    在基于类的 OOP 中,成员变量通常被定义为私有变量,以免被从类本身的范围外访问或修改。有一些称为 “修改器” 的特殊方法,它们允许您定义可以检索或修改类中的私有成员函数的值的方法。这些方法(通常称为 getters 和 setters)允许程序员使用隐藏的信息,使应用程序和其他类只能访问某些属性。这种技术通常称为 “封装”。

    抽象

    抽象是通过只定义那些在您对象的当前上下文中对该对象很重要的属性和方法来减小对象的复杂性的过程。例如,当您定义一个 Car类时,可以通过定义一辆汽车拥有的、对其他类型的车辆(比如有蓬货车、卡车、摩托车等)也常见的所有属性,来将这个类进一步抽象为一个 Vehicle 类。这样,Car 类将从 Vehicle 类继承这些属性,就像一个 Motorcycle 类或 Van 类那样。

    多态性

    在 OOP 上下文中,多态性意味着可以从它的超类继承方法,而不必提供所有方法的相同实现。例如,您有两个 Car 类的两个子类,一个用于自动挡汽车(我们称其为 ATCar),另一个用于手动挡汽车(我们称其为 MTCar)。所有 Car 对象都能加速,因此 ATCar 和MTCar 都将从它们的父类继承 accelerate 方法。但是,在一个 ATCar 中,当引擎达到某个 RPM 级别时,您的 accelerate 方法将自动调用 change gear 方法。结果,您在 ATCar 子类中覆盖了 accelerate 方法的父类定义,而在 MTCar 中,该方法就是子类从 Car 类继承而来的方法。

    本文并不是面向对象编程的一个全面指南。如果您不熟悉上述概念,那么在继续阅读本文之前,有必要跳到 参考资料 部分阅读更多关于 OOP 的资料。

  • 相关阅读:
    使用nmon进行系统监控
    linux中内存使用原理
    测试网站访问速度的5个方法
    手机站点击商务通无轨迹解决方法
    PHP开启伪静态配置
    Phpcms V9当前栏目及所有二级栏目下内容调用标签
    手机访问网跳转到手机端
    移动端web开发技巧 -- 转载
    php错误:You don't have permission to access / on this server.
    Navicat for MySQL使用手记(上)--创建数据库和表
  • 原文地址:https://www.cnblogs.com/guojian2080/p/3581800.html
Copyright © 2011-2022 走看看