Języki programowania do zastosowań biomedycznych Prowadzący Witold Dyrka Agnieszka Kazimierska Michał Placek
Założenia Państwo: mają uporządkowaną, podbudowaną teoretycznie wiedzę ogólną obejmującą kluczowe zagadnienia z zakresu języków programowania, potrafią analizować podstawowe struktury danych i algorytmy, potrafią analizować, pisać i uruchamiać praktycznie proste programy w dowolnym współczesnym języku programowania ogólnego przeznaczenia, potrafią samodzielnie znajdować i usuwać błędy w tworzonych programach, potrafią budować wielopoziomową strukturę programu realizującą zadanie programistyczne; Zaliczone kursy: Technologie informacyjne (wykład i laboratorium) Języki programowania (wykład i laboratorium) lub porównywalne
Cele Zapoznanie się z językami programowania oraz technikami programistycznymi znajdującymi zastosowanie w inżynierii biomedycznej i dziedzinach pokrewnych Nauczenie się podstaw pisania programów w dwóch wybranych językach stosowanych w inżynierii biomedycznej i dziedzinach pokrewnych
Formuła Projekt Państwo wybierają temat projektu programistycznego z zakresu inżynierii biomedycznej, a następnie dobierają właściwe narzędzia programistyczne (techniki i języki programowania) z zestawu zaproponowanego przez zespół dydaktyczny przedmiotu. Zasadą jest wybór tematu umożliwiającego nauczenie się nieznanej techniki i/lub języka programowania. Pierwszym zadaniem Państwa jest zapoznanie się z wybraną techniką / językiem i poddanie sposobu jej zastosowania dyskusji na forum grupy. W kolejnym etapie implementowane jest rozwiązanie zadania projektowego zakończona prezentacja oraz krytyczną analizą użytych narzędzi. Laboratorium Zajęcia laboratorium służą ćwiczeniu podstaw języka programowania wybranego do realizacji projektu. W drugiej części semestru laboratorium poświęcona jest nauce podstaw kolejnego języka lub techniki programowania. Zapotrzebowanie na naukę konkretnych technik i języków może być zgłaszane opiekunowi kursu w semestrze poprzedzającym; będzie ono zrealizowane w miarę możliwości kadrowych zespołu prowadzącego.
Zasady zaliczenia Zaliczenia projektu oraz laboratorium uzyskuje się na podstawie pracy samodzielnej (indywidualnej lub grupowej) wykonanej w terminie praca niesamodzielna liczona jest jako 0.0 praca nieoodana w terminie jest oceniana jako ndst (2.0) Podstawą do ocen końcowych jest zaokrąglona średnia ocen cząstkowych Nieobecność na 3 lub więcej zajęciach stanowi podstawę do niezaliczenia projektu/laboratorium niezależnie od uzyskanych ocen cząstkowych
Zasady pracy projekt Praca projektowa jest wykonywana w zespołach 2-3 osobowych Projekt jest realizowany przyrostowo Projekt jest na bieżąco wprowadzany do repozytorium kodu (git) członkowi zespołu przysługuje ocena za realizację zadania projektowego pod warunkiem, że jego wkład do repozytorium wynosi >=37% w przypadku zespołu 2 os. lub >=25% w przypadku zespołu 3 os. Ocena za projekt wystawiana jest na podstawie prezentacji realizacji projektu (2/3) oraz kolokwium (1/3) obowiązujące elementy prezentacji są ustalane w zależności od charakteru projektu, np. historie użytkowników, projekt interfejsu użytkownika, walidacja wyników.
Harmonogram Projekt 1 \ wprowadzenie 03-06.10.17 2 / i przegląd języków/technik. 3 \ wybór tematu. 4 / i dobór narzędzia 24-27.10.17 5 \ 31.10-03.11.17 6 prezentacja tematu. 7 i dyskusja na forum grupy. 8 (1/6 oceny). 9 / 28.11-01.12.17 10 \ 05-08.12.17 11 prezentacja rozwiązania. 12 z krytyczną analiza. 13 (3/6 oceny). 14 / 11-16.01.18 15 kolokwium (2/6 oceny) 18-23.01.18 Laboratorium 1 wprowadzenie i ewaluacja 04.10.17 2 \ 3 język/technika 1 (projektu) 4 lista 1-1 (podstawy) 5 30.10.17 6 lista 1-2 (zastosowania specjalistyczne) 7 15.11.17 8 / lista 1-3 (zaliczenie) 22.11.17 9 \ 10 język/technika 2 11 lista 2-1 (podstawy) 12 20.12.17 13 lista 2-2 (zastosowania specjalistyczne) 14 17.01.18 15 / lista 2-3 (zaliczenie) 24.01.18
Języki i techniki wspierane przez prowadzących Witold Dyrka Agnieszka Kazimierska Michał Placek Języki C tak - tak, w tym na AVR C++ tak tak tak C# - tak tak Python tak tak tak Java tak - - Matlab tak tak tak R tak - - powłoka Linux (bash, sed, awk) Windows (Powershell) Linux (bash) SQL - tak C# z MSSQL XAML - tak tak DOT tak - - Techniki obliczenia równoległe C++ (OpenMP) - Matlab aplikacje wielowątkowe - - C++ (POSIX) testy jednostkowe Java tak Matlab wzorce projektowe Java, C++ C++ - aplikacje webowe Python (Django) - ASP.NET aplikacje mobilne - Android, ios - grafika windows - WindowsForms/WPF WindowsForms/WPF komunikacja z urządzeniami - - C# (port szeregowy)
języki programowania
język paradygmat koncept Peter Van Roy. Programming Paradigms for Dummies: What Every Programmer Should Know
koncepty rekord (struktura danych) p = Pacjent(imie: Jan, nazwisko: Kowalski, rok_ur: 1950 ) e = Element(wartosc: Obiekt, nastepny: Element)
koncepty funkcja (procedura) domknięcie (funkcja + jej odnośniki) wynik = dodaj(arg1, arg2) print dodaj(1,2) > 3 op=+ wynik = [op]operacja(arg1,arg2) op=* print operacja(1,2) > 3
domknięcie class Operacja { } char op; Operacja(char op): op(op) {}; float operator()(float arg1, float arg2) { if (op=='*') return arg1*arg2; if (op=='+') return arg1+arg2; } Operacja operacja('+'); char op='*'; cout << operacja(1,2); > 3 domknięcie (funkcja + jej odnośniki) op=+ wynik = [op]operacja(arg1,arg2) op=* print operacja(1,2) > 3
koncepty // 1+2+3+4 print dodaj(dodaj(dodaj(1,2),3),4) nazwany stan wynik = dodaj(1,2) wynik = dodaj(wynik,3) print dodaj(wynik, 4)
koncepty współbieżność wspóldzielony stan message passing deterministyczna potencjalny obserwowalny niedeterminizm
przykładowe paradygmaty deklaratywne programowanie opisowe tylko struktury danych: XML, DOT programowanie funkcyjne: struktury danych + domknięcia: Scheme, ML programowanie logiczne i relacyjne struktury danych + domknięcia + unifikacja + szukanie: Prolog programowanie imperatywne struktury danych + funkcje + nazwane stany (zmienne): C, Pascal programowanie zorientowane obiektowo struktury danych + domknięcia + nazwane stany: C++, Java...
Programowanie funkcyjne vs imperatywne fib <- function(n) { if (n <= 2) 1 else fib(n - 1) + fib(n 2) } fib <- function(n) { if (n == 1) 1 else if (n == 2) 1 else { fibval <- c(1,1) for (i in 3:n) fibval <- c(0,fibval[1])+fibval[2] fibval[2] } } https:// en. wikipedia. org/ wiki/ Functional_programming# R
Kryteria wyboru języka pisanie programu czy integracja istniejących aplikacji? skrypty powłoki szybkość prototypowania przeważnie interpretowane języki wysokiego poziomu, dynamicznie typowane dostępność specjalizowanych bibliotek często rozszerzają bazowe paradygmaty wsparcie struktury danych natywna lub biblioteczne efektywność obliczeń języki kompilowane są przeważnie szybsze wsparcie dla obliczeń równoległych
Take home message pomyśl nad tematem projektu który nie będzie stratą czasu pomyśl nad wyborem języka którego paradygmaty odpowiadają potrzebom projektu budżet 3h/os.