代码之家  ›  专栏  ›  技术社区  ›  FlyingCat

面向对象关系

  •  4
  • FlyingCat  · 技术社区  · 15 年前

    我被要求用面向对象编程术语(比如在PHP环境中)描述车辆、汽车和丰田之间的关系。我被难住了。有人能帮我吗?谢谢。。。

    15 回复  |  直到 14 年前
        1
  •  5
  •   Artefacto    15 年前

    汽车是汽车,丰田汽车是汽车。

    最直接的说法是 car 可以是的子类 vehicle 和A toyota car 可以是的子类 汽车 .

    当然, Toyota 也可以指公司,在这种情况下情况会有所不同。不过,我很肯定上面这段话是他们希望听到的。

        2
  •  22
  •   user410344    15 年前

    我认为丰田指的是公司。

    我会说:

    车辆是一个物体,汽车是一种车辆。丰田是一个特殊的车辆对象实现者 brake 方法重载以返回false。

        3
  •  4
  •   Justin Ethier    15 年前

    小型车 是一个 车辆类型-所以你可以想到 Vehicle 作为 Car .

    丰田生产汽车。我倾向于添加一个 manufacturer 成员变量到 车辆 . 那么对于 小型车 那是丰田制造的 car.manufacturer = "Toyota" .

        4
  •  3
  •   Mark Baker    15 年前

    只是要尴尬一点:汽车是汽车的一个子类,卡车也是。 丰田是一个既生产汽车又生产卡车的制造商;因此丰田应该是汽车制造商属性的几个潜在价值之一。

    class Vehicle{ 
    
       protected $_model;
    
       protected $_manufacturer;
    
       public __construct($manufacturer) {
           $this->_manufacturer = $manufacturer;
       }
    } 
    
    class Car extends Vehicle{ 
       public __construct($model,$manufacturer) {
           parent::__construct($manufacturer);
       }
       $this->_model = $model;
    } 
    
    class Truck extends Vehicle{ 
       public __construct($model,$manufacturer) {
           parent::__construct($manufacturer);
       }
       $this->_model = $model;
    } 
    
    $a = new Car('Avensis','Toyota');
    $b = new Truck('Land Cruiser','Toyota');
    
        5
  •  2
  •   fabrik    15 年前

    你的意思是:

    class Vehicle{
    }
    
    class Car extends Vehicle{
    }
    
    class Toyota extends Car{
    }
    
        6
  •  2
  •   cHao    15 年前

    “车辆”是一个基本类,“汽车”是一个扩展、继承或衍生自“车辆”的类(取决于使用的语言),理想情况下,“丰田”应该是这两个类之一的“品牌”或“品牌”财产的价值。

        7
  •  2
  •   Jerry Coffin    15 年前

    车辆是一个基本类。car是派生类。丰田是(可能)一个价值,可以分配给“品牌”成员的汽车类。理论上,你可以从汽车(或订单上的东西)中得到丰田,但在我看来 通常地 好主意。派生通常应该反映功能,而与品牌相关的功能几乎没有。

        8
  •  2
  •   Chuck Burgess    15 年前

    最基本的思考方法是在你所使用的逻辑层次中。这实际上适用于世界上的任何事物。这里每个人都说了些什么,但如果你不明白,这也许不能帮助你理解他们在说什么。请允许我详细说明。

    车辆:车辆可以是任何交通工具。记住,它可能是一架飞机、火车、汽车、自行车、热气球等。汽车是用来把你从一个地方带到另一个地方的东西。所以基础类是车辆,它告诉你它将是一个运输设备。

    汽车:汽车是汽车的一种形式。因此,它扩展了车辆。一辆车可以被描述为一辆有4个轮子、2-N个门(取决于汽车)、一个发动机、一个方向盘、雨刷器、前照灯、闪光灯、刹车、加速器等的车辆。所以汽车进一步描述了你所指的车辆。

    丰田:丰田是汽车的一种形式。因此,它扩展了汽车。(如果使用卡车类,它也可以扩展卡车)。丰田的某些元素可能不适用于每辆车。为了进一步确定汽车的类型,丰田可以指定汽油里程、车门数量、颜色、发动机尺寸等。

    希望有帮助。

        9
  •  1
  •   dave    15 年前

    丰田是一辆汽车。汽车是一种汽车。 因此,丰田汽车将从汽车继承,而汽车又将从汽车继承。

        10
  •  1
  •   user229044    15 年前

    车辆是一个阶级。 汽车是汽车的一个子类。 丰田可以是汽车类的一个(相当通用的)实例,也可以是添加丰田特定功能的子类。

        11
  •  1
  •   Federico klez Culloca    15 年前

    汽车就是汽车,丰田就是汽车。

    因此,丰田可以是汽车的一个子类,汽车可以是汽车的一个子类。

    class Vehicle {
    
    }
    
    class Car extends Vehicle {
    
    }
    
    class Toyota extends Car {
    
    }
    

    例如,一辆车可能有一个成员var来指示车轮的数量和启动发动机的功能(并非所有车辆都有发动机)。虽然丰田可能有与汽车相同的vars,加上一个包含车型名称和踏板保修方法的字符串;—)

        12
  •  1
  •   Jeff    15 年前

    你可以采取不同的方法。

    1. Car 是的子类 Vehicle . Toyota 是的子类 小型车 .

    2. 小型车 是的子类 车辆 . 小型车 具有名为的属性 make . 你实例化汽车并设置它 制作 “丰田”。

    有更多的方法可以做到这一点,但这两种方法是最明显的,它们符合OOP概念。

    关键是问问你自己那里最普遍的术语是什么?这是交通工具。你可以有很多种车辆,如卡车,越野车,自行车,气垫船和汽车。因此,在OOP中,更具体的类继承自更一般的类。

        13
  •  1
  •   Vipul    15 年前

    在面向对象术语中 车辆将是基本类 汽车将是汽车的子类

    丰田将品牌作为一个属性。

        14
  •  1
  •   Stack Overflow is garbage    15 年前

    当然,这不是你的面试官想要听到的答案,但是面向对象编程的目标不是模拟整个世界,而是提供抽象的数据类型 应用程序领域中的特定概念 .

    因此,这三者之间的关系完全取决于您正在进行的应用程序。很有可能车辆和汽车 相同的 班级。很多应用程序可能不关心它是什么类型的车辆。他们也可能不在乎 品牌 就是这样,你也可以扔掉丰田级的。

    如果不是那些认为编程的目标是生成整个宇宙的UML图的白痴们劫持了OOP,它可能是一个有用的工具。

        15
  •  1
  •   apriori    15 年前

    我的拿手: “丰田”不应该源于“汽车”,因为丰田是一家公司,而不是一辆特定的汽车。“丰田汽车”可以从“汽车”衍生而来。“丰田”应源于“制造商”类别,而“制造商”类别则源于“公司”类别。“vehicle”类应具有指向“manufacturer”类的指针类型的类成员。对于丰田生产的汽车,类“car”的实例化对象应该有继承的类成员指向类“toyota”的单例对象。(C++)

    推荐文章