Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Form1 to nie to samo co Form1
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004
Form1 to nie to samo co Form1

Większośc programistów piszących w VB o tym zapomina i potem nie mogą zrozumieć, dlaczego coś się dzieje inaczej niż przewidywali w przypadku form:
To, co widzicie w design-time jako formę, to NIE JEST FORMA!. To jest jedynie moduł klasy formy. To, czego używacie w kodzie to jest zmienna tworzona automatycznie przez VB i zawierajaca obiekt oparty na klasie o tej samej nazwie. Ale to nie jest to samo. Klasa pozostaje klasą, zmienna pozostaje zmienną opartą na tej klasie. Tak naprawdę VB nazywa sobie moduł klasy tak samo jak zmienną (albo raczej odwrotnie - zmienną tak samo jak klasę), ale w run-time to są dwie oddzielne rzeczy. Pisząc Form1.Caption = "Ala ma kota" nie odnosicie się do tego, co widnieje w oknie eksploracji projektu jako Form1, ale do zmiennej Form1, która zawiera obiekt należący do klasy Form1 (czyli tego, co widzicie w projekcie). Podejrzewam, że MS wprowadził ten mechanizm, żeby ułatwić korzystanie ze swojego programu początkującym, którzy nie chcą się zagłębiać w klasy, obiekty i operowanie nimi, ale tak naprawdę, w głębi, VB robi to nadal i przy bardziej zaawansowanych projektach należy o tym pamiętać. Za to programiści w VB.NET mogą spac spokojnie - z tego co słyszałem, tam takich niespodzianek nie ma, bo trzeba formę utworzyć normalnie.

Pisze to w zwiazku z tym postem i kilkoma innymi pytaniami:
http://board.freeweb.pl/posts.php?board_id=1543&topic_id=86803&division=615


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-11-2004 16:26
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004

To, czego używacie w kodzie to jest zmienna tworzona automatycznie przez VB...
Tu sprostuję to nie jest zmienna lecz dziedziczenie z klasy Form - w VB.NET jest więcej dostepnych własciwości z klasy Form, ale natomiast jest więcej gimnastyki z wywołaniem formy nie mówiąc już o przekazaniu jej parametrów, ale to kwestia oswojenia się z VB.NET - natomiast jestem całkowicie za, żeby zacząć tworzyć swoje własne klasy - więcej frajdy i każdy zadaje pytanie jak ty to zrobiłeś


_____________________________________________
Visual Basic.NET - Mercedes dla programistów

09-11-2004 18:01
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Tu sprostuję to nie jest zmienna lecz dziedziczenie z klasy Form
To ja sprostuję po raz drugi - owszem, jest to globalna zmienna obiektowa oparta na klasie o takiej samej nazwie jak ona. Poza tym dziedziczenie z klasy form to kolejna klasa! Klasa jest jedynie wzorem, a do formularzy możesz się odwoływać, co oznacza, że sa obiektami, nie klasami. Chyba sam widzisz sprzeczność. Poza tym z FORM dziedziczą tylko moduły form.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-11-2004 19:06
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

ajajaj....

I jeden i drugi po części ma rację.
Programowanie obiektowe oparte jest na obiektach, a klasy są wzorem tych obiektów.
Więc form jest i zmienną, i obiektem, i klasą
Typowe trzy w jednym

Nie bijcie się!

Chcę tylko odnieść się do stwierdzenia Piotra - tworzenie własnych obiektów jest piękne!


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

09-11-2004 19:21
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Po części zgadzam się z losmac'iem.
Jest obiektem - w tej części się zgadzam.
Jest klasą - w tej części też się zgadzam.
Ale nie zgadzam sie z tym, że jest zmienną - forma nie jest zmienną, jedynie w niej jest.
Ale to, do czego odwołujemy się pisząc np.:
Form3.Caption = "Blablabla";
to jest utworzony już przez VB obiekt, a nie to, co widzimy w oknie Project Explorer. Nie mówię tego po to, żeby się kłucić albo żeby komuś robić na złość, ale dlatego, że z tego wynika wiele faktów - od potencjalnych problemów do ciekawych możliwości.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-11-2004 20:41
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Jako, ze nie jestem autorytetem, daję link do MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconcustomizingformclasses.asp


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-11-2004 20:52
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

No proszę a mało kto pewnie o tym wiedział np. ja

Prawda jest taka, że mało kto zagłębia się w takie szczegóły.

P.S. Dopóki wszystko działa jak trzeba nikt nie będzie rozmyślał nad tym w jaki sposób to działa

Acha jezeli chodzi o to co marcin_an napisał, ze to co widzimy w design-time nie jest forma to chyba jest logiczne - bynajmniej ja to tak widzę

Pozdrawiam.

[Post edytowany dnia 10-11-2004 00:04 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

09-11-2004 23:56
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Nadal nie rozumiem jednej rzeczy.

Co w takim razie wywołuje funkcja Unload (no i nazwa formy)??

[Post edytowany dnia 10-11-2004 00:12 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

10-11-2004 00:11
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

1. Komenda Unload wg. opisu z MSDN - wyładowuje obiekt. I w większości obiektów jest to równoznaczne z ich usunięciem z pamięci i zerwaniem wszystkich powiązań. Jednak w przypadku wielu innych komenda Unload nie działa wogóle lub działa nieprawidłowo. Dotyczy to w szczególności wszystkich obiektów tworzonych w desing-time. Byćmoże właśnie dlatego nie można usunąc Unload pierwszej formy danej klasy. Tego niestety nie wiem . Ale warto zapamiętać, że w przypadku funkcji Unload jest wiele wyjątków.
2. Nazwa formy użyta w kodzie to nazwa globalnej zmiennej przechowującej odniesienie do pierwszej instancji formy danej klasy. Mówiąc potocznie - jest to nazwa ukrytej zmiennej, którą VB tworzy natychmiast po utworzeniu klasy formy.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

10-11-2004 05:43
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004


Jako, ze nie jestem autorytetem, daję link do MSDN...


Jako że ja też nie jestem autorytetem - to opiszę część moich zadań jakie muszę zaliczyć na MCP
Microsoft Certified Profesional

1. Definicja klasy
Klasa jest szablonem, projektem obiektu. klasa zawiera atrybuty - własności do przechowywania danych i metody czyli zdefiniowane operacje do manipulacji na tych danych. klasa może również definiować sposób dostępu do swoich własności i metod. Możesz myśleć o klasie jak o projekcie w oparciu o który obiekt ten zostanie utworzony

2.Abstrakcja
Tworzenie dobrze skonstruowanych klas wymaga posłużenia się abstrakcją. Myślenie abstrakcyjne, polega na dostarczeniu klasie minimalnej liczby dobrze skonstruowanych metod, które są dostępne na zewnątrz tak , aby posługiwanie się klasą było proste i intuicyjne.

3. Przykład abstrakcji
Przykładem abstrakcji jest klasa Form, która np; używa prostych własności takich jak np; Caption czy BackColor ( w VB.NET Text i BackGround ) które ustawiane są wewnątrz klasy poprzez instrukcje Let i Get. Ukrywa ona jednocześnie wszystkie złożone mechanizmy, które są z tym związane

4.Ekapsulacja
Termin ten oznacza umieszczanie w klasie wszystkich niezbędnych do jej funkcjonowania własności i metod tak aby one nie były widoczne dla programisty korzystającego z klasy. Dzięki temu dobrze zaprojektowana klasa jest złożonym mechanizmem, który obsługiwany jest przez łatwy interfejs. Zasady działania tego mechanizmu mogą być Ci nawet nie znane.

5.Obiekt
Obiekt czyli niezależna instancja danej klasy - stanowi jednostkę o stukturze i sposobie działania określonym przez klasę z której dziedziczy metody i atrybuty zdefiniowane w danej klasie i tak na podstawie jednej klasy można utworzyć wiele obiektów dziedziczących z danej klasy

Programista korzystający z danej klasy ignoruje wewnętrzną strukturę tego obiektu, wchodząc w interakcję tylko z elementami, które są dla niego dostępne...

Dane pochodzą z książki: Microsoft Official Course
2559B, którą obecnie wałkuję

[Post edytowany dnia 10-11-2004 08:48 przez Piotr T]


_____________________________________________
Visual Basic.NET - Mercedes dla programistów

10-11-2004 08:47
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Dobre uzupełnienie, też moze się przydać. Ja nie wpadłem na pomysł, żeby najpierw wytłumaczyć, co to klasa, obiekt itd. .

Jeśli w tej tak książce napisali, to przyznaję rację w kwestii tego, czy forma (obiekt) dziedziczy elementy formy (klasy).

Jedna uwaga, gdyby ktoś sobie kiedyś chciał uzupełniać wiedzę: w pkt.4 chodzi o enkapsulację, nie ekapsulację, pewnie literówka.

---

A z innej, ale podobnej beczki - czy ktoś zna sposób na sprawienie, by klasa B dziedziczyła po klasie A?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

10-11-2004 16:19
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Hmmm trzeba poczytać o dziedziczeniu

Pamiętam to z C ale w VB nie mam pojęcia


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

10-11-2004 17:04
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
a ja chciałem ich tylko pogodzić...

... I w ten właśnie sposób, moja odpowiedź stała się obiektem dalszej, gorącej dyskusji...

Cieszę się, że dyskusja dalej trwa, i nie jest pustą wymianą zdań. Postanowiłem i ja dołączyć.

Marcin_an form jest wszystkim po trochu. To znaczy, że zależnie z którego miejsca patrzysz, będzie i klasą i obiektem i zmienną. Klasą, bo to wzrór obiektu. Obiektem, bo jest oparty na klasie. Zmienną, bo form jest zmienną obiektową, za pomocą zmieniamy, ustawiamy właściwości samego obiektu.

Wszystko więc zależy od tego w jakim kontekście posługujemy się form. uff.....

PiotrT - trzymam kciuki. Dla mnie - że już zdałeś.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

10-11-2004 17:51
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004


Dobre uzupełnienie, też moze się przydać. Ja nie wpadłem na pomysł, żeby najpierw wytłumaczyć, co to klasa, obiekt itd. .

Jeśli w tej tak książce napisali, to przyznaję rację w kwestii tego, czy forma (obiekt) dziedziczy elementy formy (klasy).

Jedna uwaga, gdyby ktoś sobie kiedyś chciał uzupełniać wiedzę: w pkt.4 chodzi o enkapsulację, nie ekapsulację, pewnie literówka.

---

A z innej, ale podobnej beczki - czy ktoś zna sposób na sprawienie, by klasa B dziedziczyła po klasie A?


Nie wiem czy to Ci coś pomoże, ale jak wiadomo żeby dziedziczyć należy odwołać się do klasy bazowej np; Klasa bazowa ( instrukcje z VB.NET )

Public Class Osoba
  Public Imie as String
  Public Nazwisko as String
End Class


Teraz klasa dziedzicząca czyli pochodna

Public Class Pracownik

Inherits Osoba
  Public Imię as String
  Public Nazwisko as String
  Public pensja as Single
End Class

Aby Twoja klasa mogła dziedziczyć po innej klasie
musisz użyć słowa kluczowego Inherits
-------------------------
i dalej tzw; przesłanianie metod
Gdy w klasie pochodnej deklarujesz metodę, która moa swój dokładny odpowiednik w klasie bazowej - wtedy korzystasz z mechanizmu przesłaniania metod i tak wywołując przesłoniętą metodę z klasy pochodnej wykonywany jest kod z klasy stojącej najniżej w hierarchii klas np;


Public Class KlasaBazowa
  Public Function metoda() As String
    Return "wywołałeś metodę z klasy bazowej"
  End Function
End Class

Public Class KlasaPochodna
  Inherits KlasaBazowa

  Public Function metoda() As String
    Return "wywołałeś metodę z klasy pochodnej"
  End Function
End Class

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArg) Handles Button1.Click

Dim przyklad As New KlasaPochodna
Label1.Text = przyklad.metoda()
End Sub



_____________________________________________
Visual Basic.NET - Mercedes dla programistów

10-11-2004 17:52
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

losmac: ok, z tym się zgadzam. Ale mnie chodzi dokładnie o jedną rzecz - o to słówko "Form1" (lub inna nazwa), którego uzywamy w kodzie. Bo oczywiście wogóle, z punktu widzenia projektu to nie jest to tylko obiekt .

PiotrT: powodzenia, też trzymam kciuki, chociaż to jeszcze pewnie kawał drogi do tytułu
Co do kodu: no własnie.. VB.NET umożlwiia taki łądny zapis. Niestety, w VB nie ma nieukrytego słowa pozwalajacego wykonać taką operację. Co więcej - w VB nie da się chyba stworzyć konstrukcji typu Public Class...


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

10-11-2004 21:22
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 14 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1