Объектно-ориентированные отношения
Меня попросили описать отношения между транспортным средством, автомобилем, Toyota в терминах объектно-ориентированного программирования (скажем, в среде PHP). Я был в тупике. Может ли кто-нибудь помочь мне об этом? Спасибо...
15 ответов
Автомобиль - это автомобиль, а автомобиль Toyota - это автомобиль.
Наиболее простым утверждением является то, что car
может быть подклассом vehicle
и toyota car
может быть подклассом car
,
Конечно, Toyota
Можно также обратиться к компании, в этом случае все будет немного по-другому. Я уверен, что параграф выше - это то, что они ожидали услышать.
Я думаю, что Тойота относится к компании.
Я бы сказал:
Автомобиль - это объект, а Автомобиль - это тип Транспортного средства. Toyota является конкретным разработчиком объектов транспортных средств с brake
метод перегружен, чтобы вернуть false.
Автомобиль - это тип транспортного средства - так что вы можете думать о Vehicle
в качестве базового класса Car
,
Тойота производит автомобили. Вместо того, чтобы сделать это наследственным отношением, я был бы склонен добавить manufacturer
переменная-член Vehicle
, Тогда для случаев Car
которые сделаны Toyota, установлены car.manufacturer = "Toyota"
,
Просто чтобы быть неловким: автомобиль - подкласс транспортного средства, как грузовик. Тойота - производитель, который делает и легковые и грузовые автомобили; поэтому Toyota должна быть одним из нескольких потенциальных значений для атрибута производителя транспортного средства.
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');
"Автомобиль" - это базовый класс, "Автомобиль" - это класс, который расширяет, наследует или является производным от "Транспортного средства" (в зависимости от используемого языка), и в идеале "Тойота" должна быть значением "бренда". или "сделать" свойство одного из этих двух классов.
Автомобиль базового класса. Автомобиль является производным классом. Toyota (вероятно) - это значение, которое можно присвоить "брендовому" представителю класса Vehicle. Теоретически, вы можете получить Toyota из автомобиля (или что-то в этом роде), но IMO - это, как правило, плохая идея. Деривация, как правило, должна отражать функцию, и функции, привязанной к бренду, мало.
Самый простой способ думать об этом - это логическая иерархия того, с чем вы работаете. И это применимо практически ко всему на свете. То, что все сказали здесь, является точным, но это может не помочь вам понять, что они говорят, если вы не понимаете ООП. Итак, позвольте мне уточнить.
Транспортное средство: транспортное средство может быть любым видом транспорта. Имейте в виду, что это может быть самолет, поезд, автомобиль, велосипед, баллон с горячим воздухом и т. Д. Транспортное средство - это то, что используется для доставки вас из одного места в другое. Таким образом, базовый класс, являющийся транспортным средством, говорит вам, что это будет транспортное средство.
Автомобиль: автомобиль является формой транспортного средства. Таким образом, он расширяет автомобиль. Автомобиль можно описать как автомобиль с 4 колесами, 2-мя дверями (в зависимости от автомобиля), двигателем, рулем, дворниками, фарами, поворотниками, тормозами, акселератором и т. Д. Таким образом, автомобиль дополнительно описывает, какое транспортное средство вы используете. ссылаясь на.
Toyota: Toyota - это форма автомобиля. Таким образом, он расширяет автомобиль. (Это также может расширить грузовик, если вы работаете с классом грузовиков). Есть определенные элементы тойоты, которые могут не подходить для каждого автомобиля. Таким образом, чтобы помочь в дальнейшем определить тип автомобиля, Toyota может указать пробег бензина, количество дверей, цвет, размер двигателя и т. Д.
Надеюсь, это поможет.
Ты имел ввиду:
class Vehicle{
}
class Car extends Vehicle{
}
class Toyota extends Car{
}
Вы можете использовать разные подходы.
Car
это подклассVehicle
,Toyota
это подклассCar
,Car
это подклассVehicle
,Car
имеет свойство под названиемmake
, Вы создаете экземпляр Car и устанавливаете егоmake
в "Тойоту".
Есть больше способов сделать это, но эти два являются наиболее очевидными, которые приходят на ум, которые вписываются в концепцию ООП.
Ключ в том, чтобы спросить себя, какой самый общий термин там? Это транспортное средство. Вы можете иметь много видов транспортных средств, таких как грузовики, внедорожники, велосипеды, суда на воздушной подушке и автомобили. Итак, в ООП ваш более конкретный класс наследуется от более общего класса.
Автомобиль класса. Автомобиль является подклассом автомобилей. Toyota может быть (довольно общим) экземпляром класса Car или подклассом, добавляющим специфическую для Toyota функциональность.
Конечно, это не тот ответ, который хотел бы услышать ваш интервьюер, но цель объектно-ориентированного программирования состоит не в моделировании всего мира, а просто в предоставлении абстрактных типов данных, которые моделируют конкретные понятия в области вашего приложения.
Следовательно, отношения между ними полностью зависят от того, какое приложение вы делаете. Вполне возможно, что автомобиль и автомобиль должны быть одного класса. Многим приложениям может быть все равно, какой это тип автомобиля. Они также могут не заботиться о том, что это за марка, что позволяет вам выбрасывать класс Toyota.
ООП мог бы стать полезным инструментом, если бы его не взяли в заложники идиоты, считавшие, что цель программирования - создать диаграмму UML для всей вселенной.
Тойота это машина. Автомобиль - это Автомобиль. Таким образом, класс Toyota будет наследоваться от автомобиля, который, в свою очередь, наследуется от автомобиля.
Автомобиль - это Автомобиль, Тойота - это Автомобиль.
Таким образом, Toyota может быть подклассом автомобилей, а автомобиль - подклассом автомобилей.
class Vehicle {
}
class Car extends Vehicle {
}
class Toyota extends Car {
}
Например, автомобиль может иметь один элемент var для указания количества колес и функцию для включения двигателя (не все автомобили имеют двигатель). В то время как у Тойоты могут быть те же самые переменные, что и у Автомобиля, плюс строка, содержащая название модели и метод запроса гарантии на педали;-)
Мое мнение: "Тойота" не должна быть производной от "автомобиля", потому что Toyota - это компания, а не конкретная машина. "Toyota_car" может быть получен из "автомобиля". "Тойота" должна быть производной от класса "производитель", который является производным от класса "компания". Класс "vehicle" должен иметь член класса, указывающий на класс "производитель". В случае автомобиля, произведенного Toyota, экземпляр объекта класса "автомобиль" должен иметь этот унаследованный член класса, указывающий на объект Singleton типа класса "toyota". (C++)
В объектно-ориентированном термине автомобиль будет базовым классом, автомобиль будет подклассом транспортного средства.
и Toyota будет торговой маркой в качестве атрибута.