4

我被要求在面向对象编程术语中描述车辆、汽车、丰田之间的关系(假设在 php 环境中)。我被难住了。有人可以帮我吗?谢谢...

4

15 回答 15

22

我认为丰田是指公司。

我会说:

Vehicle 是一个对象,而 Car 是 Vehicle 的一种。Toyota 是 Vehicle 对象的特定实现者,其brake方法重载以返回 false。

于 2010-08-17T14:25:38.300 回答
5

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

最直接的说法是 thatcar可能是 的子类,vehicle而 atoyota car可能是 的子类car

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

于 2010-08-17T14:20:47.083 回答
4

CarVehicle 的一种类型——因此您可以将其Vehicle视为Car.

丰田生产汽车。我不会将其作为继承关系,而是倾向于将manufacturer成员变量添加到Vehicle. 然后对于Car丰田制造的实例,设置car.manufacturer = "Toyota".

于 2010-08-17T14:22:30.753 回答
3

只是尴尬:汽车是车辆的子类,卡车也是。丰田是一家制造汽车和卡车的制造商。所以丰田应该是车辆制造商属性的几个潜在值之一。

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');
于 2010-08-17T14:26:32.403 回答
2

你的意思是:

class Vehicle{
}

class Car extends Vehicle{
}

class Toyota extends Car{
}
于 2010-08-17T14:20:57.837 回答
2

“Vehicle”是一个基类,“Car”是一个扩展、继承或派生自“Vehicle”的类(取决于所使用的语言),理想情况下,“Toyota”应该是“品牌”的价值或“制作”这两个类之一的属性。

于 2010-08-17T14:21:13.960 回答
2

车辆是一个基类。汽车是派生类。Toyota(可能)是一个可以分配给 Vehicle 类的“品牌”成员的值。从理论上讲,您可以从车辆(或该订单上的其他东西)中获得丰田,但 IMO 这通常是一个糟糕的主意。派生通常应该反映功能,并且很少有与品牌相关的功能方式。

于 2010-08-17T14:22:48.967 回答
2

考虑它的最基本方法是在您正在使用的逻辑层次结构中。这实际上适用于世界上的任何事物。每个人在这里所说的都是正确的,但如果您不了解 OOP,它可能无法帮助您理解他们在说什么。所以请允许我详细说明。

车辆:车辆可以是任何类型的交通工具。请记住,它可能是飞机、火车、汽车、自行车、热气球等。车辆是用来将您从一个地方带到另一个地方的东西。因此,作为车辆的基类告诉您它将成为一种运输设备。

汽车:汽车是交通工具的一种形式。因此,它扩展了车辆。汽车可以描述为具有 4 个轮子、2-n 门(取决于汽车)、发动机、方向盘、雨刷、大灯、转向灯、制动器、加速器等的车辆。所以 car 进一步描述了您是什么车辆指。

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

希望有帮助。

于 2010-08-17T14:31:21.380 回答
1

丰田是汽车。汽车是交通工具。因此,Toyota 类将从 Car 继承,而 Car 又会从 Vehicle 继承。

于 2010-08-17T14:21:00.280 回答
1

车辆是一类。Car 是 Vehicle 的子类。Toyota 可以是 Car 类的(相当通用的)实例,或者是添加 Toyota 特定功能的子类。

于 2010-08-17T14:22:05.920 回答
1

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

因此,Toyota 可以是 Car 的子类,Car 可以是 Vehicle 的子类。

class Vehicle {

}

class Car extends Vehicle {

}

class Toyota extends Car {

}

例如,一辆车可能有一个成员 var 来指示轮子的数量和一个打开引擎的函数(并非所有车辆都有引擎)。虽然 Toyota 可能具有与 Car 相同的 vars,但还包含一个包含模型名称的字符串以及请求踏板保修的方法;-)

于 2010-08-17T14:22:38.897 回答
1

你可以采取不同的方法。

  1. Car是 的子类VehicleToyota是 的子类Car

  2. Car是 的子类VehicleCar有一个名为 的属性make。您实例化 Car 并将其设置make为“Toyota”。

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

关键是问问自己那里最通用的术语是什么?是车辆。您可以拥有多种车辆,例如卡车、SUV、自行车、气垫船和汽车。因此,在 OOP 中,您更具体的类继承自更通用的类。

于 2010-08-17T14:25:01.380 回答
1

在面向对象术语中,Vehicle 将是基类 car 将是 Vehicle 的子类

而丰田将品牌名称作为属性。

于 2010-08-17T15:22:11.147 回答
1

我的看法:“丰田”不应该源自“汽车”,因为丰田是一家公司,而不是特定的汽车。“toyota_car”可以派生自“car”。“toyota”应该是从“manufacturer”类派生的,而“manufacturer”类又是从“company”类派生的。“车辆”类应该有一个指向类“制造商”的指针类型的类成员。对于丰田制造的汽车,类“car”的实例化对象应该具有指向类“toyota”的单例对象的继承类成员。(C++)

于 2010-08-17T15:39:16.740 回答
1

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

因此,这三者之间的关系完全取决于您正在制作的应用程序。车辆和汽车完全有可能属于同一类。许多应用程序可能并不关心它是什么类型的车辆。他们也可能不在乎它是什么品牌,让您也可以扔掉丰田类。

OOP 本来可以是一个有用的工具,如果它没有被认为编程目标是生成整个宇宙的 UML 图的白痴作为人质。

于 2010-08-17T15:47:44.747 回答