Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z właściwościami klasy
pinefka
post 23.04.2009, 21:22:12
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.12.2008

Ostrzeżenie: (0%)
-----


Witam.

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;
        }
    
    }


Stworzenie egzemplarza:

Kod
<?php
        $citiesNumber = 10;
    
        $o = new Preparation($citiesNumber);
        $o->generateCities();
        $o->generatePopulationNumber();
        $o->generateStartPopulation();
        print_r($o->getStartPopulation());
    ?>


Pozdrawiam.

Ten post edytował pinefka 23.04.2009, 21:23:18
Go to the top of the page
+Quote Post
Noddi
post 24.04.2009, 09:43:01
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 25.12.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Atrybuty klasy mają opisywać obiekt utworzony za pomocą tej klasy, służą do wymiany danych pomiędzy metodami danej klasy - Programowanie obiektowe. Zaleca się stosować enkapsulację, aby ukryć atrybuty, które ma dana klasa i pozwalać na wykonywanie operacji takich jakich my chcemy.

Możesz stworzyć np. taką metodę.
  1. <?php
  2. public function getStartPopulation($x, $y)
  3. {
  4.    return $this->startPopulation[$x][$y];
  5. }
  6. ?>


--------------------
"Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 19:20