Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] idea zaprojektowania klas, jak zbudować drezwo, skladające się z wielu poziomów liści - obiektów
plisek
post 21.03.2007, 18:55:03
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 28.08.2005

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


witam,
mój problem jest dość zawiłi i nie wiem jak sobie z nim poradzic, mam nadzieje że ktoś naprowadzi mnie na rozwiązanie.

Muszę zbudować w PHP schemat BOM (tzw zestawienie materiałowe dotyczące wytwarzania jakiegos produktu).
Cytat
BOM - wykaz wszystkich części –materiałów, niezbędnych do kompletnego wykonania wyrobu elementu/ komponentu zamawianego przez klienta

Taki przykładowy, bardzo uproszczony model wytwarzania np długopisu wygląda tak:


Jak widać, schemat ten to tak naprawde drzewo - obiekt, w którego skład wchodzą róznego poziomu liście - także obiekty.

Nie wiem, jak zaprojektować taki model, przytoczony przykład to tylko uproszczony schemat na potrzeby zaprezentowania problemu.

Takich produktów finalnych, jest wiele z róznym stopniem zagnieżdzenia. Np proces produkcji długoposu to 3 poziomy, a co jeżeli mamy wyprodukować samochód?? takich poziomów będzie naprawdę sporo ("0" - produkt finalny , "n"- śrubka)

Planuję zrobić coś takiego, jak pochodzenie, tzn w chwili tworzenia obiektu, przypisać mu informacje na temat "jego" dzieci (obiektów niższego poziomu) i rodzica :
  1. <?php
  2. class Produkt{
  3. // atrybuty klasy tj nazwa, jednostka miary itp
  4.  private $_children=array(); // moze miec wiele dzieci obiektów, 
  5.  // lub nie i tablica bedzie pusta, czyli obiekt jest najniższego poziomu
  6.  
  7.  private $_parent=true;  //true-ma jakiegoś rodzica, obiekt nadrzędny
  8.  // false- nie ma rodzica, czyli jest obiektem poziomu 0 - produktem finalnym
  9.  
  10.  public function __construct($ID; $children; $parent){
  11. // przypianie wartości 
  12.  }
  13.  
  14. // inne metody klasy
  15. }
  16. ?>


Czy takie podejście do problemu jest poprawne??
Może są lepsze metody budowy takiego schematu??

Będę wdzięczny za każdą nawet najdrobniejszą sugestię ! biggrin.gif

pozdrawiam


--------------------
ThE EnD oF ThE InTErnEt !
pasy zabezpieczające
Go to the top of the page
+Quote Post
dr_bonzo
post 21.03.2007, 20:20:51
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Zajrzyj do wzorca Composite (Kompozyt).

I opisz co chcesz robic z tymi obiektami (budowac, znajdywac rodzica danego obiektu, wszysktkie dzieci, zliczyc ilosc podobiektow, itp), bo to wlasnie wplywa na sposob przechowywania danych.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
plisek
post 22.03.2007, 02:19:02
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 28.08.2005

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


jest to częśc wiekszego projektu, powstałe elmenty, czyli całe drzewa złożone z obiektów będą wykorzystywane do tworzenia min. planów projektowych, harmonogramów itp
jeżeli chodzi o ich wykorzystanie to :
-muszę budować drzewa, znając ilość dzieci, tzn każdy produkt finalny buduje sie z innej ilości elementów.
-mieć mozliwość znalezienia rodzica, dzieci, ilosci poszcegolnych poziomów, w tym także zliczyc ilosc podobiektow, wszysktkie dzieci, w pozniejszym etapie bedzie także porownanie takich struktur pod względem wydajnościowych czy finansowym


problem mam jednak z koncepcją całośći, ponieważ nigdy nic tak dużego nie tworzyłem i jakoś ogrom projektu mnie troche przytłacza. sad.gif

narazie przejrze założenia wzorca Composite, a potem bede Was dręczył pytaniami hehe

dzieki i pozdr


----edit----

rzeczywiście wykorzystanie wzorca złożonego- composite częściowo rozwiązuje mój problem.
prawde powiedziwszy nie pomyslałem aby rozgraniczyć dzieci na te, co mają potomstwo i na te, co ich nie mają. takie podejscie jest lepsze. btw dlatego sie nazywaja wzorcami hehe

Ale mam pytanie dotyczące np złego wykorzystania, zaadoptowania obiektu.
bo przecież może sie zdażyć, że obiekt(composite) , który moze posiadac dzieci, przez przypadek biggrin.gif odwoła się do referencji juz istniejącego obiektu - jego rodzica (component). czyli powstaje paradoks- bo dziecko jest zarowno potomkiem jak i rodzicem, jak uniknąc takiego działania?

pozdr

Ten post edytował plisek 22.03.2007, 02:19:33


--------------------
ThE EnD oF ThE InTErnEt !
pasy zabezpieczające
Go to the top of the page
+Quote Post
dr_bonzo
post 22.03.2007, 09:33:43
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
bo przecież może sie zdażyć, że obiekt(composite) , który moze posiadac dzieci, przez przypadek odwoła się do referencji juz istniejącego obiektu - jego rodzica (component). czyli powstaje paradoks- bo dziecko jest zarowno potomkiem jak i rodzicem, jak uniknąc takiego działania?

Juz sie pogubilem co do czego sie odwoluje, ale po prostu sprawdzasz czy takie przypisanie jest wlasciwe, i gdy nie jest to po prostu nie przypisujesz.

(poprzednia wersja brzmiala:)
Da sie tak polaczyc obiekty. Ale jesli nie chcesz takiej funkcjonalnosci to przy dodawaniu sprawdzasz czy nowe dziecko nie jest przodkiem obiektu do ktorego jest dodawane i na podstawie tego dodajesz lub nie.
Ale jak sprawdzic czy jest to przodek: szukasz rodzica (ow) rekurencyjnie w gore az do roota (korzenia drzewa) i porownujesz obiekty.

Znajdowanie rodzica, dzieci - to proste. Zliczanie tez (kompozyt sumuje wartosci dzieci). A porownywanie -- nie wiem jak przebiega.


--------------------
Nie lubię jednorożców.
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: 28.04.2024 - 18:51