Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [C++/Java]Przechowywanie parametrów aplikacji graficznej
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, mamy taką często sytuację że w programie graficznym mamy coś takiego jak "Opcje", "Parametry" czy coś w tym stylu. Wpisujemy je np. w różnych inputach, textareach, radio buttonach a potem zapisujemy ustawienia. Dostęp do tych ustawień musi być z całego programu, z każdej klasy, która ich wymaga. Często jest tak że te klasy są gdzieś bardzo głęboko w hierarchii i nieodpowiednim jest pisanie czegoś takiego

Kod
//taki glupi przyklad
options = UI->getOptions();
UI->dom->parter->pokoj->krzeslo->setOptions(options)


Wiem że takie rozw. jak powyżej jest nieeleganckie i łamie zasady programowania obiektowego. Drugim rozwiązaniem może być przechowywanie tych ustawień w klasie statycznej i prosty dostęp za pomocą Opcje::parametr1. Jednak to mimo że wygodne, ponoć też jest niepoprawne (zalatuje zmiennymi globalnymi rodem z C).

Jaki jest wg Was najlepszy sposób na przechowywanie i przekazywanie tych danych? Lub ogólniej, jeżeli klasa "krzesło" (z powyższego przykładu) potrzebuje jakiejś danej z klasy "UI", to jak mu ją przekazać w najbardziej elegancki sposób?

Pozdrawiam

Ten post edytował MateuszS 22.11.2013, 19:27:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Dzięki za odpowiedź. Mam kilka wątpliwości

Cytat
Chodzi o to, ze kazdy element UI przetrzymuje referencje do rodzica, czyli "krzesła zna pokój"" w ktorym się znajduje, "pokój" zna "dom" a "dom"


Ale czy przypadkiem wtedy nie mamy wężyka w drugą stronę?

Cytat
Ale co jeśli ze zmianą pzycji musi się wiązać jakaś inna operacja? Na przykład chcemy żeby przy zmianie pozycji sprawdzone zostało czy ten obiekt nie koliduje z innym obiektem. Jeśli zmienimy jedynie wartość x wewnętrznej referencji do pozycji obiektu wtedy coś takiego się nie stanie. Rozwiązaniem jest wprowadzenie do klasy "Obiekt3d" nowej metody "ustawPozycje(Wektor3 pozycja)"

No tak, pisałem o tym, ale tu mamy dziedziczenie, jest trochę inna sytuacja. Ale nawet gdy nie będzie dziedziczenia to wężyk pozostanie tyle że zakończy się metodą a nie bezpośrednim dostępem do pola.

Cytat
Aha i apropos tego UI. Jest jeszcze jedno rozwiązanie, jesli na prawdę nie chcesz zmiennych globalnych lub po prostu chcesz mieć wiele instancji jednej klasy: poszukaj w internecie na temat wzorca projektowego "Composite".

Piszę na razie w Qt, tam w sumie jest podobny mechanizm, przekazywania rodzica ale to raczej nie rozwiązuje mojego dylematu bo wężyk zostanie.

Może przybliżę bardziej mój "problem". Mianowicie mam główną klasę odpowiedzialną za okno. Klasę Ramka, która jest pewnym obszarem tego okna oraz klasę Punkt, która jest obszarem w Ramce (może być kilka punktów w ramce). Oto pseudokod, który to reprezentuje:

http://wklej.org/id/1186476/

Jak widać, skoro wszystkie buttony są w klasie GUI, pobierając wartości z tych "inputów", "buttonów", trzeba je tak zapisać aby dostęp do tych ustawień był z całej aplikacji. Metody, które znam to tylko wężyk ramka->punkt->setUstawienie(ustawienie) lub klasa statyczna (oraz zaproponowana przez Ciebie klasa z dostępem globalnym). Ale może moja koncepcja jest zła? Wydaje mi się że słusznie nie zastosowałem tutaj dziedziczenia, bo jak napisał pan Grębosz w swojej książce, dziedziczenia używamy gdy jedna klasa jest jakimś podtypem innej a nie gdy jedna zawiera się w drugiej.
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:01