Cezary Walenciuk Programowanie

SQL CLR To jest pierwszy artykuł na temat pisania procedur,funkcji i innych rzeczy w Common Language Runtime (CLR). Ten artykuł koncentruje się na podstawach budowania procedury SQL w Visual Studio 2010 za pomocą C#.

Tak można pisać procedury i funkcję w kodzie w C#, które zostaną później wykorzystane przez SQL Server jako biblioteka *.dll.

.RESXMechanizm lokalizacja dostępny w .NET  pozwala nam na stworzenie w łatwy różnej zawartości strony/aplikacji w zależności od kraju bądź kultury, w której użytkownik się znajduję.Edycja zawartości, jak i jej zarządzanie  jest dużo  łatwiejsze z plikami resx, nawet jeśli nie budujemy strony multi-językowej. 

jQuery W tym wpisie wytłumaczę jak uzupełnić kontrolkę rozwijanej listy przy użyciu jQuery i Ajax. Użyje metody strony ASP.NET (WebMethods) do przekazywania asynchronicznego informacji pomiędzy klientem i serwerem.

Dzięki użyciu rozwiązania WebMethods nie muszę deklarować oddzielnej usługi sieciowej .Co doskonalone zaspokaja specyficzne potrzeby istniejące tylko dla jednej strony ASP.NET.

COALESCECOALESCE akceptuje serie wartości z listy wyników, które mogą być puste (NULL) potem ona zwraca pierwszą nie pustą wartość z tej listy.

Taka funkcjonalność daje wiele kreatywnych użyć w  bazie SQL Server.

Oto proste przykłady.

SQL

OrderBy Pisząc aplikację w .NET zwykle używamy LINQ do sortowania danych ,ale jeśli dane pochodzą od systemu bazo danowego to dlaczego nie posortować informacji już na tym poziomie.

SQL oferuje nam klauzurę ORDER BY dzięki niej możemy ustalić po jakiej kolumnie informację będą posortowane.

Ajax Zwykle, gdy chcemy zrobić cokolwiek asynchronicznie w ASP.NET korzystamy z gotowego frameworku ASP.NET AJAX. Dzięki niemu mamy wciąż kontrole nad stroną używając tylko C# . Znajomość JavaScript i jQuery nie jest wcale wymagana w takich asynchronicznych scenariuszu.

Niestety takie rozwiązanie też ma swoje wady. ASP.NET AJAX nie jest wydajny. Jest on w końcu uniwersalny rozwiązaniem na problem asynchroniczności. Uniwersalność tworzy dużo kodu i procedur, które zwykle nie są potrzebne dla prostych rozwiązań.

XML Nodes W poprzednim wpisie pokazałem jak odczytać plik XML przy użyciu OPENXML. Według dokumentacji jest to najbardziej wydajny sposób na odczytywanie dużych naprawdę dużych plików XML. Jednak alternatywa istnieje i ma ona nazwę XMLNodes.

Podane poniższe operacje można wykonać tylko na parametrze typu XML w poprzednim przykładzie użyłem parametru VARCHAR.

Oto prosty przykład odczytu XML, jak i zapisu jego zawartości do tabeli. Kiedyś pewien kolega zasugerował mi to jako jeden ze sposób do umieszczania listy danych na raz w procedurze n.p do insertów. Dzisiaj szczerze zastanawiałbym się nad inny rozwiązaniem ,ale ten sposób nie jest też do końca taki zły.

Kasowanie W tym wpisie przeanalizuję problem kasowania powtarzających się rekordów.

Istnieje wiele rozwiązań tego problemu. Ja postanowiłem przedstawić trzy różne rozwiązania i porównać je w różnych scenariuszach. Sprawdziłem te trzy metody w dwóch różnych wypadkach.

W pierwszym przypadku mamy tabele niezindeksowaną, która posiada dwie kolumny. Pierwsza kolumna to identyfikator, druga natomiast zawiera losową wartość liczbową. Tabela ta zawiera 100.000 rekordów, które się powtarzają. Ze względu na losowość nie wiem dokładnie, ile jest powtarzających się rekordów?. Naszym zadaniem jest je usunąć.

W drugim wypadku mamy tabelę tymczasową z 4 kolumnami. Identyfikator, Imię, Nazwisko oraz Numer. Rekordów tabeli jest tylko 11. Nie są one generowane losowo więc wynik operacji zawsze będzie taki sam, bez względu na to, z jakiej metody skorzystamy. Wiemy też jawnie, ile rekordów się powtarza, w tym przypadku chcemy skasować rekordy, które mają takie same Imie i Nazwisko oraz Numer.

Oba wypadki zawierają kolumny NOT NULL oraz posiadają identyfikator auto-inkrementalny.

to OpenSzczerze ktoś powinien poważnie zastanowić się nad budową komunikatów błędów. To jest najgłupszy i najbardziej nie zrozumiały błąd, jaki mogłem otrzymać w imageprogramie SQL Management Studio.

Co gorsza, kiedyś w przeszłości też miałem ten problem i wiedziałem jak go rozwiązać ,a oczywiście z biegiem lat człowiek o tym zapomniał.

Dlatego zrobiłem o tym wpis ,aby mój odpowiednik z przyszłości wiedział jak rozwiązać ten problem. Podziękujesz mi potem stary.Puszczam oczko

W trakcie procesu dołączenia istniejącej baz danych ze strony Dot.NetNuke napotkałem się na taki problem.

MessageTak jak większość programistów pierwszy test nowej technologii zaczyna się od dobrego napisu “Hello World”, tego samego szukałem w WinRT.

WinRT przemodelowało wszystko i znajome przestrzenie nazw, jak i klasy mogą już nie istnieć w WinRT.

Pisząc pierwszą aplikację w WinRT chciałem tylko wywołać prosty MessageBox z napisem “Hello World” , jak się jednak okazało klasa ta nie istnieje w WinRT.

Losowe znaki Czasami istnieje potrzeba wypełnienia danej kolumny, mówiąc delikatnie byle czym.

W takim celu wypadałoby stworzyć jakiś generator tworzący napis z losowym ciągiem znaków. Kiedyś w pracy otrzymałem takie zadanie i z tego, co pamiętam wykorzystałem tę procedurę także do tworzenia losowych haseł oraz do generowania kuponów testowych w aplikacji loteryjnej..

MonoCzęsto, gdy porównywane są  technologie ASP.NET czy PHP, czy języki programowania  Java i C# pada cała lista za i przeciw tym rozwiązaniom. Siłą PHP i Javy jest to , że reprezentują rozwiązania, które działają prawie wszędzie. Jest to zwykle argument przeciw rozwiązaniom .NET, ponieważ one działają tylko pod systemem operacyjnym Windows.

Jednak w czasie takiej dyskusji zawsze pojawi się fan, który będzie bronił swojej technologii   i powie “Pod Linux-em jest Mono więc .NET też działa na wiele platform”. Za każdym razem gdy, widzę takie twierdzenie zastanawiam się jak bardzo jest ono zgodne z prawdą. Fakt możesz w Mono napisać aplikację ASP.NET pod Linux-em, ale czy w tym jest jakiś haczyk..

IntegerW pracy musiałem przygotować prezentację na temat MonoDroid, czyli o pisaniu aplikacji na telefony z Androidem w C#. Częścią tej prezentacji były proste przykłady podkreślające, dlaczego C# jest lepszy od Javy. Prezentacja miała jednogłośnie podkreślić na jednym slajdzie, że programowanie w C# jest bardziej intuicyjne.

Gdy szukałem powodów, dla których Java jest " zła" natknąłem się na pewne dziwne zachowanie, które wykazuje brak konsystencji w samy języku Javy.

Mimo iż programuję od kilku lat w Javie nigdy nie natknąłem się na ten problem. Zapytałem weteranów od Javy z uczelni PJWSTK, ale nie bardzo wiedzieli o czym ja mówię.

Dlatego pomyślałem sobie , że napiszę ten wpis by zawsze mieć jakieś fajne anegdoty dotyczące języka Java..

Google+Google+ istnieje od ponad roku. Pomimo pomyłki z “Google Buzz” Google chwytami marketingowymi przed startem reklamowała się jako lepsza alternatywa dla Facebooka , zdobywając w ten sposób dużo zwolenników. W Polsce dużo szumu nie ma o Google+. Firmy marketingowe oczywiście śledzą poczynania Google+ . Nie jest to żadnym zaskoczeniem, ponieważ Facebook zrewolucjonizował ich cały biznes.

Pytanie brzmi do czego potrzebne nam jest Google+ , jak to może nam pomóc w biznesie. Jak osoby tworzące treści w Internecie mogą zdobyć więcej fanów za pomocą Google+.

H1 vs H2Standardową praktyką dla developerów sieci web front-end jest umieszczenie loga bądź tytułu strony w tagu H1. Jednak najczęściej tytuł artykułu jest ważniejszy, ponieważ określa wartość i kontekst danej zawartości strony.

Pytanie brzmi, które z semantyk jest właściwe z punktu SEO. Oto przykłady:

MsnbotZ okazji migracji bloga dokształcałem się w SEO jednak specjalistą nie jestem ale myślę ,że ten artykuł ciebie zaciekawi.

Widziałem wiele tutoriali, które rekomendują banowanie robotów, które zawierają napisy jak libwww-perl i msnbot. Rozumiem ,że ktoś chciałby zbanować boty typu “libwww-perl”, ponieważ one służą głównie do spamowania i hakowania.

Pytanie jednak brzmi; dlaczego wiele stron rekomenduje banowanie msnbot/bingbot?.

Odliczamy Możesz stworzyć statyczną zmienną DateTime do swojego projektu i przechowywać w niej czas uruchomienia aplikacji poprzez uzupełnienie jej datą w głównym konstruktorze aplikacji.

Później tą zmienną porównujemy z obecnym czasem ,aby otrzymać okres, w jakim działała aplikacja.

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.

Wszystkie Kategorie