niedziela, 5 maja 2013

Ikony obiektów

Pisząc program w C# (dokładniej będzie tu mowa o wyglądzie Visual Studio) często korzystacie z sugestii jakie oferuje wam intellisense czyli po prostu podpowiadanie użytkownikowi, jakie metody etc. może wywołac z danego obiektu.

Niektórzy pewnie wiedzą co oznaczają załączone ikony w sugestiach, anyway:


Oczywiście to nie są jedyne ikony, jakie występują w Visual Studio, lecz jedne z najważniejszych. Po więcej odsyłam do:

Class View and Object Browser Icons

 Szczególnie do Signal Icons

 

Klasy

Ostatnio zostały opisane struktury, więc teraz pora na klasy
Zobaczmy przykładowy kod Zostały utworzone dwa obiekty:

- Struktura kwadrat

- Klasa kwadrat

One w działaniu nie różnią się niemal niczym, oprócz tzw. "konstruktora" (ang. constructor)

Różnica jest trywialna - niektóre zmienne można podawać już na etapie tworzenia obiektu
Niektórzy mogą pomyśleć, czy to jest takie użyteczne. Odpowiedź jest bardzo prosta - tak, z kilku powodów:

- Przeglądając w sieci dokumentacje niektórych funkcji (tu kłania się strona MSDN, postaram się zrobić o tym jakiś wpis) dowiecie się, że klasy są niemal wszędzie
- Oszczędność linijek w kodzie, można zyskać na estetyce kodu (chociaż są wyjątki)
- Jeżeli czytacie to dla siebie z chęci programowania, a nie z obowiązku zaliczenia semestru, to sami się z biegiem czasu przekonacie czemu konstruktor jest użyteczny

Klasa w porównaniu do struktury wyróżnia się owymi najważniejszymi faktami
Struct Class
Dziedziczenie NIE TAK
Konstruktor NIE TAK
*Kwantyfikatory dostępu TAK TAK
*NULL reference NIE TAK
Interfejsy TAK TAK
Kopiowanie klas i struktur
Może najprościej zamieszczę kod i rezulat

W skrócie: w przeciwieństwie do struktur, zmiana wartości jednej z kopiowanej klasy ma wpływ na jej pozostałe kopie
Dziedziczenie klas:
Dziedziczenie klas, to najprościej ujmując ich nakładanie się.
Kod przykładowy:

wtorek, 26 lutego 2013

Struktury

Poprzednio został poruszony temat tablic, teraz przejdziemy do czegoś, z czego słynie programowanie obiektowe - struktury i klasy (ok, struktury, klasy potem opisze)

 Czym jest struktura?

Struktura jest swego rodzaju kontenerem na dane, mieści w sobie różne typy danych (w przeciwieństwie do tablicy), oraz wyróżnia się sposobem dostępu.

zobaczmy przykładowy kod
 (nie zwracajcie uwagi na słowo "public", struktury to rozgrzewka przed klasami, i tam się tym zajmę dokładniej)

 To jest przykładowa struktura,a teraz spróbujmy coś z nią zrobić

Rezultat ostateczny:
Tak wiem, akurat poruszona kwestia uprawnień jest trochę bez sensu, ale chodzi o przedstawienie struktur

Dwie rzeczy cechujące dodatkowo struktury w C#:
  • Mogą posiadać konstruktor
  • Mogą dziedziczyć interfejsy (ale nie same siebie! struktura nie może dziedziczyć z innej struktury)
  • Pola struktury nie mogą być inicjowane (tj. np. "new int[5]"), jeżeli nie są typu const, lub static
  • Struktura nie może posiadać domyślnego, bezparametrowego konstruktora
Konstruktory opiszę również w klasach, a dziedziczenie raczej jako część drugą klas :)

Tablice

Tablice to najprostsze kontenery danych, dostajemy się do nich przez podanie indeksu elementu
Istota tablic:

Oto jak je deklarujemy (przykład z int):
oto jak możemy je wypełnić:
 podczas deklaracji: po zadeklarowaniu: oraz jak się do nich odnosimy:
etc.

Ok, a może ktoś chce zapytać po co są te tablice? Po co wgl. przejmować się takim zapisem dla danych?

Wyobraźmy sobie aplikacje, która symuluje elektroniczny dziennik klasy (gimnazjum czy coś...) Teraz zobaczcie ten kod i zobaczcie, że jest on dużo bardziej funkcjonalny.

Plusy:
  • możemy zapytać użytkownika, i udzielić mu prawidłowej odpowiedzi
  • możemy przeszukiwać w pętlach daną wartość (to później)

Minusy:
  • tablice muszą mieć ściśle określoną ilość elementów
  • indeks tablicy nie zawsze mówi nam, jakiej wartości możemy się pod nią spodziewać
  • tablice przechowują dane jednego, i tego samego zadeklarowanego dla niej typu
A co z innymi rodzajami tablic? Co z tablicami 2D 3D 4D ...
Do tej pory opisywałem najtrywialniejsze z możliwych tablic - jednowymiarowe, jednak tematem koniecznym jest zapoznanie się z tablicą dwuwymiarową


Czym to się w zasadzie różni? Jedynie sposobem deklaracji i odwołania się do tablicy. To jak je wykorzystamy zależy od nas, czy będzie to tablica 3x3 do gry w kółko i krzyżyk, czy może będziemy pisać algorytm do rozmieszczenia statków (to chyba tablica 9x9? ;) )


Pominę tematykę Jagged Arrays (tablicy tablic / tablic zagnieżdżonych), ponieważ osobiście preferuję posługiwanie się listami, jeżeli jednak ktoś będzie nalegał to i o tym zrobię artykuł
Ciekawostka na koniec:
  • Wymiary tablic to sztuczne wyrażenie wytworzone na potrzebę ich obrazowania, tak naprawdę tablica w pamięci jest ulokowana ciągiem, przykład z debugger'a (początkujący nie muszą tego rozumieć, mogą jednak rzucić okiem na wynik w górnym oknie ignorując kod, górne okno przedstawia reprezentacje tablicy w pamięci PC).


środa, 20 lutego 2013

Betony programistyczne

SPOILER: Chyba najbardziej nerdowski wpis ;)

Trzeba czasem odpocząć od odgrzewania tego samego kotleta, chwila dla programistycznych demotów

Wstępnie:

Jak to wchodząc na facebook'a możecie zobaczyć tone nowych obrazków z pier...liarda coraz to demotywatoro-podobnych stron tak i w programowaniu znajdą się podobne źródła, np. codecrap czy jakiś profil w stylu tego profilu

Kilka perełek, które znalazłem (oczywiście to nie tylko C#)



Mój faworyt, zapewne od zwolnionego programisty, który w projekcie zostawił niespodzianke :D




CSS ;)

Do tego coś czego mi sie nie chce wklejać:
"return 42;"

Jak ktoś nie rozumie ocb. z liczbą 42 -> wikipedia :)








wtorek, 19 lutego 2013

Kontenery

Nie, nie chodzi o kontenery na śmieci (chociaż jeżeli programista napisze program używając ich zbyt wiele to w sumie i takie sie trafią).

Kontenery danych są wymaganym do omówienia elementem, bowiem istota programowania polega nie tyle, co na zwykłych zmiennych, ale także na umiejętnym używaniu ich zbiorów

Typy kontenerów:
  • tablice
  • listy
  • struktury
  • klasy
  • unie
etc.

Typów jest bardzo dużo, Ja omówię tylko te najważniejsze

W kolejnych wpisach (w kolejności): tablice -> struktury -> klasy -> listy

Ciekawostka: W C# nie występują wektory, zamiast nich stosujemy listy

niedziela, 17 lutego 2013

Parsowanie tekstu

Parsowanie / Parsing / Parser - kwestia "wydłubywania" informacji z kodu, np. wyciąganie z kodu HTML informacji o autorze strony.

Za pomocą masowych operacji na stringach można takie informacje wyciągać budując dość ciekawe programy, jeżeli wiecie czym jest program do kanałów RSS - to jest właśnie taki parser wiadomości.

Stworzyłem ten wpis ponieważ jest on małym subwpisem dla zmiennych String, chciałem nieco to zobrazować :)
Na wyjściu mamy:
17 : 02 : 1991

Oczywiście jeżeli ktoś uważniej czytał poprzedni temat o Stringach i ruszył głową:

To tak o parsowaniu w pigułce :)