E-book details

C#. Lekcje programowania. Praktyczna nauka programowania dla platform .NET i .NET Core

C#. Lekcje programowania. Praktyczna nauka programowania dla platform .NET i .NET Core

Jacek Matulewski

Ebook

Programistą być

Książka, którą trzymasz w ręku, to znakomity podręcznik do nauki programowania od podstaw. Autor, wieloletni wykładowca akademicki i nauczyciel studentów informatyki, proponuje naukę programowania w języku C#. To wybór nieprzypadkowy. C# jest nowoczesnym, obiektowym, stale rozwijanym i popularnym językiem, którym opiekuje się firma Microsoft. Dodatkowo ― dzięki podobieństwu C# do innych często używanych języków z rodziny C, C++ i Java ― wszystko, czego nauczysz się z podręcznika, możesz wykorzystać także do programowania w tych językach.

Zakres zagadnień omawianych w książce obejmuje:

  • język programowania C# 6.0, w tym posługiwanie się zmiennymi, metodami, tablicami oraz kolekcjami danych z platform .NET i .NET Core
  • podstawowe techniki programowania obiektowego
  • różne formaty przechowywania i eksportu danych
  • darmowe środowisko programistyczne Microsoft Visual Studio 2019 Community

Jeżeli chcesz uczyć się programować od podstaw ― to książka dla Ciebie.

Jeżeli znasz już podstawy, ale chcesz poznać C# oraz platformy .NET i .NET Core ― to również dobry wybór.

Uwaga! Podręcznik zawiera ćwiczenia, w których krok po kroku opisano tworzenie aplikacji konsolowych w darmowym Visual Studio 2019 i omówiono ich kod, a także bogaty zestaw zadań do samodzielnego wykonania!


Wstęp 17

CZĘŚĆ I. PODSTAWY PROGRAMOWANIA 19

Rozdział 1. Pierwszy kontakt ze środowiskiem Visual Studio 2019 i językiem C# 21

    • Projekt aplikacji konsolowej 22
    • Skróty klawiszowe Visual Studio 25
    • Podpowiadanie kodu (IntelliSense) 27
    • Strumienie wyjścia i wejścia 28
    • Wszystkiego po trochu 29
    • Pytania 32

Rozdział 2. NET Framework, .NET Core i .NET Standard 33

  • Pytania 36

Rozdział 3. Podstawowe typy danych 37

    • Deklaracja i zmiana wartości zmiennej 37
    • Typy liczbowe oraz typ znakowy 39
    • Określanie typu zmiennej przy inicjacji (pseudotyp var) 41
    • Operatory 42
    • Konwersje typów 45
    • Łańcuchy 46
    • String kontra StringBuilder 48
    • [Dla dociekliwych] Formatowanie łańcuchów 50
    • Typ wyliczeniowy 51
  • Ćwiczenia 52
    • Średnia arytmetyczna 52
    • Równanie kwadratowe 55
    • Łańcuchy 57
  • Pytania 57
  • Zadanie 58

Rozdział 4. Metody 59

    • Parametry metody. Przeciążanie metod 60
    • Domyślne wartości argumentów metod - argumenty opcjonalne 61
    • Argumenty nazwane 62
    • Wartości zwracane przez metody 62
    • Zwracanie wartości przez argument metody 63
  • [Dla dociekliwych] Zagadnienia zaawansowane 65
    • [Dla dociekliwych] Delegacje 65
    • [Dla dociekliwych] Wyrażenia lambda 66
    • [Dla dociekliwych] Delegacje Action, Func i Predicate 68
    • [Dla dociekliwych] Caller Information 69
  • Ćwiczenia 71
    • Średnia arytmetyczna 71
    • Parzystość 71
    • Zamiana parametrów 72
    • [Dla dociekliwych] Metoda ogólna 73
    • Równanie kwadratowe 74
    • [Dla dociekliwych] Pochodne 75
  • Pytania 77

Rozdział 5. Sterowanie przepływem 79

  • Wybór 79
    • Instrukcja warunkowa if..else 79
    • Konstrukcja if..else..if 80
    • Instrukcja wyboru switch 81
    • [Dla dociekliwych] Nowa składnia switch 82
  • Powtarzanie 83
    • Pętla for 84
    • Pętla while 86
    • Przerywanie iteracji i pętli 88
  • Wyjątki 88
    • Przechwytywanie wyjątków 89
    • [Dla dociekliwych] Filtrowanie wyjątków 89
    • [Dla dociekliwych] Sekcja finally 90
    • Zgłaszanie wyjątków 91
  • [Dla dociekliwych] Dyrektywy preprocesora 92
    • Kompilacja warunkowa 92
    • Definiowanie stałych preprocesora 94
    • Bloki 95
  • [Dla dociekliwych] Atrybuty 96
  • Ćwiczenia 96
    • Pętla for 96
    • Liczba Eulera 98
    • Pytaj aż do skutku 101
  • Pytania 103
  • Zadania 104

Rozdział 6. Wiele hałasu o null 107

  • Typy wartościowe i referencyjne 107
  • Zwalnianie obiektów z pamięci 110
  • Nullable 114
  • [Dla dociekliwych] Leniwe inicjowanie zmiennych 116
  • Pudełkowanie 116
  • Operatory is i as 117
  • [Dla dociekliwych] Typy dynamiczne 118
  • Ćwiczenie 119
  • Pytania 120

Rozdział 7. Tablice, pętle i pliki 121

  • Tablice 121
  • Pętla foreach 123
  • Wybór elementów z tablicy 123
  • Tablica jako argument metody 124
    • Podstawy 124
    • [Dla dociekliwych] Dwie ciekawostki 125
  • Sortowanie 126
  • Liczby losowe 126
  • Pliki tekstowe 128
  • Tablice dla typów referencyjnych 132
    • Inicjacja elementów tablicy 132
    • Pętla foreach 133
    • Sortowanie 133
    • Płytkie i głębokie kopiowanie 134
  • Ćwiczenia 135
    • Zabawa dwiema kostkami 135
    • Agregacja danych 136
    • Przeszukiwanie zbioru 138
    • [Dla dociekliwych] Zapowiedź LINQ 140
    • Sortowanie i mediana 141
    • [Dla dociekliwych] Histogram 143
  • Pytania 146
  • Zadania 146

Rozdział 8. Tropienie błędów 149

  • Program z błędem logicznym - pole do popisu dla debuggera 149
  • Kontrolowane uruchamianie aplikacji w Visual Studio 150
    • Śledzenie wykonywania programu krok po kroku (F10 i F11) 150
    • Run to Cursor (Ctrl+F10) 152
    • Punkt przerwania (F9) 152
    • Okna Automatyczne, Lokalne i Wyrażenie kontrolne 153
  • Stan wyjątkowy 156
    • Zgłaszanie wyjątków 156
    • Przechwytywanie wyjątków w konstrukcji try..catch 158
    • Wymuszenie kontroli zakresu zmiennych 159

Rozdział 9. Kolekcje i krotki 161

  • Kolekcje 161
    • Lista 161
    • Słowniki 164
    • Kolejka i stos 165
    • [Dla dociekliwych] Iterator 166
    • [Dla dociekliwych] Słowo kluczowe yield 168
  • Krotki 169
  • Ćwiczenia 170
    • Równania kwadratowe 170
    • Filtrowanie liczb parzystych 172
    • Tłumaczenie 174
  • Pytania 177
  • Zadania 177

[Dla dociekliwych] Rozdział 10. Maszyna Turinga 179

  • Maszyna Turinga 179
  • Dodawanie plików tekstowych do projektu 181
  • Analiza zapisu taśmy 182
  • Wczytywanie i parsowanie kodu programu 183
  • Wykonywanie programu 184
  • Argumenty linii komend 187
  • Dystrybucja programów 188
  • Zadania 189

CZĘŚĆ II. PROGRAMOWANIE OBIEKTOWE 191

Rozdział 11. Definiowanie typów 193

  • Po co definiować własne typy? 193
  • Pojęcia programowania obiektowego 195
    • Pola i metody 196
    • Konstruktor 197
    • Własności 197
    • Modyfikatory dostępu 198
    • Modyfikatory const i readonly 199
  • Klasa czy struktura? 200
  • Ćwiczenia 200
    • Przygotowywanie projektu 201
    • Konstruktor i statyczne pola 202
    • Pierwsze testy 204
    • Konwersje na łańcuch (metoda ToString) i na typ double 205
    • Nadpisywanie i przeciążanie metod 206
    • Metoda upraszczająca ułamek 206
    • Właściwości 208
    • Domyślnie implementowane właściwości 210
    • Operatory arytmetyczne 211
    • Operatory porównania oraz metody Equals i GetHashCode 213
    • Operatory konwersji 215
    • [Dla dociekliwych] Różne sposoby definiowania metod 216
    • [Dla dociekliwych] Operator potęgowania 217
    • Implementacja interfejsu IComparable<> 218
  • Pytania 221
  • Zadania 221

Rozdział 12. Biblioteki DLL 225

  • Tworzenie zarządzanej biblioteki DLL 226
  • Dodawanie do aplikacji referencji do biblioteki DLL 229
  • [Dla dociekliwych] Dynamiczne ładowanie typów 230
  • [Dla dociekliwych] Pakiet NuGet 231
  • Pytania 233

Rozdział 13. Testy jednostkowe 235

  • Projekt testów jednostkowych 236
  • Przygotowania do tworzenia testów 237
  • Pierwszy test jednostkowy 237
  • Uruchamianie testów 239
  • Dostęp do prywatnych pól testowanej klasy 240
  • Testowanie wyjątków 242
  • Kolejne testy weryfikujące otrzymane wartości 243
  • Test ze złożoną weryfikacją 244
  • Wielokrotnie powtarzane testy losowe 245
  • Niepowodzenie testu 246
  • Nieuniknione błędy 249
  • Pytania 252
  • Zadania 253

Rozdział 14. Przykłady I 255

  • Rozwiązywanie równań kwadratowych 255
    • Wariant 1. 256
    • Wariant 2. 259
    • Wariant 3. 260
    • Dodatkowa optymalizacja 262
  • [Dla dociekliwych] Maszyna Turinga 2.0 264
    • Dwójka 264
    • Czwórka 266
    • Program 267
    • Stan 268
    • Maszyna 271
    • Rozruch 272
    • Wezwanie do refaktoryzacji 274
  • Statystyka 274
    • Biblioteka. Interfejs IEnumerable<> 275
    • Aplikacja 278
    • Zbiór parametrów statystycznych 280
  • Zadania 282

Rozdział 15. Miscellanea 283

  • Rozszerzenia 283
  • Singleton 285
    • Klasa statyczna 285
    • Ukryty konstruktor 286
    • Leniwa inicjacja 288
  • Dopasowywanie wzorca 289
  • [Dla dociekliwych] Zdarzenia 290
  • [Dla dociekliwych] Typy anonimowe 293
  • [Dla dociekliwych] Uwaga na temat zwalniania pamięci w klasach 295
  • Ćwiczenia 298
    • Rozszerzenia. Dopełnienie imitacji LINQ 298
    • [Dla dociekliwych] Zdarzenia. Śledzenie zmian 300
    • Singleton. Rejestrowanie zdarzeń w aplikacji 302
  • Pytania 305
  • Zadania 305

[Dla dociekliwych] Rozdział 16. Typy ogólne 307

  • Definiowanie typów ogólnych 308
  • Określanie warunków, jakie mają spełniać parametry 309
  • Implementacja interfejsów przez typ ogólny 310
  • Definiowanie aliasów 312
  • Typy ogólne z wieloma parametrami 312
  • Kowariancja i kontrawariancja typów 314
  • Pytania 318

Rozdział 17. Dziedziczenie i polimorfizm 319

  • Dziedziczenie 319
    • Klasy bazowe i klasy potomne 319
    • Kolejność wywoływania konstruktorów 322
    • Konwersja referencji do klasy bazowej 323
    • Nadpisywanie a przesłanianie metod 324
  • Polimorfizm 327
    • Klasy abstrakcyjne 327
    • Metody i własności wirtualne 330
    • Polimorfizm 332
    • Konstruktory a dziedziczenie raz jeszcze 334
  • Ćwiczenia 337
    • Relacje "jest" i "ma" 337
    • Nadpisywanie i przeciążanie metod 339
    • Zakres chroniony 340
  • Pytania 342
  • Zadania 342

Rozdział 18. Interfejsy 345

  • Interfejsy jako "wspólny mianownik" 345
  • Interfejsy a klasy abstrakcyjne 347
  • Przykład 349
  • Interfejsy ogólne 350
  • Pytania 352
  • Zadania 352

Rozdział 19. Klasa do klasy 353

  • SOLID 353
    • Zasada jednej odpowiedzialności 354
    • Zasada otwarte-zamknięte 357
    • Zasada podstawienia Liskov 359
    • Zasada segregacji interfejsów 363
    • Zasada odwrócenia zależności 365
    • Krótki komentarz na temat odwrócenia kontroli 368
    • Programowanie kontraktowe 369
  • GRASP 369
  • Zapachy kodu 371

Rozdział 20. Przykłady II 373

  • Oprogramowanie dla działu kadr 373
    • Pracownik (liść) 373
    • Kierownik (gałąź) 374
    • Cykle 376
    • Odwiedzający 377
    • Wyświetlanie 380
    • Głębokość 381
    • Rozwiązanie problemu cykli 383
    • Spłaszczanie drzewa do listy 386
    • Zalety wzorców projektowych 387
  • Rozszerzenie parametrów statystycznych 388
  • Zadania 389

CZĘŚĆ III. DANE W APLIKACJI 391

Rozdział 21. Wzorzec MVC 393

  • Model 394
  • Kontroler 397
  • Widok 404
  • Stosowanie i wycofywanie zmian 405
  • Przerost formy nad treścią? 408
  • Zadania 409

Rozdział 22. Przechowywanie danych w plikach XML 411

  • Podstawy języka XML 411
    • Deklaracja 411
    • Elementy 412
    • Atrybuty 413
    • Komentarze 413
  • LINQ to XML 413
    • Tworzenie pliku XML za pomocą klas XDocument i XElement 413
    • Pobieranie wartości z elementów o znanej pozycji w drzewie 417
    • Pobieranie danych do kolekcji 418
    • Drzewo i rekurencja 424
    • Wyświetlanie drzewa w konsoli 426
  • Zadania 427

Rozdział 23. LINQ 429

  • Operatory LINQ 429
  • Pobieranie danych (filtrowanie i sortowanie) 431
  • Analiza pobranych danych 433
  • Wybór elementu 433
  • Weryfikowanie danych 433
  • Prezentacja w grupach 434
  • Łączenie zbiorów danych 434
  • Łączenie danych z różnych źródeł (operator join) 435
  • Możliwość modyfikacji danych źródła 436
  • Zapisywanie danych z kolekcji do pliku XML 437
  • Zadania 439

Rozdział 24. Serializacja do XML i JSON 441

  • XML 441
  • JSON 445
  • Zadanie 450

Rozdział 25. CSV 451

  • Zapis kolekcji do pliku CSV 451
  • Kwestia przecinka 453
  • Odczytywanie danych 454
  • Uogólnienie 455
  • Zadania 458

Rozdział 26. OpenXML (.docx) 461

  • Pakiet NuGet 461
  • Formatowania 462
  • Tekst 465
  • Tworzenie dokumentu 466
  • Rysunek 471
  • Tabela 476
  • Strumień w pamięci 480

Rozdział 27. Entity Framework Core i SQLite 481

  • Instalacja pakietów NuGet 481
  • Klasy encji i relacje 482
  • Baza danych i tabele 484
  • Dodawanie rekordów do tabeli 486
  • Wyświetlanie rekordów 488
  • Usuwanie rekordów 491
  • Zmienianie danych w rekordzie 494
  • Pominięte zagadnienia 495
  • Inne scenariusze 496
  • Zadania 497

DODATKI 499

Dodatek A. Informacje o systemie 501

  • Informacje o środowisku aplikacji 501
    • Podstawowe informacje o systemie i profilu użytkownika 501
    • Katalogi specjalne zdefiniowane w bieżącym profilu użytkownika 502
    • Odczytywanie zmiennych środowiskowych 503
    • Lista dysków logicznych 504

Dodatek B. Elementy programowania współbieżnego 507

    • Równoległa pętla for 507
    • Przerywanie pętli 509
  • Programowanie asynchroniczne. Modyfikator async i operator await 510
  • Zadania 517

Dodatek C. Git. Wersjonowanie i kopie bezpieczeństwa kodu źródłowego 519

  • Systemy kontroli wersji kodu źródłowego 519
  • Serwisy Git 521
  • Tworzenie projektu 523
  • Tworzenie nowej gałęzi 529
  • Wprowadzanie zmian w projekcie 529
  • Zatwierdzanie zmian 531
  • Wypychanie do repozytorium 531
  • Klonowanie projektu 533
  • Rozwiązywanie konfliktów (scalanie) 535
  • Scalanie gałęzi 541
  • Przywracanie wcześniejszej wersji projektu 544
  • O czym nie musimy wiedzieć, korzystając z Git w Visual Studio? 547

Dodatek D. Co nowego w C# 9.0? 549

  • Nowa inicjacja własności 549
  • Rekordy 553
  • Zmiany w instrukcji switch 558
  • Polecenia najwyższego poziomu 559
  • Title: C#. Lekcje programowania. Praktyczna nauka programowania dla platform .NET i .NET Core
  • Author: Jacek Matulewski
  • ISBN: 978-83-283-7838-4, 9788328378384
  • Date of issue: 2021-01-19
  • Format: Ebook
  • Item ID: c6ntel
  • Publisher: Helion