🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#22138
Author: Marcin Wasilewski
Date: Sun, 03 Apr 2011 15:21
4 lines
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?
#22139
Author: Paweł Kierski
Date: Sun, 03 Apr 2011 17:42
12 lines
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?
#22140
Author: 3P
Date: Sun, 03 Apr 2011 18:16
19 lines
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?
#22141
Author: 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?

 
Re: Jak nazywać obiekty dynamicznie?
#22142
Author: Paweł Kierski
Date: Mon, 04 Apr 2011 06:21
42 lines
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?
#22143
Author: Wiktor Zychla
Date: Mon, 04 Apr 2011 07:18
37 lines
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?
#22144
Author: 3P
Date: Mon, 04 Apr 2011 19:19
17 lines
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?
#22145
Author: 3P
Date: Mon, 04 Apr 2011 19:22
26 lines
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?
#22146
Author: Marcin Wasilewski
Date: Mon, 04 Apr 2011 20:13
15 lines
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