Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 12:43   #1
Gamestop
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 17
Восклицание Задача ООП на php

Здраствуйте, помогите пожалуйста решить данную задачу

Вот задача:

Создать вспомогательный класс Color, содержащий 3 поля типа int: $red,
$green, $blue;
Создать абстрактый класс Component, содержащий абстрактный метод
render(), поле color типа Color, поля width и heigth типа int.
Создать потомка этого класса - класс Rectangle, реализующий метод render(),
рисующий на странице прямоугольник заданной ширины и высоты, залитый
заданным цветом.
Например, код:


$color = new Color(127,0,0)
$rect = new Rectangle($color, 100, 50);
$rect->render();


должен вывести на страницу следующий код:


<div style="background-color:RGB(127,0,0);width:100px;heig ht:50px"></div>


Создать от класса Rectangle два класса потомка:
BorderedRectangle - позволяющий задавать цвет бордера;
PositionedRectangle - позволяющий задавать абсолютные координаты div'a
на странице.


Создать класс Renderer, которому в конструктор передается массив
объектов типа Component.
Объект типа Renderer должен выводить на страницу заданный массив
компонентов, содержащий всех выше перечисленных потомков.

А вот код который я попытался написать, помогите написать его правильно пожалуйста:
Gamestop вне форума Ответить с цитированием
Старый 19.09.2011, 12:44   #2
Gamestop
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 17
По умолчанию

Вот мой вариант

[code]
<?php



class Color
{
function __construct($red,$green,$blue)
{
$this->red = is_numeric($red) ? $red : $this->defaultColor;
$this->green = is_numeric($green) ? $green : $this->defaultColor;
$this->blue = is_numeric($blue) ? $blue : $this->defaultColor;
}
public $defaultColor = 100;
public $red;
public $green;
public $blue;
}
abstract class Component
{
abstract public function render();

public $color;
public $width;
public $height;
}


class Rectangle extends Component
{
function __construct($color,$width,$height)
{
if(is_object($color) && $color instanceof Color)
{
$this->color = $color;
}
$this->width = is_numeric($width) ? $width : $this->default_size;
$this->height = is_numeric($height) ? $height: $this->default_size;
}
public $default_size = 100;
function render()
{
echo '<div
style="background-color:RGB('.$this->color->red.','.$this->color->green.','.$this->color->blue.');
width:'.$this->width.'px;
height:'.$this->height.'px"&gt;</div>';
}

}


$color = new Color(100,150,75);
$rect = new Rectangle($color,100,50);
$rect->render();
//Первое сделано.. всё нормально выводится

class BorderedRectangle extends Rectangle
{
function __construct($color,$width,$height,$ borderColor)
{
parent::__construct($color,$width,$ height);
$this->borderColor = is_string($borderColor) ? $borderColor : $defaultBorderColor;
}
public $defaultBorderColor = 'black';
public $borderColor;

function render()
{
echo '<div
style="background-color:RGB('.$this->color->red.','.$this->color->green.','.$this->color->blue.');
width:'.$this->width.'px;
height:'.$this->height.'px;border: 2px solid '.$this->borderColor.';margin-left:130px;"&gt;</div>';
}
}
class PositionedRectangle extends Rectangle
{
function __construct($color,$width,$height,$ posX,$posY)
{
parent::__construct($color,$width,$ height);
$this->posX = is_numeric($posX) ? $posX : $defaultPos;
$this->posY = is_numeric($posY) ? $posY : $defaultPos;
}
public $defaultPos = 100;
public $posX;
public $poxY;
function render()
{
echo '<div
style="background-color:RGB('.$this->color->red.','.$this->color->green.','.$this->color->blue.');
width:'.$this->width.'px;
height:'.$this->height.'px;
position:absolute;left:'.$this->posX.';Top:'.$this->posY.' "&gt;</div>';
}
}
$color2 = new Color(100,50,100);
$borderRect = new BorderedRectangle($color2,200,200,' red');
$borderRect->render();
//Вызов потомка задающего бордюры прошёл успешно
$color3 = new Color(150,150,20);
$posRect = new PositionedRectangle($color3,200,200 ,350,400);
$posRect->render();
//Вызов потомка задающего абсолютные координаты прошёл успешно
Gamestop вне форума Ответить с цитированием
Старый 19.09.2011, 12:44   #3
Gamestop
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 17
По умолчанию

продолжение

class Renderer
{
function __construct($object_array)
{
//Проверяем является ли массивом
if(is_array($object_array))
{
for($i = 0;$i < sizeOf($object_array);$i++)
{
//Проверяем в цикле является-ли обьектом каждый элемент массива
if(!is_object($object_array[$i]))
{
echo 'не все элементы массива являются обьектами';
return false;
}
else
{
//Если всё хорошо, то смотрим является ли он потомком от класса компонент
if($object_array[$i] instanceof Component)
{
$this->compArray[$i] = $object_array[$i];
}
else
{
echo 'Элементы массива должны быть типа Component или наследоватся от него';
return false;
}
}
}

}
}
public $compArray = array();

function render()
{
//print_r($this->compArray);
//echo $this->compArray[0]->color->red;
//Поменяем цвет
$this->compArray[0]->color->red = 250;
$this->compArray[1]->color->red = 150;
for($i = 0;$i < sizeOf($this->compArray);$i++)
{
if(isset($this->compArray[$i]->borderColor))
{
echo '<div
style="background-color:RGB('.$this->compArray[$i]->color->red.',
'.$this->compArray[$i]->color->green.',
'.$this->compArray[$i]->color->blue.');
width:'.$this->compArray[$i]->width.'px;
height:'.$this->compArray[$i]->height.'px;
position:absolute;left:250px;Top:-250px;
border:2px solid '.$this->compArray[$i]->borderColor.'"&gt;</div>';
echo 'Цикл выводящий данные фигуры';
}
else
{
echo '<div
style="background-color:RGB('.$this->compArray[$i]->color->red.',
'.$this->compArray[$i]->color->green.',
'.$this->compArray[$i]->color->blue.');
width:'.$this->compArray[$i]->width.'px;
height:'.$this->compArray[$i]->height.'px;
position:absolute;left:'.$this->compArray[$i]->posX.';Top:'.$this->compArray[$i]->posY.';
border:2px solid orange"&gt;</div>';
echo 'Цикл выводящий данные фигуры';
}
/*echo '<div
style="background-color:RGB('.$this->compArray[$i]->color->red.',
'.$this->compArray[$i]->color->green.',
'.$this->compArray[$i]->color->blue.');
width:'.$this->compArray[$i]->width.'px;
height:'.$this->compArray[$i]->height.'px;
position:absolute;left:'.$this->compArray[$i]->posX.';
Top:'.$this->compArray[$i]->posX.';
border:2px solid '.$this->compArray[$i]->borderColor.'"&gt;</div>'; */
}
}
}
//Передаём массив компонентов которые наследуются от класса Component
$obj_array = array($posRect,$borderRect);
$rend = new Renderer($obj_array);
$rend->render();
//Выводятся два квадрата

[/code]
Gamestop вне форума Ответить с цитированием
Старый 12.03.2014, 14:59   #4
proweber1
Новичок
Джуниор
 
Регистрация: 12.03.2014
Сообщений: 1
По умолчанию

И что ж тебе поставили за такое решение то?
proweber1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Try, throw, catch; нужно ли знать ООП PHP для изучения исключений? alex455 PHP 1 01.08.2011 13:46
Задача на PHP Brabus Помощь студентам 2 12.01.2011 12:51
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
задача по ООП Lenivec** Фриланс 2 17.07.2008 15:17