Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

Obiektowe modelowanie dziedziny



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Java
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
wowo098
Go





PostWysany: Pi Lis 03, 2017 10:45 pm  OP    Temat postu: Obiektowe modelowanie dziedziny Odpowiedz z cytatem Pisownia

Witam,
Wiem, e temat jest bardziej oglny, ale umieciem go tutaj, poniewa programuje w javie i chciabym, aby uwzgldniono jej "ograniczenia" (np. brak moliwoci wielodziedziczenia klas).
Zmagam si z pewnym problemem ju dusz chwil i nie mog znale rozwizania, ktre by mnie satysfakcjonowao. Problem wyglda nastpujco, mam klas Osoba. Po klasie Osoba dziedzicz klasy Wokalista i Gitarzysta. Moemy stworzy obiekty klas Perkusista i Gitarzysta. Bardzo fajnie, ale co w przypadku gdy dana Osoba jest Wokalist i Gitarzyst jednoczenie? Czy istnieje jaki struktura klas, wzorzec projektowy, ktry by adnie oddawa takie zalenoci?
Z gry dzikuj za jakiekolwiek sugestie i pomoc.
Powrt do gry
samolot



Doczy: 26 Sty 2006
Posty: 8190
Skd: Toru

PostWysany: Pi Lis 03, 2017 11:09 pm      Temat postu: Odpowiedz z cytatem Pisownia

Jeli le myl to mnie poprawcie. Ja bym w klasie osoba doda waciwo "Funkcja", ktrej mona by nadawa wartoci takiego enumeratora, zdefiniowanego wczeniej:
1-Wokalista
2-Gitarzysta
4-Perkusista
8-Wiolczelista
16-Skrzypoek
Tworzysz now klas typu Osoba i nadajesz jej warto waciwoci Funkcja
Przykadowo:
- jeli rwn 3, co bdzie oznaczao, e ta osoba jest zarwno Wokalista jak i Gitarzyst
- jeli rwn 6, co bdzie oznaczao, e ta osoba jest zarwno Perkusist jak i Gitarzyst

_________________
Nie zadawaj bezcelowych pyta / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Wylij email
wowo098
Go





PostWysany: Pi Lis 03, 2017 11:14 pm  OP(?)    Temat postu: Odpowiedz z cytatem Pisownia

Problem w tym, e sama identyfikacja nie wystarcza. Kada z klas pochodnych bdzie miaa oddzielny zestaw metod.
Powrt do gry
samolot



Doczy: 26 Sty 2006
Posty: 8190
Skd: Toru

PostWysany: Sob Lis 04, 2017 12:24 am      Temat postu: Odpowiedz z cytatem Pisownia

Klasa pochodna dziedziczy metody "oglne" po klasie bazowej
A specyficzne metody klasy pochodnej implementujesz w klasie pochodnej.

_________________
Nie zadawaj bezcelowych pyta / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Wylij email
wowo098
Go





PostWysany: Sob Lis 04, 2017 12:59 pm  OP(?)    Temat postu: Odpowiedz z cytatem Pisownia

Dzikuj za pomoc!
Powrt do gry
marcin_an



Doczy: 26 Maj 2005
Posty: 18822

PostWysany: Pi Lis 10, 2017 2:06 am      Temat postu: Odpowiedz z cytatem Pisownia

Ehh... efekt nauczania obiektowoci na przykadzie "postaci z gier" (tudzie podobnych) w poczeniu z podchodzeniem do tworzenia programu od strony literki "M" w MVC.

Zacznij od przemylenia, jakie operacje moesz wykona na czonkach zespou. Czyli jakie metody bdziesz mia. Zestawy tych metod maj by w interfejsach, nie klasach. Konkretne klasy jedynie implementuj te metody. Nic ponad to: nie dziedzicz po innych klasach, nie tworz midzy sobhierarchii. Od tego s interfejsy, ktre mog dziedziczy po sobie - take w postaci dziedziczenia po kilku interfejsach jednoczenie. Zatem nic nie stoi na przeszkodzie, by mia interfejs WokalistaGitarzysta.

Nic oprcz... prawie na pewno braku potrzeby tworzenia takiego potworka. Na tej zasadzie mgby i dalej i tworzy WokalistaGitarzystaBasista itd. Dla standardowego, 4-instrumentowego zespou masz ju23 moliwoci. Dla typowej kapeli folk-metalowej z 7 instrumentami masz z 5 tysicy opcji i warto ta ronie bardzo szybko. Nie tdy droga - i to jest bolczka, o ktrej napisaem na pocztku.

Nie prbuj robikopii wiata w swoim programie. Definicje powinny byzalene od tego, jakie metody bdziesz musia wywoywa na swoich obiektach. Czy jakikolwiek fragment twojego programu oczekuje, e istnieje obiekt, ktry bdzie musia by jednoczenie wokalisti gitarzyst? Czy jest chocia jedna metoda, ktra przyjmuje jako argument co, co musi by wokalistORAZ gitarzyst i wywouje metody obydwu*? Jeeli nie, to znaczy, e nie potrzebujesz takiego interfejsu.

Moesz, oczywicie, mie klas implementujc obydwa interfejsy. Przykadowo:
Kod:
public final class AdamDarski implements Gitarzysta, Wokalista {
    /* ... */
}
Jeeli istnieje potrzeba, by gdzie tworzyobiekt, ktry reprezentuje je obydwa - ok.

Lub "prawie ok". O ile bowiem jest to jucakowicie w porzdku z punktu widzenia obiektowoci, to z praktycznego punktu widzenia bdzie to droga przez mk. Niemniej, jeeli potrzebujesz tego na studia i nauczyciel tak wymaga, to tak rb. Poniszy fragment dotyczy ju kwetii praktycznych, nie uczelnianych. Zauwaye, e w grach nie implementuje sipostaci, historii, zdarze, tekstw, przedmiotw i caej reszty w postaci oddzielnych klas? Tak napisana gra byaby bardzo trudna do utrzymania, kompilowaaby si nie wiadomo ile, byaby niewydajna z punktu widzenia uywanej pamici, wymagaaby umiejtnoci programowania przez osoby odpowiedzialne za tematy nieprogramistyczne i byaby trudniejsza w aktualizacji. Rozdziela si faktyczne dane od kodu, a jeli nawet juco jest w kodzie, to postaraj si tego uy wielokrotnie i umoliwi wykorzystanie w miejscach, ktrych moe nawet teraz jeszcze nie widzisz. W tym przypadku to, czego chcesz, to moliwo utworzenia obiektu, ktry dane bdzie dostawa z zewntrz (np. z jakiego pliku konfiguracjnego), a zachowanie bdzie realizowane np. przez wzorzec dekoratora.

samolot:
Miao by obiektowe. To, co zaproponowae, jest sprzeczne z podstawami obiektowoci i uniemoliwi wowo098-owi faktyczne wykorzystanie tak zbudowanych klas w rodowisku obiektowym.
____
* Ewentualnie istnieje pole klasy, ktre odnosi si do takiego czego.
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
samolot



Doczy: 26 Sty 2006
Posty: 8190
Skd: Toru

PostWysany: Sob Lis 11, 2017 12:29 am      Temat postu: Odpowiedz z cytatem Pisownia

Samolot napisa:
Jeli le myl to mnie poprawcie

I niestety, nie jestem "zawodowcem" w tej dziedzinie, moe niepotrzebnie wic mieszam. Szkoda, e tak rzadko tu teraz zagldasz, bo twoj wiedz zawsze tu wszyscy wysoko cenili. Ja tu jeszcze troch sprztam, ale ciemno widz.

_________________
Nie zadawaj bezcelowych pyta / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Wylij email
marcin_an



Doczy: 26 Maj 2005
Posty: 18822

PostWysany: Czw Lis 16, 2017 8:20 am      Temat postu: Odpowiedz z cytatem Pisownia

Przepraszam, nie miaem zamiaru cizruga. Moe powinienemby bardziej rozwin tamt wypowied, co te zrobi.

Pomijajc na chwil sensownotakiego podejcia (o tym dalej), zauwa jedn rzecz. W zaproponowanym rozwizaniu faktycznie jeste w stanie rozrni rnych muzykw: mie wokalist, perkusist, skrzypko-wokalist itp. Ale nie moesz w aden sposb spoytkowa tej informacji. Wszystkie obiekty bd miay bowiem dokadnie ten sam zestaw metod. Tutaj s dwie opcje: znale najmniejsz cz wspln albo uy sumy wszystkich moliwoci. Pierwsze oznacza, e nie bdzie adnych metod "muzycznych", czyli obiekty bd bezuyteczne. Drugie jest jeszcze gorsz sytuacj: wikszometod jest obecna, ale w rzeczywistoci nie dziaaj, bo dla danej osoby nie majsensu.

Wracajc teraz do obiektowoci: jedn z gwnych zalet podejcia obiektowego jest uniezalenienie od siebie elementw programu, swobodne zmienianie ich implementacji bez wpywu na reszt programu oraz moliwo nieograniczonego dodawania nowych implementacji. Uycie rozwizania takie, jakie zaproponowae, stoi w sprzecznoci z tymi tematami.

Nie moesz dodawa ile chcesz nowych implementacji, bo kada musi mie przyporzdkowany bit w zestawie flag, okrelajcym jej typ. W zalenoci od sytuacji, jzyka i moliwoci, liczba bitw jest zwykle ograniczona do czegopomidzy 32 a 128. Typowo: 64. Mona uywa kilku zmiennych, ale chyba zaczynasz ju czu, e jest to tylko uciekanie od problemu, ktre nie jest te pozbawione kosztw. A jeli dzisiaj nie widzisz moliwoci utworzenia 64 rnych muzykw, to podpowiem, e w hitorii informatyki niedoszacowanie moliwej liczby opcji jest powszechne. Nie szukajc daleko: w X11 (najpopularniejszy system okien) na ukad klawiatury przeznaczono 2 bity, bo uznano, e 4 ukady klawiatury wystarcz kademu. Jeli nawet mimo tego 64 wydaje sidu liczb dla czego opisujcego zesp muzyczny, to przypomn o dwch innych rzeczach. Pierwsze: w inynierii zachowuje sipewien zapas "na wszelki wypadek". Drugie: w czasie rozwoju programu na przestrzeni wielu lat powstan alternatywne implementacje tych samych muzykw. Po uwzgldnieniu powyszego okazuje si, e 64-bitowa ma duo mniejsz"pojemno": moe nawet rzdu 4-8 muzykw.

eby doda taki nowy identyfikator, trzeba poprawi kady fragment kodu, ktry bdzie sido niego dotyka. Nie moesz po prostu doda wartoci 32 dla flecisty. Nie, cay program musi wiedzie, co oznacza to 32. W przypadku identyfikatorw w postaci flag, takich jak zaproponowane przez ciebie, jest jeszcze o tyle dobrze, e w niektrych sytuacjach mona zignorowa nieznane wartoci i program si nie posypie. Ale to tylko ograniczenie skutkw problemu, a nie jego wyeliminowanie. A problem jest znaczcy. W projekcie, nad ktrym pracuje cay zesp ludzi, zsynchronizowanie ich pracy i zagwarantowanie spjnoci takich rzeczy wymaga sporego wysiku. Nawet jeeli pracuje sisamodzielnie, to nadal jest to kupa roboty, konieczno przekompilowania sporej czci programu i przetestowania jej - w tym napisania testw, ktre nie bd suyy niczemu innemu oprcz sprawdzeniu wanie dziaania tej jednej wartoci. Porwnujc to do podejcia obiektowego, gdzie jeden programista po prostu dodaje sobie klas i nie wpywa to na nic innego, jest to potworne marnowanie zasobw.

I, ostatnie, niezaleno rnych czci programu. Czciowo poruszyem to ju w poprzednim paragrafie, ale tutaj podejd do tego od strony bardziej formalnej. Istnieje co, co nazywa si Liskov substitution principle. Po polsku: "zasada podstawienia Liskov", ale nie polecam definicji zawartej na polskiej Wikipedii. W skrcie* mwi ona, e jeeli mamy dwa typy T i U, gdzie U jest podtypem T, oraz mamy kod uywajcy obiektw typu T, to kod ten musi dziaa - bez adnych zmian - take dla obiektw typu U. Przykadowo: mamy typ Zwierz oraz typy Pies, Kot, Ko i Wieloryb. Mamy kod, ktry robi co na obiektach typu Zwierz: np. maluje je cae pomaraczowo. Do kodu tego moemy podstawi Pies, Kot, Ko albo Wieloryb i dla tego kodu nie powinno mie adnego znaczenia, jakie zwierze faktycznie dosta: kade ma pomalowa na pomaraczowo. I jeli przyjdzie mi do gowy za rok, eby stworzytyp Biedronka, to kod ten powinien pomalowa biedronk na pomaraczowo bez zajknicia. Jak sam zapewne zauwaasz, uywanie rozwizania z flagami przeczy tej regule.

Niezaleno rnych czci programu jest te ograniczona faktem, e musi istnie centralny "rejestr" tych wartoci. Czy to bdzie typ wyliczeniowy, jaka lista, czy nawet kawaek papieru na biurku kadego programisty, jest to co, co niepotrzebnie spina ze sob rzeczy, ktre powinny by oddzielne.

____
* Formalna definicja jest bardziej precyzyjna i mniej zalena od konkretnego jzyka programowania. Tutaj przyjem form uproszczon, pasujc do praktycznego jej zastosowania w jzykach obiektowych w stylu C++, C# czy Javy.
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
samolot



Doczy: 26 Sty 2006
Posty: 8190
Skd: Toru

PostWysany: Czw Lis 16, 2017 10:55 pm      Temat postu: Odpowiedz z cytatem Pisownia

Z t obiektowoci jest tak, e waciwie ja j rozumiem, ale trudno j stosowa "od razu", bo to wymaga dokadnej analizy problemu pod wzgldem obiektowoci. Widz, e palnem gupstwo, ale liczyem wanie na tak wypowied jak twoja.
Poza tym uwaam, e nigdy nie jest tak, e implementuje si dla problemu od razu gotowe, bezbdne, niezalene obiekty, ktre s od razu w kadym wzgldzie doskonae. Tworzy si raczej co zblionego, a pniej si to poprawia i udoskonala. Oczywicie dogbne przemylenie problemu na pocztku pomaga wystartowa z lepsz jakoci obiektw, ale zawsze jest to proces dochodzenia do penej obiektowoci.


'

_________________
Nie zadawaj bezcelowych pyta / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Wylij email
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Java Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




Debug: strone wygenerowano w 0.19332 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |