Thread View: alt.pl.comp.lang.csharp
9 messages
9 total messages
Started by Marcin Wasilewski
Sun, 03 Apr 2011 15:21
Jak nazywać obiekty dynamicznie?
Author: Marcin Wasilewski
Date: Sun, 03 Apr 2011 15:21
Date: Sun, 03 Apr 2011 15:21
4 lines
1070 bytes
1070 bytes
Powiedzmy, że mam bazę, z której pobieram rekordy i chcę tworzyć obiekty o unikalnej nazwie pobieranej z pola "id" (z bazy). Pytanie brzmi jak w c# utworzyć obiekt o nazwie podawanej dynamicznie?
Re: Jak nazywać obiekty dynamicznie?
Author: Paweł Kierski
Date: Sun, 03 Apr 2011 17:42
Date: Sun, 03 Apr 2011 17:42
12 lines
1317 bytes
1317 bytes
W dniu 2011-04-03 17:21, Marcin Wasilewski pisze:
> Powiedzmy, że mam bazę, z której pobieram rekordy i chcę tworzyć obiekty
> o unikalnej nazwie pobieranej z pola "id" (z bazy).
>
> Pytanie brzmi jak w c# utworzyć obiekt o nazwie podawanej dynamicznie?
Pytanie - po co? Jak chcesz się potem przez tę nazwę odwoływać do tego
obiektu?
--
Paweł Kierski
news@pkierski.net
Re: Jak nazywać obiekty dynamicznie?
Author: 3P
Date: Sun, 03 Apr 2011 18:16
Date: Sun, 03 Apr 2011 18:16
19 lines
1372 bytes
1372 bytes
Dnia 03-04-2011 o 17:21:37 Marcin Wasilewski <jakis@adres.pl> napisał(a): > Powiedzmy, że mam bazę, z której pobieram rekordy i chcę tworzyć obiekty > o unikalnej nazwie pobieranej z pola "id" (z bazy). > > Pytanie brzmi jak w c# utworzyć obiekt o nazwie podawanej dynamicznie? > Nie da się. Możesz ewentualnie trzymać w słowniku: var slownik = new Dictionary<string, object>(); slownik[id] = WyciagnijObiektZBazyPoId(id); Chyba, że nie rozumiem o co ci chodzi. Bo trochę dziwne pytanie :) -- 3P
Re: Jak nazywać obiekty dynamicznie?
Author: Marcin Wasilewski
Date: Sun, 03 Apr 2011 22:04
Date: Sun, 03 Apr 2011 22:04
79 lines
5574 bytes
5574 bytes
Użytkownik "3P" <3p@noserver.com> napisał w wiadomości
news:op.vtdjo0eeqh41p4@mcs...
> Dnia 03-04-2011 o 17:21:37 Marcin Wasilewski <jakis@adres.pl> napisał(a):
> var slownik = new Dictionary<string, object>();
> slownik[id] = WyciagnijObiektZBazyPoId(id);
> Chyba, że nie rozumiem o co ci chodzi. Bo trochę dziwne pytanie :)
No generalnie o to jak się rozwiązuje problemy typu:
a) Nie wiem ile będę miał obiektów danej klasy, gdyż tworzone one będą na
podstawie napływających danych zewnętrznych.
b) Chciałbym się do takich obiektów odwoływać (uzyskując dostęp do
przechowywanych w nich danych) z poziomu innej aplikacji poprzez interface
ethernet, czy rs-232.
Tyle się mówi, że obiektowość pozwala modelować otaczający nas świat.
Więc chyba nic dziwnego, że raz np. w budynku może być 5 osób, a innym razem
105. Że możemy np. te osoby jednoznacznie zidentyfikować, np. na podstawie
nr-u pesel, ale w momencie pisania programu nie wiemy ile tych osób będzie.
Co więcej ilość tych osób jak i same osoby mogą się zmieniać w czasie.
I teraz programując proceduralnie bez problemu możemy mieć listy, czy tabele
(wielowymiarowe) o zmiennej długości, w których przechowujemy informacje o
danym "obiekcie", do których możemy uzyskać dostęp poprzez indeks względem
początku tabeli, czy też poprzez nazwę przechowywaną jako jedno pole w
takiej tabeli. Zresztą mniejsza o to jak to rozwiążemy, czy jako tabelę ze
wskaźnikami na strukturę, czy w jakikolwiek inny sposób.
Tak więc pytanie brzmi: jak w przypadku programowania obiektowego
rozwiązuje się tego typu problemy jak poniżej?
- nie wiemy ile będziemy mieć "obiektów" (rekordów danych) gdyż tworzymy
je dynamicznie, na podstawie napływających danych zewnętrznych,
- chcemy się później do tych obiektów (przechowywanych w nich danych)
odwoływać znając id, czy cokolwiek innego identyfikującego jednoznacznie
obiekt.
Bo jeśli teraz powiecie, że powinno się to rozwiązywać wewnątrz klasy
tworząc listę, czy tabelę ze wskaźnikami na strukturę. A w programie
posługiwać się ciągle tym samym obiektem i co najwyżej wywoływać metodę,
która podstawi nam dane konkretnego rekordu z takiej listy, czy tabeli to
będę mocno rozczarowany. Oznaczało by to przecież, że cała ta obiektówka
daje nam tylko lepszą ochronę i izolację pomiędzy różnymi częściami
programu, no powiedzmy jeszcze dziedziczenie, ale nic poza tym.
Mówi się też, że obiekt stanowi połączenie danych i metod (funkcji)
działających na tych danych. Tak więc chyba nic dziwnego, że możemy
oczekiwać możliwości przechowywania bliżej nieznanej (w momencie pisania
programu) ilości danych (obiektów). Jak też dynamicznego ich tworzenia i
usuwania w trakcie pisania programu. Co więcej nie trudno sobie wyobrazić
obiekt jednej klasy (np. budynek), który będzie mi zwracał na podstawie id,
wskaźnik obiektu w innej klasie (mieszkaniec). Z tym, że Raz tych
mieszkańców może być 10, a raz 2 i w momencie pisania programu nie możemy
przyjąć, że mamy na sztywno 5 obiektów typu mieszkaniec.
Albo inny przykład - piszemy program graficzny (powiedzmy, że wektorowy)
i raz ktoś narysuje w nim 1 kółko, a innym razem 7 kółek. Więc jak
przechowywać dane o takich "obiektach" w myśl filozofii obiektowej.
Kłopot w tym, że do tej pory pisałem głównie na mikrokontrolery
(proceduralnie), obecnie chciałbym w c# stworzyć program zbierający dane z
takich mikrokontrolerów, ale nie jestem do końca przekonany, czy dobrze
rozumiem ideę całej tej obiektowości. OK. Jasne jest dla mnie, że mamy klasy
stanowiące jakiś tam szablon (stanowiący matrycę danych i procedury (metody)
działające na tych danych), na podstawie którego możemy tworzyć obiekty, że
obiekty te mają metody, że istnieje ochrona i dziedziczenie. Ale właśnie - w
jaki sposób traktować taki obiekt... jako pojemniki na dane, które tworzę
sobie w miarę potrzeb i odpowiednio je nazywam/identyfikuje? Bo tak to
zawsze rozumiałem, a tu się okazuje, że tak się nie da.
Podsumowując czy da się:
- utworzyć obiekt,
- otrzymać wskaźnik na ten obiekt,
- przechowując ten wskaźnik mieć możliwość dostępu, modyfikacji i usunięcia
tego obiektu?
Re: Jak nazywać obiekty dynamicznie?
Author: Paweł Kierski
Date: Mon, 04 Apr 2011 06:21
Date: Mon, 04 Apr 2011 06:21
42 lines
3019 bytes
3019 bytes
W dniu 2011-04-04 00:04, Marcin Wasilewski pisze:
> Użytkownik "3P" <3p@noserver.com> napisał w wiadomości
> news:op.vtdjo0eeqh41p4@mcs...
>> Dnia 03-04-2011 o 17:21:37 Marcin Wasilewski <jakis@adres.pl> napisał(a):
>
>> var slownik = new Dictionary<string, object>();
>> slownik[id] = WyciagnijObiektZBazyPoId(id);
>> Chyba, że nie rozumiem o co ci chodzi. Bo trochę dziwne pytanie :)
>
> No generalnie o to jak się rozwiązuje problemy typu:
>
> a) Nie wiem ile będę miał obiektów danej klasy, gdyż tworzone one będą
> na podstawie napływających danych zewnętrznych.
> b) Chciałbym się do takich obiektów odwoływać (uzyskując dostęp do
> przechowywanych w nich danych) z poziomu innej aplikacji poprzez
> interface ethernet, czy rs-232.
>
> Tyle się mówi, że obiektowość pozwala modelować otaczający nas świat.
> Więc chyba nic dziwnego, że raz np. w budynku może być 5 osób, a innym
> razem 105. Że możemy np. te osoby jednoznacznie zidentyfikować, np. na
> podstawie nr-u pesel, ale w momencie pisania programu nie wiemy ile tych
> osób będzie. Co więcej ilość tych osób jak i same osoby mogą się
> zmieniać w czasie.
[...]
> Podsumowując czy da się:
>
> - utworzyć obiekt,
> - otrzymać wskaźnik na ten obiekt,
> - przechowując ten wskaźnik mieć możliwość dostępu, modyfikacji i
> usunięcia tego obiektu?
3xTAK 8-)
Podsumowując - doczytaj od podstaw. Obiekty mogą być elementami
kolekcji. Kolekcje też są - niespodzianka! - obiektami. Jedną
z kolekcji jest słownik/mapa, w której obiekty możesz prosto
(i wydajnie) indeksować wg jakiejś cechy. Zawsze możesz w prostej
liście/tablicy wyszukiwać obiektów spełniających pewne warunki.
--
Paweł Kierski
news@pkierski.net
Re: Jak nazywać obiekty dynamicznie?
Author: Wiktor Zychla
Date: Mon, 04 Apr 2011 07:18
Date: Mon, 04 Apr 2011 07:18
37 lines
2610 bytes
2610 bytes
> Bo jeśli teraz powiecie, że powinno się to rozwiązywać wewnątrz klasy > tworząc listę, czy tabelę ze wskaźnikami na strukturę. A w programie > posługiwać się ciągle tym samym obiektem i co najwyżej wywoływać metodę, > która podstawi nam dane konkretnego rekordu z takiej listy, czy tabeli to > będę mocno rozczarowany. Oznaczało by to przecież, że cała ta obiektówka trochę mylisz pojęcie klasy i instancji klasy. okej, w programowaniu obiektowym masz różne KLASY. ale klasa, rozumiana przez funkcjonalność modelowanego "bytu" może w programie mieć wiele instancji, czyli wystąpień. to oznacza, że zgodne z duchem obiektowym jest: Osoba o1; Osoba o2; .... (i zauważasz, że tablica czy kolekcja, jako obiekt typu "kontener" załatwia Ci problem "nieznanej liczby wystąpień), a NIE jest intencją programowania obiektowego tworzenie nowej KLASY w każdym wystąpieniu obiektu: Osoba1 o1; Osoba2 o2; ... > daje nam tylko lepszą ochronę i izolację pomiędzy różnymi częściami > programu, no powiedzmy jeszcze dziedziczenie, ale nic poza tym. a o wzorcach projektowych Kolega słyszał? tam dopiero poznaje się istotę programowania obiektowego. proponuję standardowo zacząć od "Head First: Design Patterns". pozdrawiam uprzejmie, Wiktor Zychla
Re: Jak nazywać obiekty dynamicznie?
Author: 3P
Date: Mon, 04 Apr 2011 19:19
Date: Mon, 04 Apr 2011 19:19
17 lines
1384 bytes
1384 bytes
A robi się to tak jak ci napisałem. Albo
List<TwojTyp> lista = PobierzWszystkieObiektyNieWiemIleIchBedzie();
i teraz
for (int i = 0; i < lista.Count(); i++)
{
lista[i].MetodaTwojegoObiektu();
}
lub
foreach (TwojObiekt aktualnyObiekt in lista)
{
aktualnyObiekt.MetodaTwojegoObiektu();
}
Re: Jak nazywać obiekty dynamicznie?
Author: 3P
Date: Mon, 04 Apr 2011 19:22
Date: Mon, 04 Apr 2011 19:22
26 lines
1670 bytes
1670 bytes
> Podsumowując czy da się: > > - utworzyć obiekt, > - otrzymać wskaźnik na ten obiekt, > - przechowując ten wskaźnik mieć możliwość dostępu, modyfikacji i > usunięcia tego obiektu? I jeszcze: W .NET nie korzysta się standardowo ze wskaźników tylko referencji. I nie usuwa się obiektów. Robi to garbage collector. Czyli C++-owe (ładnych parę lat w C++ nie pisałem ale składnia chyba ok) Obiekt* o = new Obiekt(); o->Metoda(); to Obiekt o = new Obiekt(); o.Metoda() w C#. -- 3P
Re: Jak nazywać obiekty dynamicznie?
Author: Marcin Wasilewski
Date: Mon, 04 Apr 2011 20:13
Date: Mon, 04 Apr 2011 20:13
15 lines
1617 bytes
1617 bytes
Użytkownik "3P" <3p@noserver.com> napisał w wiadomości
news:op.vtfhfls6qh41p4@mcs...
> I jeszcze:
> W .NET nie korzysta się standardowo ze wskaźników tylko referencji. I
> nie usuwa się obiektów. Robi to garbage collector.
> Czyli C++-owe (ładnych parę lat w C++ nie pisałem ale składnia chyba ok)
> Obiekt* o = new Obiekt();
> o->Metoda();
> to
> Obiekt o = new Obiekt();
> o.Metoda()
> w C#.
Dzięki wszystkim, a w szczególności Tobie za oświecenie. :)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads