[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Dwa drzewa dziedziczenia

wojtas

11/8/2006 3:02:00 PM

Witam

W tworzonej przeze mnie aplikacji probuje uzyc jak najwiecej
obiektowosci. W chwili obecnej mam dwie struktury klas (zamowienie i
pozycja zamowienia). Wygladaja one mniej wiecej tak:

zamowienie
- lazienka
- kolo
- cersanit
- kuchnia
- kolo
- cersanit

pozycja zamowienia
- lazienka
- kolo
- cersanit
- kuchnia
- kolo
- cersanit

Kazda klasa zamowienia posiada wlasciwosc pozycje zamowienia (kolekcja
pozycji zamowienia odpowiedniej klasy). Niestety nie udaje mi sie
zainicjowac tej kolekcji przy tworzeniu specjalizowanego zamowienia.
Fragment kodu:

public class KuchniaKolo : App.Zamowienie.Kuchnia.Kuchnia
{
protected List<PozycjaZamowieniaKuchniaKolo> _items;

/// <summary>
/// Pobiera lub ustawia Itemy
/// </summary>

public override List<PozycjaZamowieniaKuchniaKolo> Items
{
get
{
return this._items;
}
set
{
this._items = value;
}
}

/// <summary>
/// Okresla typ dokumentu. Wywoluje konstruktor klasy
/// bazowej wypelniajac pole documentType
/// </summary>
public KuchniaKolo() : base()
{

}

public override void InitItems()
{
this.Items = new List<PozycjaZamowieniaKuchniaKolo>();
}
.
.
.
}

W tej postaci kompilator twierdzi ze typ overridowanej kolekcji sie nie
zgadza (i w sumie ma racje)
A jesli zamiast nadpisania wlasciwosci uzyje zaslaniania:

new public List<PozycjaZamowieniaKuchniaKolo> Items
{
get
{
return this._items;
}
set
{
this._items = value;
}
}

To po wykonaniu funkcji InitItems wlasciwosc obiektu Zamowienie nadal
pozostanie rowna null.

Mam nadzieje ze opis problemu jest w miare zrozumialy, troche sie gubie
w tym dziedziczeniu, czy widzi moze ktos jakis ewidentny blad zalozen i
moze wskazac jakas alternatywe? Z gory dzieki za wszelkie sugestie.

--
Pozdrawiam
Wojtek

3 Answers

Jacek Czerwinski

11/8/2006 3:13:00 PM

0

Dnia 8 Nov 2006 07:01:49 -0800, wojtas napisa3(a):

> Witam
>
> W tworzonej przeze mnie aplikacji probuje uzyc jak najwiecej
> obiektowosci. W chwili obecnej mam dwie struktury klas (zamowienie i
> pozycja zamowienia). Wygladaja one mniej wiecej tak:
>
> zamowienie
> - lazienka
> - kolo
> - cersanit
> - kuchnia
> - kolo
> - cersanit
>
> pozycja zamowienia
> - lazienka
> - kolo
> - cersanit
> - kuchnia
> - kolo
> - cersanit
>
> Kazda klasa zamowienia posiada wlasciwosc pozycje zamowienia (kolekcja
> pozycji zamowienia odpowiedniej klasy). Niestety nie udaje mi sie
> zainicjowac tej kolekcji przy tworzeniu specjalizowanego zamowienia.
> Fragment kodu:
>
>
> Mam nadzieje ze opis problemu jest w miare zrozumialy, troche sie gubie
> w tym dziedziczeniu, czy widzi moze ktos jakis ewidentny blad zalozen i
> moze wskazac jakas alternatywe? Z gory dzieki za wszelkie sugestie.

Dla mnie ten design jest chory.
Bedziesz przepisywa3 program jak dojdzie asortyment?
Problemy które napotykasz to dopiero przedsmak prawdziwych problemów.

Widzia3e? jaki? program np. do wystawiania faktur? Wiem ?e ogl?danie
cudzych programów nie jest godne Prawdziwego Programisty, ale mo?e jednak
.....


Tak sie nie projektuje obiektowo, polecam:
http://helion.pl/ksiazki/...
Z ciekawszych my?li: zawieranie zamiast dziedziczenia.
Rozumiem u?ywasz kontenerów List od Borlanda czy MS ????
Przestaw sie na biblioteke std.
Producent (czy towar, grupa towarowa itd.) to atrybut obiektu klasy
zamówienie/pozycja/towar (którego tu nie masz)

wojtas

11/8/2006 3:52:00 PM

0

> Dla mnie ten design jest chory.
> Bedziesz przepisywal program jak dojdzie asortyment?
> Problemy które napotykasz to dopiero przedsmak prawdziwych problemów.
>
> Widziales jakis program np. do wystawiania faktur? Wiem ze ogladanie
> cudzych programów nie jest godne Prawdziwego Programisty, ale moze jednak
> ....
>

Nie chcialem zaglebiac sie w szczegoly projektu, nazwy wymyslilem zeby
mniej wiecej opisac strukture drzewiasta. Aplikacja ma przetwarzac
dokumenty EDI, jest wiele typow dokumentow, a poza tym moga wystepowac
roznice w strukturze w zaleznosci od tego od jakiego klienta dokument
przychodzi. Czyli nazwy klas w strukturze sa nieco inne:

dokument
- wdsa
- biedronka
- globi
- iftmin
- biedronka
- globi

analogicznie pozycje dokumentu

Glowna idea jest taka zeby stworzyc strukture klas odzwierciedlajaca
drzewo dokumentow. Kazda klasa specjalizowana bedzie parserem
wyciagajacym dane z dokumentu okreslonego typu. Wyciagniete dane bede
umieszczal w tabelce wspolnej dla wszystkich klas (oczywiscie nie
zawsze wypelnione bedzie 100% pol, ale od czego mamy specjalizacje).
Kazda klasa bedzie zawierac rowniez parser 'odwrotny' generujacy na
podstawie zainicjalizowanego obiektu plik tekstowy w odpowiednim
formacie.
Przy pomocy takiej struktury mozna zrealizowac konwersje pomiedzy
typami dokumentow EDI uzywajac wylacznie rzutowania obiektow.
Daleko mi do nazywania siebie <powstan> Prawdziwym Programista
<spocznij> ;) ale takie rozwiazanie problemu wydaje mi sie dosc
eleganckie, bardziej eleganckie niz jeden gigantyczny parser
wypluwajacy rozne obiekty.
Niestety nie znam programowania obiektowego dosc dobrze (skazenie
paroma latami php4 ;) ) i mam problem opisany w pierwszym poscie.
Niestety dopisywanie klas bedzie konieczne wraz z pojawianiem sie
nowych typow dokumentow i klientow, ale to chyba bezpieczniejsze niz
rozgrzebywanie jednej wielkiej klasy.

Dzieki za odpowiedz, czy moglbys mi moze napisac jak moge uzyc obiektu
z jednego drzewa klas w drugim zgodnie z tym co napisalem w pierwszym
poscie?

--
Pozdrawiam
Wojciech Antonik

Jacek Czerwinski

11/8/2006 6:56:00 PM

0

Dnia 8 Nov 2006 07:52:00 -0800, wojtas napisa3(a):

>> Dla mnie ten design jest chory.
>> Bedziesz przepisywa3 program jak dojdzie asortyment?
>> Problemy które napotykasz to dopiero przedsmak prawdziwych problemów.

> Nie chcialem zaglebiac sie w szczegoly projektu, nazwy wymyslilem zeby
> mniej wiecej opisac strukture drzewiasta. Aplikacja ma przetwarzac
> dokumenty EDI, jest wiele typow dokumentow, a poza tym moga wystepowac
> roznice w strukturze w zaleznosci od tego od jakiego klienta dokument
> przychodzi. Czyli nazwy klas w strukturze sa nieco inne:
>
> dokument
> - wdsa
> - biedronka
> - globi
> - iftmin
> - biedronka
> - globi
>
> analogicznie pozycje dokumentu

Poczytaj o wzorcach (most, proxy, fasada inne), nie ucz sie dziwol?gów. To
jak z p3ywaniem - najgorzej jak sie kto? ?le nauczy.
Wzorce to nie panszczyzna, to sposób patrzenia, okulary. Najgorzej zabia
'wra?liwo?a'.


> Dzieki za odpowiedz, czy moglbys mi moze napisac jak moge uzyc obiektu
> z jednego drzewa klas w drugim zgodnie z tym co napisalem w pierwszym
> poscie?

Poczytaj ksi?zke, nie da sie na newsach
Na przyk3ad t?, ja sie klepn?3em w g3owe
Projektowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II
Autorzy: Alan Shalloway, James R. Trott
jest tam prawie dok3adnie twój przyk3ad.