Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] idea zaprojektowania klas
Forum PHP.pl > Forum > Przedszkole
plisek
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
dr_bonzo
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.
plisek
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
dr_bonzo
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.