| Помогите подкинуть правильную идею, оцените мой код и поправьте?
Мне нужно решить вот ту задачу, она работает, но противоречит принципам ООП, подскажите где что поправить, как бы можно было ее сделать более правильно:
Буду благодарен если дадите правильное хорошее замечание!!!
Сама задача:
Есть абстрактный класс «Транспорт». Свойства класса – «номер кузова», «тип транспорта», «Уникальный номер транспорта».
Методы: приватные – «сменить владельца»;
публичные – «посмотреть номер», «посмотреть тип транспорта», «заправить»
Есть класс «Владелец». Свойства – «ФИО», «номер прав», «уникальный номер транспорта»
Методы публичные – «Посмотреть ФИО»
Приватные – «Выдать доверенность», «Приобрести транспорт», «Продать транспорт»
Защищенные – «Завести транспорт».
Вам необходимо реализовать данные классы на PHP.
Когда классы будут написаны, создайте класс «Волга» – родительский класс «Транспорт».
Класс «Сын» – родительский класс «Владелец».
Когда классы будут готовы. Вам необходимо описать следующий процесс. Владелец приобретает себе новую волгу. Со своим 18-ти летним сыном, у которого есть права они едут в гости к знакомым, где владелец со своим другом решают обмыть машину. Спиртного дома оказывается мало, оно быстро заканчивается, а ближайший магазин находится в 5 км от них, поэтому владелец выписывает доверенность на своего сына и отправляет его купить еще спиртного, и заодно заправить машину по дороге.
Вот моя реализация:
Класс Транспорт
Класс Транспорт
<?
// to_fill - заправить
// to_replace_owner - сменить владельца
// see_type_transport - посмотреть тип транспорта
// see_number - посмотреть номер
// quantity_of_litres - количество литров в баке
abstract class transport
{
protected $number_body;
protected $type_transport;
protected $id_number_transport;
protected $quantity_of_litres;
protected function __construct()
{
}
// Номер кузова
protected function see_number()
{
}
// Посмотреть тип транспорта
protected function see_type_transport()
{
}
// Заправить
protected function to_fill_car()
{
}
// Сменить владельца
protected function to_replace_owner()
{
}
}
?>
|
Класс Volga
<?
Класс Volga
// to_fill - заправить
// to_replace_owner - сменить владельца
// see_type_transport - посмотреть тип транспорта
// see_number - посмотреть номер
// number_body - номер кузова
require_once("class.transport_abstract.php");
class valga extends transport
{
public $number_body;
public $type_transport;
public $id_number_transport;
public $quantity_of_litres;
function __construct($number_body=1,$type_transport="Volga",$id_number_transport=24)
{
$this->number_body = $number_body;
$this->type_transport = $type_transport;
$this->id_number_transport = $id_number_transport;
}
// Метод с ФИО по которому машина определяет своего владельца
function set_the_owner_of_machine($fam,$name,$patrony)
{
$this->family = $fam;
$this->name = $name;
$this->patronymic = $patrony;
}
// Посмотреть фам имя отч владельца
function get_the_owner_of_machine()
{
echo "Владелец авто: {$this->family} {$this->name} {$this->patronymic} <br>";
}
// Доверенное лицо на которое выписывают доверенность
function set_trusted_face($fam,$name,$patrony)
{
$this->trusted_family = $fam;
$this->trusted_name = $name;
$this->trusted_patronymic = $patrony;
}
// Посмотреть фам имя отч доверенного лица
function get_trusted_face()
{
echo "Доверенное лицо: {$this->trusted_family} {$this->trusted_name} {$this->trusted_patronymic} <br>";
}
function get_trusted_family()
{
echo "{$this->trusted_family}";
}
function get_trusted_name()
{
echo "{$this->trusted_name}";
}
function get_trusted_patronymic()
{
echo "{$this->trusted_patronymic}";
}
// Номер кузова
public function see_number($number_body)
{
$this->number_body = $number_body;
}
// Посмотреть тип транспорта
public function see_type_transport()
{
return $this->type_transport;
}
// Заправить
public function to_fill_car($quantity_of_litres)
{
$quantity_of_litres = intval($quantity_of_litres);
if ( ($quantity_of_litres>0) and ($quantity_of_litres<=50) )
{
$this->quantity_of_litres = $this->quantity_of_litres + $quantity_of_litres;
} else
$this->quantity_of_litres = 0;
}
// Сменить владельца
public function to_replace_owner($family,$name,$patronymic)
{
$this->family = $family;
$this->name = $name;
$this->patronymic = $patronymic;
}
private $family; // ФИО Владельца Авто
private $name;
private $patromymic;
private $trusted_family; // ФИО лица на которое выписывают доверенность
private $trusted_name;
private $trusted_patronymic;
}
?>
|
Класс Отец или Владелец:
<?
// Класс Владелец
// $number_of_the_rights - номер прав
// $id_number_transport - уникальный номер транспорта
// $to_get_trnsrt - член класса, указывающий на приобретение авто true приобрел, иначе false
// $to_gve_out_pwr_of_attrny - член класса, выдать доверенность true выдана, иначе false
class father
{
function __construct($family,$name,$patronymic)
{
$this->family = $family;
$this->name = $name;
$this->patronymic = $patronymic;
$this->index = 0;
}
// Завести транспорт
protected function start_car()
{
// данный метод обязательно должен будет реализован
// в производном классе по условию здачи
}
public function get_family()
{
return $this->family;
}
public function get_name()
{
return $this->name;
}
public function get_patronymic()
{
return $this->patronymic;
}
public function get_id_number_transport()
{
return $this->id_number_transport;
}
// Приобретение автомобиля
public function to_get_car($car)
{
if (is_object($car)) // Хозяин может приобрести множество автомобилей, и они будут добавляться в массив
{
$index = count($this->my_car);
$this->my_car[$index]['type_transport'] = $car->type_transport;
$this->my_car[$index]['id_number_transport'] = $car->id_number_transport;
// Данный метод определяет законного хозяина машины
$car->set_the_owner_of_machine($this->get_family(),$this->get_name(),$this->get_patronymic());
echo " {$this->family} {$this->name} {$this->patronymic} приобрел автомобиль Волга <br>";
}
else {
//echo "Это не объект";
}
$this->to_get_trnsrt = true;
}
// Заправить
public function to_fill_car($car,$quantity_of_litres)
{
if (is_object($car)) // Хозяин может приобрести множество автомобилей, и они будут добавляться в массив
{
$car->to_fill_car($quantity_of_litres);
echo " Заправили автомобиль: {$quantity_of_litres} литров <br>";
}
else {
exit("Это не объект");
}
}
// Просмотреть мои автомобили
public function out_to_get_car()
{
for ($i=1; $i<count($this->my_car); $i++)
{
echo "Тип авто - {$this->my_car[$i][type_transport]}; Уникальный номер - {$this->my_car[$i][id_number_transport]} <br>";
}
}
// Проверка владельца
public function check_owner()
{
return $this->to_get_trnsrt;
}
// Продать транспорт
// был public
public function to_sell_transport()
{
// При необходимости можно легко дописать данный метод
// Мы просто поменяем владельца автомобиля и сделаем доверенность
// не действительной. Что будет означать что хозяин продал автомобиль
}
// Выдать доверенность
// был public
public function to_give_out_power_of_attorney($transport,$people)
{
$transport->set_trusted_face($people->family,$people->name,$people->patronymic);
echo "{$this->family} {$this->name} {$this->patronymic} выдал доверенность сл. лицу -> {$people->family} {$people->name} {$people->patronymic} <br>";
$this->to_gve_out_pwr_of_attrny = true;
}
// Проверим выдали ли мы довереность
public function get_give_out_power_of_attorney()
{
return $this->to_gve_out_pwr_of_attrny;
}
private $family;
private $name;
private $patronymic;
private $number_of_the_rights; // Номер прав
private $id_number_transport; // уникальный номер транспорта
private $to_get_trnsrt;
private $to_gve_out_pwr_of_attrny;
private $own;
private $my_car=array(array("type_transport"=>"","id_number_transport"=>"")); // Будем хранить все автомобили хозяина в массиве
private $index;
}
?>
|
Класс Сын:
<?
// $number_of_the_rights - номер прав
// $id_number_transport - уникальный номер транспорта
require_once("class.father.php");
class son extends father
{
public function __construct($family,$name,$patronymic)
{
// Вызываем конструктор базового класса, обратите внимание 4 -ый параметр = 0 данный параметр легко можно заменить переменной при необходимости
// если будут наследоваться новые производные классы .
parent::__construct($family,$name,$patronymic,0);
}
public function start_car($car)
{
if (is_object($car))
{
if ( ($car->get_trusted_family()==$this->family) and ($car->get_trusted_name()==$this->name) and ($car->get_trusted_patronymic()==$this->patronymic) )
echo "{$this->family} {$this->name} {$this->patronymic} завел машину<br>";
}
else {
exit("Это не объект!!!");
}
$this->str_trnsprt = true;
}
private $str_trnsprt;
}
?>
|
Главный файл :
<?
require_once("class/class.valga.php");
require_once("class/class.father.php");
require_once("class/class.son.php");
$father = new father("Bebebchikov","Andrey","Ivanovich");
$son = new son("Bebebchikov","Petr","Andreevich");
$volga = new valga();
$father->to_get_car($volga); // Приобрели машину
$father->to_give_out_power_of_attorney($volga,$son); // Отец выдал доверенность сыну
$son->start_car($volga); // Завести машину
$son->to_fill_car($volga,30); // Сын заправляет машину
?>
|
| |