Moduł oferowany także w ramach programów studiów:
Informacje ogólne:
Nazwa:
Język C#
Tok studiów:
2018/2019
Kod:
JIS-1-030-s
Wydział:
Fizyki i Informatyki Stosowanej
Poziom studiów:
Studia I stopnia
Specjalność:
-
Kierunek:
Informatyka Stosowana
Semestr:
0
Profil kształcenia:
Ogólnoakademicki (A)
Język wykładowy:
Polski
Forma i tryb studiów:
Stacjonarne
Strona www:
 
Osoba odpowiedzialna:
dr inż. Jędrychowski Mariusz (Mariusz.Jedrychowski@fis.agh.edu.pl)
Osoby prowadzące:
dr inż. Jędrychowski Mariusz (Mariusz.Jedrychowski@fis.agh.edu.pl)
Krótka charakterystyka modułu

Kurs stanowi wprowadzenie do programowania w języku C# (standard 6) i platformach .NET, .netcore, ukazując najważniejsze cechy, zalety i wady tego zestawu w porównaniu do z języków JAVA i C++.

Opis efektów kształcenia dla modułu zajęć
Kod EKM Student, który zaliczył moduł zajęć wie/umie/potrafi Powiązania z EKK Sposób weryfikacji efektów kształcenia (forma zaliczeń)
Wiedza
M_W001 Student zna i rozumie strukturę platformy .NET, składnię języka C# i podstawowe koncepcje programistyczne w nim zawarte oraz wie jak funkcjonuje środowisko uruchomieniowe i na czym polega kompilacja do postaci kodu bajtowego (managed). IS1A_W03, IS1A_W02 Wykonanie ćwiczeń laboratoryjnych,
Kolokwium
M_W002 Student zna założenia paradygmatów programowania: obiektowego, uogólnionego, dynamiczmego, wielowątkowego i wie jak je realizować w języku C# oraz jakie są różnice w powyższych zagadnieniach w stosunku do języków C++ i Java. IS1A_W03, IS1A_W02 Wykonanie ćwiczeń laboratoryjnych,
Udział w dyskusji,
Kolokwium
Umiejętności
M_U001 Student, stosując popularne środowiska programistyczne (Visual Studio/Visual Studio Code), potrafi stworzyć aplikacje z wykorzystaniem języka C#, platformy .NET i paradygmatów programowania oferowanych przez tę technologię. IS1A_U03, IS1A_U06, IS1A_U01, IS1A_U04 Aktywność na zajęciach,
Wykonanie ćwiczeń laboratoryjnych
M_U002 Student umie samodzielnie wyszukiwać szczegółowe informacje w dostępnych zasobach dokumentacji języka C#. IS1A_U01 Wykonanie ćwiczeń laboratoryjnych
Kompetencje społeczne
M_K001 Student posiada umiejętność zwięzłego i precyzyjnego opisania własnych rozwiązań oraz komunikatywnego ich przedstawienia. IS1A_K01 Aktywność na zajęciach,
Wykonanie ćwiczeń laboratoryjnych,
Udział w dyskusji
Matryca efektów kształcenia w odniesieniu do form zajęć
Kod EKM Student, który zaliczył moduł zajęć wie/umie/potrafi Forma zajęć
Wykład
Ćwicz. aud
Ćwicz. lab
Ćw. proj.
Konw.
Zaj. sem.
Zaj. prakt
Zaj. terenowe
Zaj. warsztatowe
Inne
E-learning
Wiedza
M_W001 Student zna i rozumie strukturę platformy .NET, składnię języka C# i podstawowe koncepcje programistyczne w nim zawarte oraz wie jak funkcjonuje środowisko uruchomieniowe i na czym polega kompilacja do postaci kodu bajtowego (managed). + - + - - - - - - - -
M_W002 Student zna założenia paradygmatów programowania: obiektowego, uogólnionego, dynamiczmego, wielowątkowego i wie jak je realizować w języku C# oraz jakie są różnice w powyższych zagadnieniach w stosunku do języków C++ i Java. + - + - - - - - - - -
Umiejętności
M_U001 Student, stosując popularne środowiska programistyczne (Visual Studio/Visual Studio Code), potrafi stworzyć aplikacje z wykorzystaniem języka C#, platformy .NET i paradygmatów programowania oferowanych przez tę technologię. - - + - - - - - - - -
M_U002 Student umie samodzielnie wyszukiwać szczegółowe informacje w dostępnych zasobach dokumentacji języka C#. - - + - - - - - - - -
Kompetencje społeczne
M_K001 Student posiada umiejętność zwięzłego i precyzyjnego opisania własnych rozwiązań oraz komunikatywnego ich przedstawienia. - - + - - - - - - - -
Treść modułu zajęć (program wykładów i pozostałych zajęć)
Wykład:

Plan wykładów:

1. Framework .NET. Początki języka C#. Biblioteka .NET Core. Środowisko pracy (Visual Studio, Visual Studio Code).
2. Typy danych. Zarządzanie pamięcią. Garbage Collector. Klasy a struktury w C#. Opakowywanie typów (boxing). Typy: mutable i immutable, domniemane i anonimowe. String interpolation. Cechy charakterystyczne klas w C# (słowa kluczowe: sealed, partial, abstract, virtual; konstruktor statyczny; właściwości (properties); indeksery)
3. Dziedziczenie. System.Object. Interfejsy. Destruktor i interfejs IDisposable. Metody rozszerzające (extensions).
4. Typy ogólne (generics), polimorfizm statyczny, kolekcje
5. Delegaty. Zdarzenia. Wyrażenia Lambda
6. LINQ. Tworzenie własnych kolekcji
7. Serializacja – zarządzanie dokumentami xml.
8. Atrybuty i mechanizm refleksji. Dynamiczne tworzenie kodu (dynamic programming).
9. Programowanie wielowątkowe.
10. Synchronizacja. Wskaźniki. Słowo kluczowe unsafe.
11. Wybrane biblioteki .NET (WPF, UWP, Entity Framework) i zastosowania języka C# (Unity).

Ćwiczenia laboratoryjne:

W trakcie zajęć laboratoryjnych studenci będą mogli wykazać się wiedzą i praktyczną znajomością języka C#, rozwiązując zadania i problemy programistyczne.
Realizowane tematy obejmują m.in.:
1) instalację wieloplatformowego środowiska uruchomieniowego .netcore i kompilację kodu programu przy użyciu polecenia dotnet, a także zaznajomienie się z możliwościami edytora Visual Studio Code i porównanie tego rozwiązania z platformą .NET i narzędziem Visual Studio
2) Projektowanie i implementację klas/interfejsów, w tym zastosowanie wybranych wzorców projektowych, i pokazanie w ten sposób podobieństw ze składnią języka JAVA.
3) Porównanie słów kluczowych struct i class. Przegląd najważniejszych typów podstawowych w tym kontekście. Zbadanie aspektów wydajnościowych związanych z tworzeniem obiektów na stosie (struct) i stercie (class). Implementacja konstruktora domyślnego w obu tych przypadkach. Wartość null i operatory (?.) i ??
5) Nowe elementy klas dostępne w języku C#: właściwości (properties), wydarzenia (events), indeksery (indexers), delegacje (delegates)
4) Rozszerzanie klas zamkniętych (sealed class) o dodatkowe metody w oparciu o mechanizm Extensions Methods na przykładzie klasy String. Wykorzystanie klas zadeklarowanych ze słowem partial.
5) Wykorzystanie możliwości oferowanych przez konstruktor statyczny (przykład: licencjonowanie oprogramowania).
6) Zastosowanie typów generycznych
7) Zastosowanie wyrażeń lamba i rozszerzeń wprowadzonych w standardzie 6.0 do refaktoryzacji kodu napisanego w standardzie 5.0
8) LINQ i kolekcje
9) Zarządzanie dokumentami xml
10) Programowanie dynamiczne: słowo kluczowe dynamic, porównanie z typem object
11) Programowanie wielowątkowe: thread, threadpool, wzorzec Task

Nakład pracy studenta (bilans punktów ECTS)
Forma aktywności studenta Obciążenie studenta
Sumaryczne obciążenie pracą studenta 90 godz
Punkty ECTS za moduł 3 ECTS
Przygotowanie do zajęć 56 godz
Udział w ćwiczeniach laboratoryjnych 30 godz
Egzamin lub kolokwium zaliczeniowe 4 godz
Pozostałe informacje
Sposób obliczania oceny końcowej:

Ocena końcowa obliczana jest na podstawie testu praktycznego dotyczącego zadań wykonywanych na laboratorium i kolokwium według wzoru:
OK = 0.5 * ocena z kolokwium (testu) + 0.5 * ocena z laboratorium.

Oceny ustalane będą zgodnie ze skalą ocen obowiązującą w regulaminie AGH, przyporządkowującą procent opanowania materiału konkretnej ocenie (Par.13, pkt.1).

Wymagania wstępne i dodatkowe:

Wymagana jest praktyczna znajomość programowania obiektowego (C++, Java).

Zalecana literatura i pomoce naukowe:

- Professional C# 6 and .NET Core 1.0, Christian Nagel,
- C# 6.0. Kompletny przewodnik dla praktyków (Essential C# 6.0), Mark Michaelis, Eric Lippert
- C# 6.0 w pigułce (C# 6.0 in a Nutshell), Joseph Albahari, Ben Albahari
- C# 6.0 Cookbook, Jay Hilyard, Stephen Teilhet
- https://msdn.microsoft.com/en-us/library/kx37x362.aspx

Publikacje naukowe osób prowadzących zajęcia związane z tematyką modułu:

Prowadzący zajęcia był odpowiedzialny za rozwój oprogramowania HERIe napisanego w języku C# w okresie 12.2016 – 12.2017.

Materiały konferencyjne – IIC 2018 Turin Congress
HERIe – a web-based decision-supporting tool for assessing risk of physical damage using various failure criteria
Arkadiusz Kupczak, Mariusz Jędrychowski, Marcin Strojecki, Leszek Krzemień, Łukasz Bratasz, Michał Łukomski, Roman Kozłowski

Informacje dodatkowe:

Sposób i tryb wyrównania zaległości powstałych wskutek nieobecności studenta
na zajęciach laboratoryjnych:
- usprawiedliwiona nieobecność wymaga od studenta samodzielnego (z możliwością wykorzystania godzin konsultacji) opanowania przerabianego na tych zajęciach materiału,
- nieusprawiedliwiona nieobecność na więcej niż jednych zajęciach oznacza brak
możliwości zaliczenia ćwiczeń laboratoryjnych.