🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #22141

Re: Jak nazywać obiekty dynamicznie?

#22141
From: Marcin Wasilewski
Date: Sun, 03 Apr 2011 22:04
79 lines
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-mail
References: <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