Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z zachowaniem hermetyzacji.
daniel1302
post 26.12.2011, 10:52:07
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Witam mam takie klasy(klasy są pisane dla przykładu z głowy).
  1. <?php
  2. abstract class Punkt
  3. {
  4. private $x;
  5. private $y;
  6. private $type;
  7.  
  8. public function setX($x) {.......}
  9. public function getX() {.......}
  10.  
  11. public function setY($y) {.......}
  12. public function getY() {.......}
  13.  
  14. .
  15. .
  16. .
  17. }
  18. ?>

I to jest klasa główna, wszystkie punkty będą miały te cechy($x,$y, $type)
Będą punkty które posiadają tylko te cechy np:
  1. <?php
  2. class StandardowyPunkt extends Punkt
  3. {
  4. }
  5. ?>

i tutaj nie ma problemu.

Ale będą punkty które będą posiadały dodatkowe cechy np wysokośc, kolor, obrazek, zależnie od użytego grafu(mam różne typy grafów).
  1. <?php
  2. class RozszezonyPunkt extends Punkt
  3. {
  4. private $wysokosc;
  5. private $color;
  6. private $obrazek;
  7.  
  8. public function set*() { .... }
  9. public function get*() { .... }
  10. }
  11. ?>


I podczas użycia odpowiedniego grafu wybieram odpowiedni opis punktu np

  1. <?php
  2. class GrafGalileusza extends Graf
  3. {
  4. public function __construct($file, $classPunkt)
  5. {
  6. //Prasuj plik $file.XML do zmiennej $graf
  7.  
  8. if (!class_exists($classPunkt))
  9. throw new Exception(....);
  10.  
  11. //Sprawdź czy klasa dziedziczy po Punkcie
  12. $Test = new $classPunkt ();
  13. if (($Test instanceof 'Punkt') === false)
  14. throw new Exception(...);
  15.  
  16. foreach($graf as $coords => $v)
  17. {
  18. //$coords jest typu(X:Y)
  19. list($x, $y) = explode(':', $coords);
  20. $this -> graf[$x][$y] => new $classPunkt();
  21. $this -> graf[$x][$y] -> setWysokosc();
  22. $this -> graf[$x][$y] -> setColor();
  23. $this -> graf[$x][$y] -> set*();
  24. ...
  25. }
  26. }
  27. }
  28. ?>

Pytanie mam właśnie do tego momętu:
Gdy ktoś poda jako $classPunkt klasę StandardowyPunkt a klasa GrafGalileusza musi używać klasy RozszezonyPunkt, to wystąpi błąd.
  1. Co zrobić w takiej sytuacji?

Sam się strasznie gmatwam z tym.

Myślałem, żeby zrobić jedną klasę Punkt i do niej dodawać wszystkie cechy punktu które będe używał, lub ktoś sobie doda gdy będzie potrzebował innej cechy.

  1. <?php
  2. final class Punkt
  3. {
  4. private $x;
  5. private $y;
  6. private $type;
  7.  
  8. private $wysokosc;
  9. private $color;
  10. private $obrazek;
  11.  
  12. .
  13. .
  14. .
  15. }
  16. ?>


Tylko czy tutaj użytkownik nie ma za wielkiej swobody?
Co możecie mi polecić?

Chyba, że na stałe ustalać w klasie GrafGalileusza jaka klasa punktu ma być używana i np zrobic PunktGalileusza

  1. <?php
  2. class GrafStandardowy extends Graf
  3. {
  4. private $opisPunktu = 'StandardowyPunkt';
  5. }
  6. ?>


  1. <?php
  2. class GrafGalileusza extends Graf
  3. {
  4. private $opisPunktu = 'RozszeżonyPunkt';
  5. }
  6. ?>


  1. <?php
  2. class GrafOli extends Graf
  3. {
  4. private $opisPunktu = 'PunktOli';
  5. }
  6. ?>


Pytania pogrubiłem.

Proszę o odpowiedź i dziękuje.

Ten post edytował daniel1302 26.12.2011, 13:08:10
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 18:43