面向对象的关系

时间:2010-08-17 14:18:16

标签: php oop class car-analogy

我被要求用面向对象的编程术语来描述车辆,汽车,丰田之间的关系(比如说在php环境中)。我很难过。有人可以帮我吗?谢谢......

15 个答案:

答案 0 :(得分:22)

我认为丰田指的是公司。

我会说:

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

答案 1 :(得分:5)

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

最直截了当的说法是car可以是vehicle的子类,而toyota car可以是car的子类。

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

答案 2 :(得分:4)

Car 类型的广告系列 - 因此您可以将Vehicle视为Car的基类。

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

答案 3 :(得分: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');

答案 4 :(得分:2)

你的意思是:

class Vehicle{
}

class Car extends Vehicle{
}

class Toyota extends Car{
}

答案 5 :(得分:2)

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

答案 6 :(得分:2)

车辆是基类。汽车是派生类。丰田(可能)是一个可以分配给Vehicle类“品牌”成员的价值。从理论上讲,你可以从车辆中获取丰田(或者那个订单上的东西),但IMO通常是一个糟糕的主意。推导通常应该反映功能,并且附加到品牌的功能几乎没有。

答案 7 :(得分:2)

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

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

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

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

希望有所帮助。

答案 8 :(得分:1)

丰田是一辆汽车。汽车是一种车辆。 因此,丰田级将继承Car,而Car则继承自Vehicle。

答案 9 :(得分:1)

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

答案 10 :(得分:1)

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

因此,丰田可能是汽车的子类,而汽车可能是汽车的子类。

class Vehicle {

}

class Car extends Vehicle {

}

class Toyota extends Car {

}

例如,汽车可能有一个成员var来指示车轮的数量和一个打开发动机的功能(并非所有车辆都有发动机)。虽然丰田可能拥有与汽车相同的变速器,加上包含车型名称的字符串以及要求对踏板进行保修的方法; - )

答案 11 :(得分:1)

你可以采取不同的方法。

  1. CarVehicle的子类。 ToyotaCar的子类。

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

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

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

答案 12 :(得分:1)

以面向对象的术语 车辆将成为基类 汽车将成为汽车的子类

丰田将品牌作为属性。

答案 13 :(得分:1)

我的看法: “丰田”不应该来自“汽车”,因为丰田是一家公司,而不是一辆特定的汽车。 “toyota_car”可以来自“car”。 “toyota”应来自“制造商”类,该类源自“公司”类。 “vehicle”类应该有一个类成员指向类“manufacturer”的类成员。在由Toyota制造的汽车的情况下,类“car”的实例化对象应该具有指向类型为“toyota”的Singleton对象的继承类成员。 (C ++)

答案 14 :(得分:1)

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

因此,三者之间的关系完全取决于您正在制作的应用程序。车辆和汽车完全可能是相同的级别。许多应用可能不关心它是什么类型的车辆。他们也可能不关心它是什么品牌,也允许你扔掉丰田班。

OOP可能是一个有用的工具,如果没有被那些认为编程的目标是生成整个宇宙的UML图的白痴人质所挟持。