Mam do napisania program do rozwiązywania problemu komiwojażera. Chciałbym go napisać w sposób obiektowy i jako, że jestem nowy w OOP mam pewnie głupie pytanie:
Jak to jest z właściwościami klasy? Deklarujemy je tylko wtedy gdy będą zwracane przez egzemplarz klasy? Czy również wtedy kiedy będą używane pomiędzy różnymi metodami w obrębie danej klasy? Bardzo bym prosił o wytłumaczenie mi w miarę dokładnie zasad deklarowania właściwości.
Co do samego kodu:
Jeżeli wyświetlę poprzez print_r metodę getStartPopulation() to pokazuje mi się cała tablica, ale jak uzyskać dostęp do konkretnej komórki tej tablicy? Czy tylko poprzez zadeklarowanie zmiennej $startPopulation jako public i odwoływanie się do niej poprzez np. $o->startPopulation[12][4]?
Kod mojej klasy:
Kod
<?php
class Preparation
{
/**
* Liczba miast dla ktorej bedzie przeprowadzone szukanie najkrotszej drogi.
* @var int
*/
private $citiesNumber;
/**
* Tablica ze wsporzednymi miast.
* @var array
*/
private $citiesCoordinates;
/**
* Ilosc osobnikow w populacji.
* @var int
*/
private $populationNumber;
/**
* Tablica z populacja poczatkowa.
* @var array
*/
private $startPopulation;
/**
* Konstruktor klasy Preparation.
* @param int $citiesNumber
* @return void
*/
public function __construct($citiesNumber)
{
$this->citiesNumber = $citiesNumber;
}
/**
* Generator wspolrzednych poszczegolnych miast.
*/
public function generateCities()
{
$this->citiesCoordinates = new ArrayObject(array());
$i = 0;
while ($i < $this->citiesNumber)
{
$xCoord = mt_rand(-5000, 5000);
$yCoord = mt_rand(-5000, 5000);
$this->citiesCoordinates->append(array("x" => $xCoord, "y" => $yCoord));
$i++;
}
}
/**
* Generator liczby osobnikow.
*/
public function generatePopulationNumber()
{
$this->populationNumber = mt_rand(40,60) - 1;
}
/**
* Generator populacji poczatkowej.
*/
public function generateStartPopulation()
{
$this->startPopulation = new ExtendedArrayObject(array());
$i = 0;
while ($i < $this->populationNumber)
{
$random = $this->startPopulation->randomRangeArray($this->citiesNumber - 1);
$this->startPopulation->append($random);
$i++;
}
}
public function getStartPopulation()
{
return $this->startPopulation;
}
}
class Preparation
{
/**
* Liczba miast dla ktorej bedzie przeprowadzone szukanie najkrotszej drogi.
* @var int
*/
private $citiesNumber;
/**
* Tablica ze wsporzednymi miast.
* @var array
*/
private $citiesCoordinates;
/**
* Ilosc osobnikow w populacji.
* @var int
*/
private $populationNumber;
/**
* Tablica z populacja poczatkowa.
* @var array
*/
private $startPopulation;
/**
* Konstruktor klasy Preparation.
* @param int $citiesNumber
* @return void
*/
public function __construct($citiesNumber)
{
$this->citiesNumber = $citiesNumber;
}
/**
* Generator wspolrzednych poszczegolnych miast.
*/
public function generateCities()
{
$this->citiesCoordinates = new ArrayObject(array());
$i = 0;
while ($i < $this->citiesNumber)
{
$xCoord = mt_rand(-5000, 5000);
$yCoord = mt_rand(-5000, 5000);
$this->citiesCoordinates->append(array("x" => $xCoord, "y" => $yCoord));
$i++;
}
}
/**
* Generator liczby osobnikow.
*/
public function generatePopulationNumber()
{
$this->populationNumber = mt_rand(40,60) - 1;
}
/**
* Generator populacji poczatkowej.
*/
public function generateStartPopulation()
{
$this->startPopulation = new ExtendedArrayObject(array());
$i = 0;
while ($i < $this->populationNumber)
{
$random = $this->startPopulation->randomRangeArray($this->citiesNumber - 1);
$this->startPopulation->append($random);
$i++;
}
}
public function getStartPopulation()
{
return $this->startPopulation;
}
}
Stworzenie egzemplarza:
Kod
<?php
$citiesNumber = 10;
$o = new Preparation($citiesNumber);
$o->generateCities();
$o->generatePopulationNumber();
$o->generateStartPopulation();
print_r($o->getStartPopulation());
?>
$citiesNumber = 10;
$o = new Preparation($citiesNumber);
$o->generateCities();
$o->generatePopulationNumber();
$o->generateStartPopulation();
print_r($o->getStartPopulation());
?>
Pozdrawiam.