Politechnika Wrocławska, Wydział Elektroniki, Kierunek: Informatyka
INE2018L
Laboratorium do przedmiotu "Języki Programowania 3"  
( prow. dr Marek Piasecki

Wykład do tego przedmiotu prowadzony jest przez dr Tomasza Kubika.
Materiały wykładu umieszczane są na stronie:
     http://sprocket.ict.pwr.wroc.pl/~tkubik/dydaktyka/JezykiProgramowania3/JezykiProgramowania3.html 

 

Program zajęć laboratoryjnych:

LP

TEMATYKA  ZAJĘĆ

1

Zapoznanie się ze środowiskiem programowania w języku Java (np. JCreator, JSWAT)
Ćwiczenia z kompilacją, uruchomieniem i debuggowaniem prostych programów.
Programy powinny działać w trybie tekstowym, pobierając argumenty z linii wywołania
i wyświetlając wyniki końcowe na ekranie.
Przykładowe zadania

2

Rozwijanie umiejętności pisania programów w języku Java z wykorzystaniem kolekcji i wyjątków.
Przykładowe zadania

3

Ćwiczenie technik programowania obiektowego, na przykładzie wybranego problemu.
Rozwiązanie problemu powinno mieć postać aplikacji:
   a) działającej w trybie tekstowym,
   b) pobierającej argumenty z linii wywołania lub z klawiatury
        (np. dzięki wykorzystaniu klasy EasyReader),
   c) wyświetlającej wyniki na ekran.
Etap projektowania aplikacji powinien uwzględniać budowę statycznego diagramu klas w standardzie UML i automatyczne generowanie kodu Javy.
Opis przykładowego zadania

4

Tworzenie aplikacji wykorzystujących interfejs graficzny (AWT, Swing)
oraz komunikację z użytkownikiem bazującą na obsłudze zdarzeń.
Opis przykładowego zadania

5

Zaznajomienie się z cechami apletów, ich implementacją oraz sposobami uruchamienia.

6

Problemy związane z tworzeniem aplikacji wielowątkowych:
   a) tworzenie i zatrzymywanie wątków,
   b) sekcja krytyczna i synchronizacja wątków

7

Zapoznanie się z technikami programowania rozproszonego, opartymi na RMI.


 

Wykorzystywane oprogramowanie:

 


Przykładowe zadania:

LABORATORIUM 1:  

  1. Zaimplementuj funkcję pi(n), która dla danej liczby naturalnej n zlicza ilość liczb pierwszych mniejszych lub równych n. Dla n>2 postać funkcji pi jest następująca:

    gdzie [x] oznacza część całkowitą z x  (np funkcja Math.floor( ) ).
    Autorami tego rozwiązania są: Hardy i Wright

  2. Zaimplementuj algorytm generowania ciągu liczb całkowitych dla n0 (Hailstone sequence)
         krok 1)  weź n0
         krok 2)  jeśli n0 jest parzyste, niech n1 = n0 / 2
         krok 3)  jeśli n0 jest nieparzyste, niech n1 = n0*3 + 1
         krok 4)  niech n0 = n1
         krok 5)  jeśli n0 =1 zakończ obliczenia, w przeciwnym przypadku skocz do kroku 2

    Program powinien działać w taki sposób, aby na ekranie pojawiały się następujące informacje:
         numer_kolejnej_ iteracjin0  { parzyste | nieparzyste }, n1

    np. dla n0=10:
        1, 10, parzyste, 5
        2, 5, nieparzyste, 16
        3, 16, parzyste, 8
        4, 8, parzyste, 4
        5, 4, parzyste, 2
        6, 2, parzyste, 1
    Algorytm ten zaproponował Hofstadter w książce "Gödel, Escher, Bach".
    Co ciekawe, nie ma dowodu, że algorytm zawsze się zatrzymuje. Jaki jest ciąg wynikowy dla liczby 27?

  3. Napisz program podający ilość wszystkich rozkładów danej liczby naturalnej n (0<n<1000) na sumę różnych między sobą składników naturalnych (różnych od 0) występujących w kolejności rosnącej.

  4. W wyrażeniu "((((1?2)?3)?4)?5)?6" zastąp znaki "?" operatorami działań arytmetycznych na liczbach całkowitych +,-,*,/, aby wartość wyrażenia wynosiła n (-1000<n<1000). Dla danego n wypisz znalezione wyrażenie lub zgłoś brak rozwiązań.


LABORATORIUM 2:  ( obsługa wyjątków, kolekcje - kontenery )

  1. Napisz program zawierający operację przekroczenia zakresu tablicy np.
       float [] tablica = new float[5];
       tablica[7] = 11.5;
    Oprogramuj przechwycenie wyjątku ArrayIndexOutOfBoundsException.

  2. Przeanalizuj przykładowy program TestWyjatku.java
    i uzupełnij go o fragment obsługujący występowanie przykładowego wyjątku.

  3. Napisz program lab2a odczytujący z dysku i wyświetlający na ekranie
    treść swojego własnego pliku źródłowego lab2a.java

    Do operacji odczytu, zamiast uproszczonej klasy EasyReader
    należy wykorzystać standardowe klasy strumieniowe: BufferedReader, FileReader.
    (Uwaga: konieczne będzie dodanie obsługi wyjątku IOException)

  4. Napisz program edytor_wierszowy.java
    pozwalający wyświetlać i edytować zawartość pliku tekstowego (wczytywanego w poprzednim zadaniu)
    który będzie przechowywany w pamięci w postaci kolekcji LinkedList
    zawierającej obiekty klasy String.

    Menu programu powinno zawierać następujące opcje:
         - Wczytaj zawartość listy z pliku tekstowego
         - Wyświetl zawartość całej listy (wszystkie wiersze)
         - Wyświetl zawartość i-tego wiersza
         - Usuń i-ty wiersz
         - Wczytaj nowy wiersz i dodaj na i-tej pozycji listy
         - Zapisz zawartość całej listy do pliku tekstowego.

Jako materiały pomocnicze do laboratorium można wykorzystać wykłady:

udostępniane w sieci przez Łukasza Nitschke


LABORATORIUM 3:  ( programowanie obiektowe: projektowanie i implementacja )

ZADANIE: Zaprojektuj (i zaimplementuj w języku Java) zestaw klas modelujący wybrany nietrywialny problem praktyczny składający się z wielu obiektów połączonych różnorodnymi relacjami.
Np. system gromadzący typowe informacje wykorzystywane w dziekanacie uczelni.

Elementami takiego przykładowego systemu będą: dane osób (nazwiska, adresy, ...) dane kursów (nazwy, formy realizacji zajęć, ilości godzin, ...), dane studentów, dane prowadzących, informacje o ocenach, o laboratoriach, o godzinach odbywania się zajęć, itd

Większość z tych elementów połączona jest jakimiś relacjami
np. 
 - student posiada swój plan zajęć,
 - fragmentem planu jest laboratorium,
 - laboratorium jest elementem jakiegoś kursu,
 - laboratorium odbywa się w jakiejś sali,
 - w tej samej sali (ale w innym terminie) mogą się odbywać różne zajęcia,
 - każde zajęcia mają jakiegoś prowadzącego,
 - prowadzący może mieć kilka zajęć,
 - wielu studentów uczestniczy w tym samym kursie ale każdy ze studentów musi mieć osobną ocenę
 -  . . .

WSKAZÓWKI:

Jak uporządkować pracę nad implementacją takiego systemu?
Można najpierw oprogramować poszczególne elementy a dopiero potem sklejać je w jedną całość.
Lepszym rozwiązaniem jest rozpoczęcie od projektowania na wysokim poziomie abstrakcji
a dopiero potem uzupełnienie takiego szkieletu implementacją poszczególnych elementów.

Efekty takiego abstrakcyjnego projektowania są formalizowane w postaci różnorodnych diagramów
np. statycznego diagramu klas czy dynamicznego diagramu przypadków użycia.
Do zapisu diagramów można wykorzystać język UML,
a podczas ich budowy użyteczne są narzędzia wspomagające np. ArgoUML 

Programy tego typu można wykorzystać do:

  1. automatycznego wygenerowania kodu klas na podstawie zaprojektowanego diagramu,

  2. lub odwrotnie, do zbudowania diagramu ilustrującego strukturę i powiązania klas
    na podstawie istniejącego kodu. 

 

Przykładowe diagramy dla dziekanatu można znaleźć tutaj (w materiałach Michała Śmiałka)

 

LABORATORIUM 4:  ( interfejs graficzny - AWT )

ZADANIE: Napisz dowolny program wykorzystujący graficzny interfejs użytkownika (AWT).
Przykładowe tematy to: kalkulator, prosta baza danych - lista adresów, lista wydatków itp.
Można również utworzyć program zawierający formularze pozwalające wczytywać/poprawiać/przeglądać zawartość wybranych elementów systemu zaprojektowanego na laboratorium nr 3

Przykłady takich programów wraz z podstawowymi informacjami n/t wykorzystywania AWT można znaleźć na stronach Dariusza Rataja lub webdeveloper.pl.