У меня есть основной класс, который должен быть расширен на 3 конкретных класса.
Основное требование:
-Для ООП мне нужно продемонстрировать структурирование кода в значимых классах, расширяющих друг друга, так что это будет абстрактный класс для логики основного продукта. Подход для этого мог бы иметь базовый класс продукта, который содержал бы всю логику, общую для всех продуктов, а затем конкретный тип продукта расширил бы базовый класс продукта с помощью этого специфического для типа материала.
- Идеясоздать абстрактный класс со всей общей логикой продукта, такой как getTitle, setTitle и т. д. Затем создайте дочерние классы продукта для каждого типа продукта, чтобы хранить логику, специфичную для типа продукта, такую как размеры мебели, размер компакт-диска, вес книги и т. д.
Эту задачу я решил с помощью php черты :
Main.php
class Main
{
use Book;
use Disc;
use Furniture;
// common properties and methods
}
Disc.php
trait Disc
{
public function setSize($size)
{
$this->size = $size;
}
}
Book.php
trait Book
{
public function setWeight($weight)
{
$this->weight = $weight;
}
}
Furniture.php
trait Furniture
{
public function setHeight($height)
{
$this->height = $height;
}
public function setWidth($width)
{
$this->width = $width;
}
public function setLength($length)
{
$this->length = $length;
}
}
Iрешили эту проблему с помощью таких интерфейсов:
Main.php
class Main
{
// common properties
}
Types.php
interface Weight
{
public function setWeight($weight);
}
interface Size
{
public function setSize($size);
}
interface Fdim extends Weight,Size
{
public function setHeight($height);
public function setWidth($width);
public function setLength($length);
}
class Furniture extends Main implements fdim
{
public function setWeight($weight)
{
$this->weight = $weight;
}
public function setSize($size)
{
$this->size = $size;
}
public function setHeight($height)
{
$this->height = $height;
}
public function setWidth($width)
{
$this->width = $width;
}
public function setLength($length)
{
$this->length = $length;
}
}
Является ли это лучшим решением с интерфейсами, отвечающим вышеуказанным требованиям?
Что является более приемлемымего или интерфейсы? Что вы порекомендуете?
У меня есть вопрос: есть ли лучшее решение этой задачи с указанным выше требованием? Я также пробовал абстрактные классы и интерфейсы, но, по моему мнению, требования более удовлетворены чертами. Что вы рекомендуете?