Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
|
|
- Barbara Stefańska
- 8 lat temu
- Przeglądów:
Transkrypt
1
2 Tytuł oryginału: C# in Depth, Second Edition Tłumaczenie: Janusz Grabis Projekt okładki: Studio Gravite / Olsztyn Obarek, Pokoński, Pazdrijowski, Zaprucki ISBN: Original edition copyright 2011 by Manning Publications Co. All rights reserved. Polish edition copyright 2012 by HELION SA. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, GLIWICE tel , helion@helion.pl WWW: (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. Kup książkę Poleć książkę Oceń książkę Księgarnia internetowa Lubię to!» Nasza społeczność
3 Spis tre ci 7 Spis tre ci Przedmowa 17 Wst p 19 Podzi kowania 21 O ksi ce 23 Cz I Przygotowanie do wyprawy Nieustaj ca metamorfoza C# Na pocz tek prosty typ danych Typ Product w C# Kolekcje o mocnym typie w C# W a ciwo ci implementowane automatycznie w C# Argumenty nazwane w C# Sortowanie i filtrowanie Sortowanie produktów po nazwie Wyszukiwanie elementów w kolekcjach Obs uga braku danych Reprezentacja nieznanej ceny Parametry opcjonalne i warto ci domy lne Wprowadzenie do LINQ Wyra enia kwerendowe i zapytania wewn trzprocesowe Wykonywanie zapyta na XML-u LINQ dla SQL-a... 49
4 8 SPIS TRE CI 1.5. COM i typy dynamiczne Uproszczenie wspó pracy z COM Wspó praca z j zykiem dynamicznym Analiza zawarto ci rodowiska.net J zyk C# rodowisko wykonania Biblioteki rodowiska Jak zmieni Twój kod w kod doskona y? Prezentacja pe nych programów w formie fragmentów kodu Kod dydaktyczny nie jest kodem produkcyjnym Twój nowy najlepszy przyjaciel specyfikacja j zyka Podsumowanie Rdze systemu C# Delegaty Przepis na prosty delegat czenie i usuwanie delegatów Dygresja na temat zdarze Podsumowanie delegatów Charakterystyka systemu typów Miejsce C# w wiecie systemów typów Kiedy system typów C# 1 jest niedostatecznie bogaty? Podsumowanie charakterystyki systemu typów Typy warto ciowe i referencyjne Warto ci i referencje w rzeczywistym wiecie Podstawy typów referencyjnych i warto ciowych Obalanie mitów Opakowywanie i odpakowywanie Podsumowanie typów warto ciowych i referencyjnych Wi cej ni C# 1 nowe cechy na solidnym fundamencie Cechy zwi zane z delegatami Cechy zwi zane z systemem typów Cechy zwi zane z typami warto ciowymi Podsumowanie Cz II C# 2 rozwi zanie problemów C# Parametryzowanie typów i metod Czemu potrzebne s typy generyczne? Proste typy generyczne do codziennego u ycia Nauka przez przyk ad s ownik typu generycznego Typy generyczne i parametry typów Metody generyczne i czytanie deklaracji generycznych Wkraczamy g biej Ograniczenia typów Interfejs argumentów typu dla metod generycznych Implementowanie typów generycznych Zaawansowane elementy typów generycznych Pola i konstruktory statyczne Jak kompilator JIT traktuje typy generyczne
5 Spis tre ci Iteracja przy u yciu typów generycznych Refleksja i typy generyczne Ograniczenia typów generycznych C# i innych j zyków Brak wariancji typów generycznych Brak ogranicze operatorów lub ogranicze numerycznych Brak generycznych w a ciwo ci, indekserów i innych elementów typu Porównanie z C Porównanie z typami generycznymi Javy Podsumowanie Wyra anie niczego przy u yciu typów nullowalnych Co robisz, kiedy zwyczajnie nie masz warto ci? Czemu zmienne typu warto ciowego nie mog zawiera null? Metody reprezentacji warto ci null w C# System.Nullable<T> i System.Nullable Wprowadzenie Nullable<T> Opakowywanie i odpakowywanie Nullable<T> Równo instancji Nullable<T> Wsparcie ze strony niegenerycznej klasy Nullable Sk adnia C# 2 dla typów nullowalnych Modyfikator? Przypisania i porównania z null Konwersje i operatory nullowalne Logika typów nullowalnych Stosowanie operatora as z typami nullowalnymi Nullowy operator koalescencyjny Nowatorskie zastosowania typów nullowalnych Testowanie operacji bez parametrów zwrotnych Bezbolesne porównania przy u yciu nullowalnego operatora koalescencyjnego Podsumowanie Przyspieszone delegaty Po egnanie z dziwaczn sk adni delegatów Konwersja grupy metod Kowariancja i kontrawariancja Kontrawariancja parametrów delegatów Kowariancja typu zwracanego delegata Ma e ryzyko niekompatybilno ci Akcje delegatów tworzone w miejscu przy u yciu metod anonimowych Rozpoczynamy prosto operuj c na parametrach Zwracanie warto ci z metod anonimowych Ignorowanie parametrów typu Przechwytywanie zmiennych w metodach anonimowych Definicja domkni cia i ró nych typów zmiennych Analiza zachowania zmiennych przechwyconych Jaki cel maj zmienne przechwycone? Przed u one ycie zmiennych przechwyconych Instancje zmiennej lokalnej Mieszanka zmiennych wspó dzielonych i odr bnych Wskazówki odno nie do zmiennych przechwyconych i podsumowanie Podsumowanie
6 10 SPIS TRE CI 6. Implementowanie iteratorów w prosty sposób C# 1 udr ka r cznego pisania iteratorów C# 2 proste iteratory z wyra eniami yield Wprowadzenie do uproszcze iteratorów i wyra enia yield return Wizualizacja toku wykonania iteratora Zaawansowany tok wykonania iteratora Dziwactwa w implementacji Przyk ady z ycia Iterowanie po datach w harmonogramie Iterowanie po wierszach pliku Leniwe filtrowanie elementów z u yciem uproszczenia iteratora i predykatu Pseudosynchroniczny kod z u yciem biblioteki CCR Podsumowanie Pozosta e cechy C# Typy cz ciowe Tworzenie typu sk adaj cego si z kilku plików U ycie typów cz ciowych Metody cz ciowe tylko w C# Klasy statyczne Niezale ny poziom dost pu do getterów i setterów w a ciwo ci Aliasy przestrzeni nazw Kwalifikowanie aliasów przestrzeni nazw Aliasy globalnej przestrzeni nazw Aliasy zewn trzne Dyrektywy pragma Pragmy ostrze e Pragmy sum kontrolnych Bufory o sta ym rozmiarze w kodzie niezarz dzanym Udost pnianie wybranych elementów innym modu om Zaprzyja nione modu y w prostym przypadku Do czego warto u ywa InternalsVisibleTo? InternalsVisibleTo i modu y podpisane Podsumowanie Cz III C# 3 rewolucja w metodzie programowania Redukcja nadmiarowo ci przez zmy lny kompilator W a ciwo ci implementowane automatycznie Zmienne lokalne o typie niejawnym Zastosowanie var do deklarowania zmiennych lokalnych Ograniczenia w typach niejawnych Zalety i wady typów niejawnych Zalecenia Uproszczona inicjalizacja Definicja prostych typów Ustawianie prostych w a ciwo ci Ustawianie w a ciwo ci obiektów zagnie d onych Inicjalizatory kolekcji Zastosowanie inicjalizatorów
7 Spis tre ci Tablice o typie niejawnym Typy anonimowe Pierwsze spotkania z gatunkiem anonimowym Cz ci sk adowe typów anonimowych Inicjalizatory odwzorowuj ce Jaki to ma sens? Podsumowanie Wyra enia lambda i drzewa wyra e Wyra enia lambda i delegaty Przygotowanie wprowadzenie delegatów typu Func<...> Pierwsze przekszta cenie na wyra enie lambda U ywanie pojedynczego wyra enia jako cia a Lista parametrów o typie niejawnym Skrót dla pojedynczego parametru Proste przyk ady u ycia List<T> i zdarze Filtrowanie, sortowanie i operacje na listach Logowanie w metodach obs ugi zdarze Drzewa wyra e Budowanie drzew wyra e w sposób programistyczny Kompilowanie drzew wyra e do postaci delegatów Konwersja wyra e lambda C# na drzewa wyra e Drzewa wyra e w sercu LINQ Drzewa wyra e poza LINQ Zmiany we wnioskowaniu typów i rozwi zywaniu przeci e Powód do zmiany usprawnienie wywo a metod generycznych Wnioskowanie typu zwracanego funkcji anonimowych Dwufazowe wnioskowanie typu Wybieranie odpowiedniego przeci enia metody Podsumowanie wnioskowania typów i rozwi zywania przeci e Podsumowanie Metody rozszerzaj ce ycie przed metodami rozszerzaj cymi Sk adnia metod rozszerzaj cych Deklarowanie metod rozszerzaj cych Wywo ywanie metod rozszerzaj cych Wykrywanie metod rozszerzaj cych Wywo anie metody na pustej referencji Metody rozszerzaj ce w.net Pierwsze kroki z Enumerable Filtrowanie z u yciem Where i spinania wywo a metod Antrakt: czy metody Where nie widzieli my ju wcze niej? Projekcja przy u yciu metody Select i typów anonimowych Sortowanie przy u yciu OrderBy Przyk ady logiki biznesowej z u yciem a cuchowania Wskazówki i uwagi odno nie do u ycia Rozszerzanie wiata i wzbogacanie interfejsów P ynne interfejsy Rozwa ne u ycie metod rozszerzaj cych Podsumowanie
8 12 SPIS TRE CI 11. Wyra enia kwerendowe i LINQ dla Obiektów Wprowadzenie do LINQ Podstawowe koncepcje w LINQ Definiowanie przyk adowego modelu danych Prosty pocz tek wybieranie elementów Rozpoczynanie od ród a i ko czenie na selekcji Translacja kompilatora jako podstawa wyra e kwerendowych Zmienne zakresu i projekcje nietrywialne Cast, OfType i zmienne zakresu o typie jawnym Filtrowanie i porz dkowanie sekwencji Filtrowanie przy u yciu klauzuli where Zdegenerowane wyra enia kwerendowe Porz dkowanie przy u yciu klauzuli orderby Klauzule let i identyfikatory przezroczyste Wprowadzenie do wykonania po redniego z u yciem let Identyfikatory przezroczyste Z czenia Z czenia wewn trzne korzystaj ce z klauzul join Z czenia grupowe z u yciem klauzul join into Z czenia krzy owe i sp aszczanie sekwencji przy u yciu wielokrotnych klauzul from Grupowania i kontynuacje Grupowanie przy u yciu klauzuli group... by Kontynuacje zapyta Wybór pomi dzy wyra eniami kwerendowymi a notacj kropkow Operacje wymagaj ce notacji kropkowej Wyra enia kwerendowe, dla których prostszym rozwi zaniem mo e si okaza notacja kropkowa Gdzie wyra enia kwerendowe l ni? Podsumowanie LINQ nie tylko kolekcje Odpytywanie bazy danych przez LINQ dla SQL-a Zaczynamy od bazy danych i modelu Zapytania wst pne Zapytania wymagaj ce z cze Translacje przy u yciu IQueryable i IQueryProvider Wprowadzenie do IQueryable<T> i zwi zanych z nim interfejsów Prototyp implementacja interfejsów wykonuj ca wpisy w dzienniku Spajanie wszystkiego razem metody rozszerzaj ce typu Queryable Udawany dostawca w dzia aniu Podsumowanie IQueryable Interfejsy zaprzyja nione z LINQ i LINQ dla XML-a Rdzenne typy LINQ dla XML-a Konstrukcja deklaratywna Zapytania na pojedynczych w z ach Operatory zapyta sp aszczonych Praca w harmonii z LINQ
9 Spis tre ci Zast pienie LINQ dla Obiektów Równoleg ym LINQ Kre lenie zbioru Mandelbrota przez pojedynczy w tek Wprowadzenie ParallelEnumerable, ParallelQuery i AsParallel Podkr canie zapyta równoleg ych Odwrócenie modelu zapytania przy u yciu LINQ dla Rx IObservable<T> i IObserver<T> Zaczynamy (ponownie) agodnie Odpytywanie obiektów obserwowalnych Jaki to wszystko ma sens? Rozszerzanie LINQ dla Obiektów Wytyczne odno nie do projektu i implementacji Proste rozszerzenie wybieranie losowego elementu Podsumowanie Cz IV C# 4 dobra wspó praca z innymi interfejsami Ma e zmiany dla uproszczenia kodu Parametry opcjonalne i argumenty nazwane Parametry opcjonalne Argumenty nazwane Z o enie dwóch cech w ca o Usprawnienia we wspó pracy z COM Horror automatyzacji Worda przed C# Zemsta parametrów opcjonalnych i argumentów nazwanych Kiedy parametr ref nie jest parametrem ref? Wywo ywanie indekserów nazwanych czenie g ównych bibliotek COM-owych Wariancja typów generycznych dla interfejsów i delegatów Typy wariancji: kowariancja i kontrawariancja U ycie wariancji w interfejsach Zastosowanie wariancji w delegatach Z o one sytuacje Restrykcje i uwagi Mikroskopijne zmiany w blokadach i zdarzeniach w formie pól Solidne blokowanie Zmiany w zdarzeniach w formie pól Podsumowanie Dynamiczne wi zanie w j zyku statycznym Co? Kiedy? Dlaczego? Jak? Czym s typy dynamiczne? Kiedy typy dynamiczne s u yteczne i dlaczego? W jaki sposób C# zapewnia typy dynamiczne? Pi ciominutowy przewodnik po typie dynamic Przyk ady u ycia typów dynamicznych COM w ogólno ci i Microsoft Office w szczególno ci J zyki dynamiczne, takie jak IronPython Typy dynamiczne w kodzie ca kowicie zarz dzanym Zagl damy pod mask Wprowadzenie do DLR Fundamentalne koncepcje DLR
10 14 SPIS TRE CI Jak kompilator C# obs uguje s owo dynamic? Kompilator C# staje si jeszcze sprytniejszy Ograniczenia kodu dynamicznego Implementacja zachowania dynamicznego U ycie klasy ExpandoObject U ycie klasy DynamicObject Implementacja IDynamicMetaObjectProvider Podsumowanie Ja niejsze wyra anie kodu przy u yciu kontraktów kodu ycie przed kontraktami kodu Wprowadzenie do kontraktów kodu Warunki wst pne Warunki ko cowe Inwarianty Asercje i za o enia Kontrakty legacyjne Przepisywanie kodu binarnego przez ccrewrite i ccrefgen Proste przepisywanie Dziedziczenie kontraktów Referencyjne modu y kontraktów Zachowanie w przypadku pora ki Sprawdzanie statyczne Wprowadzenie do analizy statycznej Zobowi zania niejawne Selektywne w czanie opcji Dokumentowanie kodu przy u yciu ccdocgen Kontrakty w praktyce Filozofia czym jest kontrakt? Jak mam zacz? Opcje, wsz dzie opcje Podsumowanie Dok d teraz? C# po czenie tradycji z nowoczesno ci Spotkanie.NET z informatyk wiat informatyki Po egnanie Dodatki 571 A Standardowe operatory kwerendowe LINQ 573 A.1. Agregacja A.2. Konkatenacja A.3. Konwersja A.4. Operatory jednoelementowe A.5. Równo A.6. Generacja A.7. Grupowanie A.8. Z czenia A.9. Partycjonowanie
11 Spis tre ci 15 A.10. Projekcja A.11. Kwantyfikatory A.12. Filtrowanie A.13. Operatory bazuj ce na zbiorach A.14. Sortowanie B Kolekcje generyczne w.net 587 B.1. Interfejsy B.2. Listy B.2.1. List<T> B.2.2. Tablice B.2.3. LinkedList<T> B.2.4. Collection<T>, BindingList<T>, ObservableCollection<T> i KeyedCollection<TKey, TItem> B.2.5. ReadOnlyCollection<T> i ReadOnlyObservableCollection<T> B.3. S owniki B.3.1. Dictionary<TKey, TValue> B.3.2. SortedList<TKey, TValue> i SortedDictionary<TKey, TValue> B.4. Zbiory B.4.1. HashSet<T> B.4.2. SortedSet<T> (.NET 4) B.5. Queue<T> i Stack<T> B.5.1. Queue<T> B.5.2. Stack<T> B.6. Kolekcje konkurencyjne (.NET 4) B.6.1. IProducerConsumerCollection<T> i BlockingCollection<T> B.6.2. ConcurrentBag<T>, ConcurrentQueue<T>, ConcurrentStack<T> B.6.3. ConcurrentDictionary<TKey, TValue> B.7. Podsumowanie C Podsumowanie wersji rodowisk.net 603 C.1. G ówne wersje dystrybucyjne rodowiska typu desktop C.2. Cechy j zyka C# C.2.1. C# C.2.2. C# C.2.3. C# C.3. Biblioteki rodowiska C.3.1..NET C.3.2..NET C.3.3..NET C.3.4..NET C.4. Cechy rodowiska uruchomieniowego (CLR) C.4.1. CLR C.4.2. CLR C.5. Inne rodzaje rodowiska uruchomieniowego C.5.1. Compact Framework C.5.2. Silverlight C.5.3. Micro Framework C.6. Podsumowanie Skorowidz 613
12 16 SPIS TRE CI
13 Parametryzowanie typów i metod Ten rozdzia omawia: typy i metody generyczne, interfejs typów dla metod generycznych, ograniczenia typów, refleksj i typy generyczne, zachowanie rodowiska CLR, ograniczenia typów generycznych, porównanie z innymi j zykami.
14 92 ROZDZIA 3 Parametryzowanie typów i metod Oto prawdziwa historia 1 : pewnego dnia ja i moja ona robili my cotygodniowe zakupy. Tu przed naszym wyjazdem us ysza em pytanie, czy mam list. Potwierdzi em, e mam list, i pojechali my. Dopiero kiedy byli my ju w sklepie, na jaw wysz a nasza pomy ka. Moja ona pyta a o list zakupów, podczas gdy ja wzi em ze sob list zmy lnych cech C# 2. Sprzedawca by troch zdziwiony, kiedy zapytali my go, czy nie ma przypadkiem do sprzedania troch metod anonimowych. Gdyby my tylko mogli wyrazi si troch ja niej! Gdyby tylko moja ona mog a w jaki sposób przekaza mi, e chce, abym wzi ze sob list rzeczy, które chcemy kupi! Gdyby my tylko mieli typy generyczne... Dla wi kszo ci programistów typy generyczne stanowi najwa niejsz now cech C# 2. Poprawiaj wydajno, sprawiaj, e kod jest bardziej ekspresyjny, oraz przenosz spor dawk zabezpiecze z czasu wykonania do czasu kompilacji. W najwi kszym skrócie typy generyczne pozwalaj na parametryzowanie typów i metod. Tak jak zwyczajne wywo ania metod posiadaj parametry wyra aj ce warto ci przekazywane do rodka, tak typy generyczne posiadaj parametry okre laj ce, jakich typów u y do ich konstrukcji. Brzmi to troch mgli cie je li do tej pory nie mia e do czynienia z typami generycznymi, by mo e b dziesz si musia d u ej zatrzyma przy tym temacie. Mog si jednak za o y, e kiedy zrozumiesz podstawow ide, pokochasz typy generyczne. W tym rozdziale zajmiemy si u yciem typów i metod generycznych oferowanych przez rodowisko lub biblioteki innych dostawców, a tak e omówimy, jak napisa w asne. Po drodze dowiemy si, jak typy generyczne wspó dzia aj z wywo aniami refleksyjnymi interfejsu programistycznego, oraz poznamy kilka detali odno nie do sposobu obs ugi typów generycznych przez rodowisko wykonawcze. Na koniec rozdzia u wspomn o kilku najcz ciej spotykanych ograniczeniach typów generycznych z mo liwymi obej ciami oraz porównam typy generyczne C# z podobnymi mechanizmami w innych j zykach programowania. Na pocz tku musimy jednak zrozumie problemy, jakie sta y si podstaw do opracowania typów generycznych Czemu potrzebne s typy generyczne? Je eli posiadasz w swoich zasobach kod napisany przy u yciu C# 1, przyjrzyj mu si i policz rzutowania szczególnie w kodzie, który intensywnie korzysta z kolekcji. Nie zapominaj, e pod niemal ka d p tl foreach kryje si niejawne rzutowanie. Kiedy u ywasz typów zaprojektowanych do pracy z wieloma ró nymi typami danych, nieuniknion konsekwencj jest du a liczba rzutowa cichego sposobu informowania kompilatora, aby si nie przejmowa, za o y, e wszystko jest w najlepszym porz dku, i potraktowa napotkane wyra enie tak, jakby mia o ten szczególny typ danych. Wykorzystanie dowolnego interfejsu programistycznego, który u ywa typu object do przekazywania parametrów wej ciowych lub zwracania wyniku, pr dzej czy pó niej b dzie 1 Prawd mówi c, jest to historia na potrzeby wprowadzenia do rozdzia u niekoniecznie ca kowicie prawdziwa.
15 3.1. Czemu potrzebne s typy generyczne? 93 wymaga rzutowania. Pewnym u atwieniem jest wprowadzenie hierarchii klas bazuj cej na typie object. Podstawowy problem pozostanie ten sam typ object jest zupe nie prosty, a wi c eby móc wykona jak kolwiek u yteczn prac, trzeba w pierwszej kolejno ci dokona jego rzutowania. Czy rzutowanie nie jest be? Nie, nie nale y rozumie, e nigdy nie powinno si tego robi (rzutowanie przydaje si do pracy ze strukturami mutowalnymi i publicznymi polami klas), ale trzeba je traktowa jako z o konieczne. Rzutowanie wskazuje, e jeste zmuszony do przekazania kompilatorowi dodatkowej wiedzy i wskazania, aby ten zaufa Ci w czasie kompilacji i przeniós sprawdzenie poprawno ci za o e do czasu wykonania. Je li musisz da do zrozumienia, e masz wi cej wiedzy ni kompilator i dlatego chcesz dokona rzutowania, takiej samej wiedzy b dzie potrzebowa osoba czytaj ca Twój kod. Mo esz pozostawi komentarz w miejscu rzutowania, ale nie b dzie to szczególnie u yteczne. Znacznie lepszym miejscem na tak informacj jest deklaracja metody lub zmiennej. Jest to szczególnie wa ne, je li dostarczasz typ lub metod, z której inni u ytkownicy b d korzysta bez dost pu do Twojego kodu. Typy generyczne umo liwiaj dostawcom bibliotek zablokowanie wywo a z wn trza bibliotek z u yciem nieprawid owych parametrów. W C# 1 musieli my polega na r cznie napisanej dokumentacji, która (jak ka da zduplikowana informacja) szybko staje si niekompletna i nieaktualna. Kiedy mo emy tak informacj zawrze bezpo rednio w kodzie jako cz deklaracji metody lub typu, praca wszystkich stron staje si bardziej produktywna. Kompilator mo e dokona wi cej sprawdze, rodowisko IDE mo e zaoferowa dodatkowe informacje poprzez mechanizm IntelliSense (na przyk ad podczas przegl dania elementów listy a cuchów mo e pokaza pola i metody typu string), u ytkownicy metod b d pewniejsi co do poprawno ci swojego kodu pod wzgl dem przekazanych argumentów i zwróconych warto ci, a czytelnicy Twojego kodu b d mogli lepiej zrozumie, co mia e na my li, kiedy pisa e dany fragment. CZY TYPY GENERYCZNE ZREDUKUJ LICZB TWOICH B DÓW? Wszystkie opisy typów generycznych, jakie czyta em (w czaj c w to moje w asne), podkre laj znaczenie przeniesienia sprawdzenia poprawno ci typów z czasu wykonania na czas kompilacji. Powierz Ci ma y sekret: nie przypominam sobie, abym kiedykolwiek musia poprawia b d w wypuszczonym kodzie spowodowany brakiem sprawdzenia typu. Inaczej mówi c, rzutowania, które umieszczali my w C# 1, zawsze dzia a y. Umieszczenie rzutowania w kodzie dzia a troch jak znak ostrzegawczy, dzi ki czemu zwracamy wi ksz uwag na poprawno typów. Typy generyczne by mo e nie zmniejsz radykalnie b dów zwi zanych z bezpiecze stwem typów, ale wprowadzona przez nie czytelno kodu wp ynie pozytywnie na redukcj b dów zwi zanych z u yciem kodu przez jego odbiorców. Prosty kod ma wi ksz szans by dobrze zrozumiany. O wiele atwiej jest napisa dobry kod, który musi by odporny na nieprzemy lane zachowania programistów, kiedy odpowiednie gwarancje co do typu argumentów zapewnia sam system typów. To, co do tej pory powiedzieli my o typach generycznych, przemawia wystarczaj co na ich korzy, ale s te jeszcze korzy ci pod wzgl dem wydajno ciowym. Po pierwsze, skoro kompilator mo e wykona wi cej sprawdze na etapie kompilacji, pozostaje
16 94 ROZDZIA 3 Parametryzowanie typów i metod mniej rzeczy do weryfikacji w czasie wykonania. Po drugie, kompilator JIT mo e traktowa typy warto ciowe w sprytniejszy sposób, dzi ki czemu w wielu sytuacjach udaje si unikn opakowywania i odpakowywania warto ci. W pewnych przypadkach mo e to zdecydowanie wp yn zarówno na wydajno, jak i zu ycie pami ci. Wiele z korzy ci, jakie daj typy generyczne, mo e do z udzenia przypomina te p yn ce z przewagi statycznego systemu typów nad systemem dynamicznym. Mowa tu o lepszej weryfikacji typów na poziomie kompilacji, wi kszej liczbie informacji zawartych bezpo rednio w kodzie, lepszym wsparciu ze strony rodowiska IDE i lepszej wydajno ci. Powód jest prosty: kiedy korzystasz z ogólnego interfejsu programistycznego (na przyk ad z klasy ArrayList), który nie jest w stanie wykry ró nic pomi dzy ró nymi typami, znajdujesz si je li chodzi o dost p do tego interfejsu w sytuacji dynamicznego systemu typów. Warto przy okazji wspomnie, e sytuacja odwrotna przewaga dynamicznego systemu typów nad systemem statycznym ma miejsce w nielicznych przypadkach (korzy ci p yn ce z zastosowania dynamicznych j zyków rzadko s bowiem zwi zane z konieczno ci dokonania wyboru pomi dzy interfejsem generycznym i niegenerycznym). Kiedy mo esz skorzysta z typów generycznych, decyzja o ich u yciu jest oczywista. To wszystko czeka na nas w C# 2 teraz przysz a pora na rzeczywiste wykorzystanie typów generycznych Proste typy generyczne do codziennego u ycia Je eli chcesz wiedzie wszystko o typach generycznych, musisz mie wiadomo, e maj one wiele skomplikowanych elementów. Specyfikacja j zyka C# przedstawia ca y szereg szczegó owych informacji, aby opisa zachowanie w niemal ka dej mo liwej sytuacji. My nie musimy jednak zna wszystkich przypadków szczególnych, aby wykorzysta typy generyczne w sposób produktywny. (W rzeczywisto ci ta sama zasada obowi zuje dla dowolnego obszaru j zyka. Dla przyk adu nie musisz zna wszystkich zasad rz dz cych przypisaniami, wystarczy, e b dziesz umia naprawi kod w przypadku b du kompilacji). W tym podrozdziale opiszemy wszystko, co powiniene wiedzie o typach generycznych, aby móc zastosowa je w codziennej pracy zarówno w sensie u ytkownika interfejsu stworzonego przez innych programistów, jak i producenta w asnych interfejsów. Je eli utkniesz na tym etapie, proponuj, aby si skoncentrowa na wiedzy potrzebnej do korzystania z typów i metod generycznych zawartych w rodowisku i innych bibliotekach. Ta wiedza jest przydatna o wiele cz ciej ni umiej tno samodzielnego tworzenia typów i metod generycznych. Zaczniemy od przyjrzenia si jednej z klas kolekcji wprowadzonych w.net 2.0 Dictionary<TKey, TValue> Nauka przez przyk ad s ownik typu generycznego U ycie typów generycznych jest proste, o ile nie napotkasz przypadkiem jakiego ograniczenia i nie zaczniesz si zastanawia, czemu Twoje rozwi zanie nie chce dzia a. Bez jakiejkolwiek wiedzy teoretycznej mo esz z atwo ci przewidzie zachowanie
17 3.2. Proste typy generyczne do codziennego u ycia 95 kodu, po prostu go analizuj c. Korzystaj c z metody prób i b dów, b dziesz w stanie napisa w asny dzia aj cy kod. (Jednym z udogodnie typów generycznych jest to, e spora cz weryfikacji kodu odbywa si w czasie kompilacji, jest zatem spora szansa, e Twój kod b dzie dzia a, kiedy doprowadzisz do pomy lnej kompilacji takie zachowanie jeszcze bardziej upraszcza eksperymentowanie z kodem). Oczywi cie, celem tego rozdzia u jest wyposa enie Ci w wiedz, dzi ki której nie b dziesz musia zgadywa b dziesz dok adnie wiedzia, co si dzieje na ka dym kroku. Teraz przyjrzyjmy si fragmentowi kodu, który wygl da w miar prosto, nawet je li sk adnia jest nieznajoma. Listing 3.1 u ywa typu Dictionary<TKey, TValue> (w przybli eniu generycznego odpowiednika niegenerycznej klasy Hashtable) do zliczenia cz stotliwo ci wyst powania s ów w zadanym tek cie. Listing 3.1. U ycie Dictionary<TKey, TValue> do zliczenia s ów w tek cie static Dictionary<string, int> CountWords(string text) Dictionary<string, int> frequencies; frequencies = new Dictionary<string, int>(); string[] words = foreach (string word in words) if (frequencies.containskey(word)) frequencies[word]++; else frequencies[word] = 1; return frequencies;... string text lisek ko o drogi, Cichute ko stawia nogi, Cichute ko si zakrada, Nic nikomu nie powiada."; Dictionary<string, int> frequencies = CountWords(text); foreach (KeyValuePair<string, int> entry in frequencies) string word = entry.key; int frequency = entry.value; Console.WriteLine("0: 1", word, frequency); Utworzenie nowego s ownika s owo liczba wyst pie Utworzenie nowego s ownika s owo liczba wyst pie Dodanie do s ownika lub jego uaktualnienie Utworzenie komórki widoku tabeli Metoda CountWords tworzy pusty s ownik dla par a cuch (string) liczba (int) ( ). Jej zadaniem b dzie zliczanie wyst pie ka dego s owa w zadanym tek cie. Nast pnie u ywamy wyra enia regularnego ( ) do podzielenia tekstu na s owa. Wyra enie nie jest szczególnie wyszukane ze wzgl du na kropk na ko cu zdania w ród s ów pojawia si pusty a cuch, a te same s owa pisane wielk i ma liter s traktowane jako ró ne.
18 96 ROZDZIA 3 Parametryzowanie typów i metod Problemy te mo na atwo rozwi za nie zrobi em tego tylko dlatego, aby uzyska jak najprostszy kod dla tego przyk adu. Sprawdzamy, czy dane s owo jest ju w naszym s owniku. Je li jest, zwi kszamy licznik, w przeciwnym razie tworzymy warto pocz tkow licznika ( ). Zwró uwag, e kod dokonuj cy inkrementacji nie musi wykonywa rzutowania na typ int. Wiemy, e otrzymana warto jest typu int ju na etapie kompilacji. Krok wykonuj cy inkrementacj tak naprawd pobiera indekser s ownika, zwi ksza warto, a nast pnie ustawia indekser z powrotem. Niektórzy programi ci wol wykona ten krok w sposób jawny, u ywaj c wyra enia frequencies[word] = frequen cies[word] + 1;. Ostatnia cz listingu wygl da znajomo: enumeracja przez instancj typu Hashtable daje podobn (niegeneryczn ) par DictionaryEntry z w a ciwo ciami Key i Value dla ka dego elementu kolekcji ( ). Ró nica polega na tym, e w C# 1 klucz i warto zosta- yby zwrócone jako typ object, co zmusi oby nas do rzutowania zarówno s owa, jak i cz stotliwo ci. Dodatkowo cz stotliwo (typ warto ciowy) zosta aby opakowana. Trzeba przyzna, e nie musimy przypisywa s owa i cz stotliwo ci do zmiennych lokalnych mogliby my u y pojedynczego wywo ania Console.WriteLine i przekaza mu entry.key i entry.value. Sporne zmienne zosta y przeze mnie u yte wy cznie po to, by podkre- li brak konieczno ci rzutowania. Teraz, kiedy widzieli my ju przyk ad, przyjrzyjmy si, czym w a ciwie jest Dictio nary<tkey, TValue>, do czego odnosz si symbole TKey i TValue oraz jakie znaczenie maj ostre nawiasy wokó nich Typy generyczne i parametry typów W C# wyst puj dwie formy generycznych elementów j zyka: typy generyczne (w czaj c w to klasy, interfejsy, delegaty i struktury nie ma enumeracji generycznych) oraz metody generyczne. Obie formy s u do wyra ania interfejsu programistycznego (w postaci pojedynczej metody generycznej lub ca ego typu generycznego) w taki sposób, i w niektórych miejscach, gdzie spodziewasz si zobaczy normalny typ, widzisz w zamian parametr typu. Parametr typu jest jedynie rezerwacj miejsca na typ rzeczywisty. Parametry pojawiaj si w ostrych nawiasach wewn trz deklaracji typu generycznego i s oddzielone od siebie przecinkami. Zatem w deklaracji Dictionary<TKey, TValue> parametrami typu s TKey i TValue. Chc c u y typu lub metody generycznej, nale y okre li rzeczywiste typy nazywane argumentami typu jakimi chcemy si pos ugiwa. Dla przyk adu na listingu 3.1 argumentami typu s string (dla TKey) i int (dla TValue). ALERT ARGONOWY! Typy generyczne nios ze sob spor dawk szczegó owej terminologii. Umie ci em j w ksi ce w celach informacyjnych i dlatego, e czasem u atwia ona rozmow, w której poruszane s detale implementacyjne. Dla Ciebie terminologia ta mo e si okaza przydatna, je li b dziesz mia zamiar zajrze do specyfikacji j zyka. Jest ma o prawdopodobne, aby musia si ni pos ugiwa w codziennej pracy z typami generycznymi. Prosz zatem, aby zniós dzielnie t dawk terminologii. Wiele z u ywanych tutaj terminów znajdziesz w podrozdziale 4.4 specyfikacji C# 4 proponuj, aby zajrza tam, je li chcesz znale wi cej informacji na ten temat.
19 3.2. Proste typy generyczne do codziennego u ycia 97 Forma, w której adnemu z parametrów typu nie przekazano argumentu typu, nazywana jest niezwi zanym typem generycznym (ang. unbound generic type). Kiedy argumenty typu s okre lone, mówimy o typie skonstruowanym (ang. constructed type). Niezwi zane typy generyczne mo na okre li mianem planów konstrukcyjnych dla typów skonstruowanych, podobnie jak typy (generyczne lub nie) mo na uwa a za plany konstrukcyjne obiektów. Jest to pewnego rodzaju dodatkowa warstwa abstrakcji. Rysunek 3.1 pokazuje j w formie schematu graficznego. Rysunek 3.1. Niezwi zane typy generyczne stanowi plany konstrukcyjne dla typów skonstruowanych, które z kolei s u jako plany konstrukcyjne dla rzeczywistych obiektów (na takiej samej zasadzie jak typy niegeneryczne) Typy mog by otwarte lub zamkni te. Typ otwarty nadal wymaga parametru typu (na przyk ad w postaci argumentu typu lub tablicy elementów typu), podczas gdy typ zamkni ty jest przeciwie stwem typu otwartego ka dy element typu jest szczegó- owo okre lony. Ca y kod wykonuje si w kontek cie zamkni tych typów skonstruowanych. Jedyny przypadek, kiedy masz szans zobaczy niezwi zany typ generyczny w kodzie C# (wy czaj c deklaracj ), ma miejsce podczas u ycia operatora typeof, z którym spotkamy si w sekcji Idea parametru typu odbieraj cego informacj i argumentu typu dostarczaj cego informacj patrz przerywane linie na rysunku 3.1 jest dok adnie taka sama jak w przypadku parametrów i argumentów metod, chocia przy argumentach typu mamy do czynienia z typami, a nie arbitralnymi warto ciami. Argument typu musi by znany w czasie kompilacji, ale w odpowiednim kontek cie mo e nim by równie parametr typu. O typie zamkni tym mo esz my le jak o interfejsie programowania typu otwartego, ale z parametrami typu zast pionymi przez odpowiadaj ce im argumenty typu 2. 2 Taki model nie zawsze jest gwarantowany istniej przypadki szczególne, które nie b d dzia a po zastosowaniu tej prostej regu y ale umo liwia proste pojmowanie typów generycznych, sprawdzaj ce si w przewa aj cej wi kszo ci przypadków.
20 98 ROZDZIA 3 Parametryzowanie typów i metod Tabela 3.1 pokazuje deklaracje niektórych metod i w a ciwo ci publicznych otwartego typu Dictionary<TKey, TValue> oraz jego odpowiedniki w typie zamkni tym Dictionary <string, int>. Tabela 3.1. Przyk ady sygnatur metod typu generycznego z symbolami rezerwuj cymi miejsce na typy i te same metody po podstawieniu argumentów typu Sygnatura metody w typie generycznym void Add(TKey key, TValue value) Sygnatura metody po podstawieniu argumentów typu void Add(string key, int value) TValue this[tkey key] get; set; int this[string key] get; set; bool ContainsValue(TValue value) bool ContainsKey(TKey key) bool ContainsValue(int value) bool ContainsKey(string key) Zwracam uwag, e adna z metod w tabeli 3.1 nie jest w rzeczywisto ci metod generyczn. S to zwyczajne metody wewn trz typu generycznego, które przypadkiem u ywaj parametrów b d cych cz ci deklaracji typu. Metodom generycznym przyjrzymy si w nast pnym podrozdziale. Teraz, kiedy wiesz ju, co znacz symbole TKey oraz TValue i do czego s u ostre nawiasy, mo emy sprawdzi, jak deklaracje z tabeli 3.1 wygl da yby w deklaracji klasy. Oto, jak móg by wygl da kod dla Dictionary<TKey, TValue> (w poni szym przyk adzie brakuje faktycznych implementacji metod i w rzeczywisto ci jest ich wi cej): namespace System.Collections.Generic public class Dictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> public Dictionary()... public void Add(TKey key, TValue value)... public TValue this[tkey key] get... set... Deklaracja klasy generycznej Implementacja interfejsu generycznego Deklaracja metody z u yciem parametrów typu public bool ContainsValue(TValue value)... public bool ContainsKey(TKey key)... [...pozosta e metody...] Zauwa, jak Dictionary<TKey, TValue> implementuje interfejs generyczny IEnumerable <KeyValuePair<TKey, TValue>> (i wiele innych interfejsów w rzeczywistym wykonaniu). Jakiekolwiek argumenty typu wyspecyfikujesz dla klasy, takie same zostan zastosowane do interfejsu w miejscach, gdzie zosta y u yte jednakowe parametry typu. A zatem w naszym przyk adzie Dictionary<string, int> zaimplementuje IEnumerable
21 3.2. Proste typy generyczne do codziennego u ycia 99 <KeyValuePair<string, int>>. Jest to swego rodzaju podwójny interfejs generyczny interfejs IEnumerable<T> z argumentem typu w postaci struktury KeyValuePair<string, int>. W a nie dzi ki implementacji tego interfejsu przyk ad z listingu 3.1 by w stanie przej przez wszystkie pary warto -klucz w taki, a nie inny sposób. Warto zauwa y, e konstruktor nie zawiera listy parametrów typu w nawiasach ostrych. Parametry typu nale raczej do typu ni do danego konstruktora i w a nie tam s deklarowane. Cz onkowie typu deklaruj wy cznie nowo wprowadzane parametry typu, mog to jednak robi jedynie metody. WYMOWA TYPÓW GENERYCZNYCH. Je li kiedykolwiek b dziesz potrzebowa opisa typ generyczny swojemu koledze lub kole ance, wymieniaj parametry lub argumenty typu w taki sposób, jak zrobi by to dla zwyk ej deklaracji. Na przyk ad dla List<T> mo esz powiedzie lista typu T. W Visual Basicu taka wymowa jest sugerowana przez sk adni j zyka: ten sam typ zosta by zapisany jako List(Of T). W przypadku kilku parametrów typu moim zdaniem dobrze jest oddzieli je s owem lub zdaniem sugeruj cym ca o ciowe znaczenie typu. Zatem Dictionary<string, int> opisa bym jako s ownik a cuchów w liczby podkre laj c w ten sposób mapuj cy charakter typu. Typy generyczne mog by przeci ane w odniesieniu do liczby parametrów typu. Móg by zatem zdefiniowa MyType, MyType<T>, MyType<T,U>, MyType<T,U,V>, itd. wszystkie w ramach tej samej przestrzeni nazw. Nazwy typów parametrów s w takiej sytuacji nieistotne, wa na jest jedynie ich liczba. Typy te, poza nazw, nie s ze sob zwi zane oznacza to mi dzy innymi, e nie istnieje mi dzy nimi domy lna konwersja. Ta sama zasada obowi zuje dla metod generycznych: dwie metody mog mie dok adnie tak sam sygnatur z wyj tkiem liczby parametrów typu. Chocia brzmi to troch jak przepis na katastrof, takie rozwi zanie mo e by przydatne, je li chcesz skorzysta z wnioskowania typów generycznych, w którym kompilator jest w stanie wywnioskowa niektóre z argumentów typu za Ciebie. Wrócimy do tego zagadnienia w sekcji NAZEWNICTWO STOSOWANE DLA PARAMETRÓW TYPU. Mo esz stworzy typ, pos uguj c si takimi parametrami jak T, U i V. Takie nazwy b d jednak mówi bardzo ma o o swoim przeznaczeniu lub sposobie u ytkowania. Dla porównania we my typ Dictionary<TKey, TValue>, w którym jasno wida, e TKey reprezentuje typ kluczy, a TValue typ warto ci. W przypadku pojedynczego parametru typu, którego przeznaczenie jest w miar oczywiste, zgodnie z konwencj stosowana jest nazwa T (dobrym przyk adem jest List<T>). Parametry typu wyst puj ce w liczbie mnogiej s zwykle nazywane zgodnie ze swoim przeznaczeniem i poprzedzane przedrostkiem T, aby wskaza, e chodzi o parametr typu. Mimo tych regu czasem natrafisz na typ z kilkoma parametrami w postaci pojedynczych liter (przyk adem jest SynchronizedKeyed Collection<T, K>). Staraj si unika tworzenia podobnych konstrukcji. Wiemy ju, jakie zadania spe niaj typy generyczne. Zajmijmy si teraz metodami generycznymi.
22 100 ROZDZIA 3 Parametryzowanie typów i metod Metody generyczne i czytanie deklaracji generycznych Zd y em ju kilkakrotnie wspomnie o metodach generycznych, ale do tej pory nie spotkali my jeszcze adnej z nich. W porównaniu do typów generycznych idea metod generycznych mo e si dla Ciebie okaza bardziej zawi a wydaj si one mniej naturalne dla naszego mózgu, chocia podstawowa zasada dzia ania pozostaje bez zmian. Jeste my przyzwyczajeni, e parametry wej ciowe oraz warto ci zwracane przez metody maj zawsze ci le okre lony typ. Widzieli my równie, jak typ generyczny u ywa parametrów typu do deklarowania swoich metod. Metody generyczne posuwaj si jeszcze dalej w ramach skonstruowanego typu mog posiada w asne parametry typu. Nie przejmuj si, je li nie rozumiesz w tej chwili, o co dok adnie chodzi my l, e doznasz nag ego ol nienia po przeanalizowaniu kilku przyk adów. Dictionary<TKey, TValue> nie posiada metod generycznych, ale jego bliski krewny List<T> tak. Jak wiadomo, List<T> jest list elementów okre lonego typu. Pami taj c, e T jest parametrem typu dla ca ej klasy, dokonajmy szczegó owej analizy deklaracji metody generycznej. Rysunek 3.2 pokazuje znaczenie poszczególnych cz ci deklaracji metody ConvertAll 3. Rysunek 3.2. Anatomia deklaracji metody generycznej Patrz c na deklaracj typu generycznego bez znaczenia, czy jest to typ, czy te metoda mo esz mie problem ze zrozumieniem jej znaczenia, szczególnie je li napotkasz typy generyczne wewn trz typów generycznych, jak widzieli my to w przyk adzie interfejsu implementowanego przez s ownik. Najwa niejsze to nie panikowa, tylko przyj ca o spokojnie, a nast pnie przeanalizowa na przyk adzie. We inny typ dla ka dego parametru typu i odpowiednio je zastosuj. W tym przypadku zacznijmy od zast pienia parametru typu b d cego w a cicielem metody (cz <T> typu List<T>). B dziemy si trzyma przyk adu listy a cuchów i we wszystkich miejscach deklaracji wstawimy string zamiast T: List<TOutput> ConvertAll<TOutput>(Converter<string, TOutput> conv) Jest troch lepiej, ale dalej musimy si jeszcze upora z TOutput. Wida, e jest to parametr typu metody (z góry przepraszam za myl c terminologi ), poniewa wyst puje w ostrych nawiasach zaraz za jej nazw. Spróbujmy u y innego znanego nam typu Guid jako argumentu typu w miejsce TOutput. Ponownie zast pujemy wszystkie miejsca wyst pienia TOutput. Usuwamy cz informuj c o parametrze typu i od tego momentu mo emy traktowa metod jako niegeneryczn : List<Guid> ConvertAll(Converter<string, Guid> conv) 3 Parametr converter zosta skrócony do conv, dzi ki czemu deklaracja mie ci si w jednej linii. Pozosta a cz ci le odpowiada dokumentacji.
23 3.2. Proste typy generyczne do codziennego u ycia 101 Teraz, kiedy wszystko jest wyra one przy u yciu typów konkretnych, atwiej b dzie nam my le. Chocia metoda jest faktycznie generyczna, przez moment b dziemy j traktowa tak, jakby ni nie by a. W ten sposób lepiej zrozumiemy jej znaczenie. Id c przez elementy deklaracji od lewej strony, widzimy, e metoda: zwraca wynik typu List<Guid>, nazywa si ConvertAll, ma pojedynczy parametr Converter<string, Guid> o nazwie conv. Teraz musimy si tylko dowiedzie, czym jest Converter<string, Guid>, i b dziemy mie wszystko rozpracowane. Nie b dzie chyba zaskoczeniem, je li dowiesz si, e Converter<string, Guid> jest skonstruowanym delegatem typu generycznego (jego wersj niezwi zan jest Converter<TInput, TOutput>), który konwertuje a cuch na GUID. Mamy zatem metod, która operuje na li cie a cuchów i u ywa konwertera do wyprodukowania listy GUID-ów. Skoro rozumiemy ju sygnatur metody, atwiej b dzie nam zrozumie dokumentacj, która potwierdza, e metoda tworzy now list typu List<Guid>, konwertuje ka dy element z oryginalnej listy do typu docelowego i dodaje go do listy, któr zwraca na samym ko cu. My lenie o sygnaturze w konkretnych kategoriach daje nam przejrzysty model mentalny i u atwia odgadni cie faktycznego przeznaczenia metody. Chocia technika ta mo e si wydawa troch prymitywna, ja nadal uwa am j za bardzo u yteczn podczas analizy skomplikowanych metod. Prawdziwymi potworami pod tym wzgl dem s niektóre czteroparametrowe sygnatury metod nale- ce do LINQ. Zastosowanie przedstawionej analizy pozwala poradzi sobie równie z nimi. Aby udowodni, e ca y ten wywód nie by tylko zwodzeniem, przyjrzyjmy si naszej metodzie w dzia aniu. Listing 3.2 przedstawia konwersj listy liczb ca kowitych na list liczb zmiennoprzecinkowych w taki sposób, e ka dy element listy wynikowej jest pierwiastkiem kwadratowym odpowiadaj cej mu warto ci z listy pierwotnej. Po wykonaniu konwersji wy wietlamy zawarto ca ej listy. Listing 3.2. Metoda List<T>.ConvertAll<TOutput> w dzia aniu static double TakeSquareRoot(int x) return Math.Sqrt(x);... List<int> integers = new List<int>(); integers.add(1); Utworzenie i wype nienie integers.add(2); listy liczb ca kowitych integers.add(3); integers.add(4); Converter<int, double> converter = TakeSquareRoot; List<double> doubles; doubles = integers.convertall<double>(converter); foreach (double d in doubles) Console.WriteLine(d); Utworzenie instancji delegata Konwersja listy przy u yciu metody ConvertAll
24 102 ROZDZIA 3 Parametryzowanie typów i metod Utworzenie i wype nienie listy jest banalnie proste ( ) korzystamy z listy liczb ca kowitych o mocnym typie. W punkcie ( ) u ywamy mechanizmu delegatowego (konwersji grupy metod) wprowadzonego w C# 2 który b dziemy szczegó owo omawia w podrozdziale 5.2. Chocia nie lubi si pos ugiwa elementami j zyka przed ich pe nym opisem, tym razem by em zmuszony. Ten wiersz kodu nie zmie ci by si tutaj, gdyby my pos u yli si sk adni C# 1. W punkcie ( ) wywo ujemy metod generyczn, okre laj c jej argument typu, podobnie jak robimy to dla typów generycznych. W tym miejscu mogliby my skorzysta z wnioskowania typu, ale nie chc wprowadza zbyt wielu cech jednocze nie. Wypisanie zawarto ci listy na ko cu jest ju zupe nie proste. Po uruchomieniu programu zgodnie z oczekiwaniami zobaczysz warto ci 1, 1.414, i 2. Kto móg by zapyta, jaki to ma sens. Czy nie mogliby my zwyczajnie u y p tli foreach, eby przej po wszystkich warto ciach ca kowitych i bezpo rednio wypisa wynik pierwiastka? Oczywi cie, e tak. Przyk ad demonstruje jednak jeszcze inn rzecz konwersj listy jednego typu na list innego typu z u yciem pewnej logiki. Kod wykonuj cy tak operacj r cznie jest równie prosty, ale wersja wykonuj ca t operacj w pojedynczym wierszu jest czytelniejsza. Jest to typowa cecha metod generycznych wykonuj one w prostszy sposób operacje, które wcze niej mog e z powodzeniem wykona d u sz metod. Przed wprowadzeniem metod generycznych operacj podobn do ConvertAll mo na by o wykona na typie ArrayList, dokonuj c konwersji z typu object na object, ale efekt by o wiele mniej satysfakcjonuj cy. Dodatkowe usprawnienie nios metody anonimowe (zobacz podrozdzia 5.4) przy ich u yciu mogliby my okre li logik konwersji w miejscu, unikaj c konieczno ci tworzenia w tym celu dodatkowej metody. Du e uproszczenie pod tym wzgl dem wprowadzaj LINQ i wyra enia lambda, o czym przekonamy si w cz ci trzeciej. Warto doda, e metody generyczne mog wyst powa równie w typach niegenerycznych. Listing 3.3 pokazuje metod generyczn zadeklarowan i u yt wewn trz niegenerycznej klasy. Listing 3.3. Implementacja metody generycznej wewn trz niegenerycznego typu static List<T> MakeList<T>(T first, T second) List<T> list = new List<T>(); list.add(first); list.add(second); return list;... List<string> list = MakeList<string>("Wiersz 1", "Wiersz 2"); foreach (string x in list) Console.WriteLine(x); Metoda generyczna MakeList<T> potrzebuje tylko jednego parametru typu (T). Jej dzia- anie jest zupe nie proste i polega na utworzeniu listy z warto ci przekazanych jako argumenty. Warto jednak zauwa y, e w jej wn trzu mo emy u y T jako argumentu
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną,
Bardziej szczegółowoWszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną,
Bardziej szczegółowoPolish edition copyright 2014 by Helion S.A. All rights reserved.
Tytuł oryginału: The Abundance Manifesto Tłumaczenie: Joanna Sugiero ISBN: 978-83-246-9226-2 2013 by Hypnotic Marketing, Inc. All rights reserved. Reproduction and distribution are forbidden. No part of
Bardziej szczegółowoDziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.
Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania
Bardziej szczegółowoKLAUZULE ARBITRAŻOWE
KLAUZULE ARBITRAŻOWE KLAUZULE arbitrażowe ICC Zalecane jest, aby strony chcące w swych kontraktach zawrzeć odniesienie do arbitrażu ICC, skorzystały ze standardowych klauzul, wskazanych poniżej. Standardowa
Bardziej szczegółowoInstalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania...
Zawartość Instalacja... 1 Konfiguracja... 2 Uruchomienie i praca z raportem... 4 Metody wyszukiwania... 6 Prezentacja wyników... 7 Wycenianie... 9 Wstęp Narzędzie ściśle współpracujące z raportem: Moduł
Bardziej szczegółowoPOMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM. Vademecum doradztwa edukacyjno-zawodowego. Akademia
POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM PLANOWANIE DZIAŁAŃ Określanie drogi zawodowej to szereg różnych decyzji. Dobrze zaplanowana droga pozwala dojechać do określonego miejsca w sposób, który Ci
Bardziej szczegółowo1. Podstawy budowania wyra e regularnych (Regex)
Dla wi kszo ci prostych gramatyk mo na w atwy sposób napisa wyra enie regularne które b dzie s u y o do sprawdzania poprawno ci zda z t gramatyk. Celem niniejszego laboratorium b dzie zapoznanie si z wyra
Bardziej szczegółowoWszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Tytuł oryginału: The LEGO MINDSTORMS EV3 Idea Book Tłumaczenie: Dorota Konowrocka-Sawa ISBN: 978-83-283-1246-3 Copyright 2015 by Yoshihito Isogawa. Title of English-language original: The LEGO MINDSTORMS
Bardziej szczegółowoStrategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).
Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania). W momencie gdy jesteś studentem lub świeżym absolwentem to znajdujesz się w dobrym momencie, aby rozpocząć planowanie swojej ścieżki
Bardziej szczegółowoPRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc
PRAWA ZACHOWANIA Podstawowe terminy Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc a) si wewn trznych - si dzia aj cych na dane cia o ze strony innych
Bardziej szczegółowoAkademickie Centrum Informatyki PS. Wydział Informatyki PS
Akademickie Centrum Informatyki PS Wydział Informatyki PS Wydział Informatyki Sieci komputerowe i Telekomunikacyjne ROUTING Krzysztof Bogusławski tel. 4 333 950 kbogu@man.szczecin.pl 1. Wstęp 2. Tablica
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Elementy algorytmiki C w środowisku.e (C#) dr inŝ. Grzegorz Zych Copernicanum, pok. 104 lub 206a 1 Minimum programowe reści kształcenia: Pojęcie algorytmu. Podstawowe konstrukcje
Bardziej szczegółowoRozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu
Rozdział 6 Pakowanie plecaka 6.1 Postawienie problemu Jak zauważyliśmy, szyfry oparte na rachunku macierzowym nie są przerażająco trudne do złamania. Zdecydowanie trudniejszy jest kryptosystem oparty na
Bardziej szczegółowoProgram szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych
Program szkoleniowy Efektywni50+ Moduł III 1 Wprowadzenie do zagadnienia wymiany dokumentów. Lekcja rozpoczynająca moduł poświęcony standardom wymiany danych. Wprowadzenie do zagadnień wymiany danych w
Bardziej szczegółowoHarmonogramowanie projektów Zarządzanie czasem
Harmonogramowanie projektów Zarządzanie czasem Zarządzanie czasem TOMASZ ŁUKASZEWSKI INSTYTUT INFORMATYKI W ZARZĄDZANIU Zarządzanie czasem w projekcie /49 Czas w zarządzaniu projektami 1. Pojęcie zarządzania
Bardziej szczegółowoSpis treści 1. Wstęp 2. Projektowanie systemów informatycznych
Spis treści 1. Wstęp... 9 1.1. Inżynieria oprogramowania jako proces... 10 1.1.1. Algorytm... 11 1.2. Programowanie w językach wysokiego poziomu... 11 1.3. Obiektowe podejście do programowania... 12 1.3.1.
Bardziej szczegółowoPolitechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, 00-662 Warszawa
Zamawiający: Wydział Matematyki i Nauk Informacyjnych Politechniki Warszawskiej 00-662 Warszawa, ul. Koszykowa 75 Przedmiot zamówienia: Produkcja Interaktywnej gry matematycznej Nr postępowania: WMiNI-39/44/AM/13
Bardziej szczegółowoUniwersytet Rzeszowski
Uniwersytet Rzeszowski Interdyscyplinarne Centrum Modelowania Komputerowego Inżynieria oprogramowania Część 1: Tworzenie dokumentacji projektowej Opracował: dr inż. Przemysław Pardel v2.01 2014 1. Dokumentacja
Bardziej szczegółowoKonfiguracja historii plików
Wielu producentów oprogramowania oferuje zaawansowane rozwiązania do wykonywania kopii zapasowych plików użytkownika czy to na dyskach lokalnych czy w chmurze. Warto jednak zastanowić się czy instalacja
Bardziej szczegółowoPODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3
PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 29/2 SEMESTR 3 Rozwiązania zadań nie były w żaden sposób konsultowane z żadnym wiarygodnym źródłem informacji!!!
Bardziej szczegółowoKomentarz technik ochrony fizycznej osób i mienia 515[01]-01 Czerwiec 2009
Strona 1 z 19 Strona 2 z 19 Strona 3 z 19 Strona 4 z 19 Strona 5 z 19 Strona 6 z 19 Strona 7 z 19 W pracy egzaminacyjnej oceniane były elementy: I. Tytuł pracy egzaminacyjnej II. Założenia do projektu
Bardziej szczegółowoZobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence.
Informacje dla kadry zarządzającej Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence. 2010 Cisco i/lub firmy powiązane. Wszelkie prawa zastrzeżone. Ten dokument zawiera
Bardziej szczegółowoSpring MVC Andrzej Klusiewicz 1/18
Spring MVC pierwsza aplikacja Kod źródłowy aplikacji którą tworzę w niniejszym kursie jest do pobrania z adresu: http://www.jsystems.pl/storage/spring/springmvc1.zip Aplikacja jest tworzona w NetBeans,
Bardziej szczegółowoProjektowanie bazy danych
Projektowanie bazy danych Pierwszą fazą tworzenia projektu bazy danych jest postawienie definicji celu, założeo wstępnych i określenie podstawowych funkcji aplikacji. Każda baza danych jest projektowana
Bardziej szczegółowoWtedy wystarczy wybrać właściwego Taga z listy.
Po wejściu na stronę pucharino.slask.pl musisz się zalogować (Nazwa użytkownika to Twój redakcyjny pseudonim, hasło sam sobie ustalisz podczas procedury rejestracji). Po zalogowaniu pojawi się kilka istotnych
Bardziej szczegółowoO PROJEKCIE I WNIOSKU DLA POCZĄTKUJĄCYCH I TYCH, KTÓRZY CHCĄ UPORZĄDKOWAĆ WIEDZĘ MARCIN DADEL
O PROJEKCIE I WNIOSKU DLA POCZĄTKUJĄCYCH I TYCH, KTÓRZY CHCĄ UPORZĄDKOWAĆ WIEDZĘ MARCIN DADEL O PROJEKCIE I WNIOSKU DLA POCZĄTKUJĄCYCH I TYCH, KTÓRZY CHCĄ UPORZĄDKOWAĆ WIEDZĘ MARCIN DADEL Sieć SPLOT STOWARZYSZENIE
Bardziej szczegółowo1. Korzyści z zakupu nowej wersji... 2. 2. Poprawiono... 2. 3. Zmiany w słowniku Stawki VAT... 2. 4. Zmiana stawki VAT w kartotece Towary...
Forte Handel 1 / 8 Nowe funkcje w module Forte Handel w wersji 2011a Spis treści: 1. Korzyści z zakupu nowej wersji... 2 2. Poprawiono... 2 Nowe funkcje w module Forte Handel w wersji 2011 Spis treści:
Bardziej szczegółowoProgram Google AdSense w Smaker.pl
Smaker.pl Program Google AdSense w Smaker.pl Pytania i odpowiedzi dotyczące programu Google AdSense Spis treści Czym jest AdSense... 2 Zasady działania AdSense?... 2 Jak AdSense działa w Smakerze?... 3
Bardziej szczegółowoOpis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej
Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej 3.1 Informacje ogólne Program WAAK 1.0 służy do wizualizacji algorytmów arytmetyki komputerowej. Oczywiście istnieje wiele narzędzi
Bardziej szczegółowoObliczenia arytmetyczne. Konkatenacja pól. Aliasy kolumn. Aliasy tabel. Co dalej? Rozdział 4. Korzystanie z funkcji. Zastosowanie funkcji
O autorze Wprowadzenie Rozdział 1. Relacyjne bazy danych i SQL Język i logika Definicja SQL Microsoft SQL Server, Oracle i MySQL Inne bazy danych Relacyjne bazy danych Klucze główne i obce Typy danych
Bardziej szczegółowoAPI transakcyjne BitMarket.pl
API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy
Bardziej szczegółowoGEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007
GEO-SYSTEM Sp. z o.o. 02-732 Warszawa, ul. Podbipięty 34 m. 7, tel./fax 847-35-80, 853-31-15 http:\\www.geo-system.com.pl e-mail:geo-system@geo-system.com.pl GEO-RCiWN Rejestr Cen i Wartości Nieruchomości
Bardziej szczegółowoAudyt SEO. Elementy oraz proces przygotowania audytu. strona
Audyt SEO Elementy oraz proces przygotowania audytu 1 Spis treści Kim jesteśmy? 3 Czym jest audyt SEO 4 Główne elementy audytu 5 Kwestie techniczne 6 Słowa kluczowe 7 Optymalizacja kodu strony 8 Optymalizacja
Bardziej szczegółowoOgólna charakterystyka kontraktów terminowych
Jesteś tu: Bossa.pl Kurs giełdowy - Część 10 Ogólna charakterystyka kontraktów terminowych Kontrakt terminowy jest umową pomiędzy dwiema stronami, z których jedna zobowiązuje się do nabycia a druga do
Bardziej szczegółowoWszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną,
Bardziej szczegółowoBazy danych. Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15
Bazy danych Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15 Przechowywanie danych Wykorzystanie systemu plików, dostępu do plików za pośrednictwem systemu operacyjnego
Bardziej szczegółowoWartości domyślne, szablony funkcji i klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoBaza danych. Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami.
Access Baza danych Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami. Baza danych sk ada si z danych oraz programu komputerowego wyspecjalizowanego do gromadzenia i przetwarzania
Bardziej szczegółowoElementy i funkcjonalno
Konsola operatora Konsola operatora zapewnia dost p do najwa niejszych informacji o po czeniu i aktualnym statusie abonentów, dzi ki czemu u atwia przekazywanie po cze. Konsola przewy sza swoimi mo liwo
Bardziej szczegółowoPERSON Kraków 2002.11.27
PERSON Kraków 2002.11.27 SPIS TREŚCI 1 INSTALACJA...2 2 PRACA Z PROGRAMEM...3 3. ZAKOŃCZENIE PRACY...4 1 1 Instalacja Aplikacja Person pracuje w połączeniu z czytnikiem personalizacyjnym Mifare firmy ASEC
Bardziej szczegółowoImplant ślimakowy wszczepiany jest w ślimak ucha wewnętrznego (przeczytaj artykuł Budowa ucha
Co to jest implant ślimakowy Implant ślimakowy to bardzo nowoczesne, uznane, bezpieczne i szeroko stosowane urządzenie, które pozwala dzieciom z bardzo głębokimi ubytkami słuchu odbierać (słyszeć) dźwięki.
Bardziej szczegółowoZP/6/2015 WYKONAWCA NR 1 Pytanie 1 Odpowiedź: Pytanie 2 Odpowiedź: Pytanie 3 Odpowiedź: Pytanie 4 Odpowiedź: Pytanie 5 Odpowiedź:
30.04.2015 r. Działając zgodnie z treścią art. 38 ust. 1 i 2 Pzp, Zamawiający informuje, że w postępowaniu prowadzonym pod numerem ZP/6/2015, w dniu 29 kwietnia 2015 r., Wykonawcy złożyli pytania do treści
Bardziej szczegółowoStanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim
Prezes Urzędu Ochrony Konkurencji i Konsumentów Warszawa, 16 maja 2016 r. Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie
Bardziej szczegółowoWszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną,
Bardziej szczegółowoPROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec
PROE wykład 7 kontenery tablicowe, listy dr inż. Jacek Naruniec Prosty kontener oparty na tablicach Funkcja dodawanie pojedynczego słonia do kontenera: 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25
Bardziej szczegółowoWYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH
WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH Klasa: 3TIR - Technik informatyk Program: 351203 Wymiar: 4 h tygodniowo Podręcznik: Kwalifikacja E.14 Programowanie
Bardziej szczegółowoMicrosoft Management Console
Microsoft Management Console Konsola zarządzania jest narzędziem pozwalającym w prosty sposób konfigurować i kontrolować pracę praktycznie wszystkich mechanizmów i usług dostępnych w sieci Microsoft. Co
Bardziej szczegółowoEdycja geometrii w Solid Edge ST
Edycja geometrii w Solid Edge ST Artykuł pt.: " Czym jest Technologia Synchroniczna a czym nie jest?" zwracał kilkukrotnie uwagę na fakt, że nie należy mylić pojęć modelowania bezpośredniego i edycji bezpośredniej.
Bardziej szczegółowoArchiwum Prac Dyplomowych
Archiwum Prac Dyplomowych Instrukcja dla studentów Ogólna procedura przygotowania pracy do obrony w Archiwum Prac Dyplomowych 1. Student rejestruje pracę w dziekanacie tej jednostki uczelni, w której pisana
Bardziej szczegółowoSystem kontroli wersji SVN
System kontroli wersji SVN Co to jest system kontroli wersji Wszędzie tam, gdzie nad jednym projektem pracuje wiele osób, zastosowanie znajduje system kontroli wersji. System, zainstalowany na serwerze,
Bardziej szczegółowo0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie
0.1 Hierarchia klas 0.1.1 Diagram 0.1.2 Krótkie wyjaśnienie Po pierwsze to jest tylko przykładowe rozwiązanie. Zarówno na wtorkowych i czwartkowych ćwiczeniach odbiegaliśmy od niego, ale nie wiele. Na
Bardziej szczegółowo2.Prawo zachowania masy
2.Prawo zachowania masy Zdefiniujmy najpierw pewne podstawowe pojęcia: Układ - obszar przestrzeni o określonych granicach Ośrodek ciągły - obszar przestrzeni którego rozmiary charakterystyczne są wystarczająco
Bardziej szczegółowoInstrukcja zarządzania systemem informatycznym służącym do przetwarzania danych osobowych
Załącznik nr 1 do Zarządzenia Nr 1/2013 Dyrektora Zespołu Obsługi Szkół i Przedszkoli w Muszynie z dnia 30 grudnia 2013 r. Instrukcja zarządzania systemem informatycznym służącym do przetwarzania danych
Bardziej szczegółowoModuł. Rama 2D suplement do wersji Konstruktora 4.6
Moduł Rama 2D suplement do wersji Konstruktora 4.6 110-1 Spis treści 110. RAMA 2D - SUPLEMENT...3 110.1 OPIS ZMIAN...3 110.1.1 Nowy tryb wymiarowania...3 110.1.2 Moduł dynamicznego przeglądania wyników...5
Bardziej szczegółowoJak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.
Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach. 1 PROJEKTY KOSZTOWE 2 PROJEKTY PRZYCHODOWE 3 PODZIAŁ PROJEKTÓW ZE WZGLĘDU
Bardziej szczegółowoINSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI
Katowice, dnia 13 sierpnia 2008r. INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI Wskazane dokumenty w kaŝdym punkcie uwzględniają pełnomocnictwo udzielone przez upowaŝnione osoby. NaleŜy zaznaczyć, Ŝe będzie
Bardziej szczegółowoZarządzanie projektami. wykład 1 dr inż. Agata Klaus-Rosińska
Zarządzanie projektami wykład 1 dr inż. Agata Klaus-Rosińska 1 DEFINICJA PROJEKTU Zbiór działań podejmowanych dla zrealizowania określonego celu i uzyskania konkretnego, wymiernego rezultatu produkt projektu
Bardziej szczegółowoJak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro)
Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro) Uwaga: Ten tutorial tworzony był z programem Cubase 4 Studio, ale równie dobrze odnosi się do wcześniejszych wersji,
Bardziej szczegółowoO autorze... 9 Wprowadzenie... 11
Spis tre ci O autorze... 9 Wprowadzenie... 11 Rozdzia 1. Sterownik przemys owy... 15 Sterownik S7-1200... 15 Budowa zewn trzna... 16 Budowa wewn trzna... 19 Cykl programu oraz tryby pracy... 21 Zestaw
Bardziej szczegółowoZamawiający potwierdza, że zapis ten należy rozumieć jako przeprowadzenie audytu z usług Inżyniera.
Pytanie nr 1 Bardzo prosimy o wyjaśnienie jak postrzegają Państwo możliwość przeliczenia walut obcych na PLN przez Oferenta, który będzie składał ofertę i chciał mieć pewność, iż spełnia warunki dopuszczające
Bardziej szczegółowoKOMISJA WSPÓLNOT EUROPEJSKICH. Wniosek DECYZJA RADY
KOMISJA WSPÓLNOT EUROPEJSKICH Bruksela, dnia 13.12.2006 KOM(2006) 796 wersja ostateczna Wniosek DECYZJA RADY w sprawie przedłużenia okresu stosowania decyzji 2000/91/WE upoważniającej Królestwo Danii i
Bardziej szczegółowoWarunki Oferty PrOmOcyjnej usługi z ulgą
Warunki Oferty PrOmOcyjnej usługi z ulgą 1. 1. Opis Oferty 1.1. Oferta Usługi z ulgą (dalej Oferta ), dostępna będzie w okresie od 16.12.2015 r. do odwołania, jednak nie dłużej niż do dnia 31.03.2016 r.
Bardziej szczegółowoNOWELIZACJA USTAWY PRAWO O STOWARZYSZENIACH
NOWELIZACJA USTAWY PRAWO O STOWARZYSZENIACH Stowarzyszenie opiera swoją działalność na pracy społecznej swoich członków. Do prowadzenia swych spraw stowarzyszenie może zatrudniać pracowników, w tym swoich
Bardziej szczegółowoEuropejska Akredytacja Indywidualna v2 (European Individual Accreditation)
Europejska Akredytacja Indywidualna v2 (European Individual Accreditation) Formularz Zgłoszeniowy EIA v2 dla kandydatów nie posiadających certyfikatu EQA (lub dla kandydatów posiadających certyfikat EQA
Bardziej szczegółowoSystem zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy
System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy modelowaniem, a pewien dobrze zdefiniowany sposób jego
Bardziej szczegółowoPROCEDURA PRZEGLĄDU I MONITORINGU KODEKSU ETYCZNEGO PRACOWNIKÓW POWIATOWEGO CENTRUM POMOCY RODZINIE W KOŁOBRZEGU
PROCEDURA PRZEGLĄDU I MONITORINGU KODEKSU ETYCZNEGO PRACOWNIKÓW POWIATOWEGO CENTRUM POMOCY RODZI W KOŁOBRZEGU PROCEDURA COROCZNEGO PRZEGLĄDU WEWNĘTRZNEGO I STAŁEGO MONITORINGU KODEKSU ETYCZNEGO PRZEZ PRACOWNIKÓW
Bardziej szczegółowoUMOWA POWIERZENIA PRZETWARZANIA DANYCH OSOBOWYCH nr.. zawarta w dniu. zwana dalej Umową powierzenia
Załącznik nr 3A do SIWZ UMOWA POWIERZENIA PRZETWARZANIA DANYCH OSOBOWYCH nr.. zawarta w dniu. zwana dalej Umową powierzenia pomiędzy: Szpitalem Uniwersyteckim Nr 2 im. Dr Jana Biziela w Bydgoszczy ul.
Bardziej szczegółowoWSTĘP DO PROGRAMOWANIA
Stefan Sokołowski WSTĘP DO PROGRAOWANIA Inst Informatyki UG, Gdańsk, 2011/2012 Wykład1ALGORYTAPROGRA,str1 WSTĘP DO PROGRAOWANIA reguły gry Zasadnicze informacje: http://infugedupl/ stefan/dydaktyka/wstepdoprog
Bardziej szczegółowoKomentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE
Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE OKE Kraków 2012 Zadanie egzaminacyjne zostało opracowane
Bardziej szczegółowoTechnologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L
Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: moduł specjalności obowiązkowy: Sieci komputerowe Rodzaj zajęć: wykład, laboratorium Technologie internetowe Internet technologies Forma studiów:
Bardziej szczegółowoI. Zakładanie nowego konta użytkownika.
I. Zakładanie nowego konta użytkownika. 1. Należy wybrać przycisk załóż konto na stronie głównej. 2. Następnie wypełnić wszystkie pola formularza rejestracyjnego oraz zaznaczyć akceptację regulaminu w
Bardziej szczegółowoLepsze samopoczucie to lepsze oceny. Jaka jest korzyść dla dziecka?
Lepsze samopoczucie to lepsze oceny Jaka jest korzyść dla dziecka? Gdy dziecko przebywa w szkole, warunki nauki znacząco wpływają na jego samopoczucie i skuteczność przyswajania wiedzy. Uczenie się może
Bardziej szczegółowoVinCent Office. Moduł Drukarki Fiskalnej
VinCent Office Moduł Drukarki Fiskalnej Wystawienie paragonu. Dla paragonów definiujemy nowy dokument sprzedaży. Ustawiamy dla niego parametry jak podano na poniższym rysunku. W opcjach mamy możliwość
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Tydzień 6 RSC i CSC Znaczenie terminów CSC Complete nstruction Set Computer komputer o pełnej liście rozkazów. RSC Reduced nstruction Set Computer komputer o zredukowanej liście
Bardziej szczegółowoBojszowy, dnia 22.02.2010r. Znak sprawy: GZOZ/P1/2010 WYJAŚNIENIE TREŚCI SIWZ
Bojszowy, dnia 22.02.2010r. Znak sprawy: GZOZ/P1/2010 WYJAŚNIENIE TREŚCI SIWZ Dotyczy: przetargu nieograniczonego na Zakup wraz z dostawą i instalacją aparatu USG dla potrzeb Gminnego Zakładu Opieki Zdrowotnej
Bardziej szczegółowoECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0
ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0 Copyright 2010, Polskie Towarzystwo Informatyczne Zastrzeżenie Dokument ten został opracowany na podstawie materiałów źródłowych pochodzących
Bardziej szczegółowoCharakterystyka systemów plików
Charakterystyka systemów plików Systemy plików są rozwijane wraz z systemami operacyjnymi. Windows wspiera systemy FAT oraz system NTFS. Różnią się one sposobem przechowywania informacji o plikach, ale
Bardziej szczegółowoFirma Informatyczna JazzBIT
Artykuły i obrazy Autor: Stefan Wajda [zwiastun] 10.02.2006. Dodawanie i publikowanie artykułów to najczęstsze zadanie. I chociaż nie jest skomplikowane, może początkujacych wprawiać w zakłopotanie. Trzeba
Bardziej szczegółowoRegu g l u a l min i n w s w pó p ł ó p ł r p acy O ow o iązuje od dnia 08.07.2011
Regulamin współpracy Obowiązuje od dnia 08.07.2011 1 1. Wstęp Regulamin określa warunki współpracy z firmą Hubert Joachimiak HubiSoft. W przypadku niejasności, prosimy o kontakt. Dane kontaktowe znajdują
Bardziej szczegółowo- o zmianie o Krajowym Rejestrze Sądowym
Warszawa, dnia 28 sierpnia, 2012 rok Grupa Posłów na Sejm RP Klubu Poselskiego Ruch Palikota Szanowna Pani Ewa Kopacz Marszałek Sejmu Rzeczypospolitej Polskiej Na podstawie art. 118 ust. 1 Konstytucji
Bardziej szczegółowoInstrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)
Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy) 1. Wejście na stronę http://www.officemedia.com.pl strona główną Office Media 2. Logowanie do zakupowej części serwisu. Login i hasło należy
Bardziej szczegółowoInstrukcja Obsługi STRONA PODMIOTOWA BIP
Instrukcja Obsługi STRONA PODMIOTOWA BIP Elementy strony podmiotowej BIP: Strona podmiotowa Biuletynu Informacji Publicznej podzielona jest na trzy części: Nagłówek strony głównej Stopka strony podmiotowej
Bardziej szczegółowoZAKRES OBOWIĄZKÓW I UPRAWNIEŃ PRACODAWCY, PRACOWNIKÓW ORAZ POSZCZEGÓLNYCH JEDNOSTEK ORGANIZACYJNYCH ZAKŁADU PRACY
ZAKRES OBOWIĄZKÓW I UPRAWNIEŃ PRACODAWCY, PRACOWNIKÓW ORAZ POSZCZEGÓLNYCH JEDNOSTEK ORGANIZACYJNYCH ZAKŁADU PRACY Szkolenia bhp w firmie szkolenie wstępne ogólne 8 Obowiązki pracodawcy Podstawowy obowiązek
Bardziej szczegółowoDE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15
DE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15 Wykonawcy ubiegający się o udzielenie zamówienia Dotyczy: postępowania prowadzonego w trybie przetargu nieograniczonego na Usługę druku książek, nr postępowania
Bardziej szczegółowoEgzamin na tłumacza przysięgłego: kryteria oceny
Egzamin na tłumacza przysięgłego: kryteria oceny Każdy z czterech tekstów na egzaminie oceniany jest w oparciu o następujące kryteria: 1) wierność tłumaczenia (10 punktów) 2) terminologia i frazeologia
Bardziej szczegółowoWdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x
Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x Wersja 02 Styczeń 2016 Centrum Elektronicznych Usług Płatniczych eservice Sp. z o.o. Spis treści 1. Wstęp... 3 1.1. Przeznaczenie dokumentu...
Bardziej szczegółowoTworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna
NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST Pomoc techniczna Dok. Nr PLP0009 Wersja: 24-11-2005
Bardziej szczegółowoSystem Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy
Instrukcja obsługi programu 2.11. Przygotowanie programu do pracy - ECP Architektura inter/intranetowa System Informatyczny CELAB Przygotowanie programu do pracy - Ewidencja Czasu Pracy Spis treści 1.
Bardziej szczegółowoJĘZYK UML JAKO NARZĘDZIE MODELOWANIA PROCESU PROJEKTOWO-KONSTRUKCYJNEGO
JĘZYK UML JAKO NARZĘDZIE MODELOWANIA PROCESU PROJEKTOWO-KONSTRUKCYJNEGO Andrzej BAIER, Tomasz R. LUBCZYŃSKI Streszczenie: W ostatnich latach można zaobserwować dynamiczny rozwój analizy zorientowanej obiektowo.
Bardziej szczegółowoPrzypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?
Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych? 1 Podstawowe pojęcia: 2 3 4 5 Dana (ang.data) najmniejsza, elementarna jednostka informacji o obiekcie będąca przedmiotem przetwarzania
Bardziej szczegółowoInsERT GT Własne COM 1.0
InsERT GT Własne COM 1.0 Autor: Jarosław Kolasa, InsERT Wstęp... 2 Dołączanie zestawień własnych do systemu InsERT GT... 2 Sposób współpracy rozszerzeń z systemem InsERT GT... 2 Rozszerzenia standardowe
Bardziej szczegółowoSystemy mikroprocesorowe - projekt
Politechnika Wrocławska Systemy mikroprocesorowe - projekt Modbus master (Linux, Qt) Prowadzący: dr inż. Marek Wnuk Opracował: Artur Papuda Elektronika, ARR IV rok 1. Wstępne założenia projektu Moje zadanie
Bardziej szczegółowoUdoskonalona wentylacja komory suszenia
Udoskonalona wentylacja komory suszenia Komora suszenia Kratka wentylacyjna Zalety: Szybkie usuwanie wilgoci z przestrzeni nad próbką Ograniczenie emisji ciepła z komory suszenia do modułu wagowego W znacznym
Bardziej szczegółowoOpis modułu analitycznego do śledzenia rotacji towaru oraz planowania dostaw dla programu WF-Mag dla Windows.
Opis modułu analitycznego do śledzenia rotacji towaru oraz planowania dostaw dla programu WF-Mag dla Windows. Zadaniem modułu jest wspomaganie zarządzania magazynem wg. algorytmu just in time, czyli planowanie
Bardziej szczegółowoNiniejszy ebook jest własnością prywatną.
Niniejszy ebook jest własnością prywatną. Niniejsza publikacja, ani żadna jej część, nie może być kopiowana, ani w jakikolwiek inny sposób reprodukowana, powielana, ani odczytywana w środkach publicznego
Bardziej szczegółowoWspółczesne nowoczesne budownictwo pozwala na wyrażenie indywidualnego stylu domu..
Współczesne nowoczesne budownictwo pozwala na wyrażenie indywidualnego stylu domu.. w którym będziemy mieszkać. Coraz więcej osób, korzystających ze standardowych projektów, decyduje się nadać swojemu
Bardziej szczegółowoElementy animacji sterowanie manipulatorem
Elementy animacji sterowanie manipulatorem 1 Cel zadania Wykształcenie umiejętności korzystania z zapisu modelu aplikacji w UML oraz definiowania właściwego interfejsu klasy. 2 Opis zadania Należy napisać
Bardziej szczegółowoINFORMATOR dotyczący wprowadzania do obrotu urządzeń elektrycznych i elektronicznych aparatury, telekomunikacyjnych urządzeń końcowych i urządzeń
INFORMATOR dotyczący wprowadzania do obrotu urządzeń elektrycznych i elektronicznych aparatury, telekomunikacyjnych urządzeń końcowych i urządzeń radiowych oraz wyrobów wykorzystujących energię podlegających
Bardziej szczegółowo