Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Rozszerzanie klasy., Jaką strategię wybrać ?
tolomei
post
Post #1





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Witam.

Mam pytanie projektowe.
Tworzę system generujący umowy.
Posiadam w nim klasę Worker zawierającą informacje o pracowniku. Z tym, że do jednej umowy potrzebuję 10 różnych informacji o pracowniku, a do innej umowy potrzebuję jedynie 4 właściwości(takich przypadków może być więcej - do rachunku potrzebuję jedynie imię i nazwisko).
Stąd moje pytanie:
Powinienem utworzyć klasę Worker zawierającą 4 właściwości, a potem rozszerzać ją do WorkerExtended zawierającej 10 właściwości?
Może powinienem utworzyć abstrakcyjną klasę Worker oraz dwie dziedziczące po niej?

Będę bardzo wdzięczny za podpowiedź.
Dzięki.

Ten post edytował tolomei 7.06.2012, 22:52:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Hmmm a dla mnie to co napisałeś skowron-line jest lekko mówiąc.. nie zrozumiałe. Jeżeli będę chciał pobrać markę samochodu to po co mi wiedzieć jaki ten samochód ma silnik, przebieg czy kolor? Druga sprawa to dziedziczenie, które zaproponowałeś - co gdy z worker_companies będę potrzebował danych firmy a nie pracownika? pisać drugą klasę worker_companies, która będzie rozszerzała companies? Trochę absurdalne

Wg mnie to klasa umowy powinna decydować, które dane powinny być dostarczone:
  1. <?php
  2.  
  3. abstract class Umowy {
  4.  
  5. protected $_worker;
  6.  
  7. protected $_company;
  8.  
  9. public function addWorker($worker) {
  10.  
  11. $this->_worker = $worker;
  12. }
  13.  
  14. public function addCompany($company) {
  15.  
  16. $this->_company = $company;
  17. }
  18.  
  19. public function setFields($fields) {
  20.  
  21. $this->_worker -> setFields($fields);
  22. }
  23. }
  24.  
  25. class UmowaA extends Umowy {
  26.  
  27. public function initWorker() {
  28.  
  29. $this->setFileds(array('id', 'imie', 'nazwisko'));
  30. }
  31. }
  32.  
  33. class UmowaB extends Umowy {
  34.  
  35. public function initWorker() {
  36.  
  37. $this->setFileds(array('id', 'adres'));
  38. }
  39.  
  40. public function initCompany() {
  41.  
  42. ....
  43. }
  44. }
  45.  
  46. /**
  47.  * Umowa A
  48.  */
  49. $w = new Worker(67);
  50.  
  51. $u = new UmowaA();
  52. $u -> addWorker($w);
  53. $u -> initWorker();
  54.  
  55.  
  56. /**
  57.  * Umowa B
  58.  */
  59. $w = new Worker(1267);
  60. $c = new Company($w -> getWorkerId());
  61.  
  62. $uB = new UmowaB();
  63. $uB -> addWorker($w);
  64. $uB -> addCompany($c);
  65. $uB -> initWorker();
  66. $uB -> initCompany();


$this->_worker -> setFields($fields); dodaje do zapytania odpowiednie pola

Odpada problem z różną ilością danych i dziedziczeniem

Ten post edytował CuteOne 11.06.2012, 06:23:34
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 10:38