私は、オブジェクト指向プログラミングの用語で、車両、車、トヨタの関係を説明するように求められました(たとえば、php環境で)。私は困惑しました。誰かがそれについて私を助けることができますか?ありがとう...
15 に答える
トヨタは会社のことだと思います。
私はこう言います:
Vehicle はオブジェクトで、Car は Vehicle の一種です。Toyota は、brake
False を返すようにオーバーロードされたメソッドを持つ Vehicle オブジェクトの特定の実装者です。
車は乗り物、トヨタ車は車。
最も簡単なステートメントは、car
が のサブクラスでvehicle
あり、 atoyota car
が のサブクラスである可能性があるということですcar
。
もちろん、Toyota
会社を指す場合もありますが、その場合は少し異なります。ただし、上記の段落は彼らが期待していたものであると確信しています。
Carは Vehicle のVehicle
一種なので、 の基本クラスと考えることができますCar
。
トヨタは自動車を製造しています。manufacturer
これを継承関係にする代わりに、メンバー変数をに追加する傾向がありますVehicle
。次に、Car
トヨタ製のインスタンスの場合、 を設定しcar.manufacturer = "Toyota"
ます。
厄介なことに、car は vehicle のサブクラスであり、truck もそうです。トヨタは乗用車とトラックの両方を製造するメーカーです。したがって、Toyota は、車両のメーカー属性の潜在的な値の 1 つです。
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');
もしかして:
class Vehicle{
}
class Car extends Vehicle{
}
class Toyota extends Car{
}
「Vehicle」は基本クラス、「Car」は「Vehicle」を拡張、継承、または派生するクラス (使用する言語による) であり、理想的には「Toyota」は「ブランド」の値であるべきです。または、これら 2 つのクラスのいずれかの「make」プロパティ。
車両は基本クラスです。車は派生クラスです。Toyota は (おそらく) Vehicle クラスの「ブランド」メンバーに割り当てることができる値です。理論的には、Toyota を vehicle (またはその順序で) から派生させることができますが、IMO では一般的にはお勧めできません。派生は一般的に機能を反映する必要があり、ブランドに付随する機能はほとんどありません。
それについて考える最も基本的な方法は、作業対象の論理階層にあります。そして、これは事実上、世界中のあらゆるものに当てはまります。ここで誰もが言っていることは的を射ていますが、OOP を理解していなければ、彼らの言っていることを理解するのに役立たないかもしれません。詳しく説明させてください。
車両: 車両はあらゆる種類の輸送手段である可能性があります。飛行機、電車、自動車、自転車、熱気球などの可能性があることを覚えておいてください。乗り物は、ある場所から別の場所に移動するために使用されるものです。つまり、基本クラスである vehicle は、それが輸送装置になることを示しています。
車: 車は車両の一種です。したがって、それは車両を拡張します。車は、4 つの車輪、2-n ドア (車によって異なります)、エンジン、ステアリング ホイール、ワイパー、ヘッドライト、ウインカー、ブレーキ、アクセルなどを備えた車両として説明できます。を参照しています。
トヨタ: トヨタは車の一種です。したがって、それは車を拡張します。(Truck クラスを使用している場合は、truck を拡張することもできます)。すべての車に当てはまるとは限らない、トヨタの特定の要素があります。車の種類をさらに定義するために、トヨタは燃費、ドアの数、色、エンジンのサイズなどを指定できます。
それが役立つことを願っています。
トヨタは車です。車は乗り物です。したがって、Toyota クラスは Car を継承し、Car は Vehicle を継承します。
車両はクラスです。Car は Vehicle のサブクラスです。Toyota は、Car クラスの (かなり一般的な) インスタンス、または Toyota 固有の機能を追加するサブクラスである可能性があります。
車は乗り物、トヨタは車。
したがって、Toyota は Car のサブクラスであり、Car は Vehicle のサブクラスである可能性があります。
class Vehicle {
}
class Car extends Vehicle {
}
class Toyota extends Car {
}
たとえば、Car には、車輪の数を示す 1 つのメンバー var と、エンジンをオンにする関数があります (すべての車両にエンジンがあるわけではありません)。トヨタは車と同じ変数を持っているかもしれませんが、それに加えて、モデルの名前とペダルの保証を求める方法を含む文字列があります;-)
さまざまなアプローチを取ることができます。
Car
のサブクラスですVehicle
。Toyota
のサブクラスですCar
。Car
のサブクラスですVehicle
。Car
という性質がありますmake
。Car をインスタンス化しmake
、「Toyota」に設定します。
他にも方法はありますが、OOP の概念に適合する最も明白な方法はこれら 2 つです。
重要なのは、そこにある最も一般的な用語は何かを自問することです。乗り物です。トラック、SUV、自転車、ホバークラフト、車など、さまざまな種類の乗り物を所有できます。したがって、OOP では、より具体的なクラスがより一般的なクラスから継承されます。
もちろん、これはインタビュアーが聞きたかった答えではありませんが、オブジェクト指向プログラミングの目標は、世界全体をモデル化することではなく、単にアプリケーションのドメイン内の特定の概念をモデル化する抽象データ型を提供することです。
したがって、この 3 つの関係は、作成するアプリケーションに完全に依存します。vehicle と car が同じクラスである可能性は十分にあります。多くのアプリケーションは、車両の種類を気にしない場合があります。彼らはまた、それがどのブランドであるかを気にしないかもしれないので、トヨタクラスも捨てることができます.
OOP は、プログラミングの目的は宇宙全体の UML ダイアグラムを作成することだと考える愚か者に人質に取られていなければ、便利なツールであった可能性があります。
オブジェクト指向の用語では、車両は基本クラスになり、車は車両のサブクラスになります
トヨタは属性としてブランド名になります。
私の見解では、「トヨタ」は「車」から派生したものであってはなりません。なぜなら、トヨタは特定の車ではなく会社だからです。「car」から「toyota_car」を派生させることができます。「toyota」は、「company」クラスから派生した「manufacturer」クラスから派生する必要があります。「vehicle」クラスには、クラス「manufacturer」へのポインタ型のクラス メンバが必要です。トヨタが製造した車の場合、クラス「車」のインスタンス化されたオブジェクトには、型クラス「トヨタ」のシングルトン オブジェクトを指す継承されたクラス メンバが必要です。(C++)