Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите подкинуть правильную идею, оцените мой код и поправьте?
 
 автор: asked86   (27.02.2010 в 13:01)   письмо автору
 
 

Помогите подкинуть правильную идею, оцените мой код и поправьте?
Мне нужно решить вот ту задачу, она работает, но противоречит принципам ООП, подскажите где что поправить, как бы можно было ее сделать более правильно:
Буду благодарен если дадите правильное хорошее замечание!!!

Сама задача:
Есть абстрактный класс «Транспорт». Свойства класса – «номер кузова», «тип транспорта», «Уникальный номер транспорта».
Методы: приватные – «сменить владельца»;
публичные – «посмотреть номер», «посмотреть тип транспорта», «заправить»
Есть класс «Владелец». Свойства – «ФИО», «номер прав», «уникальный номер транспорта»
Методы публичные – «Посмотреть ФИО»
Приватные – «Выдать доверенность», «Приобрести транспорт», «Продать транспорт»
Защищенные – «Завести транспорт».
Вам необходимо реализовать данные классы на 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);                        // Сын заправляет машину 
?>

  Ответить  
 
 автор: .heed   (27.02.2010 в 14:03)
 
   для: asked86   (27.02.2010 в 13:01)
 

здаётся мне, тут есть за что снизить оценку :)
>Методы: приватные ............
>публичные – .......................
мне кажется в коде нет многих таких разделений методов , на приватные и публичные.
, но по делу подсказать не могу, в oop дуб дубом

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования