PHP: объектно-ориентированный пример (домашнее задание) - PullRequest
0 голосов
/ 15 июля 2011

Как лучше всего подойти к этой проблеме?

У нас есть овцеводческая ферма с двумя машинами для сбора шерсти.

  • Овцы имеют следующие атрибуты: Возраст : Молодые и Старые. Цвет : черный и белый.

    Возрастные и цветовые значения случайные .

  • Обе машины собирают шерсть, только если овцы стары. Если не будет эхо:

Эта овца не готов к стрижке.

  • Животные должны быть обработаны в группах, для Пример 20 овец подряд. И там должно быть счетчик от общего шерсть, собранная в каждой машине, черно-белая.

Мне просто нужно некоторое руководство по синтаксису, чтобы начать. Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 июля 2011

Овцы и машины - это отдельные объекты.Вот начало:

class Sheep{

    const COLOR_WHITE = 'white';
    const COLOR_BLACK = 'black';
    const AGE_YOUNG = 0;
    const AGE_OLD = 1;

    private $_color;
    private $_age;

    public static function makeRandom(){
        $color = rand(0, 1)
            ? self::COLOR_WHITE
            : self::COLOR_BLACK;
        $age = rand(0, 1);
        return new self($color, $age);
    }

    public function __construct($color, $age){
        $this->_color = $color;
        $this->_age = $age;
    }

}

$sheep = Sheep::makeRandom();

Сообщите нам, где вы находитесь.


Замена троичного оператора:

// ...
if(rand(0, 1)){
    $color = self::COLOR_WHITE;
}else{
    $color = self::COLOR_BLACK;
{
// ...
1 голос
/ 15 июля 2011

Что ж, здесь есть кое-что, но вы знаете, что вам нужны свойства $age и $color и способы чтения этих свойств. Скорее всего, вы не хотите быть в состоянии написать их, хотя.

Итак, я бы, наверное, имел:

getAge(){ return $this->age; }
getColor(){ return $this->color; }

Теперь вы хотите назначить цвет и возраст случайным образом, что означает, что вам нужна функция rand (есть и другие варианты, но rand поможет вам) Теперь, если бы я сделал это, я бы поместил что-то вроде этого в конструктор:

// assuming we're testing for male or female
// you really should look into why this works.
$this->gender = ( rand( 0, 1 ) )? self::MALE: self::FEMALE;
// notice the self::MALE and self::FEMALE? Those are class constants.
// http://php.net/manual/en/language.oop5.constants.php
// if you want to get this question *right* you'll need to look at those

Ваши машины на самом деле довольно простые. Они только проверяют, является ли каждая овца достаточно взрослой для того, чтобы ее обрезать, и затем увеличивают счетчик, основываясь на этом.

// assuming they are looking for a count of female sheep
// and state variables 'male' and 'female' which are initialized at 0
function processSheep( $sheep )
{
    foreach( $sheep as $test )// stupid self-pluralizing nouns.
    {
        if( $sheep->getGender() == Sheep::MALE ) $this->males++;
        else $this->females++; // obviously, you're going to need to swap
                               // out one of these increments for an echo.
    }
}

function getNumberOfMales(){ return $this->males; }

С двумя машинами, чтобы рассчитать количество мужчин:

$mach1->getNumberOfMales() + $mach2->getNumberOfMales();

С массивом из n машин число мужчин:

$males = 0;
foreach( $machs as $mach ){ $males += $mach->getNumberOfMales(); }
0 голосов
/ 16 июля 2011

Расширение на TomcatExodus:

<?php 

class Sheep{

    const COLOR_WHITE = 'white';
    const COLOR_BLACK = 'black';
    const AGE_YOUNG = 0;
    const AGE_OLD = 1;

    private $_color;
    private $_age;
    private $_sheered;

    public function makeRandom() {
        $this->_color = rand(0, 1)
            ? self::COLOR_WHITE
            : self::COLOR_BLACK;
        $this->_age = rand(0, 1);
    }

    public function __construct(){
        $this->makeRandom();
    }

    public function sheer() {
        if($this->_age == 0) {
            $this->_sheered['This sheep is not ready to be sheared.'] = $this->_sheered['This sheep is not ready to be sheared.'] + 1;
        } else {
            if($this->_color == 'black') {
                $this->_sheered['black'] = $this->_sheered['black'] + 1;
            } else {
                $this->_sheered['white'] = $this->_sheered['white'] + 1;
            }
        }
    }

    public function results() {
        return print_r($this->_sheered,true);
    }
}

$batch = 20;
$sheep = new Sheep();

while($batch > 0) {
    $sheep->makeRandom();
    $sheep->sheer();
    $batch--;
}
echo $sheep->results()."\n";

?>
0 голосов
/ 15 июля 2011

Какие типы вещей есть в вашей программе?Овцы и машины.

Должны ли овцы и машины быть одного класса?Ну, они имеют одинаковые атрибуты?У машин есть возраст?Нет. У машин есть цвет?Нет. Тогда они не того же класса.

Создайте урок овец, задайте ему возраст и цвет.Конструктор класса должен случайным образом назначать значения свойств age и color, чтобы они устанавливались при создании каждого объекта sheep.

Создание машинного класса.Ему нужны свойства, чтобы удерживать, сколько черной шерсти и сколько белой шерсти она собрала.

Создание сеттеров и геттеров для свойств в обоих классах.

Теперь напишите программу, которая создает овечьи и машинные объекты и выполняет требуемую задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...