|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.09.2011, 12:43 | #1 |
Пользователь
Регистрация: 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 должен выводить на страницу заданный массив компонентов, содержащий всех выше перечисленных потомков. А вот код который я попытался написать, помогите написать его правильно пожалуйста: |
19.09.2011, 12:44 | #2 |
Пользователь
Регистрация: 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"></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;"></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.' "></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(); //Вызов потомка задающего абсолютные координаты прошёл успешно |
19.09.2011, 12:44 | #3 |
Пользователь
Регистрация: 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.'"></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"></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.'"></div>'; */ } } } //Передаём массив компонентов которые наследуются от класса Component $obj_array = array($posRect,$borderRect); $rend = new Renderer($obj_array); $rend->render(); //Выводятся два квадрата [/code] |
12.03.2014, 14:59 | #4 |
Новичок
Джуниор
Регистрация: 12.03.2014
Сообщений: 1
|
И что ж тебе поставили за такое решение то?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |