Cezary Walenciuk Programowanie

Przesadzone Niedawno, mój młodszy kolega, z którym się przyjaźnię zadał mi sporo ciekawych pytań na temat “środowiska pracy”. Tak, jak ja rok temu, to teraz on stawia swoje pierwsze kroki w tym biznesowym świecie.

Zapytano go, czy jest zainteresowany pewną konkretną ofertą pracy w dziale IT ?. Kiedy pierwszy raz o niej usłyszał to wydawała się być OK.

Potem jednak otrzymał listę wymagań, która okazała się długa.

Stwierdził, że pewnie istnieje jedynie niewielka grupka ludzi, która spełnia postawione wymagania.

Zapytał mnie “Czy firmy są świadome tego , że nie znajdą “perfekcyjnego” kandydata ?”.

Odpowiedź na to pytanie jest bardziej złożona, niż z pozoru mogłoby się wydawać.

Karta SD Akurat piszę aplikację w Javie na telefony z systemem Android. Aplikacja w dużej części korzysta z karty SD. Pytanie “jak w ogóle sprawdzić czy karta ta istnieje ?”. Aplikacja, próbując uzyskać dostęp do czegoś ,czego nie ma, może wywalić wyjątek. Jest to standardowy przykład na to, że w urządzeniach komórkowych nigdy nie ma pewników, zwłaszcza w Android.

Pierwszy sposób na sprawdzenie istnienia karty jest prosty. Pobieramy folder, w którym powinna się znajdować zawartość karty SD. Jeśli folder ten nie istnieje, to znaczy , że karty nie ma..

Statystka

Wraz z procesem przenoszenia bloga zastanawiałem się , po co w ogóle go piszę. Fakt początkowo chodziło o dokształcanie samego siebie i wciąż jest to solidny powód. Stary blog stał się na tyle popularny ,że niektórzy znajomi znali mnie, zanim ja ich poznałem, co było dosyć fajnym przeżyciem.

Jednak, gdy blog zaczyna działać i zdobywać jakieś wyświetlenia to na chwile odkładasz swoją pasję na bok i sztywno analizujesz magiczne wykresy..

Przenosiny

Po 8 miesiącach szukania rozwiązań, przenoszenia postów ręcznie oraz pisania własnych styli CSS - w końcu strona ta istnieje. Gdy pokazałem swoim kolegom ze studiów PJWSTK ten styl metro byli pod wrażeniem, dopóki nie zobaczyli adresu localhost. Oczywiście zostałem wyśmiany.

Pomimo braku ingerencji z mojej strony stary blog dobrze się trzymał i nawet pojawili się jacyś fani.

Jednak blogger irytował mnie do tego stopnia ,że nawet rozważałem jego całkowitą destrukcję.

Losowość W niektórych przypadkach klasa Random nie wystarcza do generowania losowych liczb. Problematyka generowania losowych wartości polega na tym ,że są one generowane według określonego wzoru.

Co oznacza , że tak naprawdę są one liczbami pseudolosowymi. Jeśli ten wzór nie jest dobry wtedy nasza”losowość” nie jest aż taka bardzo „losowa”.

Taka losowość jest w porządku jednak w większości przypadków wciąż nie można jej porównać do rzutu kostką, czy monetą.

ASP Roles W poprzednim wpisie stworzyłem proste uwierzytelnienie przy użyciu jednej klasy statycznej FormsAuthentication. Klasa w metodzie „FormsAuthentication.RedirectFromLoginPage” stworzyła ciasteczko użytkownika ,a w metodzie „FormsAuthentication.SignOut()” wylogowała wcześniej uwierzytelnionego użytkownika.

W teorii te proste funkcje wystarczają do stworzenia własnego systemu uwierzytelniającego, który polegałby tylko na wbudowanych mechanizmach zapisu stanu uwierzytelnienia ASP.NET.

CSV Linq

W pracy dla testowania jednej aplikacji “X” musiałem szybko napisać kod, który tworzyłby plik CSV na bazie danej kolekcji. Miałem ułatwione zadanie, ponieważ znałem kolekcje i znałem jej elementy, znałem także właściwości elementów. Jednym słowem napisanie takiego programu nie zajęło mi dużo czasu.

W trakcie tego zadania napisałem prostą metodę rozszerzeniową LINQ , która na bazie kolekcji , która dziedziczy po interfejsie IEnumerable<T> pisze jedną linijkę pliku CSV. Metoda ta była bardzo pomysłowa, ponieważ jest uniwersalna i działa nie tylko dla tablicy elementów . Może to być lista, bądź inna kolekcja musi ona jedynie dziedziczyć po interfejsie IEnumerable<T> .

DataPicker W aplikacjach web uzyskujesz różne informacje od użytkowników za pomocą textboxów i checkboxów. Często jednak musisz uzyskać informacje kalendarzowe od użytkowników, np. użytkownik w filtrowaniu rekordów danych w aplikacji web może użyć dat.

 

Jednak jak te dane uzyskać od użytkownika. Sprawa wydaje się prosta, wystarczy dać użytkownikowi textbox i dołączyć do niego jakąś prostą walidację. Tak, coś w tym stylu.

WyszukajRaz na w miesiącu piszę swoje imię i nazwisko do przeglądarki ,aby sprawdzić jakie strony się do mnie referują. Blog stał się na tyle popularny ,że jest pierwszy na liście wyszukiwania, co mnie bardzo cieszy.

Jednak przeszukując dalej trafiłem na stronę http://waatp.pl-pol.com/

Serwisowi dużo brakuje ,ale pierwszy raz widzę stronę, która bezpośrednio wyszukuje informacje o osobie po jego imieniu i nazwisku.

Sort Linq W tym wpisie opiszę program który:

 

Tworzy obiekt klasy “Person”, która reprezentuje osobę z rolą i imieniem.

  • Wyświetla kolekcje List<Person> w kontrolce GridView na stronie ASP.NET.
  • Sortuje kolekcje rosnąco i malejąco po jej właściwościach przy użyciu własnych metod bazujących na LINQ.

Z góry także mogę obiecać ,że rozbuduję ten program, ponieważ ostatnio w mojej pracy musiałem napisać bardziej zaawansowana wersję takiego sortowania. Chciałbym zachować zdobytą wiedzę w moich notatkach.

Na początek zacznijmy od klasy “Person” , która będzie reprezentować encje osoby. Posiada ona tylko dwa pola: nazwę i rolę. Nie ma tutaj żadnej rewelacji chcę uprościć ten przykład aż do bólu.

String / Enum Nie ma wbudowanego rzutowania z napisu string na wartość wyliczeniową. Nie można też takiego rzutowania jawnego napisać.(albo tylko tak mi się wydaje) Problem polega na tym ,że string jest klasą ,a enum jest strukturą. Co oznacza ,że konwersja taka nie powinna istnieć. Jest to nawet określone w standardzie języka C#.

Jednakże możesz napisać własną metodę rozszerzeniową, która za ciebie tą konwersje wykona.

Turniej MTG W poniedziałek 9 Maja odbyły się “Lubelskie Dni Informatyki”. Dziwnie się wtedy złożyło,że zaraz następnego dnia w Białej Podlaskiej odbył się turniej “Magic The Gathering”. Te dwa wydarzenia sprawiły, że to był dla mnie naprawdę dobry tydzień.

 

Dla przypomnienia na “Lubelskich Dniach Informatyki” wygrałem dwie książki, pendrive i masę innych rzeczy. W sumie cena tych nagród wynosiła ok. 300 zł. Te wydarzenia opisałem tutaj.Mając taką dobrą passę liczyłem, że na turnieju 10 maja może nawet i wygram, ale osobiście w to nie wierzyłem.

Tyle, jeśli chodzi o krótki wstęp o sobie. Co wydarzyło się na turnieju i dlaczego w ogóle się odbył?

Indeksowanie

Windows 7 indeksuje wybrane zawartości za każdym razem, gdy ulegają zmianie (zmodyfikowany plik, stworzony plik). Ta usługa indeksująca sprawia ,że system Windows 7 natychmiastowo odnajduje pewne pliki w wybranych miejscach.



Jednakże jeśli nie przeszukujesz swojego dysku dość często albo masz wiele partycji, których nie przeszukujesz często (np. masz zainstalowane programy i Windows na partycji “C” ,a reszta danych jest na D [tak jest na moim laptopie]) wtedy możesz wyłączyć tę usługę ,aby zwiększyć wydajność systemu.

TwitterFeed Wczoraj czytając gazety w empiku natknąłem się na artykuł o tej aplikacji internetowej.

Gazety nie kupiłem ,ale treść artykułu zapamiętałem. To jeden z głównych powodów, dla których kocham empik. 

TwitterFeed jest to aplikacja, która za nas umieści wpisy z blogu na Facebook-a czy Twittera. Korzysta ona  ze źródła więc nie jest  dostosowana do konkretnego silnika blogowego czyli inaczej mówiąc działa dla każdego blogu np. dla bloggera. Swoje wpisy umieszczałem na Facebook już nie raz. Jestem ciekaw czy mogę zrobić to automatycznie.

Lock

Jak zlikwidować komunikat - Saving changes is not permitted. The changes that you have made require the following tables to be dropped and re-created.

ERROR:


SQL SERVER Komunikat

“Saving changes is not permitted. The changes that you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created”.

Ten błąd pojawia się, gdy używając SQL Server 2008 Management Studio chcesz zmodyfikować strukturę tabeli gdy SQL Server musi skasować i odtworzyć tabele aby wprowadź twoje zmiany.   

yield

Jak pokazałem w poprzednim wpisie proces tworzenia kolekcji wyliczeniowej jest złożony. W C# istnieją jednak iteratory, które potrafią zautomatyzować ten proces.

Iterator jest to blok kodu, który uzyskuje (yield) w odpowiedniej kolejności wartości. Dodatkowo iterator nie jest częścią klasy wyliczeniowej. Określa on tylko sekwencje, w której enumerator powinien zawracać wartości. Czyli iterator jest tylko opisem sekwencji wyliczania, dzięki któremu kompilator w C# może stworzyć swój własny enumerator.

IEnumerable

Używając pętli foreach mogę przez iteracje uzyskać dostęp do każdego pojedynczego elementu w kolekcji. Co się dzieje w środku pętli i jak to jest możliwe. Ta tematyka jest istotna, gdy chcesz stworzyć swoją własną kolekcje i przekonując się ,że mechanizm pętli foreach nie zostanie dodany automatycznie.

W C# istnieje kilka sposobów na zautomatyzowanej tego procesu.

Fiszki Jednym słowem, jeśli chodzi o języki obce, to trzeba uczyć się ich we własnym zakresie. Zwłaszcza jeśli tu i teraz wiesz, że będzie ci to potrzebne.

Będąc w empiku natknąłem się na fiszki. Szczerze pomysł jest prosty i genialny.

Logo

Grupa .NET w Białej Podlaskiej nie jest duża, ale jak na nasze małe miasto jest to jedyne sensowne kółko programistyczne.

Grupa.NET została założona w 2007 roku, kiedy jeszcze na uczelni PSW nie było dobrego sprzętu i szczytem programistycznym było Visual Studio 2003.

Czasy jednak się zmieniły. Dzięki dotacjom z unii europejskiej uczelnia w Białej Podlaskiej się rozwinęła i nadal rozwija. W następnym roku będzie czynny akademik i inne obiekty.

Celem grupy .NET jest pomaganie studentom w rozwijaniu swoich pasji. Obecnie kółko  organizuje różne kursy do certyfikatów Microsoftu, ja byłem tylko jednym z nich. Dla mnie ta Grupa.NET spełnia swój cel.

Oznajmiając mój pomysł na konferencję w Białej Podlaskiej przygotowywałem animacje członków Grupy.NET.

Shadow

Oto kolejna ilustracja narysowana w grafice wektorowej.

Podobnie jak ilustracje wcześniejsze i ta powstała jako reklama na konferencję ITAD 2011 w Białej Podlaskiej.

Z tego, co pamiętam ten rysunek powstał 2 dni przed prezentacją/reklamą, dlaczego powinnyśmy zorganizować konferencje ITAD w Białej Podlaskiej.

Lady

Kolejna ilustracja narysowana specjalnie na potrzebę konferencji ITAD w Białej Podlaskiej w 2011 r. Była to moja druga ilustracja narysowana w Ilustratorze i tym razem skorzystałem ze swoich notatek.

Jak widać poniżej rysunek bazuje na moim "bazgrole" z zeszytu.

O ile dobrze pamiętam ten rysunek w moim zeszycie powstał na wykładzie z inżynierki programowania.

To właśnie na tym  wykładzie zdecydowałem się zmienić swojego promotora.

Była to dobra decyzja.

Pomysł ITAD Biała Podlaska nie jest dużym miastem. Obecnie, gdy mamy 16 województw, a nie 49, miasto przestało być stolicą województwa bialskopodlaskiego. Znajduje się w województwie lubelskim. Słyszałeś kiedyś o lotnisku (duże) w Białej Podlaskiej? O innych ośrodkach przemysłowych? No właśnie, w tej sprawie można by się rozpisywać bez końca.

Blog rośnie

Ostatni miesiąc mnie zaskoczył ponad 8.000 wyświetleń w okresie jednego miesiąca. Jest to też dwa razy więcej wyświetleń niż poprzednim miesiącu.

Zaznaczam też ,że nie udostępniam swoich wpisów na innych blogach czy forach. Trafienia w 99% biorą się z wyszukiwarki Google.

Covariant

Obiekt może przetrzymywać jakąkolwiek wartość bądź referencje do każdego typu.

Poniższy kod jest OK

 

 

int myNumber = 12;
string myString = "Moto-myszy z Marsa";
object myObject = myNumber;
object myObject2 = myString;

Pamiętaj, że klasa string dziedziczy po klasie Object, więc wszystkie klasy String są obiektami. Struktura nie może dziedziczyć po klasie, ale istnieją pewne wyjątki na poziomie wbudowanej kompilacji. W pewnym sensie struktura int dziedziczy po object, więc ona też może być umieszczona w object. Jednakże, w “pewnym sensie”nie jest to, tak do końca prawdą, gdyż int jest typem wartościowym i ta różnica później będzie istotna.

Generic

Poprzednim razem utworzyłem własną klasę generyczną, która działa jak drzewa binarne. W .NET można też utworzyć generyczną metodę od T.

W generycznej metodzie możesz określić typ parametrów i typ zwracany jako T, w podobny sposób jak wcześniej użyłem tego zapisu do deklaracji klasy generycznej.

Generyczne metody są zazwyczaj używane w połączeniu z generycznymi klasami. W końcu, w takich metodach zazwyczaj parametrem i typem zwracanym jest klasa generyczna.

Generyczne metody są definiowane w podobny sposób jak generyczne klasy. Na przykład, możesz użyć metody Swamp<T> , która zamienia wartości pomiędzy parametrami. Ta funkcja jest użyteczna bez względu na typ danych. Sama metoda może też być statyczna.

Generic Class NET zawiera wiele klas generycznych. Do pokazania, definiowania własnych klas generycznych używa się często tego samego przykładu: drzew binarnych. Nie ma takiej klasy w .NET, która zachowywałaby się jak drzewa binarne. Tak jak powiedziałem wcześniej ten przykład jest często używany, więc nie widzę powodu abym sam tego nie zrobił. Jednak zanim przejdziemy do tworzenia klasy generycznej najpierw opowiem trochę o drzewach binarnych.

Przeciążanie

Przeciążanie metod polega na ponownym użyciu nazwy metody w klasie, ale z innymi argumentami (opcjonalnie i innym typem zwracanym) .

Zasady są proste:

 

  • Metoda przeciążona musi zmienić listę argumentów.
  • Metoda przeciążona może zmienić typ zwracany.
  • Metoda przeciążona może zmienić modyfikator dostępu.
  • Metoda  przeciążona może zadeklarować nowy albo szerszy sprawdzony wyjątek.
  • Metoda może być przeciążona w tej samej klasie bądź podklasie. Czyli jeśli klasa X definiuje metodę print(int a) to znaczy ,że podklasa Y  mogła być, zdefiniować print (string a) bez nadpisywania metody print. Dwie metody o tej samej nazwie, ale w innych klasach mogą być uznane za przeciążone, jeżeli podklasa dziedziczy jedną wersje tej metody ,a później deklaruje inną przeciążoną wersję.

Untitled5

W poprzednim wpisie opisałem metody nadpisane i zwróciłem uwagę na pewną różnicę pomiędzy przeciążaniem metody ,a jej nadpisaniem. Zakładając ,że egzamin lubi stosować chwyty poniżej pasa wyobraź sobie takie pytanie związane z poprawnością kodu.

Polimorfizm  Jak w tytule wpisu.

Jak pamiętasz każdy obiekt w Javie, który jest w związku IS-A może mieć wiele form czyli być polimorficzny. Każdy obiekt z wyjątkiem typu Object jest polimorficzny, ponieważ zdają one test IS-A dla swojego typu i dla typu Object

Hermetyzacja

Posiadanie certyfikatu SCJP oznacza ,że znasz każdy aspekt obiektowości w Javie-e. Udowodnia on ,że znasz hierarchie   i potęgę polimorfizmu. Dlatego przez klika dni na blogu w tym kursie będę omawiał zachowanie i zasady obiektowe, które trzeba na egzamin SCJP znać.


Niektórzy programiści nie są  biegli w obiektowości dlatego zacznę od podstaw.

Java EnumUżywanie typu wyliczeniowego redukuje w kodzie pewne nieścisłości. Przykładowo sklep z gitarami może przechowywać wartości określające typy gitar jako napis string. Problem polega na tym ,że do typu string można  umieścić każdy napis. Tworzenie takiego modelu działania dla jakiegokolwiek sklepu stworzyłoby ogromny problem, ponieważ system ten byłby podatny na różnego rodzaju błędy.

Do takich zadań w językach obiektowych jest typ wyliczeniowy (enum). Typ wyliczeniowy przyjmuje tylko określone wartości. Oto przykład enum z typami gitar.

Zmienne

Bez występu tym razem są dwa typy zmiennych w Javie.

 

 

  • Primitives (typy proste) Oto kilka przykładowych  typów prostych: char, boolean, byte, short, int, long, double, float.  Gdy typ prosty jest zadeklarowany jego typ nigdy się nie zmienia ale jego wartość zazwyczaj tak.
  • Reference variables (typ referencyjny) Typ referencyjny jest używany jako adres do konkretnego obiektu. Typ referencyjny jest zadeklarowany do konkretnego  typu i ten typ nie może być później zmieniony.  Zmienna referencyjna może referować się do każdego obiektu z zadeklarowanym typem albo podtypem. Później omówię polimorfizm.

Przejdź do deklaracji typów prostych.

AbstractWcześniej omówiłem modyfikator dostępu w składowych klas. Jednak to nie są wszystkie modyfikatory, jakie mogą być użyte wobec metod i zmiennych. Modyfikatory “abstract” i “final” zostały już wcześniej omówione ,ale wciąż nie są to wszystkie modyfikatory.
Do omówienia zostały słowa kluczowe jak:“transient”,”synchronized”,”native”,”strictfp” i “static” (na inny wpis).
Najpierw pokażę   słowa kluczowe, które odwołują się zmiennych, jak i do  metod. W innym wpisie pokażę jakie zachowanie deklaruje słowo “static” w metodzie i przy zmiennej.

MBTI INTJ Parę lat temu interesowałem się MBTI.

MBTI to wskaźnik psychologiczny określający ludzkie osobowości, stworzony przez znanego psychologa Carla Gustava Junga. W wielkim skrócie - Jung określił 4 funkcje, które określają osobność

  • Ekstrawersja (E) i Introwersja (I)
  • Poznanie (S) i Intuicja (N)
  • Myślenie (T) i Odczuwanie (F)
  • Osądzanie (J) i Obserwacja (P)

W wyniku kombinacji tych 4 funkcji, które mają dwie opcje Jung określił 16 typów osobowości. Oznaczając ich pierwszymi literami funkcji jak ENTP czy ISFJ.

KlasaCzas na deklarowanie klas

Pisząc kod w Javie nie da się uniknąć napisania klas czy interfejsów. Wewnątrz klas jak zapewne wiesz znajdują się zmienne i metody. Od tego, jak zadeklarujesz swoją klasę zależy jak twój kod będzie działał. Przykładowo metoda publiczna (public) jest dostępna w każdym punkcie kodu.

Metoda oznaczona jako “prywatna” (private) jest wymazana z dostępu wszędzie poza swoim miejscem deklaracji.

WCF

W dzisiejszych  czasach nie ma aplikacji, która działaby w kompletnej izolacji. Różne organizacje posiadają już programy, które wykonują  różne operacje biznesowe X i chcą aby  stare programy doskonale łączyły się z nowymi aplikacjami niezależnie od platformy, czy języka programowania.
 
Jednym słowem w dzisiejszych czasach programy wykonujące różne operacje powinny komunikować się ze sobą bez względu na to, w czym są napisane.
 
W erze internetu korporacje  często wybierają rozwiązania   pochodzące od osób trzecich. Na zasadzie po co mam pisać program, który już ktoś zrobił. Musimy tylko wykupić taką usługę i w ten sposób zaoszczędzimy “X” czasu.
 
Wyzywanie polega na tym, jak połączyć te elementy w taki sposób aby komunikowały się ze sobą oraz współpracowały.

Model view Rok temu na prezentacje o Silverlight dla Bialskiej Grupy .NET napisałem prostą aplikację pokazującą powiązania.< Ta aplikacja jest prostym przykładem zastosowania modelu i widoku.

W aplikacji znajdują się dwa kwadraty ,a ich kolor jest zależny od kontrolek “NumericUpDown”. Każda z tych kontrolek odpowiada za odpowiedni kanał ARGB w kolorze. Jak chcesz możesz sam zmienić wartość tych kontrolek w aplikacji powyżej i zobaczyć ,że kolor kwadratów też się zmienia.

ŚciągaCzęść NR.23Kurs dobiegł końca. Przyszedł czas na podsumowanie jego zawartości w pigułce. W sumie w tym kursie chciałem napisać jeszcze o innych rzeczach jak: indeksery , tworzenie własnych kolekcji od <T> czy jak efektywnie korzystać z innych słów kluczowych. Kurs jednak zrobił się za długi i nawet jego nazwa “obiektowość” nie jest do końca już trafna.

Dodatki Visual Studio 2010 oferuje łatwą instalację dodatków od osób trzecich. Był to dobry kierunek rozwoju Visual Studio. Żaden program nie może spełnić pragnień wszystkich użytkowników. Dzisiaj technologia  rozwija się szybko. Visual Studio co chwilę musiałby otrzymywać jakieś rozszerzenie. Obecnie istnieje już SP1 do Visual Studio a przecież od jego premiery nie minął nawet rok.

Całą listę dostępnych  dodatków można obejrzeć wywołując okno “Extension Menager”.

Instalacja

Co to jest LaTex  i dlaczego o tym piszę?.

Minęło już  trochę czasu, od kiedy napisałem pracę inżynierską. Mój promotor zasugerował mi do pisania prac dyplomowych LaTex. Zanim opowiem co to jest, to powiem dlaczego.

Indeksery i []Część NR.3

Zostawiając już bity w int-ach przejdę do innego wykorzystania indekserów (czy jak to się odmienia w języku polskim). Zanim stworzę swój przykład zbliżony do działania HashTable napiszę dlaczego indeksory są w ogóle używane w takich wypadkach.

Jest możliwe dla właściwości aby zwracała ona tablicę ,ale pamiętaj o tym ,że tablica jest typem referencyjnym więc poprzez udostępnianie tablicy w bezpośredni sposób narażasz na przypadkowe nadpisanie danych.

Oto przykład struktury, która udostępnia tablicę int dla właściwości, którą nazywałem Dane:

IndekseryCzęść NR.2

W poprzednim wpisie pokazałem jak operować bitami za pomocą odpowiednich operatorów.

Zatrzymajmy się na chwilę i przypominajmy sobie na czym polega problem.

Chcemy użyć typu int jako tablicy, która przechowuje bity. W podobnym stylu typ string to tablica znaków. Przykładowo, gdybym chciał uzyskać dostęp do 6 miejsca bitowego zrobiłbym to tak.

BSOD

Pliki DMP są użyteczne dla debugowania Windows 7. Zawierają one w sobie informacje, dlaczego został wywołany dany niebieski ekran. Jednak bez możliwości ich otwarcia pliki DMP są bezużyteczne dla ciebie.

Otworzenie pliku jest proste wymaga on tylko odpowiedniego oprogramowania gorzej z lokalizacją i analizą danego pliku DMP, chociaż od tego jest Google i nie jest aż tak źle, o czym napiszę później.

BitoweCzęść NR.1Co to są indeksery poza tym, że nie ma takiego polskiego słowa w słowniku.

O indekserach można pomyśleć jako o małej tablicy, która działa w podobny sposób do właściwości. Przechowują one jednak grupę wartości. Gdy właściwość odnosi do jednego pola w klasie, indeksery hermetyzują i odnoszą się do całej grupy wartości. Kod, który wyraża indekser jest podobny do stylu użycia tablicy.

Najlepszym sposobem na zrozumienie jak one działają jest pokazanie przykładu. Na początku pokażę rozwiązania, które ich nie używają ,abyś lepiej zrozumiał po co one są.

Problem dotyczy liczb całkowitych a mówiąc bardziej dokładnie typu int.

params

W tym wpisie dowiesz się:

Jak napisać metodę, która akceptuje jakąkolwiek liczbę argumentów używając słowa kluczowego params.

 

Tablica parametrów jest użyteczna, jeśli chcesz napisać metodę, która pobiera jakąkolwiek liczbę parametrów, możliwe innych typów. Znając koncept obiektowości ta koncepcja może wydawać się   nie trafiona. W końcu obiektowo zorientowane rozwiązania takich problemów polegają na przeciążaniu metod.
Przeciążanie metod pozwala nam na deklarowanie dwóch lub więcej metod, które mają taką same nazwę w danym zakresie. Mechanizm przeciążania jest użyteczny, jeśli chcesz przeprowadzić tę samą akcje dla różnych argumentów.

Mimo iż ten mechanizm jest użyteczny zdarzają się przypadki, w których nie zawsze sobie radzi.

DestruktorCzęść NR.22 Jak pamiętasz typy wartościowe są tworzone na stosie ,a typy referencyjne są umieszczane na stercie. Komputery nie mają nieskończonej pamięci więc pamięć musi zostać odnowiona kiedy dana zmienna bądź obiekt nie jest już potrzebny. Typy wartościowe zostają zniszczone wraz ze swoją pamięcią, kiedy wychodzą poza zakres.

Zmienne są tworzone np. w czasie metody więc znikają po jej wykonaniu.

Poza tym typy wartościowe nie przechowują dużo informacji więc nie ma z nimi dużego problemu.

Ale co z typami referencyjnymi . Tworzysz obiekt za pomocą słowa kluczowego new ,ale jak obiekt jest niszczony w C#. Przekonajmy się.

Full Screen

Kod ten jest bardziej przydatny niż się zdaje. Zwłaszcza że ciągle zapominam jak implementować pełen ekran w Silverlight. Aby nie zaglądać już nigdy więcej do swoich starych aplikacji stworzyłem ten wpis.
Implementacja pełnego ekranu w Silverlight wymaga jednej linijki kodu. Jednak liczba wyrażeń po kropce sprawia , że nie jest ona taka łatwa do zapamiętania. Moja pamięć, jak do tej pory gasła po “Host”.

Kaxaml

XAML jest prostym językiem opisującym wygląd aplikacji w Silverlight i WPF. Do jego nauki powstał prosty edytor Kaxaml. Jest on darmowy  i prosty w użyciu wymaga  tylko zainstalowanego .NET  4.0.

XAP + Web W tym krótkim poście pokaże jak dodać plik xap do folderu ClientBin, kiedy chcesz dodać projekt Silverlight do istniejącego projektu WEB.

Dodaj aplikacje Silverlight do projektu. Możesz to zrobić przy pomocy menu głównego: File/Add/Existing Project

Mając już dodaną aplikacje Silverlight do projektu pozostało umieścić jej plik .XAP w domyślnych folderze “ClientBin”.

Tech SPAM Początkujący programiści ,zawsze się zastanawiają, która technologia jest najlepsza. Ma to logiczny sens w końcu każdy chce uczyć się “zwycięskiej” technologii. Jednak ile tematów w forach internetowych na całym świecie  brzmiało “Chcę programować ,ale wiem w czym”. Nic dziwnego ,że ludzie już mają tego serdecznie dosyć.

Muszę przyznać ,że jest to irytujące z innej strony .W czasie deklaracji nauki  danego języka programowania bądź platformy na pewno któryś z twoim znajomych powie ,że technologia X jest lepsza i to jej powinieneś się uczyć.  Oto mój własny przykład z życia. Zadeklarowałem na facebook-u ,że będę się uczył Javy na Androida było to kłamstwo ,ale chciałem coś sprawdzić.

GenericsCzęść NR.21

Podczas kursu była mowa o tablicach, które są stworzone do przechowywania typów wartościowych. Przy typach referencyjnych wykonuje się pakowanie i używanie tablic ich traci sens. Tablice mają określoną wielkość i aby ją zmienić trzeba stworzyć ją od nowa.

Klasy z System.Collection jak ArrayList czy HashTable przechowują wszystko jako obiekty więc pakowanie i wypakowywanie zawsze zachodzi bez względu na to, czy jest to typ wartościowy, czy też nie. Mimo iż są elastyczne z powodu przechowywania wszystkiego jako obiekt możemy zderzyć się z błędem przy rzutowaniu.

Od C# 2.0 mamy do dyspozycji jeszcze inne klasy kolekcji i są one najczęściej używane.

ZdarzeniaCzęść NR.20 Zobaczyłeś już jak zadeklarować delegat i jak jej użyć.

Widziałeś też co potrafią wyrażenia lambda w C#.
Jednak to jeszcze nie koniec. Co prawda możesz wywołać wiele metod nie bezpośrednio za pomocą delegaty, ale wciąż musisz ją wywołać jawnie.

Z programistycznego punktu widzenia dobrze byłoby , aby delegaty uruchomiały się automatycznie, gdy coś ważnego się wydarzy.

Przykładowo, w przypadku przegrzewania się reaktora atomowego wywołać odpowiednią delegate, która wykona wszystkie metody po kolei w celu jego wyłączenia .

Why Blend?

Pisząc aplikacje w WPF czy w Silverlight często będziesz musiał zmienić kolejność bądź układ elementów.

W Visual Studio ,aby zmienić kolejność danych elementów trzeba zastosować kombinacje klawiszy kopiuj, wklej. Przy dużej ilości kodu jest to kłopotliwa czynność i pochłania moim zdaniem za dużo czasu.

Dlatego w takich sytuacjach pojawia się nasz bohater “Expression Blend”.

Oto przykład kodu XAML. W nim jest siatka “Grid” , która zawiera dwa panele “StackPanel” ,a w nich są  przyciski z różnymi kolorami.

Tapety Jeśli jesteś maniakiem .NET na pewno chciałbyś mieć tapety z Visual Studio 2010 w swoim Windows-ie.

W czasie swojej prezentacji w ten sposób możesz wykazać swoją miłość do programowania w Visual Studio.

Jest to zawsze coś lepszego niż standardowe logo Windows czy twoja domyślna tapeta z gorącą laską. xD

Why Blend?

Pisząc aplikacje w WPF czy Silverlight będziesz musiał nieraz zmienić typ danego panelu, czy kontenera. Budując wygląd swojej aplikacji czasami za pierwszym razem nie dobierzesz właściwego typu dla danego panelu .

W tym wpisie opiszę jedną z zalet programu Expression Blend 4.0, która uzupełnia tą lukę z Visual Studio 2010.

Jeśli pisałeś już aplikacje w WPF czy Silverlight nie zdziwiłbym się, gdybyś to wiedział . Ten wpis jest przeznaczony dla początkujących.

LambdaCzęść NR.19Przykłady z poprzedniego wpisu dodają do delegaty konkretne metody. Dla przypomnienia prosty przykład użycia delegaty.

Jeśli Google odesłało cię tutaj po informacje o tym, jak korzystać z delegat, to polecam poprzedni wpis kursu.

Klasa MaszynaPracująca ma do dyspozycji pewien zestaw metod.

DelegatyCzęść NR.18Jak do tej pory widziałeś kod wykonujący się sekwencyjnie linijka po linijce. Spokojnie na programy wielowątkowe jest jeszcze za wcześnie ,ale zapewne zastanawiałeś się jak działają np. zdarzania w WPF.

[Wpis nadpisany 2015-01-15]

Przepływ programu, w takim wypadku na pewno nie jest jednokierunkowy.

OperatoryCzęść NR.16 Nie raz używałeś operatorów + – do typów wartościowych. Pytanie brzmi jak te operacje przenieść do swoich własnych klas i struktur.

Na początek mała powtórka z tego, czym są i jak działają operatory. 

 

Operatory, czym są tak naprawdę? Powtórka wiedzy

  • Używasz operatorów w kombinacji z operandami, które łącznie tworzą wyrażenie. Każdy operator ma swój własny cel i w zależności od typu operandów wykonuje różne polecenie. Przykładowe + dodaje liczby całkowite, ale również dodaje , a raczej łączy dwa łańcuchy znaków.
  • Każdy operator ma swoją odpowiednią kolejność. Mnożenie “ * ” wykona się wcześniej niż dodawanie “+”.
  • Każdy z operatorów ma swoją “łączność”. Mówiąc jaśniej każdy operator ocenia operacje w określonym kierunku “z lewej do prawej” czy “z prawej do lewej”. Operator “ = “ jest operacją wykonującą się od prawej strony do lewej więc a = b = c to samo co a = (b = c).
  • Mamy też do dyspozycji operatory jednoargumentowe jak inkrementacja (i++) i dekrementacja (i--)
  • Operacje dwuargumentowe wymagają dwóch operandów.

Zanim przejdziemy do nadpisywania operatorów należy zaznaczyć czego nie możemy nadpisać.

Wszystkie Kategorie