Programowanie obiektowe
Zajęcia 1
Zajęcia 2 - Wprowadzenie do Javy i C#
Zadanie:
- Stwórz dwie 10-cio elementowe tablice.
- Wypełnij jedną z
nich losowymi wartościami, drugą zaś - liczbami wczytanymi od
użytkownika.
- Wypisz zawartość obu na ekranie.
- Posortuj pierwszą tablicę i zapisz ją do pliku.
- W drugiej tablicy znajdź elementy minimalny i maksymalny, zapisz je do pliku.
Java:
- struktura programu:
import
java.util.*;
import java.io.*;
public class po1
{
public static void
main(String[] args) throws Exception
{
System.out.println("Hello!");
}
}
- losowanie liczb:
Random
generator = new Random();
int x = generator.nextInt(20);
- wczytywanie liczb:
Scanner
skaner = new Scanner(System.in);
int y = skaner.nextInt();
- wypisywanie wartości:
System.out.println("x
= " + x + ", y = " + y);
- zapis do pliku tekstowego:
PrintWriter writer
= new PrintWriter(new File("out.txt"));
writer.println("Ala ma kota");
writer.close();
- odczyt z pliku tekstowego:
skaner =
new Scanner(new File("out.txt"));
while(skaner.hasNext())
{
String str = skaner.next();
System.out.println(str);
}
skaner.close();
- tablice
-
int[] tab
= new int[10];
for(int i = 0; i < tab.length; ++i)
... tab[i] ...
- korzystanie z list:
ArrayList<String>
list = new ArrayList<String>();
list.add("Białystok");
list.add("Warszawa");
list.add("Kraków");
for(String str : list)
System.out.println(str);
- algorytmy operujące na listach:
String str
= Collections.max(list);
Collections.sort(list);
- odwołanie do elementów listy po indeksie:
lista.set(0,
"Wrocław");
String str = lista.get(1);
C#:
using System;
using System.IO;
using System.Collections.Generic;
namespace po1
{
class MainClass
{
public
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Random rnd = new Random();
int x = rnd.Next(20);
string str = Console.ReadLine();
int y = int.Parse(str);
Console.WriteLine("x = " + x + ", y = "
+ y);
TextWriter writer = new
StreamWriter("out.txt");
writer.WriteLine("Ala ma kota");
writer.Close();
TextReader reader = new
StreamReader("out.txt");
string line;
while((line = reader.ReadLine()) != null)
Console.WriteLine(line);
reader.Close();
List<string> list = new
List<string>();
list.Add("Białystok");
list.Add("Warszawa");
list.Add("Kraków");
list.Sort();
list[0] = "Wrocław";
foreach(string s in list)
Console.WriteLine(s);
int[] ar = new int[10];
for(int i = 0; i < ar.Length; ++i)
ar[i] =
2*i+1;
foreach(int s in ar)
Console.WriteLine(s);
}
}
}
Zajęcia 3
Zaimplementuj klasę Stos.
Zajęcia 4
Zadanie 1.
W języku JAVA lub C# stwórz klasę Dane posiadającą następujące metody:
- inicjalizujLosowo - tworzy tablicę o rozmiarze podanym jako
argument i przypisuje wszystkim elementom tablicy losowe wartości
z przedziału [0 - zakres],
- wypiszDane - metoda powinna wypisać wszystkie elementy tablicy na ekranie,
- suma - metoda powinna zwracać sumę wszystkich elementów tablicy,
- srednia - metoda powinna zwracać średnią wartość wszystkich elementów tablicy,
- min - metoda powinna zwracać najmniejszą wartość przechowywaną w tablicy,
- max - metoda powinna zwracać największą wartość przechowywaną w tablicy,
- porownaj - metoda porównuje zawartość obiektu z innym obiektem klasy Dane.
Napisz program, w którym tworzone są obiekty klasy Dane i wykorzystywane są zaimplementowane metody.
Zadanie 2.
Stwórz klasę symulującą śmigłowiec. Dla każdego śmigłowca okreslamy w
przestrzeni trójwymiarowej punkt początkowy oraz końcowy lotu.
Śmigłowiec może wznosić się, opadać, lecieć do przodu, do tyłu oraz na boki.
W każdym momencie lotu istnieje możliwość podania odległości do celu.
Zadanie 3.
Napisz klasę symulującą kolejkę. Dla każdego pociągu określamy początek i koniec trasy oraz liczbę stacji pośrednich.
Pociąg może przyspieszać, zwalniać, otwierać (pod warunkiem, że stoi na stacji i drzwi są jeszcze zamkniete)
i zamykać drzwi (pod warunkiem, że stoi na stacji i drzwi zostały wcześniej otwarte).
W pociągu może zmieścić się ograniczona liczba pasażerów. Na każdej stacji mogą wsiadać i wysiadać kolejni pasażerowie.
W trakcie jazdy pociągu, możemy sprawdzić ile wynosi obecna prędkość oraz ilu pasażerów obecnie podróżuje kolejką.
Zajęcia 5
Zadanie 1
Zdefiniuj klasę Zespolona
(reprezentującą liczbę
zespoloną) i przetestuj jej działanie przy użyciu
przykładowego
programu.
Zespolona powinna zawierać:
- dwie składowe na
część rzeczywistą i
urojoną liczby zespolonej,
- metodę dodaj działającą
jak +=,
- metodę plus działającą
jak +,
- metodę wypisz wypisującą
wartość zmiennej zespolonej na ekranie.
- trzy konstruktory do klasy Zespolona:
bezparametrowy, z jednym parametrem i
z dwoma parametrami (w konstruktorze wykonywana jest inicjalizacja
zmiennych
składowych klasy).
Uwaga: metoda dodaj modyfikuje
obiekt, z
którego została wywołana, natomiast metoda plus
generuje nowy obiekt zawierajacy wynik dodawania.
Dodaj metody umożliwiające wykonanie
pozostałych działań (odejmowanie, mnożenie, dzielenie).
Zajęcia 6
Napisz klasę reprezentującą (pojedynczą) aukcję Allegro.
- Tworząc aukcję podajemy nazwę towaru oraz cenę wywoławczą.
- Następnie możemy licytować towar podając nazwę
użytkownika podbijającego cenę oraz proponowaną przez niego kwotę.
- Powinniśmy otrzymać informację, jeśli podana cena nie
przebija aktualnej wysokości licytacji.
- W
dowolnym momencie aukcję można zakończyć i uzyskać informację o
zwycięzcy i wylicytowanej kwocie. Po zakończeniu aukcji nie można już
licytować.
- Tworząc aukcję możemy wybrać również opcję "cena
minimalna" (aukcja nie zakończy się, jeśli cena minimalna nie została
osiągnięta) oraz "kup teraz" (aukcja zakończy się bez licytacji, gdy
licytujący zapłaci pełną żądaną kwotę).
Postaraj się
nie umieszczać w metodach kodu wypisującego bądź wczytującego dane -
komunikacja powinna odbywać się wyłącznie przy pomocy argumentów oraz
wartości zwracanej.
Z tego powodu zamiast metody w stylu
"wypisz" lepiej jest napisać metodę toString,
zwracajacą tekst, ktory
będziemy mogli później wypisać:
public String toString() {
return "..."; }
Zajęcia 7
W C++ napisz klasę Wektor składającą się z N liczb zespolonych.
Klasa powinna składać się co najmniej z:
- konstruktor nieparametryczny, z jednym parametrem (rozmiarem wektora) oraz konstruktor kopiujący,
- metody dodaj, odejmij, mnoz,
- metodę plus, minus, razy,
- metodę wczytaj pobierającą od użytkownika wszystkie wartości wektora,
- metodę wypisz wypisującą
wartość zmiennej zespolonej na ekranie,
- metodę pobierzSpodIndeksu zwracającą wartość liczby zespolonej znajdującej się w podanym miejscu wektora,
- metodę wstawPodIndeks wpisującą wartość liczby zespolonej w podanym miejscu wektora.
Podobnie jak w klasie Zespolona, metody dodaj, odejmij, mnoz modyfikują
obiekt, z
którego zostały wywołane, natomiast metody plus, minus, razy
generują nowy obiekt zawierajacy wynik działania.
Zajęcia 8
Zadeklaruj klasę IntStream implementujacą strumień liczb naturalnych, posiadającą następujące metody:
- int next() - każde wywołanie zwraca kolejną liczbę naturalną począwszy od 0,
- bool eos() - oznacza koniec strumienia (strumień kończy się, gdy osiągniemy maksymalną wartość określoną podczas tworzenia strumienia),
- void reset() - inicjuje na nowo strumień.
Zadeklaruj dwie podklasy:
- PrimeStream implementujaca strumień liczb pierwszych. Wartościami kolejnych wywołań metody next() są kolejne liczby pierwsze.
- RandomStream, w której metoda next() zwraca liczby losowe. W takim wypadku eos() jest zawsze fałszywe.
Wykorzystaj te klasy do implementacji klasy RandomWordStream realizujacej strumien losowych słów o długosciach równych kolejnym liczbom pierwszym.
Zajęcia 9
Dodaj do hierarchii figur z zadania z wykładu 7 metody: 'przesun', 'skaluj', 'pole'. Następnie:
- stwórz 1 listę losowych figur,
- oblicz ich pole i obwód,
- przesuń je i oblicz ponownie pole (nie powinno się zmienić),
- przeskaluj je 2 razy i oblicz ponownie pole (powinno wzrosnąć czterokrotnie),
Zajęcia 10
Przeprojektuj program z poprzednich zajęć, tak aby klasy Figura oraz Czworokąt były abstrakcyjne.
Zajęcia 11
Uzupełnij program z poprzednich zajęć o typy interfejsowe: IPrzesuwanie, ISkalowanie oraz IObracanie.
Przesuwać i skalować można każdą figurę. Obracaniu nie podlega koło.
Zajęcia 12
Napisz klasę Poczta, dającą dostęp do prostego systemu
wymiany wiadomości
class Poczta {
void nowekonto(String nazwa, String hasło);
void loguj(String nazwa, String hasło);
void wyloguj();
void wyślij(String adresat, String wiadomość);
String odbierz();
}
Poczta umożliwia: założenie nowego konta, zalogowanie i
wylogowanie użytkownika, wysłanie wiadomości do innego użytkownika oraz
odebranie nieprzeczytanych wiadomości (pod warunkiem, że jesteśmy
zalogowani).
Przykład użycia klasy Poczta:
Poczta poczta = new Poczta();
poczta.nowekonto("adam", "abc");
poczta.nowekonto("ewa", "123");
poczta.loguj("ewa", "123");
poczta.wyślij("adam", "jabłko");
poczta.wyloguj();
poczta.loguj("adam", "abc");
System.out.println(poczta.odbierz());
poczta.wyloguj();
Przy pomocy mechanizmu wyjątków obsłuż wszelkie możliwe
błędy. Błędy mogą dotyczyć nieprawidłowych danych (parametrów metod),
np. użytkownik już istnieje, nieprawidłowe hasło, nieznany adresat,
etc. lub też wewnętrznego stanu obiektu, np. próba wysłania czy
odebrania wiadomości bez uprzedniego zalogowania, przepełniona
skrzynka, etc.
Wytyczne odnośnie projektów końcowych
- Projekty powinny być realizowane w grupach 2 osobowych.
- Projekty w C++ nie mogą zawierać zmiennych globalnych.
- Należy obsłużyć wszelkie niepoprawne/nietypowe zachowania programu.
- Należy starać się oddzielić część odpowiedzialną za dane i
działanie od części odpowiedzialnej za interakcję z użytkownikiem.
- W projekcie powinna dać się wyróżnić główna klasa,
reprezentująca projektowany system i udostępniająca swą pełną
funkcjonalność użytkownikowi-programiście.
- Graficzny interfejs użytkownika nie jest potrzebny, program może
działać w oknie konsoli.
- Korzystamy wyłącznie z czystego C++, Javy lub C# - bez żadnych
dodatkowych bibliotek, rozszerzeń, etc.
- Upewnienie się, że prowadzący będzie w stanie odebrać,
skompilować, uruchomić i obsłużyć program należy do (i jest w
interesie) jego twórców.
- Dokumentacja powinna być dostarczona wraz z projektem (projekt
bez oddany dokumentacji uznawany jest za niekompletny i naliczane są
ujemne punkty). Dokumentacja powinna być drukowana dwustronnie.
Składniki dokumentacji
- Opis problemu/zadania.
- Dekompozycja zadania na obiekty/klasy, ich metody, ogólna
architektura systemu.
- Opis podstawowych algorytmów.
- Opis implementacji zaprojektowanego systemu (moduły, pliki,
pakiety, typy, itd.)
- Instrukcja użytkownika (instalacja, wymagania, opcje, przykładowe
skorzystanie z systemu).
- Podział pracy pomiędzy członków grupy.
Punktacja
Maksymalnie za projekt można uzyskać 10 punktów, za
poszczególne elementy odpowiednio:
- Zaprojektowanie systemu (wybór klas, ich metod, powiązań
między nimi) - 5 pkt. (w tym 2 pkt za oddanie wstępnego projektu klas w
wyznaczonym terminie).
- Implementacja systemu - 3 pkt.
- Jakość dokumentacji - 2 pkt.
Opóźnienie
w stosunku do zadanego terminu będę skutkowały obniżeniem uzyskanej
liczby punktów o 0,5 pkt za każdy dzień spóźnienia.