Klasy - w jaki sposób zaprojektować

0

Witam. Mam zapewne dosyć proste (dla Was - bardziej doświadczonych programistów) pytanie. Otóż załóżmy, że chcę uporządkować swój kod za pomocą klasy w której znajdować się będą metody realizujące jakieś tam założone przeze mnie zadanie. Chciałbym jednak móc mieć wpływ na pewne ustawienia, które chcę zapisywać w oddzielnej "sekcj"i tej klasy tak żeby móc się odwoływać do nich np. w ten sposób:

MojaKlasa.Ustawienia.Ustawienie1 :='';
MojaKlasa.Ustawienia.Ustawienie2 :='';
//itp

Tutaj pojawia się właśnie mój problem w jaki sposób zrobić taką oto "sekcję" w klasie. Dodam że szukałem już na prawdę wszędzie jak coś takiego zrobić i niestety nic nie znalazłem (nie wykluczam tego że mogłem po prostu szukać źle). Chciałbym żeby metody z MojaKlasa mogły czytać te ustawienia i w razie potrzeby je zmieniać.
Proszę również o poprawienie mojej "terminologii" - dopiero co zaczynam używać takich struktur.

1

Z czym problem?
Podany przez Ciebie kod powinien działać, a twoja klasa - jako właściciel ustawień - ma do nich dostęp;
Ustawienia są polem TwojejKlasy i gotowe

2

Jakoś tak:

TUstawienia=class
  private
  FUstawienie1:String;
  FUstawienie2:String;
  public
  property Ustawienie1:String read FUstawienie1 write FUstawienie1;
  property Ustawienie2:String read FUstawienie2 write FUstawienie2;
end;
TMojaKlasa=class
  private
  FUstawienia:TUstawienia;
  public
  property Ustawienia:TUstawienia read FUstawienia write FUstawienia;
  constructor Create;
  destructor Destroy;override;
end;

implementation

constructor TMojaKlasa.Create;
begin
  inherited Create;
  FUstawienia:=TUstawienia.Create;
end;

destructor TMojaKlasa.Destroy;
begin
  FUstawienia.Free;
  inherited Destroy;
end;

Uwaga pisane z palca.

2

taka "sekcja" to zwykle oddzielnie tworzony obiekt jakiejś pomocniczej klasy.
http://pl.wikipedia.org/wiki/Agregacja_(programowanie_obiektowe)

0

Z tego co pokazałeś frragmentem kodu może lepsza była po prostu tablica lub najłatwiej TStringList. Można sobie dodatkowo ją oprogramować by w razie wygody indeksować ją od jeden, a nie od zera jeśli tak wolisz. Można też zaprogramować tę własnośc tak, że w przypadku nieistniejącego itema zostanie on dodany itp, itd.

0

Chodziło mi właśnie o agregację. Nie znałem pojęcia stąd też było moje pytanie. Czyli podsumowując jeżeli chcę robić takie oto "sekcje" muszę zadeklarować oddzielne klasy pomocnicze i potem już we właściwej klasie użyć ich poprzez zadeklarowanie w którejś z sekcji np. private - czy mam rację?

0

A nie może być po prostu coś takiego jak w załączniku? Ale jeśli się upierasz przy agregacjach, to ok - zrób jak chcesz. Ja z tym za wiele nie jestem w stanie tutaj pomóc. Gdyż nie musiałem nigdy nic takiego używać.

0

Na razie dziękuję za odpowiedzi.
@olesio - na twój kod rzucę okiem jutro bo dzisiaj już nie myślę, ale i tak bardzo dziękuję wszystkim za udzielenie się w temacie. Na razie proszę o nie zamykanie wątku gdyby pojawiły się jakieś wątpliwości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1