Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wielkość: px
Rozpocząć pokaz od strony:

Download "Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli."

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.

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ółowo

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

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ółowo

Polish edition copyright 2014 by Helion S.A. All rights reserved.

Polish 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ółowo

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Dziedziczenie : 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ółowo

KLAUZULE ARBITRAŻOWE

KLAUZULE 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ółowo

Instalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania...

Instalacja. 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ółowo

POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM. Vademecum doradztwa edukacyjno-zawodowego. Akademia

POMOC 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ółowo

1. Podstawy budowania wyra e regularnych (Regex)

1. 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ółowo

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wszystkie 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ółowo

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

Strategia 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ółowo

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

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 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ółowo

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Akademickie 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ółowo

Podstawy programowania

Podstawy 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ółowo

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Rozdział 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ółowo

Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych

Program 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ółowo

Harmonogramowanie projektów Zarządzanie czasem

Harmonogramowanie 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ółowo

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Spis 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ółowo

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, 00-662 Warszawa

Politechnika 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ółowo

Uniwersytet Rzeszowski

Uniwersytet 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ółowo

Konfiguracja historii plików

Konfiguracja 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ółowo

PODSTAWY 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 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ółowo

Komentarz technik ochrony fizycznej osób i mienia 515[01]-01 Czerwiec 2009

Komentarz 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ółowo

Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence.

Zobacz 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ółowo

Spring MVC Andrzej Klusiewicz 1/18

Spring 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ółowo

Projektowanie bazy danych

Projektowanie 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ółowo

Wtedy wystarczy wybrać właściwego Taga z listy.

Wtedy 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ółowo

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 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ółowo

1. 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...

1. 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ółowo

Program Google AdSense w Smaker.pl

Program 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ółowo

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Opis 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ółowo

Obliczenia arytmetyczne. Konkatenacja pól. Aliasy kolumn. Aliasy tabel. Co dalej? Rozdział 4. Korzystanie z funkcji. Zastosowanie funkcji

Obliczenia 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ółowo

API transakcyjne BitMarket.pl

API 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ółowo

GEO-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. 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ółowo

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

Audyt 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ółowo

Ogólna charakterystyka kontraktów terminowych

Ogó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ółowo

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

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ółowo

Bazy 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 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ółowo

Wartości domyślne, szablony funkcji i klas

Wartoś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ółowo

Baza danych. Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami.

Baza 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ółowo

Elementy i funkcjonalno

Elementy 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ółowo

PERSON Kraków 2002.11.27

PERSON 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ółowo

Implant ślimakowy wszczepiany jest w ślimak ucha wewnętrznego (przeczytaj artykuł Budowa ucha

Implant ś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ółowo

ZP/6/2015 WYKONAWCA NR 1 Pytanie 1 Odpowiedź: Pytanie 2 Odpowiedź: Pytanie 3 Odpowiedź: Pytanie 4 Odpowiedź: Pytanie 5 Odpowiedź:

ZP/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ółowo

Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim

Stanowisko 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ółowo

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

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ółowo

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

PROE 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ółowo

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

WYMAGANIA 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ółowo

Microsoft Management Console

Microsoft 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ółowo

Edycja geometrii w Solid Edge ST

Edycja 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ółowo

Archiwum Prac Dyplomowych

Archiwum 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ółowo

System kontroli wersji SVN

System 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ółowo

0.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 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ółowo

2.Prawo zachowania masy

2.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ółowo

Instrukcja zarządzania systemem informatycznym służącym do przetwarzania danych osobowych

Instrukcja 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ółowo

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

Moduł. 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ółowo

Jak 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. 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ółowo

INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI

INSTRUKCJA 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ółowo

Zarządzanie projektami. wykład 1 dr inż. Agata Klaus-Rosińska

Zarzą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ółowo

Jak 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) 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ółowo

O autorze... 9 Wprowadzenie... 11

O 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ółowo

Zamawiający potwierdza, że zapis ten należy rozumieć jako przeprowadzenie audytu z usług Inżyniera.

Zamawiają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ółowo

KOMISJA WSPÓLNOT EUROPEJSKICH. Wniosek DECYZJA RADY

KOMISJA 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ółowo

Warunki Oferty PrOmOcyjnej usługi z ulgą

Warunki 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ółowo

NOWELIZACJA USTAWY PRAWO O STOWARZYSZENIACH

NOWELIZACJA 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ółowo

Europejska Akredytacja Indywidualna v2 (European Individual Accreditation)

Europejska 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ółowo

System 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 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ółowo

PROCEDURA 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 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ółowo

UMOWA POWIERZENIA PRZETWARZANIA DANYCH OSOBOWYCH nr.. zawarta w dniu. zwana dalej Umową powierzenia

UMOWA 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ółowo

WSTĘP DO PROGRAMOWANIA

WSTĘ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ółowo

Komentarz 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 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ółowo

Technologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L

Technologie 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ółowo

I. Zakładanie nowego konta użytkownika.

I. 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ółowo

Lepsze samopoczucie to lepsze oceny. Jaka jest korzyść dla dziecka?

Lepsze 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ółowo

VinCent Office. Moduł Drukarki Fiskalnej

VinCent 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ółowo

Architektura komputerów

Architektura 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ółowo

Bojszowy, 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 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ółowo

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

ECDL 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ółowo

Charakterystyka systemów plików

Charakterystyka 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ółowo

Firma Informatyczna JazzBIT

Firma 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ółowo

Regu 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

Regu 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

- 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ółowo

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Instrukcja 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ółowo

Instrukcja Obsługi STRONA PODMIOTOWA BIP

Instrukcja 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ółowo

ZAKRES 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 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ółowo

DE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15

DE-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ółowo

Egzamin na tłumacza przysięgłego: kryteria oceny

Egzamin 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ółowo

Wdroż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 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ółowo

Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna

Tworzenie 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ółowo

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

System 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ółowo

JĘZYK UML JAKO NARZĘDZIE MODELOWANIA PROCESU PROJEKTOWO-KONSTRUKCYJNEGO

JĘ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ółowo

Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?

Przypomnienie 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ółowo

InsERT GT Własne COM 1.0

InsERT 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ółowo

Systemy mikroprocesorowe - projekt

Systemy 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ółowo

Udoskonalona wentylacja komory suszenia

Udoskonalona 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ółowo

Opis 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. 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ółowo

Niniejszy ebook jest własnością prywatną.

Niniejszy 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ółowo

Współczesne nowoczesne budownictwo pozwala na wyrażenie indywidualnego stylu domu..

Współ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ółowo

Elementy animacji sterowanie manipulatorem

Elementy 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ółowo

INFORMATOR 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ń 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