Programowanie Obiektowe
Java
Małgorzata Janik
Zakład Fizyki Jądrowej
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 2/792/79
●
Adiunkt w Zakładzie Fizyki Jądrowej Wydziału Fizyki PW
– dr inż. Małgorzata Janik
●
Kończyłam wydział Fizyki (fizyka komputerowa) i Wydział MiNI (computer science) PW
●
Prowadzę badania z Fizyki Cząstek w eksperymencie ALICE na Wielkim Zderzaczu Hadronów w CERN
– Materia w stanie “plazmy kwarkowo-gluonowej”
– Korelacje między
produkowanymi cząstkami
Kim jestem?
Regulamin
Warunki zaliczenia
Wykład Laboratoria
Projekt
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 4/794/79
●
Strona internetowa przedmiotu
http://java.fizyka.pw.edu.pl/
●
Wykłady
15 h, 2 h przez pierwszą połowę semestru
●
Laboratoria
30 h, 2h co tydzień
●
Projekt
realizowany samodzielnie, trzy zajęcia projektowe sprawdzające postępy prac
Programowanie Obiektowe
●
Wykład – 7 wykładów x 2h co tydzień
●
Projekt
65 pkt
●
Laboratoria: zajęcia punktowane
10 x 5 pkt = 50 pkt
●
Laboratoria: kolokwium
1 x 20 pkt = 20 pkt
●
Warunek zaliczenia:
– Zaliczony projekt
– Zaliczone kolokwium
– > 50% punktów za całość (łącznie)
Warunki zaliczenia
Ilość punktów Ocena
67.5 – 80.5 3
81 - 94 3.5
94.5 – 107.5 4 108 - 121 4.5
> 121.5 5
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 6/796/79
●
przewidzianych jest 15 zajęć laboratoryjnych (w tym 10 punktowanych, 3 projektowe, 1 kolokwium, 1 poprawy)
●
obecność jest obowiązkowa (możliwe są maksymalnie 2 nieobecności); przez obecność rozumie się zalogowanie do platformy MS Teams w celu uzyskania omówienia treści zadania do
realizacji lub/oraz oddania programu z poprzednich zajęć
●
zajęcia trwają 90 minut, odbywają się bez przerwy;
●
zajęcia odbywają się zgodnie z planem z dziekanatu, prowadzący ma jednak prawo umawiać się indywidualnie po konsultacji ze studentami w innym terminie przy zachowaniu realizacji jednego programu tygodniow.
●
Laboratoria: zajęcia punktowane (10 zajęć)
●
zadania są dostępne na stronie java.fizyka.pw.edu.pl
●
za każde zadanie można otrzymać 0-5 pkt
●
na napisanie i odesłanie prowadzącemu programu studenci mają tydzień (należy przesłać program najpóźniej o godzinie 23:59 w dniu poprzedzającym zajęcia); w przypadku odesłania po tym czasie prowadzący ma prawo nie przyjąć programu lub ocenić go na mniejszą liczbę punktów;
●
oddanie (omówienie) i ocenienie programu następuje na kolejnych zajęciach;
●
studenci są zachęcani do zadawania pytań w trakcie zajęć
Laboratoria
●
Kolokwium
●
celem kolkwium jest zweryfikowanie indywidualnych umiejętności studenta z zakresu programowania w języku Java
●
zadanie do napisania samodzielnie (bez pomocy prowadzącego) w skończonym czasie (90 min)
●
za kolokwium można otrzymać 0-20 pkt
●
aby “zaliczyć” kolokwium, należy zdobyć min. 8 pkt
●
Poprawy (zajęcia nr 14)
●
Przewiduje się na zajęciach numer 14 poprawy kolokwium
●
Jest to również czas na ewentualne poprawy punktacji z laboratorium (do 5 punktów)
Laboratoria
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 8/798/79
●
Celem wprowadzenia projektów jest:
1) Nauczenie pracy zespołowej nad projektami informatycznymi 2) Nauczenie studentów samodzielnej pracy (tj. bez ciągłego
wsparcia prowadzącego) nad większym projektem 3) Napisanie większego kawałka kodu
●
do tej pory Wasze największe projekty informatyczne miały zwykle kilkaset linii kodu – teraz możemy to zmienić
4) Zapoznanie studentów z problematyką tworzenia gotowych projektów, taką tak:
– a. Standardy kodu
– b. Budowanie projektu
Projekty
●
Realizowane zespołowo
zespoły dwuosobowe
●
Zaliczenie czterech etapów kontrolnych :
●
I. Specyfikacja (3 zajęcia), – 0 – 5 punktów,
dokument udostępniany drogą mailową do 3 tygodnia zajęć
●
II. Prototype - User Interface (5 zajęcia, 0-5 pkt) – min. 25% punktów [zajęcia projektowe]
●
III. Release Candidate (10 zajęcia, 0-5 pkt) – min. połowa punktów [zajęcia projektowe]
●
IV. Final (15 zajęcia) – ostateczna punktacja [zajęcia projektowe]
●
Zaliczenie polega na:
●
I. Oddanie dokumentu specyfikacji prowadzącemu laboratoria
●
II – IV. Zajęcia projektowe
–
Prezentacja: (5-8 min na grupę) pierwsza godzina zajęć → pierwsza godzina zajęć
–
Omówienie kodu druga godzina zajęć → pierwsza godzina zajęć
Projekty
10/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Realizowany Zespołowo
●
W drugim tygodniu zajęć należy wysłać prowadzącemu e-mail z informacją o:
–
Członkach zespołu
–
Pomyśle na projekt
●
Temat projektu powinien zostać uzgodniony z prowadzącym laboratoria przed przygotowaniem specyfikacji
–
Przykłady tematów na stronie http://java.fizyka.pw.edu.pl/Lista-projektow
–
Zawsze można wybrać własny projekt
–
Tematy w danej grupie nie mogą się powtarzać (kto pierwszy ten lepszy)
–
Wystarczy “OK” od prowadzącego
●
Projekt jest realizowany zespołowo, ale uzyskana ocena jest indywidualna.
–
Wkład każdego z członków zespołu będzie oceniany indywidualnie przez
prowadzącego.
Tematy Projektów
● Układ słoneczny w 3D
– Fizyka ruchu wielu ciał
● Modelowanie ruchu cząstki w polu EM
● Symulacja toru lotu pocisków artylerii
● Symulacja gry w bilard
● Model bomby atomowej
● Twój Własny Pomysł
Kilka przykładów
12/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Tematy Projektów
Kilka przykładów
Program do symulacji toru lotu rzutu ukośnego
Tematy Projektów
Kilka przykładów
14/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Tematy Projektów
Kilka przykładów
Efekt Dopplera, symulacja
Tematy Projektów
● Układ słoneczny w 3D
– Fizyka ruchu wielu ciał
● Modelowanie ruchu cząstki w polu EM
● Symulacja toru lotu pocisków artylerii
● Symulacja gry w bilard
● Model bomby atomowej
● Twój Własny Pomysł
Kilka przykładów
16/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Specyfikacja
●
W trzecim tygodniu zajęć należy wysłać prowadzącemu e-mail z przygotowaną specyfikacją. Punktowana jest oddzielnie, 0 – 5 pkt.
●
Specyfikacja jest dokumentem opisującym funkcjonalności waszego programu
–
Dokładnie opisać działanie programu
–
Model matematyczny; wzory
–
Szkice interfejsu
–
Scenariusze użycia + diagramy UML (dodatkowe punkty)
–
Listę dodatkowych funkcjonalności
–
Należy określić ocenę, jaką Państwo chcielibyście uzyskać oraz przygotować tabelę zadań.
●
Jak długa?
–
Jak najkrótsza, ale musi byż zrozumiała i zawierać wszystkie niezbędne elementy
●
Jakość specyfikacji (język, edycja) też jest oceniana
Specyfikacja
● Wszystkie szczegóły są opisane w szablonie specyfikacji
– Do ściągnięcia tutaj:
●
http://java.fizyka.pw.edu.pl/Specyfikacja
● Specyfikacja
może ewoluować
w czasie
18/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Więcej informacji
● http://java.fizyka.pw.edu.pl/Projekty
– Wymogi formalne
– Specyfikacja (w tym tabela zadań)
– Przykładowe tematy
– Podział pracy w zespole, plagiaty
– Proponowane dodatkowe funkcjonalności
●
Projekt
5 + 10 + 50 = 65 pkt
●
Laboratoria: zajęcia punktowane
10 x 5 pkt = 50 pkt
●
Laboratoria: kolokwium
1 x 20 pkt = 20 pkt
●
Łącznie punktów: 65 + 50 + 20 pkt = 135 pkt
●
Wykład
●
Warunek zaliczenia:
– Zaliczony projekt
– Zaliczone kolokwium
– > 50% punktów za całość (łącznie)
Warunki zaliczenia
Ilość punktów Ocena
67.5 – 80.5 3
81 - 94 3.5
94.5 – 107.5 4 108 - 121 4.5
> 121.5 5
Pytania?
20/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Zaczynamy…!
Programowanie Obiektowe Trochę historii
Programowanie Strukturalne
Programowanie Zorientowane Obiektowo Zachowania i Atrybuty
Trochę wstępu..
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Zamierzchła przeszłość
●
Pierwsze komputery były programowane bezpośrednio z użyciem kodu maszynowego lub z wykorzystaniem
asemblera. Pierwsze asemblery przypadają na połowę lat 50.
Przykład kodu maszynowego
(kolumna druga rozpoczynająca się od 6C 36 00)
Przykład kodu asemblera dla procesora Motorola 8-bit 6800
Źródło: Wikipedia
Zamierzchła przeszłość
●
Pierwsze komputery były programowane bezpośrednio z użyciem kodu maszynowego lub z wykorzystaniem
asemblera. Pierwsze asemblery przypadają na połowę lat 50.
●
Kontrola przepływu w programie odbywała się głównie przy pomocy warunkowych i bezwarunkowych instrukcji skoku.
●
Instrukcja “skoku” (goto) pozwala
na powtórne wykorzystanie tego samego fragmentu kodu
– ale sprawia też, że program
jest zdecydowanie mniej czytelny.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Programowania radosne początki
●
Jeżeli znamy podstawowe konstrukcje
algorytmiczne i potrafimy je zagnieżdżać, wówczas teoretycznie jesteśmy w stanie napisać każdy
algorytm.
●
Jednakże, długość kodu programu nastaje się coraz większa i po pewnym czasie nie jesteśmy w stanie objąć wszystkiego wzrokiem i umysłem.
●
Zastosowanie podprogramu (np. funkcji)
pozwala podzielić algorytm na zbiór mniejszych,
wydzielonych części.
Programowanie strukturalne
●
Definicja: paradygmat programowania opierający się na podziale kodu źródłowego programu na procedury i hierarchicznie ułożone bloki.
●
Rozwijał się w opozycji do programowania wykorzystującego proste instrukcje warunkowe i skoki (goto).
●
Początki programowania strukturalnego przypadają na Lata 60. XX wieku, a ważnym głosem w dyskusji o programowaniu strukturalnym był list Edsgera Dijkstry z 1974 roku: “Instrukcja goto powinna zostać usunięta z wszystkich „wysokopoziomowych” języków programowania (to znaczy z wszystkich poza - prawdopodobnie - czystym kodem maszynowym”.
●
Programowanie strukturalne zwiększa czytelność i ułatwia analizę programów, co stanowi znaczącą poprawę w stosunku do trudnego w
utrzymaniu „spaghetti code” często wynikającego z użycia instrukcji goto.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Programowanie strukturalne
●
Definicja: paradygmat programowania opierający się na podziale kodu źródłowego programu na procedury i hierarchicznie ułożone bloki.
●
Rozwijał się w opozycji do programowania wykorzystującego proste instrukcje warunkowe i skoki (goto).
●
Początki programowania strukturalnego przypadają na Lata 60. XX wieku, a ważnym głosem w dyskusji o programowaniu strukturalnym był list Edsgera Dijkstry z 1974 roku: “Instrukcja goto powinna zostać usunięta z wszystkich „wysokopoziomowych” języków programowania (to znaczy z wszystkich poza - prawdopodobnie - czystym kodem maszynowym”.
●
Programowanie strukturalne zwiększa czytelność i ułatwia analizę programów, co stanowi znaczącą poprawę w stosunku do trudnego w
utrzymaniu „spaghetti code” często wynikającego z użycia instrukcji goto.
Spagetti code = trudny do zrozumienia kod źródłowy programu.
Używano wielu instrukcji warunkowych i następnych w nich zagnieżdżonych konstrukcji GOTO. Droga przez kolejne rozkazy była tak poplątana, że odczytanie takiego kodu i zrozumienie go było bardzo uciążliwe, a ewentualne modyfikacje zwykle
prowadziły do błędów w programie.
https://xkcd.com/292/
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Programowanie strukturalne
●
Programowanie strukturalne polega na
tworzeniu programów wyłącznie w oparciu o trzy kompozycje algorytmiczne:
– Sekwencyjną (instrukcje wykonują się jedna po drugiej),
– Warunkową (instrukcje warunkowe if, if else, switch)
– Iteracyjną (pętle for, while, do while).
●
Zabronione są algorytmy wykorzystujące
instrukcję skoku (GOTO).
●
W przypadku programowania strukturalnego często mamy
doczynienia z danymi, które muszą być widoczne w całym programie (dla wielu funkcji) i wiele funkcji może je zmieniać = tzw. dane
globalne.
●
W takim wypadku każda funkcja może zmienić dane, które mają wpływ na działanie wszystkich innych elementów prorgamu. Czyli jedna niewielka zmiana może “popsuć” działanie całego kodu w
Problemy z programowaniem
strukturalnym
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Problemy z programowaniem strukturalnym
●
Koncepcja programowania obiektowego pierwotnie pojawiła się w Simuli 67, języku zaprojektowanym do zastosowań
symulacyjnych, stworzonym przez Ole-Johana Dahla i Kristena Nygaarda z Norsk Regnesentral w Oslo.
–
Mówi się, że pracowali oni nad symulacjami zachowania się statków i mieli kłopoty z opanowaniem wszystkich zależności, jakie wywierały na siebie nawzajem wszystkie parametry statków w symulacji. Wtedy
wpadli na pomysł, by pogrupować typy statków w różne klasy obiektów, a każda z klas sama odpowiadałaby za określanie własnych danych i
zachowań.
●
Upraszczamy program, grupując kod w klasy, w których każda jest odpowiedzialna tylko za samą siebie (swoje dane i swoje funkcje)
●
Programowanie obiektowe zyskało status techniki dominującej w
połowie lat 80 (dzięki C++)
Programowanie Obiektowe
● Programy definiujemy za pomocą obiektów.
● Koncepcja obiektów fizycznych jest znana każdemu.
– Możemy sobie wyobrazić samochód, człowieka,
toster.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Programowanie Obiektowe
● Programy definiujemy za pomocą obiektów.
● Koncepcja obiektów fizycznych jest znana każdemu.
● Obiekty w programowaniu to są modele rzeczywistych obiektów fizycznych.
Samochód
- kolor ZIELONY - marka DAEWOO + Tankuj()
+ Jedź()
Samochód
- kolor ZIELONY - marka DAEWOO + Tankuj()
+ Jedź()
Człowiek
- nazwisko EINSTEIN - zawód FIZYK
+ Śpij()
+ GenerujNobla()
Toster
- producent HB - typ POP-UP + Grzej()
+ WyrzućTosty()
Programowanie Obiektowe
●
Obiekty w programie reprezentują w pewnym stopniu obiekty rzeczywiste
– Jeśli chcemy zaprogramować aplikacje dla zarządzania szpitalem, zapewne będziemy musieli stworzyć obiekty odpowiadające pacjentom, lekarzom, pielęgniarkom, ochronie, …
●
W rzeczywistości to obiekty oddziałują ze sobą. W
przypadku programów komputerowych jest podobnie:
obiekty wysyłają do siebie wiadomości (wywołanie funkcji na innym obiekcie), a czasem uzyskują
informacje zwrotne (zwracane zmienne).
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Programowanie Obiektowe
●
Na obiekty składają się atrybuty i zachowania:
●
Obiekty zawierają więc zarówno dane (wartości atrybutów) oraz zachowanie (możliwe akcje które dany obiekt może wykonać)
●
“zarówno” - różnica między programowaniem proceduralnym a obiektowym
Samochód
- kolor ZIELONY - marka DAEWOO + Tankuj()
+ Jedź()
Toster
- producent HB - typ POP-UP + Grzej()
+ WyrzućTosty() atrybuty
zachowania
Programowanie Obiektowe
●
Na obiekty składają się atrybuty i zachowania:
●
Dobrze zaprojektowany program zakłada, że wartości atrybutów nie może zmienić nic poza obiektem, do
którego należą – czyli wszystkie zmiany następują
poprzez wywołanie odpowiednich zachowań (wywołanie funkcji)
– Enkapsulacja, metody “Set” i “Get”.
Każdy obiekt odpowiada za swoje dane.
Samochód
- kolor ZIELONY - marka DAEWOO + Tankuj()
+ Jedź()
Toster
- producent HB - typ POP-UP + Grzej()
+ WyrzućTosty() atrybuty
zachowania
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Atrybuty i ich wartości
●
Należy pamiętać, że atrybut (pole składowe) i jego wartość, to dwie różne rzeczy :
– Każdy samochód będzie miał kolor, ale nie każdy będzie zielony.
●
Sam atrybut jest jak pusta “formatka”, w którą
możemy wpisywać wartości charakterystyczne dla naszego obiektu (konkretnej instancji naszej klasy).
Samochód
- kolor ZIELONY - marka DAEWOO
atrybuty wartości atrybutów
Atrybuty i ich wartości
●
Należy pamiętać, że atrybut (pole składowe) i jego wartość, to dwie różne rzeczy :
●
Sam atrybut jest jak pusta “formatka”, w którą
możemy wpisywać wartości charakterystyczne dla
naszego obiektu (konkretnej instancji naszej klasy).
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Zachowania i atrybuty na przykładzie
public class Punkt {
Punkt (double parametr1, double parametr2){
x = parametr1;
y = parametr2;
}
public String Wypisz(){
String text;
text = "Wspolrzedne ("+ x + ", " + y + ")";
return text;
}
double x , y;
}
public static void main(String[] args) { Punkt p1 = new Punkt (30,30);
System.out.println(p1.Wypisz());
}
Zachowania i atrybuty na przykładzie
public class Punkt {
Punkt (double parametr1, double parametr2){
x = parametr1;
y = parametr2;
}
public String Wypisz(){
String text;
text = "Wspolrzedne ("+ x + ", " + y + ")";
return text;
}
double x , y;
}
public static void main(String[] args) { Punkt p1 = new Punkt (30,30);
System.out.println(p1.Wypisz());
}
W programowaniu
obiektowym klasa
reprezentuje obiekty.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Zachowania i atrybuty na przykładzie
public class Punkt {
Punkt (double parametr1, double parametr2){
x = parametr1;
y = parametr2;
}
public String Wypisz(){
String text;
text = "Wspolrzedne ("+ x + ", " + y + ")";
return text;
}
double x , y;
}
public static void main(String[] args) { Punkt p1 = new Punkt (30,30);
System.out.println(p1.Wypisz());
}
Instancja klasy = konkretny obiekt.
Zachowania i atrybuty na przykładzie
public class Punkt {
Punkt (double parametr1, double parametr2){
x = parametr1;
y = parametr2;
}
public String Wypisz(){
String text;
text = "Wspolrzedne ("+ x + ", " + y + ")";
return text;
}
double x , y;
}
public static void main(String[] args) { Punkt p1 = new Punkt (30,30);
System.out.println(p1.Wypisz());
}
Atrybuty.
Zwykle nazywamy je polami (ang. fields).
Nie powinny być dostępne z zewnątrz.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Zachowania i atrybuty na przykładzie
public class Punkt {
Punkt (double parametr1, double parametr2){
x = parametr1;
y = parametr2;
}
public String Wypisz(){
String text;
text = "Wspolrzedne ("+ x + ", " + y + ")";
return text;
}
double x , y;
}
public static void main(String[] args) { Punkt p1 = new Punkt (30,30);
System.out.println(p1.Wypisz());
}
Zachowania / akcje, które możemy wywołać na naszym obiekcie.
Np. utworzenie obiektu o konkretnych wartościach atrybutów czy zwrócenie informacji o obiekcie w postaci napisu (String).
Czyli funkcje składowe (metody).
Obiektowa Java vs. C++
●
W latach ‘90 to C++ był uważany za “lidera”
programowania obiektowego.
●
Ale C++ jest językiem “hybrydowym”:
– pozwala na programowanie strukturalne, bądź obiektowe, bądź miksowanie obu paradygmatów
– co w oczywisty sposób może prowadzić (i często prowadzi) do powstawania kodu który jest
skomplikowany i trudny w utrzymaniu
●
Java stworzona została od początku jako język
służący do programowania obiektowego
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 44/79
Dlaczego Java?
Why Java?
46/79
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 46/79
TIOBE Index - Luty 2020
https://www.tiobe.com/tiobe-index/
●
Basically the calculation comes down to counting hits for the search query
+"<language>
programming"
●
it's an attempt to measure the size of each language's community of developers.
Najbardziej
popularny?
Podobieństwo do C/C++
● Łatwa składnia
– Java ma składnię znajomą dla każdego kto miał do czynienia z C, C++ lub C#, czyli
mniej więcej dla ~99.9% programistów.
48/79
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 48/79
Biblioteki
● Standardowe interfejsy
programowania aplikacji (API)
– Szeroki zestaw podstawowych bibliotek czeka, aby być wykorzystywany.
– Są też na komputerach klienta, jeśli tylko
ma zainstalowaną Javę.
Prosty w użyciu
●
Szczegóły implementacji zrobi za Ciebie
– Java jest językiem wysokiego poziomu
– Została zaprojektowana, by być przyjazna początkującemu
użytkownikowi: będzie się sama zabezpieczać przed dużą ilością głupich pomysłów programisty (pamiętasz Segmentation Fault z C++? Szansa, że na nie wpadniesz tutaj, są duużo mniejsze!).
– Programujesz, nie przejmując się szczegółami przydzielania pamięci
– Garbage Collection : nie przejmujesz się też zwalnianiem
zaalokowanej pamięci – Java zrobi to za Ciebie możesz → możesz
zapomnieć o “delete”.
50/79
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 50/79
Przenośność
● “Write Once, Run Anywhere”
● Maszyna Wirtualna
– Aplikacje Java zwykle kompilujemy, uzyskując programy które można uruchomić na maszynie wirtualnej Java, niezależnie od architektury
komputera czy też systemu operacyjnego.
– Musi się jedynie zgadzać zainstalowana wersja
Javy.
Dlaczego Java?
Najbardziej popularny Pożądany na rynku
Podobny do C/C++
Prosty w użyciu
Standardowe API i biblioteki
Przenośny
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 52/79
O co właściwie chodzi?
Co trzeba zainstalować?
Maszyna Wirtualna JDK
Edycje Java
Jar
Maszyna Wirtualna
Kod źródłowy pliki *.java
Kod bajtowy (bytecode) pliki *.class
Wirtualna maszyna Java (JVM)
wykonywanie w środowisku Win/Unix/…
kompilacja
ładowanie
54/79
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 54/79
Maszyna Wirtualna
●
Java Virtual Machine (JVM)
●
Abstrakcyjna maszyna obliczeniowa, zdolna do wykonwania programu napisanego w Javie
– (wykonywania kodu bajtowego Javy)
●
Maszyna Wirtualna Javy nie jest nazwą konkretnego produktu.
– Dostępna publicznie specyfikacja pozwala różnym producentom oprogramowania na tworzenie własnych maszyn wirtualnych pracujących pod kontrolą różnych środowisk i urządzeń.
●
Jest zawarta w JRE: Java Runtime Environment
JRE i JDK
●
Java Runtime Environment (JRE)
– Pakiet zawierający wszystko, co potrzebne, by uruchomić program Java. Zawiera JVM (maszynę wirtualną) oraz implementację biblioteki Java Class.
– Zawiera wyłącznie narzędzia niezbędne do uruchomienia aplikacji.
●
Java Development Kit (JDK)
– Oprócz tego, co JRE, zawiera również narzędzia dla
programistów, pozwalające na tworzenie aplikacji na
platformę JVM.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 56/79
Java Development Kit (JDK)
JDK – narzędzia podstawowe – java - interpreter
– javac - kompilator
– apt – annotation processing tool – javadoc
– appletviewer
– jar – zarządca Java Archives (jars) – jdb – debugger
– javah – narzędzie do tworzenia metod natywnych
●
JAR (Java Archive) – archiwum Java, czyli plik zawierający skompresowane (ZIP) pliki klas i zasobów.
Tworzy sie je za pomocą narzędzia jar wchodzącego w skład JDK. Z klas znajdujących sie w pliku .jar można korzystać, w tym uruchamiać aplikacje.
●
Jeden plik (archiwum) zawierający wszystkie ważne dla programu pliki składowe.
●
Plik JAR może zawierać plik manifestu, znajdujący się w META-INF/MANIFEST.MF, który opisuje jak używać pliku.
●
Zwykle ma rozszerzenie .jar.
JAR
Java Development Kit (JDK)
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java™ SE 8u281
Korzystamy z
Java 8, nie 13!
Edycje Java
• Java Standard Edition (Java SE)
Podstawowa platforma Java. Zawiera podstawowe biblioteki.
Ta wersja nas interesuje.
• Java Enterprise Edition (Java EE)
Rozszerzenie platformy podstawowej. Platforma przeznaczona m.in.
dla systemów rozproszonych, tj. świadczacych usługi dla wielu użytkowników.
• Java Micro Edition (Java ME)
jest to zbiór technologii i specyfikacji wykorzystywanych przez małe urzadzenia, takie jak: telefony komórkowe i inne “małe” urzadzenia.
J2ME wykorzystuje niektóre komponenty J2SE, takie jak mniejsza maszyna wirtualna i odchudzone API.
• Inne (np. JavaFX)
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 60/79
Kot dla przykucia uwagi
Środowisko
Eclipse
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 62/79
IDE - Integrated development environment (zintegrowane środowisko programowania)
IDE - aplikacja (lub zespół aplikacji - środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania.
Aplikacje będące zintegrowanymi środowiskami programistycznymi
charakteryzują się tym, że udostępniają złożoną, wieloraką
funkcjonalność obejmującą edycję kodu źródłowego, kompilowanie
kodu źródłowego, tworzenie zasobów programu (tzn. formatek /
ekranów / okien dialogowych, menu, raportów, elementów graficznych
takich jak ikony, obrazy itp.), tworzenie baz danych, komponentów i
innych.
IDE dla Javy
● Eclipse (http://www.eclipse.org)
● Netbeans (http://netbeans.org/),
● IntelliJ IDEA (http://www.jetbrains.com/idea/),
● Jcreator (http://www.jcreator.com/ )
● …
Na laboratoriach używany będzie Eclipse
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 64/79
http://www.eclipse.org/downloads
Eclipse
http://www.eclipse.org/users
Eclipse
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 66/79
Co ściągnąć?
● Java Development Kit (JDK) 8, Standard Edition (SE)
– Najnowsza jest JDK 15, ale będziemy
domyślnie używać najpopularniejszej JDK 8
● Eclipse (http://www.eclipse.org )
– Sugeruję ściągnąć najnowszy Eclipse dostępny na stronie
(obecnie Eclipse IDE 2020 12) ‑12)
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Uwaga: aby pod Windows możliwe było stosowanie komend JDK
trzeba do zmiennej systemowej PATH dodać katalog \bin z JDK
(np. C:\Program Files\Java\jdk1.7.0_13\bin )
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 68/79
Co mamy w programie?
Ważne dla projektów!
Czego się nauczycie na zajęciach?
●
Tworzenia graficznego interfejsu użytkownika (GUI) – Java Swing
– Kontrolki w okienku
Okienko Guziki
Slidery
Pola
Suwaki Listy
rozwijane Napisy Pola
wyboru
70/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Czego się nauczycie na zajęciach?
●
Tworzenia graficznego interfejsu użytkownika (GUI) – Java Swing
– Ustawienie kontrolek w okienku
Czego się nauczycie na zajęciach?
●
Tworzenia graficznego interfejsu użytkownika (GUI) – Java Swing
– Obsługa zdarzeń
oprogramowanie kontrolek
- Wyskakujące okienka
72/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Czego się nauczycie na zajęciach?
● Rysowanie
– Będziecie rysować figury geometryczne,
– linie,
– oraz punkty podążające za myszką jak w Paint’cie
– Zmieniać kolory
– Wczytywać obazki!
Czego się nauczycie na zajęciach?
● Animacje
– Regularnie zmieniając rysowany obrazek w czasie
uzyskacie proste animacje
74/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Czego się nauczycie na zajęciach?
● Operacje na plikach
– Zapis i odczyt różnych rodzajów plików
●
Tesktowych, binarnych, obrazków
● Operacje na
bazach danych
– Przechowywanie rekordów w bazach danych,
odczytywanie tych danych
Czego się nauczycie na zajęciach?
● Rysowanie wykresów
– Bardzo duży zbiór gotowych szablonów dla różnych wykresów
●
Łatwo można je zmieniać w czasie!
76/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
Czego się nauczycie na zajęciach?
● Multimedia
– Obsługa dźwięku w Javie
– Obsługa plików multimedialnych (video)
Czego się nauczycie na zajęciach?
●
Inne
– Różnice między C++ a Java
– Parametry wywołania programu
– Dziedziczenie
– Interfejsy
– Kolekcje
– Obsługa wyjątków
– Obsługa zewnętrznych bibliotek, tworzenie PDFów
– Wstęp do Javy FX
– Programowanie wielowątkowe
– ...
78/79 Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW)
● Tyle tytułem wstępu, zaczynamy kodowanie...!
C O
D E
Podstawy
Struktura programu Typy danych
Operatory
Instrukcje sterujące
Pętle
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 80/79
Hello World
C++ / Java
Hello World
C++ / Java
Plik powinien nazywać się tak samo jak klasa z rozszerzeniem .java (Hello.java)
Kompilacja z linii poleceń: javac Hello.java
Uruchamianie z linii poleceń: java Hello
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 82/79
package ... //deklaracja pakietu, opcjonalna ale zalecana import ... // deklaracje importu
import ...
/** Komentarz dokumentacyjny */
// To jest klasa A public class A
{ ...
}
/* To jest
komentarz wielowierszowy
*/
class B {
public static void main(String[] args) {
...//
Metoda main klasy startowej – od niej rozpoczyna się uruchamianie programu}
}//Koniec klasy B
Struktura programu
Typy proste JAVA
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 84/79
Operatory
Instrukcje sterujące
analogiczne do C
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 86/79
Instrukcje „if” można zagłębiać lub dokonywać wielokrotnego wyboru:
analogiczne do C
switch-case
Nadal analogiczne do C
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 88/79
Brak „break” przy pierwszym warunku – wynikiem będzie wypisanie „0” i „1”
switch-case
analogiczne do C
Pętla „for ”
• Zmienną i nazywamy Indeksem Pętli
• Indeks może być dowolnym typem prostym poza boolean.
• Warunek może być dowolnym zdaniem logicznym, należy jednak zwrócić uwagę by nie była to tautologia. Otrzymamy wtedy pętle nieskończoną
• Krok pętli może być dowolny jednak tak samo jak w przypadku warunku trzeba uważać na zapętlenie się programu.
analogiczne do C
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 90/79
do/while
Obie te konstrukcje są bardzo podobne do siebie. Główna różnica polega na tym iż w pętli while warunek jest sprawdzany przed wykonaniem instrukcji, a w pętli do while po wykonaniu instrukcji. Oznacza to, że pętla do while wykona się co najmniej jeden raz niezależnie od warunku .
...analogiczne do C
break/continue
Jeżeli chcemy przerwać wykonanie pętli jeżeli spełniony jest
jakiś warunek to musimy użyć słowa break, a jeśli chcemy
pominąć jakiś krok w pętli to musimy użyć słowa continue:
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 92/79
Konwencja kodu
● Nazwa klasy powinna „coś znaczyć”.
Pierwsza litera w nazwie klasy pisana jest wielka litera. Jeśli nazwa klasy składa sie z kilku słów to pisze sie je łącznie, każde
słowo rozpoczynajac z wielkiej litery:
class MojaKlasa {
…
}
Konwencja kodu
Metody i pola oraz nazwy referencji pisze się analogicznie, poza tym ze pierwsza
litera jest mała (należy pamiętać, że
język Java rozróżnia małe i wielkie litery):
class MojaKlasa{
int mojaZmienna;
void pobierzZmienna(int numerZmiennej){
…
}
}
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 94/79
Konwencja kodu
Instrukcja złożona to ciąg instrukcji pomiędzy nawiasami { … }, nazywana blokiem instrukcji np.:
instrukcja_grupujaca //klasa, metoda, itp.
{
... //blok kodu
}//koniec instrukcja_grupujaca
In strukcja grupująca (np. klasa, metoda, instrukcja sterująca, np.
pętla) rozpoczyna blok kodu. Jeśli zadeklarujemy w bloku zmienną to będzie ona widoczna tylko w tym bloku.
Po klamrze zamykającej nie trzeba stawiać średnika.
Istnieja kilka wariantów stawiania nawiasów { }:
while(i) { }
while(i) {
}
while(i) {
}
Wszystkie te są poprawne. Warto jednak wybrać jeden i konsekwentnie sie go trzymać. Warto również po otwarciu klamry od razu postawić klamrę zamykająca.
Pozwoli to uniknąć wielu niepotrzebnych błędów.
Konwencja kodu
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 96/79
Konwencja kodu
instrukcja_grupujaca { instrukcje bloku...
}//koniec instrukcja_grupujaca
●
Kod po klamrze otwierającej umieszcza sie w nowej linii.
●
Każda linia bloku jest przesunięta (wcięta) względem pierwszego znaku instrukcja_grupujaca o stałą liczbę znaków.
●
Blok kończy sie klamrą zamykającą w nowej linii na wysokości pierwszego znaku instrukcji grupującej.
●
Blok warto kończyć komentarzem umożliwiającym identyfikacje
bloku zamykanego przez dana klamrę.
Konwencja kodu
Warto stosować nadmiarowości i dodatkowe
separatory celem poprawienia czytelności kodu np.:
int a = (c * 2) + (b / 3);
zamiast:
int a=c*2+b/3 ;
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 98/79
Konwencja kodu
Ważnym elementem czytelnej konstrukcji kodu jest stosowanie komentarzy liniowych:
int i = 5; //komentarz pojedynczej linii lub blokowych:
/*
blok komentarza:
druga linia komentarza ...
*/
lub blokowych z dodatkowymi „gwiazdkami” *:
/*
* blok komentarza:
* druga linia komentarza
*/
Typ tablicowy
●
Tablice w Javie są jednowymiarowe, ale mogą zawierać inne tablice.
●
Przy definicji typu nie podaje się wielkości tablicy
●
Każda tablica jest obiektem i ma zdefiniowane pole length o wartości równej liczbie elementów w tablicy
●
Zadeklarowanie tablicy nie przydziela jej pamięci! Aby przydzielić pamięć należy użyć new
●
Tablice są indeksowane wartościami typu int, stąd największa tablica ma 2147483647 elementów.
– Jeśli potrzebujesz większej tablicy, coś jest nie w
porządku z Twoim kodem
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 100/79
//przykłady deklaracji i tworzenia tablic int arr[];
int [] arr; //to samo co wyżej arr = new int[3];
int arr[] = { 0, 0, 0 }; //równoważne int arr[][];
arr[][] = new int[3][]; //powstaje tablica wektorów arr[0] = new int[5]; //pierwszy wektor
arr[1] = new int[5];
arr[2] = new int[5]; //ostatni wektor arr[][] = new int[10][];
for (int i=0; i<10; i++)
arr[i] = new int[i+1]; //tablica trójkątna arr[][] = { {1}, {0, 1}, {0, 0, 1} };
arr[0] = null;
arr[1] = new int[10];
arr[2] = {10, 10};
Typ tablicowy
typ łańcuchowy (String)
• zaimplementowano jako obiekt
• automatyczne konwersje z innych typów i łączenie
• znaki łańcuchów są indeksowane od 0
• znak nieistniejący to -1
operatory: +, =, += mają specjalne znaczenie dla obiektów klasy String
Coś nowego!
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 102/79
typ łańcuchowy (String)
• zaimplementowano jako obiekt
• automatyczne konwersje z innych typów i łączenie
• znaki łańcuchów są indeksowane od 0
• znak nieistniejący to -1
operatory: +, =, += mają specjalne znaczenie dla obiektów klasy String
String s1;
String s2=‘‘Ala”;
s1=s2+‘‘ma Asa” // s1 będzie zawierać napis „Ala ma Asa”
Z obiektami typu String można konkatenować liczby towarzyszy temu niejawne wywołanie metody toString()
int k=1;
s1 = k+k+s2; // s1 będzie zawierać 2Ala s1=s2+k+k; // s1 będzie zawierać Ala11 s1=s2+(k+k); // s1 będzie zawierać Ala2
Coś nowego!
Podstawy
String [przyklad]
(perspektywy)
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 104/79
typ łańcuchowy (String)
• zaimplementowano jako obiekt
• automatyczne konwersje z innych typów i łączenie
• znaki łańcuchów są indeksowane od 0
• znak nieistniejący to -1
operatory: +, =, += mają specjalne znaczenie dla obiektów klasy String
String s1;
String s2=‘‘Ala”;
s1=s2+‘‘ma Asa” // s1 będzie zawierać napis „Ala ma Asa”
Z obiektami typu String można konkatenować liczby;
towarzyszy temu niejawne wywołanie metody toString() int k=1;
s1 = k+k+s2; // s1 będzie zawierać 2Ala s1=s2+k+k; // s1 będzie zawierać Ala11 s1=s2+(k+k); // s1 będzie zawierać Ala2
Coś nowego!
typ łańcuchowy (String)
//Przykład użycia obiektów String public class StringPrzyklad
{
public static void main(String args[]) {
String s1 = "Hello";
String s2;
s2 = s1; //pełna kopia obiektu s1 = "World";
System.out.println( "s1=" + s1 ); //s1=World System.out.println( "s2=" + s2 ); //s2=Hello s1 = 20+20+"";
s2 = (20==30)+"";
System.out.println( "s1=" + s1 ); //s1=40
System.out.println( "s2=" + s2 ); //s2=false System.out.println( s1.charAt(1) ); //0
System.out.println( s1.charAt(2) );
// java.lang.StringIndexOutOfBoundsException:
// String index out of range: 2
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 106/79
Literatura
• „Java – przewodnik dla początkujących”, Herbert Schildt
• „Thinking in Java” - Bruce Eckel
• „Java Podstawy” - Cay Horstmann, Gary Cornell
• „Java Receptury” - Ian F. Darwin
• „Java ćwiczenia praktyczne” - Marcin Lis
• „Java w zadaniach” - Steve Potts
• „Java po C++” - Jan Bielecki
• „Java 4 Swing” - Jan Bielecki
• Dokumentacja JAVA
Dokumentacja on-line (javadoc):
http://docs.oracle.com/javase/
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 108/79
API Documentation
(Application Programming Interface -
interfejs programowania aplikacji )
Dziękuję za Uwagę!
Do zobaczenia za tydzień.
Będę więcej opowiadać o projektach.
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 110/79
Dziedziczenie
W jaki sposób zdefiniować klasę pochodną, dziedziczącą po już istniejącej?
public class KlasaPochodna extends KlasaPrzykladowa { public void wypisz()
{
System.out.println(x + " " + y + " " + tekst);
}
int y = 10;
}
public static void main(String[] args) {
//KlasaPrzykladowa kp = new KlasaPrzykladowa();
KlasaPochodna kp = new KlasaPochodna();
kp.wypisz();
}
Efekt?
package pl.wyklad1.klasapokazowa;
public class KlasaPrzykladowa { // deklaracje konstruktorów
KlasaPrzykladowa() { x = 0;
tekst = "domyslny";
}
// deklaracje metod
public void setX(int aX) { x = aX;
}
public int getX() { return x;
}
public void wypisz() {
System.out.println(x + " " + tekst);
}
// deklaracje pól int x;
String tekst;
}
Dziedziczenie
W jaki sposób zdefiniować klasę pochodną, dziedziczącą po już istniejącej?
public class KlasaPochodna extends KlasaPrzykladowa { public void wypisz()
{
System.out.println(x + " " + y + " " + tekst);
}
int y = 10;
}
public static void main(String[] args) {
//KlasaPrzykladowa kp = new KlasaPrzykladowa();
KlasaPochodna kp = new KlasaPochodna();
kp.wypisz();
package pl.wyklad1.klasapokazowa;
public class KlasaPrzykladowa { // deklaracje konstruktorów
KlasaPrzykladowa() { x = 0;
tekst = "domyslny";
}
// deklaracje metod
public void setX(int aX) { x = aX;
}
public int getX() { return x;
}
public void wypisz() {
System.out.println(x + " " + tekst);
}
// deklaracje pól int x;
String tekst;
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 112/79
Okienka w Javie
Dziedziczenie po JFrame
Frame
Własne okienko [przykład]
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 114/79
package pl.wyklad1.klasapokazowa;
import javax.swing.JFrame;
public class PierwszeOkienko extends JFrame {
public static void main(String[] args) {
PierwszeOkienko po = new PierwszeOkienko();
po.setSize(500,500);
po.setVisible(true);
} }
Dziedziczenie po JFrame
Szybkie tworzenie klasy pochodnej w Eclipse
package pl.mojastrona.mojpakiet;
import javax.swing.*;
class MojeOkienko extends JFrame {
public MojeOkienko() {
...
} }
class KlasaStartowa {
MojeOkienko ob1 = new MojeOkienko();
public static void main(String[] args) {
...
} }
Określenie pakietu, do którego należą klasy zdefiniowane w tym pliku (opcjonalne…).
Zewnętrzne pakiety (lub pojedyncze klasy, nterfejsy),z których korzystamy w naszym programie. „odpowiednik”
dyrektywy #include w C/C++.
Deklaracja klasy rozszerzającej inną klasę (dziedziczenie)
Konstruktor – taka sama nazwa jak klasa, może być kilka definicji konstruktorów dla jednej klasy, np.
public MojeOkienko( int parametrPoczątkowy) {
}
Druga klasa, w której deklarowane są referencje do obiektów innej klasy, oraz tworzony jest nowy obiekt
operator „new” + wywołanie konstruktora
Metoda main klasy startowej – od niej rozpoczyna się uruchamianie programu
Struktura programu
Trzy najpopularniejsze rodzaje programów:
• aplikacja konsolowa – samodzielny program
pracujący w trybie konsolowym/tekstowym systemu operacyjnego,
• aplikacja graficzna – samodzielny program pracujący w trybie graficznym (okienkowym)
• aplet – najczesciej nieduzy program napisany w jezyk Java i umieszczony na stronie HTML i
uruchamiany wraz z nia przez przegladarke internetowa, obsługujaca jezyk Java.
(deprecated - już nie stosowane)
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 118/79
Przykład – wykorzystanie metody Monte-Carlo do wyznaczenia liczby
Pole kwadratu:
Pole koła:
Losowanie N punktów, z czego
M leży wewnątrz koła.
Przykład – wykorzystanie metody Monte-Carlo do wyznaczenia liczby
class Monte_Carlo {
public static void main(String[] args) { double r1, r2;
int i, m=0, n=10000;
for (i=1 ; i<=n ; i++){
r1=Math.random()-0.5;
r2=Math.random()-0.5;
if (r1 *r1 + r2 *r2 <0.25) m++;
}
System.out.println("PI oszacowane = "
+ 4.* (double) m/n);
System.out.println("PI z Math.PI = " + Math.PI);
}
}
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 120/79
Ciekawostki
Operator trójargumentowy ?
Zamiast bloku „if-else” można użyć operatora trójargumentowego ?
Co jest równoważne:
…analogiczne do C
122/79
Programowanie Obiektowe (Wykład) Małgorzata Janik (WF PW) 122/79
●
Projekt
Jeśli projekt został zaliczony, ocena z projektu może zostać zamieniona na punkty.
5.0 = 100% = 65 pkt. 3.0 = 51% = 28 pkt.
W przeciwym wypadku obowiązkowe zaliczenie wszystkich etapów zgodnie z harmonogramem.
●
Laboratoria: zajęcia punktowane
10 x 5 pkt = 50 pkt
Ocena z laboratorium może zostać zamieniona na punkty. 100% = 50 pkt.
Czyli jeśli ktoś zaliczył laboratorium na 3, może dostać 51% punktów = 26 pkt.
W takim wypadku uczęszczanie na laboratoria nie jest obowiązkowe.
●
Laboratoria: kolokwium
1 x 20 pkt = 20 pkt – obowiązkowe.
Niezaliczenie tych zajęć: brak uzyskania zaliczenia. Zalicznie oznacza zdobycie min. 8 punktów.
●
Łącznie punktów: 50 + 55 + 20 pkt = 125 pkt
●
Wykład
+0.5 oceny w górę
●
Warunek zaliczenia:
– > 50% z projektu
– > 50% punktów + zaliczone kolokwum
Powtarzanie przedmiotu
Pytania?
●
Poniedziałek 16:15 – 18:00
2 h, pierwsza połowa semestru
●
7 wykładów :
obecność na minimum 6: +0.5 oceny w górę
●