Article View: alt.pl.comp.lang.csharp
Article #22141Re: Jak nazywać obiekty dynamicznie?
From: 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?
Technical Details
Message-ID:
<inaqsn$sns$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!news.onet.pl!.POSTED!not-for-mailReferences:
<ina3a1$qk1$1@news.onet.pl> <op.vtdjo0eeqh41p4@mcs>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!news.onet.pl!.POSTED!not-for-mail From: "Marcin Wasilewski" <jakis@adres.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: Jak nazywać obiekty dynamicznie? Date: Mon, 4 Apr 2011 00:04:07 +0200 Organization: http://onet.pl Lines: 80 Message-ID: <inaqsn$sns$1@news.onet.pl> References: <ina3a1$qk1$1@news.onet.pl> <op.vtdjo0eeqh41p4@mcs> NNTP-Posting-Host: host-81-190-189-35.kwidzyn.mm.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1301868248 29436 81.190.189.35 (3 Apr 2011 22:04:08 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Sun, 3 Apr 2011 22:04:08 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5994 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit