PB162/1213: Porovnání verzí

Z FI WIKI
Přejít na: navigace, hledání
(4. cvičení)
m (5. cvičení)
Řádka 107: Řádka 107:
  
 
Vymyslete si jména a uča dvou studentů a kódy jednoho předmětu. Vytvořte předmět a přihlašte do něj dva studenty, vypište výsledek.
 
Vymyslete si jména a uča dvou studentů a kódy jednoho předmětu. Vytvořte předmět a přihlašte do něj dva studenty, vypište výsledek.
 +
 +
== Kolekce, Generické typy, Porovnávání ==
 +
Vlastnosti
 +
* Objekt
 +
* Jiný než přístup pomocí indexu
 +
** iterator
 +
*** iterator(), hasNext(), next()
 +
** foreach cyklus
 +
** indexy (např. Vector)
 +
* Možnost změn mimo deklaraci
 +
* Možnost dalších algoritmů
 +
** Colections
 +
Typy
 +
* Asociativní kolekce - klíč -> hodnota = rozhraní Map
 +
** put(), get(), remove()
 +
* Množina = rozhraní Set
 +
** add()...
 +
* Seznam = rozhraní List
 +
* Vector, Hashtable (synchronizované)
 +
Implementace
 +
* Hash* = hashovací tabulky
 +
** nutné hashCode()
 +
*** pravidlo u hashCode()
 +
**** pro stejný objekt musí vrátit vždy stejnou hodnotu
 +
**** pokud jsou objekty "stejné" podle equals, musí mít stejné hashCode
 +
*** pravidlo pro equals()
 +
**** reflexivnost, transitivnost, konsistentnost, symetričnost, s null = false
 +
* Tree* = uspořádaná množina/asociativní kolekce, pomocí černobílého stromu
 +
** nutná implementace rozhraní Comparable, nebo dodat třídu Comparator (v konstruktoru)
 +
 +
Generické typy
 +
* určení povoleného obsahu v kolekci (jinak Object)
 +
* ale i např. v rozhraní
 +
 +
Porovnávání
 +
* tvořím svou = mohu implementovat rozhraní Comparable<T>
 +
** compareTo(T o)
 +
*** <0 = "náš" je menší, 0 = "náš" je stejný, >0 = "náš" je větší
 +
*** dost často stačí <code>this.id - o.id</code>
 +
* Potřebuju pracovat s cizí, existující třídou, kterou nemohu měnit = třída comparator
 +
** compare(T o1, T o2)
 +
*** <0 = o1 je menší, 0 = o1 je stejný, >0 = o1 je větší

Verze z 19. 11. 2007, 13:16

Úloha na 3. cvičení

Simulace mezinárodního obchodu se zbraněmi

  • samotné zbraně
  • výrobci
  • obchodníci
  • oběti

Zbraň

 
public class Weapon {
	private String name;
	private int price;
	public Weapon(String newName, int price) {
		name=newName;
		this.price=price;
 
	}
	public String getName() {
		return name;
	}
	public int getPrice() {
		return price;
	}
}

Výrobce

 
public class WeaponFactory {
	private String name;
	public Weapon buildWeapon(String name, int price);
	public static void main(String[] args);
}

Obchodníci

 
public interface WeaponDealer {
	int getWeaponCount();
	void buyWeapon(Weapon w);
	void sellWeapon(Weapon w);
	void resellWeapon(Weapon w, WeaponDealer wd);
}


Úkol

  • Překupník, má své jméno, má své peníze, může být dealerem, může zároveň obchodovat jen s jednou zbraní. nákup zbraně musí zaručit svými penězi (tj. když koupí zbraň, o její cenu se sníží množství jeho penez v peněžence).
  • Stát - ti jsou taky překupníky zbraní nákup a prodej nepracuje s penězi, to se zaplatí ze státního rozpočtu
    • navíc má atribut "počet obyvatel", a metodu "testovat zbraň", ta dostane jako parametr zbraň a po jejím testu se sníží počet obyvatel o 5000.
    • bonusový úkol v bonusové úloze - může pracovat až se 2 zbraněmi naráz
    • akce sell a buy vypisou informace, kdo co koupil
  • Továrna - vyrábí zbraně.
    • + spustitelná metoda ...
      • vytvoříme překupníka a nějak nápaditě ho pojmenujeme
      • vytvoříme stát, který je schopný otestovat aspoň jednu zbraň, vyhlásíme nezávislost
      • vytvoříme továrnu
        • tovarna postupně vyrobí několik zbraní
        • jednu prodá státu, ten ji vyzkouší na obyvatelstvu
        • druhou prodá překupníkovi, ten ji prodá státu, ten mu ji prodá zpět a on ji prodá pryč...
  • začátek budeme řešit na cvičení, dokončit můžete doma (+ bod za přidání globální statistiky, výpisu stavu objektů...)

4. cvičení

  • Úloha 3; ... do 19. října
  • objekty:
    • obdélník
    • čtverec
  • objekty:
    • trojúhelník
    • rovnostranný trojúhelník
  • objekty:
    • trojúhelník
    • obdélník
  • objekty:
    • vrchol
    • trojúhelník

Úkoly

0)

  • vytvořte rozhraní Rotable s metodou void rotate(int angle);

1)

  • vytvořte třídu Point... atribut x,y, parametrický konstruktor s dvěma parametry, toString "[x,y]"
  • vytvořte třídu MyTriangle... 3 atributy pro vrcholy a 3 atributy pro délky stran, to String "A [x,y], B [x,y], C [x,y]"
  • jeho metoda main ... vytvoří 2 trojúhelníky, nainicializuje různými hodnotami, vypíše o nich informace

2)

  • vytvořte (prázdnou) třídu Square
  • vytvořte (prázdnou) třídu Triangle
  • vytvořte (prázdnou) třídu Point
  • vytvořte (prázdnou) třídu GeometricalObject
    • jaké vytvoříte vztahy mezi těmito třídami pomocí rozhraní Rotable a dědičností?

3)

  • vytvořte třídu EquilateralTriangle ... rovnostranný trojúhelník
    • jak?

5. cvičení

Mějme svět, kde existují studenti a předměty. Student má jméno a učo. Definujte pro něj gettery, settery a toString. Předmět má kód (textový), název. Mohou se do něj nahlásit maximálně dva studenti (je to opravdu malý předmět). Nadefinujte konstruktor s kódem a názvem, nadefinujte konstruktor s kódem, názvem, a jménem a učem dvou studentů. Vytvořte toString předmětu (výpis jeho dat a jeho studentů)

Vymyslete si jména a uča dvou studentů a kódy jednoho předmětu. Vytvořte předmět a přihlašte do něj dva studenty, vypište výsledek.

Kolekce, Generické typy, Porovnávání

Vlastnosti

  • Objekt
  • Jiný než přístup pomocí indexu
    • iterator
      • iterator(), hasNext(), next()
    • foreach cyklus
    • indexy (např. Vector)
  • Možnost změn mimo deklaraci
  • Možnost dalších algoritmů
    • Colections

Typy

  • Asociativní kolekce - klíč -> hodnota = rozhraní Map
    • put(), get(), remove()
  • Množina = rozhraní Set
    • add()...
  • Seznam = rozhraní List
  • Vector, Hashtable (synchronizované)

Implementace

  • Hash* = hashovací tabulky
    • nutné hashCode()
      • pravidlo u hashCode()
        • pro stejný objekt musí vrátit vždy stejnou hodnotu
        • pokud jsou objekty "stejné" podle equals, musí mít stejné hashCode
      • pravidlo pro equals()
        • reflexivnost, transitivnost, konsistentnost, symetričnost, s null = false
  • Tree* = uspořádaná množina/asociativní kolekce, pomocí černobílého stromu
    • nutná implementace rozhraní Comparable, nebo dodat třídu Comparator (v konstruktoru)

Generické typy

  • určení povoleného obsahu v kolekci (jinak Object)
  • ale i např. v rozhraní

Porovnávání

  • tvořím svou = mohu implementovat rozhraní Comparable<T>
    • compareTo(T o)
      • <0 = "náš" je menší, 0 = "náš" je stejný, >0 = "náš" je větší
      • dost často stačí this.id - o.id
  • Potřebuju pracovat s cizí, existující třídou, kterou nemohu měnit = třída comparator
    • compare(T o1, T o2)
      • <0 = o1 je menší, 0 = o1 je stejný, >0 = o1 je větší