|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectdm.vpi.lekce04.matrix.Matrix
public class Matrix
Třída Matrix realizuje abstraktní datový typ dvojrozměrná matice. Zapouzdřuje nejen data, ale také legální operace nad nimi.
Aby data zůstala po celou dobu používání v konzistentním stavu, je dobré se držet zásady, že uživatel třídy se k holým datům dostane výhradně přes rozhraní (API) realizované veřejnými metodami.
Třída implementuje rozhraní Cloneable
, aby bylo možné překrýt
metodu clone().
Field Summary | |
---|---|
protected int[][] |
m
Zapouzdřená data představující dvojrozměrné pole -- matici. |
Constructor Summary | |
---|---|
Matrix(int[][] m)
Kopírovací konstruktor, který vyrobí nový objekt se stejnými hodnotami jako zadané dvojrozměrné pole. |
|
Matrix(int rows,
int cols)
Konstruktor - volá se pomocí operátoru new. |
Method Summary | |
---|---|
private Matrix |
add(int[][] m)
Přičte obsah zadané matice k aktuální matici. |
Matrix |
add(Matrix m)
Přičte obsah zadané matice k aktuální matici. |
Matrix |
addConst(int k)
Přičte ke každému prvku matice konstantu. |
java.lang.Object |
clone()
Klonovací metoda - vytvoří identickou kopii objektu. |
protected void |
create(int rows,
int cols)
Alokuje paměť pro pole. |
static Matrix |
createEMatrix(int size)
Vyrobí jednotkovou čtvercovou matici zadaného rozměru. |
static Matrix |
createRandomMatrix(int rows,
int cols)
Vyrobí matici zadaných rozměrů a naplní ji náhodnými hodnotami. |
boolean |
equals(java.lang.Object obj)
Porovná dva objekty. |
int |
getCols()
Vrátí počet sloupců matice. |
static Matrix |
getProduct(Matrix a,
Matrix b)
V případě, že tato operace má smysl, vynásobí dvě matice (a * b) a vrátí výsledný součin jako novou matici (c). |
int |
getRows()
Vrací počet řádků matice. |
static void |
main(java.lang.String[] args)
Metoda main zde slouží pouze pro testování. |
Matrix |
mult(Matrix x)
Vynásobí aktuální matici zadanou maticí a vrátí výsledek jako novou matici. |
Matrix |
multConst(int k)
Vynásobí matici konstantou. |
void |
print(java.io.PrintStream stream)
Vytiskne matici na zadaný výstupní proud. |
private Matrix |
setValue(int[][] m)
Zkopíruje hodnoty zadané matice do sebe. |
Matrix |
setValueOf(Matrix m)
Zkopíruje hodnoty zadané matice do sebe. |
private Matrix |
sub(int[][] m)
Odečte obsah zadané matice od aktuální matice. |
Matrix |
sub(Matrix m)
Odečte obsah zadané matice od aktuální matice. |
Matrix |
transpose()
Provede transpozici matice. |
Methods inherited from class java.lang.Object |
---|
finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected int[][] m
Constructor Detail |
---|
public Matrix(int rows, int cols)
Konstruktor - volá se pomocí operátoru new. Vytváří a zároveň inicializuje novou instanci třídy - objekt.
Nelze vyrobit matici nelegálních rozměrů (záporný rozměr), protože Java
hlídá meze polí (narozdíl od C, C++) a v tomto případě by to vyhodilo
výjimku NegativeArraySizeException
.
rows
- Počet řádků matice.cols
- Počet sloupců matice.public Matrix(int[][] m)
m
- Referenční dvojrozměrné pole.Method Detail |
---|
protected void create(int rows, int cols)
Alokuje paměť pro pole. Tento kód je odsunut do samostatné metody, protože jej využívá více konstruktorů. Když v budoucnu vznikne potřeba provádět alokaci složitějším způsobem, bude možné to provést zde na jediném místě. Kdyby se stejný kód nacházel ve více metodách, bylo by obtížné takovou úpravu provést konzistentně.
Metoda je označena jako protected
, aby ji mohli využívat
případní potomci této třídy. Zároveň ale netvoří rozhraní třídy, takže pro
běžného uživatele je neviditelná.
rows
- Počet řádků matice.cols
- Počet sloupců matice.public static Matrix createEMatrix(int size)
Vyrobí jednotkovou čtvercovou matici zadaného rozměru.
Statickým metodám, které vytvářejí objekty určitých vlastností se také říká tovární metody.
size
- Rozměr vyráběné čtvercové matice.
public static Matrix createRandomMatrix(int rows, int cols)
rows
- Počet řádků nové matice.cols
- Počet sloupců nové matice.
public int getRows()
public int getCols()
public Matrix setValueOf(Matrix m) throws IncompatibleMatrixException
Zkopíruje hodnoty zadané matice do sebe. Pokud zadaná matice nemá stejné rozměry jako aktuální objekt, funkce vyhodí výjimku. Tato metoda volá jinou privátní metodu, která dělá vlastní akci.
Tato metoda slouží jako rozhraní směrem k uživateli, proto provádí kontrolu parametrů - v případě, že nesplňují požadované podmínky, metoda vyhazuje výjimku. V privátní metodě se kvůli efektivitě tyto kontroly už neprovádějí, protože se předpokládá, že autor této třídy vše odladil. Veřejné metodě, která sama nic nedělá se říká obalovací metoda.
m
- Matice, jejíž hodnoty se budou kopírovat.
IncompatibleMatrixException
private Matrix setValue(int[][] m)
m
- Matice, jejíž hodnoty se budou kopírovat.
public Matrix add(Matrix m) throws IncompatibleMatrixException
m
- Přičítaná matice.
IncompatibleMatrixException
- Generuje výjimku v případě, že matice nejsou rozměrově
kompatibilní.private Matrix add(int[][] m)
m
- Přičítaná matice.
public Matrix addConst(int k)
k
- Konstanta.
public Matrix sub(Matrix m) throws IncompatibleMatrixException
m
- Odečítaná matice.
IncompatibleMatrixException
- Generuje výjimku v případě, že matice nejsou rozměrově
kompatibilní.private Matrix sub(int[][] m)
m
- Odečítaná matice.
public Matrix multConst(int k)
k
- Multiplikační konstanta.
public static Matrix getProduct(Matrix a, Matrix b) throws IncompatibleMatrixException
a
- Matice na prvním místě.b
- Matice na druhém místě.
IncompatibleMatrixException
- Generuje výjimku, pokud operace násobení nemá na zadaných
maticích smysl.public Matrix mult(Matrix x) throws IncompatibleMatrixException
x
- Matice na druhém místě.
IncompatibleMatrixException
- Generuje výjimku, pokud operace násobení nemá na daných maticích
smysl.public Matrix transpose()
public void print(java.io.PrintStream stream)
stream
- Výstupní proud, do kterého se bude tisknout obsah matice.public java.lang.Object clone()
Object
. Aby tato metoda
fugovala správně, je nutné, aby tato třída implementovala rozhraní
Cloneable
. Dále je důležité, aby vytvořila skutečně
hlubokou kopii tohoto objektu. Kdyby vytvářela pouze mělkou kopii (tj.
kopírovala by například reference, místo alokace nových objektů), velmi
pravděpodobně by to způsobovalo závažné a záludné chyby.
clone
in class java.lang.Object
public boolean equals(java.lang.Object obj)
Porovná dva objekty. Během porovnávání provádí porovnání prvek po prvku. Pokud chce programátor v Javě porovnávat dva objekty, nemůže k tomu použít operátor ==, protože ten porovnává pouze reference (tedy adresy) a ne skutečný obsah objektů.
Tato metoda je zděděná ze třídy Object
.
equals
in class java.lang.Object
Object.equals(java.lang.Object)
public static void main(java.lang.String[] args)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |